From c53d8e343e50d4cf7ea9a6a81258848c2d893bfb Mon Sep 17 00:00:00 2001
From: Jenkins <jenkins@review.openstack.org>
Date: Thu, 3 May 2012 10:48:26 -0700
Subject: [PATCH 1/1] Initial fork out of Nova.

---
 .gitignore                                    |    24 +
 .gitreview                                    |     4 +
 .mailmap                                      |    81 +
 Authors                                       |   211 +
 HACKING.rst                                   |   213 +
 LICENSE                                       |   176 +
 MANIFEST.in                                   |    37 +
 README.rst                                    |    21 +
 babel.cfg                                     |     2 +
 bin/cinder-all                                |    70 +
 bin/cinder-api                                |    47 +
 bin/cinder-manage                             |   635 +
 bin/cinder-rootwrap                           |    74 +
 bin/cinder-scheduler                          |    51 +
 bin/cinder-volume                             |    49 +
 bin/clear_rabbit_queues                       |    80 +
 cinder/__init__.py                            |    42 +
 cinder/api/__init__.py                        |    17 +
 cinder/api/auth.py                            |   103 +
 cinder/api/openstack/__init__.py              |   143 +
 cinder/api/openstack/auth.py                  |    65 +
 cinder/api/openstack/common.py                |   380 +
 cinder/api/openstack/compute/__init__.py      |    23 +
 .../openstack/compute/schemas/atom-link.rng   |   141 +
 .../compute/schemas/v1.1/extension.rng        |    11 +
 .../compute/schemas/v1.1/extensions.rng       |     6 +
 .../compute/schemas/v1.1/metadata.rng         |     9 +
 cinder/api/openstack/compute/versions.py      |   244 +
 .../api/openstack/compute/views/__init__.py   |     0
 .../api/openstack/compute/views/versions.py   |    94 +
 cinder/api/openstack/extensions.py            |   395 +
 cinder/api/openstack/urlmap.py                |   297 +
 cinder/api/openstack/volume/__init__.py       |    62 +
 .../api/openstack/volume/contrib/__init__.py  |    39 +
 .../volume/contrib/types_extra_specs.py       |   152 +
 .../openstack/volume/contrib/types_manage.py  |    91 +
 cinder/api/openstack/volume/extensions.py     |    33 +
 cinder/api/openstack/volume/snapshots.py      |   170 +
 cinder/api/openstack/volume/types.py          |    76 +
 cinder/api/openstack/volume/versions.py       |    83 +
 cinder/api/openstack/volume/views/__init__.py |    16 +
 cinder/api/openstack/volume/views/versions.py |    36 +
 cinder/api/openstack/volume/volumes.py        |   263 +
 cinder/api/openstack/wsgi.py                  |  1123 ++
 cinder/api/openstack/xmlutil.py               |   908 +
 cinder/api/sizelimit.py                       |    54 +
 cinder/common/__init__.py                     |    15 +
 cinder/common/memorycache.py                  |    64 +
 cinder/common/policy.py                       |   222 +
 cinder/compat/__init__.py                     |    15 +
 cinder/compat/flagfile.py                     |   188 +
 cinder/compute/__init__.py                    |     0
 cinder/compute/aggregate_states.py            |    44 +
 cinder/context.py                             |   138 +
 cinder/db/__init__.py                         |    23 +
 cinder/db/api.py                              |  1335 ++
 cinder/db/base.py                             |    40 +
 cinder/db/migration.py                        |    35 +
 cinder/db/sqlalchemy/__init__.py              |    17 +
 cinder/db/sqlalchemy/api.py                   |  1499 ++
 cinder/db/sqlalchemy/migrate_repo/README      |     4 +
 cinder/db/sqlalchemy/migrate_repo/__init__.py |     0
 cinder/db/sqlalchemy/migrate_repo/manage.py   |     4 +
 cinder/db/sqlalchemy/migrate_repo/migrate.cfg |    20 +
 .../migrate_repo/versions/001_austin.py       |   627 +
 .../migrate_repo/versions/002_bexar.py        |   236 +
 .../versions/002_postgresql_downgrade.sql     |    20 +
 .../versions/002_sqlite_downgrade.sql         |   388 +
 .../versions/003_add_label_to_networks.py     |    42 +
 .../versions/003_sqlite_downgrade.sql         |   111 +
 .../versions/004_add_zone_tables.py           |    66 +
 .../versions/005_add_instance_metadata.py     |    81 +
 .../006_add_provider_data_to_volumes.py       |    54 +
 .../versions/006_sqlite_downgrade.sql         |   113 +
 .../versions/007_add_ipv6_to_fixed_ips.py     |    70 +
 .../versions/007_sqlite_downgrade.sql         |    79 +
 .../versions/008_add_instance_types.py        |    85 +
 .../versions/009_add_instance_migrations.py   |    70 +
 .../versions/010_add_os_type_to_instances.py  |    45 +
 .../versions/011_live_migration.py            |    85 +
 .../versions/012_add_ipv6_flatmanager.py      |    90 +
 .../versions/012_sqlite_upgrade.sql           |   195 +
 .../versions/013_add_flavors_to_migrations.py |    43 +
 .../versions/013_sqlite_downgrade.sql         |    69 +
 .../014_add_instance_type_id_to_instances.py  |    74 +
 .../015_add_auto_assign_to_floating_ips.py    |    35 +
 .../versions/015_sqlite_downgrade.sql         |    62 +
 .../versions/016_make_quotas_key_and_value.py |   213 +
 .../017_make_instance_type_id_an_integer.py   |    87 +
 .../018_rename_server_management_url.py       |    35 +
 .../019_add_volume_snapshot_support.py        |    82 +
 .../020_add_snapshot_id_to_volumes.py         |    40 +
 .../versions/020_sqlite_downgrade.sql         |   119 +
 .../versions/021_rename_image_ids.py          |    38 +
 .../versions/022_set_engine_mysql_innodb.py   |    64 +
 .../versions/023_add_vm_mode_to_instances.py  |    42 +
 .../versions/024_add_block_device_mapping.py  |    92 +
 .../versions/025_add_uuid_to_instances.py     |    45 +
 .../versions/026_add_agent_table.py           |    89 +
 .../027_add_provider_firewall_rules.py        |    65 +
 .../028_add_instance_type_extra_specs.py      |    76 +
 .../versions/029_add_zone_weight_offsets.py   |    41 +
 .../migrate_repo/versions/030_multi_nic.py    |   146 +
 .../versions/030_sqlite_downgrade.sql         |   377 +
 .../031_fk_fixed_ips_virtual_interface_id.py  |    59 +
 .../versions/031_sqlite_downgrade.sql         |    48 +
 .../versions/031_sqlite_upgrade.sql           |    48 +
 .../versions/032_add_root_device_name.py      |    42 +
 .../migrate_repo/versions/033_ha_network.py   |    42 +
 .../versions/033_sqlite_downgrade.sql         |   193 +
 .../034_change_instance_id_in_migrations.py   |    46 +
 .../versions/035_secondary_dns.py             |    39 +
 .../036_change_flavor_id_in_migrations.py     |    79 +
 .../versions/037_instances_drop_admin_pass.py |    42 +
 .../038_add_uuid_to_virtual_interfaces.py     |    45 +
 .../versions/038_sqlite_downgrade.sql         |    63 +
 .../versions/039_add_instances_accessip.py    |    49 +
 .../versions/040_add_uuid_to_networks.py      |    45 +
 .../041_add_config_drive_to_instances.py      |    36 +
 .../042_add_volume_types_and_extradata.py     |   122 +
 .../versions/042_sqlite_downgrade.sql         |   129 +
 .../migrate_repo/versions/043_add_vsa_data.py |    84 +
 .../versions/044_update_instance_states.py    |    52 +
 .../versions/045_add_network_priority.py      |    44 +
 .../versions/046_add_instance_swap.py         |    49 +
 .../047_remove_instances_fk_from_vif.py       |    61 +
 .../versions/047_sqlite_downgrade.sql         |    46 +
 .../versions/047_sqlite_upgrade.sql           |    45 +
 .../versions/048_add_zone_name.py             |    33 +
 .../versions/049_add_instances_progress.py    |    44 +
 .../050_add_disk_config_to_instances.py       |    37 +
 .../versions/050_sqlite_downgrade.sql         |   207 +
 .../051_add_vcpu_weight_to_instance_types.py  |    34 +
 .../versions/052_kill_export_devices.py       |    65 +
 ...connection_info_to_block_device_mapping.py |    38 +
 .../versions/053_sqlite_downgrade.sql         |    87 +
 .../versions/054_add_bw_usage_data_cache.py   |    64 +
 .../versions/055_convert_flavor_id_to_str.py  |   112 +
 .../versions/056_add_s3_images.py             |    60 +
 .../versions/057_add_sm_driver_tables.py      |   113 +
 .../versions/058_rename_managed_disk.py       |    37 +
 .../059_split_rxtx_quota_into_network.py      |    61 +
 .../versions/059_sqlite_downgrade.sql         |   137 +
 .../versions/059_sqlite_upgrade.sql           |    87 +
 .../060_remove_network_fk_from_vif.py         |    62 +
 .../versions/060_sqlite_downgrade.sql         |    45 +
 .../versions/060_sqlite_upgrade.sql           |    44 +
 .../061_add_index_to_instance_uuid.py         |    29 +
 .../062_add_instance_info_cache_table.py      |    70 +
 .../versions/063_add_instance_faults_table.py |    60 +
 ...instance_id_to_uuid_in_instance_actions.py |    80 +
 .../065_add_index_to_instance_project_id.py   |    31 +
 .../066_preload_instance_info_cache_table.py  |    31 +
 ...7_add_pool_and_interface_to_floating_ip.py |    41 +
 .../versions/067_sqlite_downgrade.sql         |    69 +
 .../versions/068_add_instance_attribute.py    |    36 +
 .../versions/068_sqlite_downgrade.sql         |   219 +
 .../versions/069_block_migration.py           |    50 +
 .../versions/070_sqlite_downgrade.sql         |   103 +
 .../versions/070_sqlite_upgrade.sql           |    99 +
 .../versions/070_untie_nova_network_models.py |   100 +
 .../versions/071_add_host_aggregate_tables.py |   108 +
 .../versions/072_add_dns_table.py             |    77 +
 .../versions/072_mysql_upgrade.sql            |    13 +
 .../migrate_repo/versions/073_add_capacity.py |    49 +
 .../versions/074_change_flavor_local_gb.py    |   130 +
 .../versions/074_sqlite_upgrade.sql           |   313 +
 ...75_convert_bw_usage_to_store_network_id.py |    97 +
 .../versions/076_remove_unique_constraints.py |    84 +
 .../versions/076_sqlite_upgrade.sql           |    61 +
 .../versions/077_convert_to_utf8.py           |    61 +
 .../versions/078_add_rpc_info_to_zones.py     |    46 +
 .../versions/078_sqlite_downgrade.sql         |    35 +
 .../079_add_zone_name_to_instances.py         |    30 +
 ...dd_hypervisor_hostname_to_compute_nodes.py |    30 +
 .../versions/081_drop_instance_id_bw_cache.py |    69 +
 .../migrate_repo/versions/082_zone_to_cell.py |    35 +
 .../migrate_repo/versions/083_quota_class.py  |    61 +
 .../versions/084_quotas_unlimited.py          |    43 +
 .../085_add_index_to_fixed_ips_by_address.py  |    31 +
 .../versions/086_set_engine_mysql_innodb.py   |    44 +
 .../087_add_uuid_to_bw_usage_cache.py         |    56 +
 ...ance_id_to_uuid_in_block_device_mapping.py |    81 +
 .../versions/088_sqlite_downgrade.sql         |    97 +
 .../versions/088_sqlite_upgrade.sql           |    97 +
 .../versions/089_add_volume_id_mappings.py    |   116 +
 .../versions/090_modify_volume_id_datatype.py |   239 +
 .../versions/090_sqlite_downgrade.sql         |   226 +
 .../versions/090_sqlite_upgrade.sql           |   226 +
 .../091_convert_volume_ids_to_uuid.py         |   145 +
 .../migrate_repo/versions/__init__.py         |     0
 cinder/db/sqlalchemy/migration.py             |   129 +
 cinder/db/sqlalchemy/models.py                |  1063 +
 cinder/db/sqlalchemy/session.py               |   156 +
 cinder/exception.py                           |   938 +
 cinder/flags.py                               |   356 +
 cinder/locale/bs/LC_MESSAGES/nova.po          |  8201 ++++++++
 cinder/locale/cs/LC_MESSAGES/nova.po          |  8251 ++++++++
 cinder/locale/da/LC_MESSAGES/nova.po          |  8203 ++++++++
 cinder/locale/de/LC_MESSAGES/nova.po          |  8208 ++++++++
 cinder/locale/en_AU/LC_MESSAGES/nova.po       |  8209 ++++++++
 cinder/locale/en_GB/LC_MESSAGES/nova.po       |  8209 ++++++++
 cinder/locale/es/LC_MESSAGES/nova.po          |  8220 ++++++++
 cinder/locale/fr/LC_MESSAGES/nova.po          |  8251 ++++++++
 cinder/locale/it/LC_MESSAGES/nova.po          |  8210 ++++++++
 cinder/locale/ja/LC_MESSAGES/nova.po          |  8196 ++++++++
 cinder/locale/ko/LC_MESSAGES/nova.po          |  8207 ++++++++
 cinder/locale/nova.pot                        |  7463 +++++++
 cinder/locale/pt_BR/LC_MESSAGES/nova.po       |  8208 ++++++++
 cinder/locale/ru/LC_MESSAGES/nova.po          |  8304 ++++++++
 cinder/locale/tl/LC_MESSAGES/nova.po          |  8200 ++++++++
 cinder/locale/tr/LC_MESSAGES/nova.po          |  8202 ++++++++
 cinder/locale/uk/LC_MESSAGES/nova.po          |  8199 ++++++++
 cinder/locale/zh_CN/LC_MESSAGES/nova.po       |  8064 ++++++++
 cinder/locale/zh_TW/LC_MESSAGES/nova.po       |  8207 ++++++++
 cinder/log.py                                 |   416 +
 cinder/manager.py                             |   205 +
 cinder/notifier/__init__.py                   |    14 +
 cinder/notifier/api.py                        |   133 +
 cinder/notifier/capacity_notifier.py          |    81 +
 cinder/notifier/list_notifier.py              |    71 +
 cinder/notifier/log_notifier.py               |    34 +
 cinder/notifier/no_op_notifier.py             |    19 +
 cinder/notifier/rabbit_notifier.py            |    46 +
 cinder/notifier/test_notifier.py              |    25 +
 cinder/openstack/__init__.py                  |    15 +
 cinder/openstack/common/README                |    13 +
 cinder/openstack/common/__init__.py           |    15 +
 cinder/openstack/common/cfg.py                |  1298 ++
 cinder/openstack/common/exception.py          |   147 +
 cinder/openstack/common/importutils.py        |    45 +
 cinder/openstack/common/iniparser.py          |   126 +
 cinder/openstack/common/local.py              |    37 +
 cinder/policy.py                              |    90 +
 cinder/quota.py                               |   234 +
 cinder/rootwrap/__init__.py                   |    16 +
 cinder/rootwrap/filters.py                    |   147 +
 cinder/rootwrap/volume.py                     |    45 +
 cinder/rootwrap/wrapper.py                    |    60 +
 cinder/rpc/__init__.py                        |   227 +
 cinder/rpc/amqp.py                            |   405 +
 cinder/rpc/common.py                          |   220 +
 cinder/rpc/impl_fake.py                       |   185 +
 cinder/rpc/impl_kombu.py                      |   713 +
 cinder/rpc/impl_qpid.py                       |   563 +
 cinder/scheduler/__init__.py                  |    27 +
 cinder/scheduler/api.py                       |    72 +
 cinder/scheduler/chance.py                    |    83 +
 cinder/scheduler/driver.py                    |   164 +
 cinder/scheduler/host_manager.py              |    36 +
 cinder/scheduler/manager.py                   |   204 +
 cinder/scheduler/simple.py                    |   144 +
 cinder/service.py                             |   429 +
 cinder/test.py                                |   295 +
 cinder/testing/README.rst                     |    66 +
 cinder/testing/__init__.py                    |     0
 cinder/testing/fake/__init__.py               |     1 +
 cinder/testing/runner.py                      |   372 +
 cinder/tests/__init__.py                      |    84 +
 cinder/tests/api/__init__.py                  |    19 +
 cinder/tests/api/openstack/__init__.py        |    19 +
 cinder/tests/api/openstack/common.py          |    58 +
 cinder/tests/api/openstack/fakes.py           |   234 +
 cinder/tests/api/openstack/test_common.py     |   526 +
 cinder/tests/api/openstack/test_faults.py     |   208 +
 cinder/tests/api/openstack/test_wsgi.py       |   833 +
 cinder/tests/api/openstack/test_xmlutil.py    |   722 +
 cinder/tests/api/openstack/volume/__init__.py |    19 +
 .../api/openstack/volume/contrib/__init__.py  |    19 +
 .../volume/contrib/test_types_extra_specs.py  |   202 +
 .../volume/contrib/test_types_manage.py       |   103 +
 .../openstack/volume/extensions/__init__.py   |    15 +
 .../openstack/volume/extensions/foxinsocks.py |    94 +
 .../api/openstack/volume/test_extensions.py   |   156 +
 .../tests/api/openstack/volume/test_router.py |   105 +
 .../api/openstack/volume/test_snapshots.py    |   214 +
 .../tests/api/openstack/volume/test_types.py  |   146 +
 .../api/openstack/volume/test_volumes.py      |   290 +
 cinder/tests/api/test_auth.py                 |    58 +
 cinder/tests/api/test_sizelimit.py            |    51 +
 cinder/tests/api/test_wsgi.py                 |    67 +
 cinder/tests/db/__init__.py                   |    20 +
 cinder/tests/db/fakes.py                      |    47 +
 cinder/tests/declare_flags.py                 |    23 +
 cinder/tests/fake_flags.py                    |    34 +
 cinder/tests/fake_utils.py                    |   112 +
 cinder/tests/integrated/__init__.py           |    22 +
 cinder/tests/integrated/api/__init__.py       |    20 +
 cinder/tests/integrated/api/client.py         |   217 +
 cinder/tests/integrated/integrated_helpers.py |   130 +
 cinder/tests/integrated/test_extensions.py    |    42 +
 cinder/tests/integrated/test_login.py         |    31 +
 cinder/tests/integrated/test_volumes.py       |   181 +
 cinder/tests/integrated/test_xml.py           |    52 +
 cinder/tests/monkey_patch_example/__init__.py |    33 +
 .../tests/monkey_patch_example/example_a.py   |    29 +
 .../tests/monkey_patch_example/example_b.py   |    30 +
 cinder/tests/notifier/__init__.py             |    16 +
 .../tests/notifier/test_capacity_notifier.py  |    59 +
 cinder/tests/notifier/test_list_notifier.py   |    84 +
 cinder/tests/policy.json                      |    25 +
 cinder/tests/rpc/__init__.py                  |    19 +
 cinder/tests/rpc/common.py                    |   239 +
 cinder/tests/rpc/test_common.py               |   147 +
 cinder/tests/rpc/test_fake.py                 |    33 +
 cinder/tests/rpc/test_kombu.py                |   350 +
 cinder/tests/rpc/test_kombu_ssl.py            |    58 +
 cinder/tests/rpc/test_qpid.py                 |   340 +
 cinder/tests/runtime_flags.py                 |    23 +
 cinder/tests/scheduler/__init__.py            |    19 +
 cinder/tests/scheduler/fakes.py               |    62 +
 cinder/tests/scheduler/test_scheduler.py      |   322 +
 cinder/tests/test_SolidFireSanISCSIDriver.py  |   186 +
 cinder/tests/test_api.py                      |    75 +
 cinder/tests/test_compat_flagfile.py          |   175 +
 cinder/tests/test_context.py                  |    70 +
 cinder/tests/test_db_api.py                   |   331 +
 cinder/tests/test_exception.py                |   126 +
 cinder/tests/test_flags.py                    |   146 +
 cinder/tests/test_iscsi.py                    |   116 +
 cinder/tests/test_log.py                      |   218 +
 cinder/tests/test_migrations.conf             |     9 +
 cinder/tests/test_migrations.py               |   296 +
 cinder/tests/test_misc.py                     |   184 +
 cinder/tests/test_netapp.py                   |   927 +
 cinder/tests/test_nexenta.py                  |   281 +
 cinder/tests/test_notifier.py                 |   133 +
 cinder/tests/test_nova_rootwrap.py            |   133 +
 cinder/tests/test_policy.py                   |   189 +
 cinder/tests/test_quota.py                    |   316 +
 cinder/tests/test_service.py                  |   221 +
 cinder/tests/test_skip_examples.py            |    47 +
 cinder/tests/test_test.py                     |    44 +
 cinder/tests/test_test_utils.py               |    29 +
 cinder/tests/test_utils.py                    |  1188 ++
 cinder/tests/test_versions.py                 |    59 +
 cinder/tests/test_volume.py                   |   501 +
 cinder/tests/test_volume_types.py             |   167 +
 cinder/tests/test_volume_types_extra_specs.py |   130 +
 cinder/tests/test_wsgi.py                     |    92 +
 cinder/tests/utils.py                         |    25 +
 cinder/utils.py                               |  1678 ++
 cinder/version.py                             |    38 +
 cinder/volume/__init__.py                     |    25 +
 cinder/volume/api.py                          |   371 +
 cinder/volume/driver.py                       |   709 +
 cinder/volume/iscsi.py                        |   160 +
 cinder/volume/manager.py                      |   331 +
 cinder/volume/netapp.py                       |   676 +
 cinder/volume/nexenta/__init__.py             |    33 +
 cinder/volume/nexenta/jsonrpc.py              |    84 +
 cinder/volume/nexenta/volume.py               |   282 +
 cinder/volume/san.py                          |   897 +
 cinder/volume/volume_types.py                 |   125 +
 cinder/volume/xensm.py                        |   237 +
 cinder/wsgi.py                                |   374 +
 contrib/openstack-config                      |    65 +
 contrib/redhat-eventlet.patch                 |    16 +
 doc/.gitignore                                |     3 +
 doc/Makefile                                  |    97 +
 doc/README.rst                                |    55 +
 doc/ext/__init__.py                           |     0
 doc/ext/nova_autodoc.py                       |    12 +
 doc/ext/nova_todo.py                          |   101 +
 doc/find_autodoc_modules.sh                   |    20 +
 doc/generate_autodoc_index.sh                 |    46 +
 doc/source/_ga/layout.html                    |    17 +
 doc/source/_static/.gitignore                 |     0
 doc/source/_static/.placeholder               |     0
 doc/source/_static/basic.css                  |   416 +
 doc/source/_static/default.css                |   230 +
 doc/source/_static/jquery.tweet.js            |   154 +
 doc/source/_static/tweaks.css                 |   218 +
 doc/source/_templates/.gitignore              |     0
 doc/source/_templates/.placeholder            |     0
 doc/source/_theme/layout.html                 |    95 +
 doc/source/_theme/theme.conf                  |     5 +
 doc/source/conf.py                            |   234 +
 doc/source/devref/addmethod.openstackapi.rst  |    56 +
 doc/source/devref/aggregates.rst              |    65 +
 doc/source/devref/api.rst                     |   270 +
 doc/source/devref/architecture.rst            |    52 +
 doc/source/devref/auth.rst                    |   276 +
 doc/source/devref/cloudpipe.rst               |   166 +
 doc/source/devref/database.rst                |    63 +
 doc/source/devref/development.environment.rst |   152 +
 doc/source/devref/down.sh                     |     7 +
 doc/source/devref/fakes.rst                   |    85 +
 doc/source/devref/filter_scheduler.rst        |   258 +
 doc/source/devref/gerrit.rst                  |    16 +
 doc/source/devref/glance.rst                  |    28 +
 doc/source/devref/il8n.rst                    |    34 +
 doc/source/devref/index.rst                   |    86 +
 doc/source/devref/interfaces                  |    17 +
 doc/source/devref/jenkins.rst                 |    41 +
 doc/source/devref/launchpad.rst               |    54 +
 doc/source/devref/multinic.rst                |    39 +
 doc/source/devref/network.rst                 |   128 +
 doc/source/devref/nova.rst                    |   215 +
 doc/source/devref/rc.local                    |    36 +
 doc/source/devref/rpc.rst                     |   151 +
 doc/source/devref/scheduler.rst               |    71 +
 doc/source/devref/server.conf.template        |    34 +
 doc/source/devref/services.rst                |    55 +
 doc/source/devref/threading.rst               |    51 +
 doc/source/devref/unit_tests.rst              |   159 +
 doc/source/devref/up.sh                       |     7 +
 doc/source/devref/volume.rst                  |    66 +
 doc/source/devref/xensmvolume.rst             |    88 +
 doc/source/image_src/multinic_1.odg           |   Bin 0 -> 12363 bytes
 doc/source/image_src/multinic_2.odg           |   Bin 0 -> 13425 bytes
 doc/source/image_src/multinic_3.odg           |   Bin 0 -> 13598 bytes
 doc/source/images/NOVA_ARCH.png               |   Bin 0 -> 191332 bytes
 doc/source/images/NOVA_ARCH.svg               |  5854 ++++++
 doc/source/images/NOVA_ARCH_200dpi.png        |   Bin 0 -> 439024 bytes
 doc/source/images/NOVA_ARCH_66dpi.png         |   Bin 0 -> 110890 bytes
 doc/source/images/NOVA_clouds_A_B.png         |   Bin 0 -> 77007 bytes
 doc/source/images/NOVA_clouds_A_B.svg         | 16342 ++++++++++++++++
 doc/source/images/NOVA_clouds_C1_C2.svg       |  9763 +++++++++
 doc/source/images/NOVA_clouds_C1_C2.svg.png   |   Bin 0 -> 448574 bytes
 doc/source/images/Novadiagram.png             |   Bin 0 -> 52609 bytes
 doc/source/images/base_scheduler.png          |   Bin 0 -> 17068 bytes
 doc/source/images/cloudpipe.png               |   Bin 0 -> 89812 bytes
 doc/source/images/fabric.png                  |   Bin 0 -> 125915 bytes
 doc/source/images/filteringWorkflow1.png      |   Bin 0 -> 66997 bytes
 doc/source/images/filteringWorkflow2.png      |   Bin 0 -> 75288 bytes
 doc/source/images/multinic_dhcp.png           |   Bin 0 -> 54531 bytes
 doc/source/images/multinic_flat.png           |   Bin 0 -> 40871 bytes
 doc/source/images/multinic_vlan.png           |   Bin 0 -> 58552 bytes
 doc/source/images/nova.compute.api.create.png |   Bin 0 -> 50171 bytes
 doc/source/images/novascreens.png             |   Bin 0 -> 27949 bytes
 doc/source/images/novashvirtually.png         |   Bin 0 -> 39000 bytes
 doc/source/images/rpc/arch.png                |   Bin 0 -> 26690 bytes
 doc/source/images/rpc/arch.svg                |   292 +
 doc/source/images/rpc/flow1.png               |   Bin 0 -> 40982 bytes
 doc/source/images/rpc/flow1.svg               |   617 +
 doc/source/images/rpc/flow2.png               |   Bin 0 -> 30650 bytes
 doc/source/images/rpc/flow2.svg               |   423 +
 doc/source/images/rpc/rabt.png                |   Bin 0 -> 44964 bytes
 doc/source/images/rpc/rabt.svg                |   581 +
 doc/source/images/rpc/state.png               |   Bin 0 -> 38543 bytes
 doc/source/images/vmwareapi_blockdiagram.jpg  |   Bin 0 -> 75363 bytes
 doc/source/images/zone_aware_overview.png     |   Bin 0 -> 56142 bytes
 doc/source/images/zone_aware_scheduler.png    |   Bin 0 -> 20902 bytes
 doc/source/images/zone_overview.png           |   Bin 0 -> 51587 bytes
 doc/source/index.rst                          |    67 +
 doc/source/man/nova-manage.rst                |   281 +
 etc/cinder/api-paste.ini                      |    51 +
 etc/cinder/cinder.conf.sample                 |   673 +
 etc/cinder/logging_sample.conf                |    76 +
 etc/cinder/policy.json                        |    15 +
 openstack-common.conf                         |     7 +
 pylintrc                                      |    38 +
 run_tests.sh                                  |   176 +
 setup.cfg                                     |    32 +
 setup.py                                      |    73 +
 tools/clean-vlans                             |    25 +
 tools/clean_file_locks.py                     |    63 +
 tools/conf/create_conf.py                     |   159 +
 tools/conf/generate_sample.sh                 |    25 +
 tools/enable-pre-commit-hook.sh               |    42 +
 tools/hacking.py                              |   391 +
 tools/install_venv.py                         |   248 +
 tools/pip-requires                            |    22 +
 tools/rfc.sh                                  |   150 +
 tools/test-requires                           |    11 +
 tools/with_venv.sh                            |     4 +
 tox.ini                                       |    38 +
 468 files changed, 247534 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 .gitreview
 create mode 100644 .mailmap
 create mode 100644 Authors
 create mode 100644 HACKING.rst
 create mode 100644 LICENSE
 create mode 100644 MANIFEST.in
 create mode 100644 README.rst
 create mode 100644 babel.cfg
 create mode 100755 bin/cinder-all
 create mode 100755 bin/cinder-api
 create mode 100755 bin/cinder-manage
 create mode 100755 bin/cinder-rootwrap
 create mode 100755 bin/cinder-scheduler
 create mode 100755 bin/cinder-volume
 create mode 100755 bin/clear_rabbit_queues
 create mode 100644 cinder/__init__.py
 create mode 100644 cinder/api/__init__.py
 create mode 100644 cinder/api/auth.py
 create mode 100644 cinder/api/openstack/__init__.py
 create mode 100644 cinder/api/openstack/auth.py
 create mode 100644 cinder/api/openstack/common.py
 create mode 100644 cinder/api/openstack/compute/__init__.py
 create mode 100644 cinder/api/openstack/compute/schemas/atom-link.rng
 create mode 100644 cinder/api/openstack/compute/schemas/v1.1/extension.rng
 create mode 100644 cinder/api/openstack/compute/schemas/v1.1/extensions.rng
 create mode 100644 cinder/api/openstack/compute/schemas/v1.1/metadata.rng
 create mode 100644 cinder/api/openstack/compute/versions.py
 create mode 100644 cinder/api/openstack/compute/views/__init__.py
 create mode 100644 cinder/api/openstack/compute/views/versions.py
 create mode 100644 cinder/api/openstack/extensions.py
 create mode 100644 cinder/api/openstack/urlmap.py
 create mode 100644 cinder/api/openstack/volume/__init__.py
 create mode 100644 cinder/api/openstack/volume/contrib/__init__.py
 create mode 100644 cinder/api/openstack/volume/contrib/types_extra_specs.py
 create mode 100644 cinder/api/openstack/volume/contrib/types_manage.py
 create mode 100644 cinder/api/openstack/volume/extensions.py
 create mode 100644 cinder/api/openstack/volume/snapshots.py
 create mode 100644 cinder/api/openstack/volume/types.py
 create mode 100644 cinder/api/openstack/volume/versions.py
 create mode 100644 cinder/api/openstack/volume/views/__init__.py
 create mode 100644 cinder/api/openstack/volume/views/versions.py
 create mode 100644 cinder/api/openstack/volume/volumes.py
 create mode 100644 cinder/api/openstack/wsgi.py
 create mode 100644 cinder/api/openstack/xmlutil.py
 create mode 100644 cinder/api/sizelimit.py
 create mode 100644 cinder/common/__init__.py
 create mode 100644 cinder/common/memorycache.py
 create mode 100644 cinder/common/policy.py
 create mode 100644 cinder/compat/__init__.py
 create mode 100644 cinder/compat/flagfile.py
 create mode 100644 cinder/compute/__init__.py
 create mode 100644 cinder/compute/aggregate_states.py
 create mode 100644 cinder/context.py
 create mode 100644 cinder/db/__init__.py
 create mode 100644 cinder/db/api.py
 create mode 100644 cinder/db/base.py
 create mode 100644 cinder/db/migration.py
 create mode 100644 cinder/db/sqlalchemy/__init__.py
 create mode 100644 cinder/db/sqlalchemy/api.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/README
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/__init__.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/manage.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/migrate.cfg
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/001_austin.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/002_bexar.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/002_postgresql_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/002_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/003_add_label_to_networks.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/003_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/004_add_zone_tables.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/005_add_instance_metadata.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/006_add_provider_data_to_volumes.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/006_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/007_add_ipv6_to_fixed_ips.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/007_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/008_add_instance_types.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/009_add_instance_migrations.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/010_add_os_type_to_instances.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/011_live_migration.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/012_add_ipv6_flatmanager.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/012_sqlite_upgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/013_add_flavors_to_migrations.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/013_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/014_add_instance_type_id_to_instances.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/015_add_auto_assign_to_floating_ips.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/015_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/016_make_quotas_key_and_value.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/017_make_instance_type_id_an_integer.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/018_rename_server_management_url.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/019_add_volume_snapshot_support.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/020_add_snapshot_id_to_volumes.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/020_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/021_rename_image_ids.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/022_set_engine_mysql_innodb.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/023_add_vm_mode_to_instances.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/024_add_block_device_mapping.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/025_add_uuid_to_instances.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/026_add_agent_table.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/027_add_provider_firewall_rules.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/028_add_instance_type_extra_specs.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/029_add_zone_weight_offsets.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/030_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/031_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/031_sqlite_upgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/032_add_root_device_name.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/033_ha_network.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/033_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/034_change_instance_id_in_migrations.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/035_secondary_dns.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/036_change_flavor_id_in_migrations.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/037_instances_drop_admin_pass.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/038_add_uuid_to_virtual_interfaces.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/038_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/039_add_instances_accessip.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/040_add_uuid_to_networks.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/041_add_config_drive_to_instances.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/042_add_volume_types_and_extradata.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/042_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/043_add_vsa_data.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/044_update_instance_states.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/046_add_instance_swap.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/047_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/047_sqlite_upgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/048_add_zone_name.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/050_add_disk_config_to_instances.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/050_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/051_add_vcpu_weight_to_instance_types.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/052_kill_export_devices.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/053_add_connection_info_to_block_device_mapping.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/053_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/054_add_bw_usage_data_cache.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/056_add_s3_images.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/057_add_sm_driver_tables.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/058_rename_managed_disk.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/059_split_rxtx_quota_into_network.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/059_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/059_sqlite_upgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/060_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/060_sqlite_upgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/061_add_index_to_instance_uuid.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/063_add_instance_faults_table.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/065_add_index_to_instance_project_id.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/066_preload_instance_info_cache_table.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/067_add_pool_and_interface_to_floating_ip.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/067_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/068_add_instance_attribute.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/068_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/070_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/070_sqlite_upgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/070_untie_nova_network_models.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/071_add_host_aggregate_tables.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/072_mysql_upgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/073_add_capacity.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/074_change_flavor_local_gb.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/074_sqlite_upgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/075_convert_bw_usage_to_store_network_id.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/076_remove_unique_constraints.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/076_sqlite_upgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/077_convert_to_utf8.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/078_add_rpc_info_to_zones.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/078_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/079_add_zone_name_to_instances.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/080_add_hypervisor_hostname_to_compute_nodes.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/081_drop_instance_id_bw_cache.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/082_zone_to_cell.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/084_quotas_unlimited.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/085_add_index_to_fixed_ips_by_address.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/086_set_engine_mysql_innodb.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/087_add_uuid_to_bw_usage_cache.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/088_change_instance_id_to_uuid_in_block_device_mapping.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/088_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/088_sqlite_upgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/089_add_volume_id_mappings.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/090_modify_volume_id_datatype.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/090_sqlite_downgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/090_sqlite_upgrade.sql
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/091_convert_volume_ids_to_uuid.py
 create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/__init__.py
 create mode 100644 cinder/db/sqlalchemy/migration.py
 create mode 100644 cinder/db/sqlalchemy/models.py
 create mode 100644 cinder/db/sqlalchemy/session.py
 create mode 100644 cinder/exception.py
 create mode 100644 cinder/flags.py
 create mode 100644 cinder/locale/bs/LC_MESSAGES/nova.po
 create mode 100644 cinder/locale/cs/LC_MESSAGES/nova.po
 create mode 100644 cinder/locale/da/LC_MESSAGES/nova.po
 create mode 100644 cinder/locale/de/LC_MESSAGES/nova.po
 create mode 100644 cinder/locale/en_AU/LC_MESSAGES/nova.po
 create mode 100644 cinder/locale/en_GB/LC_MESSAGES/nova.po
 create mode 100644 cinder/locale/es/LC_MESSAGES/nova.po
 create mode 100644 cinder/locale/fr/LC_MESSAGES/nova.po
 create mode 100644 cinder/locale/it/LC_MESSAGES/nova.po
 create mode 100644 cinder/locale/ja/LC_MESSAGES/nova.po
 create mode 100644 cinder/locale/ko/LC_MESSAGES/nova.po
 create mode 100644 cinder/locale/nova.pot
 create mode 100644 cinder/locale/pt_BR/LC_MESSAGES/nova.po
 create mode 100644 cinder/locale/ru/LC_MESSAGES/nova.po
 create mode 100644 cinder/locale/tl/LC_MESSAGES/nova.po
 create mode 100644 cinder/locale/tr/LC_MESSAGES/nova.po
 create mode 100644 cinder/locale/uk/LC_MESSAGES/nova.po
 create mode 100644 cinder/locale/zh_CN/LC_MESSAGES/nova.po
 create mode 100644 cinder/locale/zh_TW/LC_MESSAGES/nova.po
 create mode 100644 cinder/log.py
 create mode 100644 cinder/manager.py
 create mode 100644 cinder/notifier/__init__.py
 create mode 100644 cinder/notifier/api.py
 create mode 100644 cinder/notifier/capacity_notifier.py
 create mode 100644 cinder/notifier/list_notifier.py
 create mode 100644 cinder/notifier/log_notifier.py
 create mode 100644 cinder/notifier/no_op_notifier.py
 create mode 100644 cinder/notifier/rabbit_notifier.py
 create mode 100644 cinder/notifier/test_notifier.py
 create mode 100644 cinder/openstack/__init__.py
 create mode 100644 cinder/openstack/common/README
 create mode 100644 cinder/openstack/common/__init__.py
 create mode 100644 cinder/openstack/common/cfg.py
 create mode 100644 cinder/openstack/common/exception.py
 create mode 100644 cinder/openstack/common/importutils.py
 create mode 100644 cinder/openstack/common/iniparser.py
 create mode 100644 cinder/openstack/common/local.py
 create mode 100644 cinder/policy.py
 create mode 100644 cinder/quota.py
 create mode 100755 cinder/rootwrap/__init__.py
 create mode 100755 cinder/rootwrap/filters.py
 create mode 100755 cinder/rootwrap/volume.py
 create mode 100755 cinder/rootwrap/wrapper.py
 create mode 100644 cinder/rpc/__init__.py
 create mode 100644 cinder/rpc/amqp.py
 create mode 100644 cinder/rpc/common.py
 create mode 100644 cinder/rpc/impl_fake.py
 create mode 100644 cinder/rpc/impl_kombu.py
 create mode 100644 cinder/rpc/impl_qpid.py
 create mode 100644 cinder/scheduler/__init__.py
 create mode 100644 cinder/scheduler/api.py
 create mode 100644 cinder/scheduler/chance.py
 create mode 100644 cinder/scheduler/driver.py
 create mode 100644 cinder/scheduler/host_manager.py
 create mode 100644 cinder/scheduler/manager.py
 create mode 100644 cinder/scheduler/simple.py
 create mode 100644 cinder/service.py
 create mode 100644 cinder/test.py
 create mode 100644 cinder/testing/README.rst
 create mode 100644 cinder/testing/__init__.py
 create mode 100644 cinder/testing/fake/__init__.py
 create mode 100644 cinder/testing/runner.py
 create mode 100644 cinder/tests/__init__.py
 create mode 100644 cinder/tests/api/__init__.py
 create mode 100644 cinder/tests/api/openstack/__init__.py
 create mode 100644 cinder/tests/api/openstack/common.py
 create mode 100644 cinder/tests/api/openstack/fakes.py
 create mode 100644 cinder/tests/api/openstack/test_common.py
 create mode 100644 cinder/tests/api/openstack/test_faults.py
 create mode 100644 cinder/tests/api/openstack/test_wsgi.py
 create mode 100644 cinder/tests/api/openstack/test_xmlutil.py
 create mode 100644 cinder/tests/api/openstack/volume/__init__.py
 create mode 100644 cinder/tests/api/openstack/volume/contrib/__init__.py
 create mode 100644 cinder/tests/api/openstack/volume/contrib/test_types_extra_specs.py
 create mode 100644 cinder/tests/api/openstack/volume/contrib/test_types_manage.py
 create mode 100644 cinder/tests/api/openstack/volume/extensions/__init__.py
 create mode 100644 cinder/tests/api/openstack/volume/extensions/foxinsocks.py
 create mode 100644 cinder/tests/api/openstack/volume/test_extensions.py
 create mode 100644 cinder/tests/api/openstack/volume/test_router.py
 create mode 100644 cinder/tests/api/openstack/volume/test_snapshots.py
 create mode 100644 cinder/tests/api/openstack/volume/test_types.py
 create mode 100644 cinder/tests/api/openstack/volume/test_volumes.py
 create mode 100644 cinder/tests/api/test_auth.py
 create mode 100644 cinder/tests/api/test_sizelimit.py
 create mode 100644 cinder/tests/api/test_wsgi.py
 create mode 100644 cinder/tests/db/__init__.py
 create mode 100644 cinder/tests/db/fakes.py
 create mode 100644 cinder/tests/declare_flags.py
 create mode 100644 cinder/tests/fake_flags.py
 create mode 100644 cinder/tests/fake_utils.py
 create mode 100644 cinder/tests/integrated/__init__.py
 create mode 100644 cinder/tests/integrated/api/__init__.py
 create mode 100644 cinder/tests/integrated/api/client.py
 create mode 100644 cinder/tests/integrated/integrated_helpers.py
 create mode 100644 cinder/tests/integrated/test_extensions.py
 create mode 100644 cinder/tests/integrated/test_login.py
 create mode 100644 cinder/tests/integrated/test_volumes.py
 create mode 100644 cinder/tests/integrated/test_xml.py
 create mode 100644 cinder/tests/monkey_patch_example/__init__.py
 create mode 100644 cinder/tests/monkey_patch_example/example_a.py
 create mode 100644 cinder/tests/monkey_patch_example/example_b.py
 create mode 100644 cinder/tests/notifier/__init__.py
 create mode 100644 cinder/tests/notifier/test_capacity_notifier.py
 create mode 100644 cinder/tests/notifier/test_list_notifier.py
 create mode 100644 cinder/tests/policy.json
 create mode 100644 cinder/tests/rpc/__init__.py
 create mode 100644 cinder/tests/rpc/common.py
 create mode 100644 cinder/tests/rpc/test_common.py
 create mode 100644 cinder/tests/rpc/test_fake.py
 create mode 100644 cinder/tests/rpc/test_kombu.py
 create mode 100644 cinder/tests/rpc/test_kombu_ssl.py
 create mode 100644 cinder/tests/rpc/test_qpid.py
 create mode 100644 cinder/tests/runtime_flags.py
 create mode 100644 cinder/tests/scheduler/__init__.py
 create mode 100644 cinder/tests/scheduler/fakes.py
 create mode 100644 cinder/tests/scheduler/test_scheduler.py
 create mode 100644 cinder/tests/test_SolidFireSanISCSIDriver.py
 create mode 100644 cinder/tests/test_api.py
 create mode 100644 cinder/tests/test_compat_flagfile.py
 create mode 100644 cinder/tests/test_context.py
 create mode 100644 cinder/tests/test_db_api.py
 create mode 100644 cinder/tests/test_exception.py
 create mode 100644 cinder/tests/test_flags.py
 create mode 100644 cinder/tests/test_iscsi.py
 create mode 100644 cinder/tests/test_log.py
 create mode 100644 cinder/tests/test_migrations.conf
 create mode 100644 cinder/tests/test_migrations.py
 create mode 100644 cinder/tests/test_misc.py
 create mode 100644 cinder/tests/test_netapp.py
 create mode 100644 cinder/tests/test_nexenta.py
 create mode 100644 cinder/tests/test_notifier.py
 create mode 100644 cinder/tests/test_nova_rootwrap.py
 create mode 100644 cinder/tests/test_policy.py
 create mode 100644 cinder/tests/test_quota.py
 create mode 100644 cinder/tests/test_service.py
 create mode 100644 cinder/tests/test_skip_examples.py
 create mode 100644 cinder/tests/test_test.py
 create mode 100644 cinder/tests/test_test_utils.py
 create mode 100644 cinder/tests/test_utils.py
 create mode 100644 cinder/tests/test_versions.py
 create mode 100644 cinder/tests/test_volume.py
 create mode 100644 cinder/tests/test_volume_types.py
 create mode 100644 cinder/tests/test_volume_types_extra_specs.py
 create mode 100644 cinder/tests/test_wsgi.py
 create mode 100644 cinder/tests/utils.py
 create mode 100644 cinder/utils.py
 create mode 100644 cinder/version.py
 create mode 100644 cinder/volume/__init__.py
 create mode 100644 cinder/volume/api.py
 create mode 100644 cinder/volume/driver.py
 create mode 100644 cinder/volume/iscsi.py
 create mode 100644 cinder/volume/manager.py
 create mode 100644 cinder/volume/netapp.py
 create mode 100644 cinder/volume/nexenta/__init__.py
 create mode 100644 cinder/volume/nexenta/jsonrpc.py
 create mode 100644 cinder/volume/nexenta/volume.py
 create mode 100644 cinder/volume/san.py
 create mode 100644 cinder/volume/volume_types.py
 create mode 100644 cinder/volume/xensm.py
 create mode 100644 cinder/wsgi.py
 create mode 100755 contrib/openstack-config
 create mode 100644 contrib/redhat-eventlet.patch
 create mode 100644 doc/.gitignore
 create mode 100644 doc/Makefile
 create mode 100644 doc/README.rst
 create mode 100644 doc/ext/__init__.py
 create mode 100644 doc/ext/nova_autodoc.py
 create mode 100644 doc/ext/nova_todo.py
 create mode 100755 doc/find_autodoc_modules.sh
 create mode 100755 doc/generate_autodoc_index.sh
 create mode 100644 doc/source/_ga/layout.html
 create mode 100644 doc/source/_static/.gitignore
 create mode 100644 doc/source/_static/.placeholder
 create mode 100644 doc/source/_static/basic.css
 create mode 100644 doc/source/_static/default.css
 create mode 100644 doc/source/_static/jquery.tweet.js
 create mode 100644 doc/source/_static/tweaks.css
 create mode 100644 doc/source/_templates/.gitignore
 create mode 100644 doc/source/_templates/.placeholder
 create mode 100644 doc/source/_theme/layout.html
 create mode 100644 doc/source/_theme/theme.conf
 create mode 100644 doc/source/conf.py
 create mode 100644 doc/source/devref/addmethod.openstackapi.rst
 create mode 100644 doc/source/devref/aggregates.rst
 create mode 100644 doc/source/devref/api.rst
 create mode 100644 doc/source/devref/architecture.rst
 create mode 100644 doc/source/devref/auth.rst
 create mode 100644 doc/source/devref/cloudpipe.rst
 create mode 100644 doc/source/devref/database.rst
 create mode 100644 doc/source/devref/development.environment.rst
 create mode 100644 doc/source/devref/down.sh
 create mode 100644 doc/source/devref/fakes.rst
 create mode 100644 doc/source/devref/filter_scheduler.rst
 create mode 100644 doc/source/devref/gerrit.rst
 create mode 100644 doc/source/devref/glance.rst
 create mode 100644 doc/source/devref/il8n.rst
 create mode 100644 doc/source/devref/index.rst
 create mode 100644 doc/source/devref/interfaces
 create mode 100644 doc/source/devref/jenkins.rst
 create mode 100644 doc/source/devref/launchpad.rst
 create mode 100644 doc/source/devref/multinic.rst
 create mode 100644 doc/source/devref/network.rst
 create mode 100644 doc/source/devref/nova.rst
 create mode 100644 doc/source/devref/rc.local
 create mode 100644 doc/source/devref/rpc.rst
 create mode 100644 doc/source/devref/scheduler.rst
 create mode 100644 doc/source/devref/server.conf.template
 create mode 100644 doc/source/devref/services.rst
 create mode 100644 doc/source/devref/threading.rst
 create mode 100644 doc/source/devref/unit_tests.rst
 create mode 100644 doc/source/devref/up.sh
 create mode 100644 doc/source/devref/volume.rst
 create mode 100644 doc/source/devref/xensmvolume.rst
 create mode 100644 doc/source/image_src/multinic_1.odg
 create mode 100644 doc/source/image_src/multinic_2.odg
 create mode 100644 doc/source/image_src/multinic_3.odg
 create mode 100644 doc/source/images/NOVA_ARCH.png
 create mode 100644 doc/source/images/NOVA_ARCH.svg
 create mode 100644 doc/source/images/NOVA_ARCH_200dpi.png
 create mode 100644 doc/source/images/NOVA_ARCH_66dpi.png
 create mode 100644 doc/source/images/NOVA_clouds_A_B.png
 create mode 100644 doc/source/images/NOVA_clouds_A_B.svg
 create mode 100644 doc/source/images/NOVA_clouds_C1_C2.svg
 create mode 100644 doc/source/images/NOVA_clouds_C1_C2.svg.png
 create mode 100644 doc/source/images/Novadiagram.png
 create mode 100644 doc/source/images/base_scheduler.png
 create mode 100644 doc/source/images/cloudpipe.png
 create mode 100644 doc/source/images/fabric.png
 create mode 100644 doc/source/images/filteringWorkflow1.png
 create mode 100644 doc/source/images/filteringWorkflow2.png
 create mode 100644 doc/source/images/multinic_dhcp.png
 create mode 100644 doc/source/images/multinic_flat.png
 create mode 100644 doc/source/images/multinic_vlan.png
 create mode 100755 doc/source/images/nova.compute.api.create.png
 create mode 100644 doc/source/images/novascreens.png
 create mode 100644 doc/source/images/novashvirtually.png
 create mode 100644 doc/source/images/rpc/arch.png
 create mode 100644 doc/source/images/rpc/arch.svg
 create mode 100644 doc/source/images/rpc/flow1.png
 create mode 100644 doc/source/images/rpc/flow1.svg
 create mode 100644 doc/source/images/rpc/flow2.png
 create mode 100644 doc/source/images/rpc/flow2.svg
 create mode 100644 doc/source/images/rpc/rabt.png
 create mode 100644 doc/source/images/rpc/rabt.svg
 create mode 100644 doc/source/images/rpc/state.png
 create mode 100644 doc/source/images/vmwareapi_blockdiagram.jpg
 create mode 100755 doc/source/images/zone_aware_overview.png
 create mode 100644 doc/source/images/zone_aware_scheduler.png
 create mode 100755 doc/source/images/zone_overview.png
 create mode 100644 doc/source/index.rst
 create mode 100644 doc/source/man/nova-manage.rst
 create mode 100644 etc/cinder/api-paste.ini
 create mode 100644 etc/cinder/cinder.conf.sample
 create mode 100644 etc/cinder/logging_sample.conf
 create mode 100644 etc/cinder/policy.json
 create mode 100644 openstack-common.conf
 create mode 100644 pylintrc
 create mode 100755 run_tests.sh
 create mode 100644 setup.cfg
 create mode 100644 setup.py
 create mode 100755 tools/clean-vlans
 create mode 100755 tools/clean_file_locks.py
 create mode 100644 tools/conf/create_conf.py
 create mode 100755 tools/conf/generate_sample.sh
 create mode 100755 tools/enable-pre-commit-hook.sh
 create mode 100755 tools/hacking.py
 create mode 100644 tools/install_venv.py
 create mode 100644 tools/pip-requires
 create mode 100755 tools/rfc.sh
 create mode 100644 tools/test-requires
 create mode 100755 tools/with_venv.sh
 create mode 100644 tox.ini

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000..97cda3c7c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,24 @@
+*.pyc
+*.DS_Store
+local_settings.py
+CA/
+keeper
+instances
+keys
+build/*
+build-stamp
+cinder.egg-info
+nova.egg-info
+.cinder-venv
+.nova-venv
+.venv
+.tox
+*.sqlite
+*.log
+*.mo
+tools/conf/cinder.conf*
+tools/conf/nova.conf*
+cover/*
+dist/*
+.coverage
+covhtml
diff --git a/.gitreview b/.gitreview
new file mode 100644
index 000000000..eecf93944
--- /dev/null
+++ b/.gitreview
@@ -0,0 +1,4 @@
+[gerrit]
+host=review.openstack.org
+port=29418
+project=openstack/cinder.git
diff --git a/.mailmap b/.mailmap
new file mode 100644
index 000000000..f38c68aeb
--- /dev/null
+++ b/.mailmap
@@ -0,0 +1,81 @@
+# Format is:
+# <preferred e-mail> <other e-mail 1>
+# <preferred e-mail> <other e-mail 2>
+<aaron.lee@rackspace.com> <wwkeyboard@gmail.com>
+<anotherjesse@gmail.com> <jesse@dancelamb>
+<anotherjesse@gmail.com> <jesse@gigantor.local>
+<anotherjesse@gmail.com> <jesse@ubuntu>
+<anotherjesse@gmail.com> <jesse@aire.local>
+<ant@openstack.org> <amesserl@rackspace.com>
+<Armando.Migliaccio@eu.citrix.com> <armando.migliaccio@citrix.com>
+<brian.lamar@rackspace.com> <brian.lamar@gmail.com>
+<brian.waldon@rackspace.com> <bcwaldon@gmail.com>
+<bschott@isi.edu> <bfschott@gmail.com>
+<cbehrens@codestud.com> <chris.behrens@rackspace.com>
+<chiradeep@cloud.com> <chiradeep@chiradeep-lt2>
+<code@term.ie> <github@anarkystic.com>
+<code@term.ie> <termie@preciousroy.local>
+<corywright@gmail.com> <cory.wright@rackspace.com>
+<dan@nicira.com> <danwent@dan-xs3-cs>
+<dan@nicira.com> <danwent@gmail.com>
+<dtroyer@gmail.com> <dt-github@xr7.org>
+<Dave.Walker@canonical.com> <DaveWalker@ubuntu.com>
+<derekh@redhat.com> <higginsd@gmail.com>
+<devin.carlen@gmail.com> <devcamcar@illian.local>
+<doug.hellmann@dreamhost.com> <doug.hellmann@gmail.com>
+<dprince@redhat.com> <dan.prince@rackspace.com>
+<edouard1.thuleau@orange.com> <thuleau@gmail.com>
+<ewan.mellor@citrix.com> <emellor@silver>
+<ghe@debian.org> <ghe.rivero@gmail.com>
+<itoumsn@nttdata.co.jp> <itoumsn@shayol>
+<jake@ansolabs.com> <jake@markupisart.com>
+<jake@ansolabs.com> <admin@jakedahn.com>
+<jaypipes@gmail.com> <jpipes@serialcoder>
+<jeblair@hp.com> <james.blair@rackspace.com>
+<jeblair@hp.com> <corvus@inaugust.com>
+<jmckenty@gmail.com> <jmckenty@joshua-mckentys-macbook-pro.local>
+<jmckenty@gmail.com> <jmckenty@yyj-dhcp171.corp.flock.com>
+<jmckenty@gmail.com> <joshua.mckenty@nasa.gov>
+<johannes.erdfelt@rackspace.com> <johannes@compute3.221.st>
+<john.griffith@solidfire.com> <john.griffith8@gmail.com>
+<josh@jk0.org> <josh.kearney@rackspace.com>
+<justin@fathomdb.com> <justinsb@justinsb-desktop>
+<justin@fathomdb.com> <superstack@superstack.org>
+<lorin@nimbisservices.com> <lorin@isi.edu>
+<masumotok@nttdata.co.jp> Masumoto<masumotok@nttdata.co.jp>
+<masumotok@nttdata.co.jp> <root@openstack2-api>
+<matt.dietz@rackspace.com> <matthewdietz@Matthew-Dietzs-MacBook-Pro.local>
+<matt.dietz@rackspace.com> <mdietz@openstack>
+<mikal@stillhq.com> <michael.still@canonical.com>
+<mordred@inaugust.com> <mordred@hudson>
+<naveedm9@gmail.com> <naveed.massjouni@rackspace.com>
+<rnirmal@gmail.com> <nirmal.ranganathan@rackspace.com>
+<rnirmal@gmail.com> <nirmal.ranganathan@rackspace.coom>
+<paul@openstack.org> <paul.voccio@rackspace.com>
+<paul@openstack.org> <pvoccio@castor.local>
+<paul@openstack.org> <paul@substation9.com>
+<rconradharris@gmail.com> <rick.harris@rackspace.com>
+<rlane@wikimedia.org> <laner@controller>
+<sandy.walsh@rackspace.com> <sandy@sandywalsh.com>
+<sleepsonthefloor@gmail.com> <root@tonbuntu>
+<soren.hansen@rackspace.com> <soren@linux2go.dk>
+<throughnothing@gmail.com> <will.wolf@rackspace.com>
+<tim.simpson@rackspace.com> <tim.simpson4@gmail.com>
+<todd@ansolabs.com> <todd@lapex>
+<todd@ansolabs.com> <todd@rubidine.com>
+<todd@ansolabs.com> <xtoddx@gmail.com>
+<trey.morris@rackspace.com> <treyemorris@gmail.com>
+<tushar.vitthal.patil@gmail.com> <tpatil@vertex.co.in>
+<ueno.nachi@lab.ntt.co.jp> <nati.ueno@gmail.com>
+<ueno.nachi@lab.ntt.co.jp> <nova@u4>
+<ueno.nachi@lab.ntt.co.jp> <openstack@lab.ntt.co.jp>
+<vishvananda@gmail.com> <root@mirror.nasanebula.net>
+<vishvananda@gmail.com> <root@ubuntu>
+<vishvananda@gmail.com> <vishvananda@yahoo.com>
+<ilyaalekseyev@acm.org> <ialekseev@griddynamics.com>
+<ilyaalekseyev@acm.org> <ilya@oscloud.ru>
+<reldan@oscloud.ru> <enugaev@griddynamics.com>
+<kshileev@gmail.com> <kshileev@griddynamics.com>
+<nsokolov@griddynamics.com> <nsokolov@griddynamics.net>
+<troy.toman@rackspace.com> <ttcl@mac.com>
+<zulcss@ubuntu.com> <chuck.short@canonical.com>
diff --git a/Authors b/Authors
new file mode 100644
index 000000000..f4bd7344f
--- /dev/null
+++ b/Authors
@@ -0,0 +1,211 @@
+Aaron Lee <aaron.lee@rackspace.com>
+Adam Gandelman <adamg@canonical.com>
+Adam Johnson <adjohn@gmail.com>
+Adrian Smith <adrian_f_smith@dell.com>
+Ahmad Hassan <ahmad.hassan@hp.com>
+Alex Meade <alex.meade@rackspace.com>
+Alexander Sakhnov <asakhnov@mirantis.com>
+Alexander Kovalev <akovalev@mirantis.com>
+Alvaro Lopez Garcia <aloga@ifca.unican.es>
+Andrew Bogott <abogott@wikimedia.org>
+Andrew Clay Shafer <acs@parvuscaptus.com>
+Andrey Brindeyev <abrindeyev@griddynamics.com>
+Andy Smith <code@term.ie>
+Andy Southgate <andy.southgate@citrix.com>
+Anne Gentle <anne@openstack.org>
+Ante Karamatić <ivoks@ubuntu.com>
+Anthony Young <sleepsonthefloor@gmail.com>
+Antony Messerli <ant@openstack.org>
+Armando Migliaccio <Armando.Migliaccio@eu.citrix.com>
+Arvind Somya <asomya@cisco.com>
+Asbjørn Sannes <asbjorn.sannes@interhost.no>
+Ben McGraw <ben@pistoncloud.com>
+Ben Swartzlander <bswartz@netapp.com>
+Bilal Akhtar <bilalakhtar@ubuntu.com>
+Brad Hall <brad@nicira.com>
+Brad McConnell <bmcconne@rackspace.com>
+Brendan Maguire <B_Maguire@Dell.com>
+Brian Elliott <brian.elliott@rackspace.com>
+Brian Lamar <brian.lamar@rackspace.com>
+Brian Schott <bschott@isi.edu>
+Brian Waldon <brian.waldon@rackspace.com>
+Chiradeep Vittal <chiradeep@cloud.com>
+Chmouel Boudjnah <chmouel@chmouel.com>
+Chris Behrens <cbehrens@codestud.com>
+Christian Berendt <berendt@b1-systems.de>
+Chris Fattarsi <chris.fattarsi@pistoncloud.com>
+Christopher MacGown <chris@pistoncloud.com>
+Chuck Short <zulcss@ubuntu.com>
+Cole Robinson <crobinso@redhat.com>
+Cor Cornelisse <cor@hyves.nl>
+Cory Wright <corywright@gmail.com>
+Dan Prince <dprince@redhat.com>
+Dan Wendlandt <dan@nicira.com>
+Daniel P. Berrange <berrange@redhat.com>
+Dave Lapsley <dlapsley@nicira.com>
+Dave Walker <Dave.Walker@canonical.com>
+David Pravec <David.Pravec@danix.org>
+David Subiros <david.perez5@hp.com>
+Dean Troyer <dtroyer@gmail.com>
+Deepak Garg <deepak.garg@citrix.com>
+Derek Higgins <derekh@redhat.com>
+Devdeep Singh <devdeep.singh@citrix.com>
+Devendra Modium <dmodium@isi.edu>
+Devin Carlen <devin.carlen@gmail.com>
+Dina Belova <dbelova@mirantis.com>
+Donal Lafferty <donal.lafferty@citrix.com>
+Dong-In David Kang <dkang@isi.edu>
+Doug Hellmann <doug.hellmann@dreamhost.com>
+Duncan McGreggor <duncan@dreamhost.com>
+Ed Leafe <ed@leafe.com>
+Edouard Thuleau <edouard1.thuleau@orange.com>
+Eldar Nugaev <reldan@oscloud.ru>
+Eoghan Glynn <eglynn@redhat.com>
+Eric Day <eday@oddments.org>
+Eric Windisch <eric@cloudscaling.com>
+Evan Callicoat <diopter@gmail.com>
+Ewan Mellor <ewan.mellor@citrix.com>
+François Charlier <francois.charlier@ecindernce.com>
+Gabe Westmaas <gabe.westmaas@rackspace.com>
+Gabriel Hurley <gabriel@strikeawe.com>
+Gary Kotton <garyk@radware.com>
+Gaurav Gupta <gaurav@denali-systems.com>
+Greg Althaus <galthaus@austin.rr.com>
+Hengqing Hu <hudayou@hotmail.com>
+Hisaharu Ishii <ishii.hisaharu@lab.ntt.co.jp>
+Hisaki Ohara <hisaki.ohara@intel.com>
+Ilya Alekseyev <ilyaalekseyev@acm.org>
+Ionuț Arțăriși <iartarisi@suse.cz>
+Isaku Yamahata <yamahata@valinux.co.jp>
+Ivan Kolodyazhny <e0ne@e0ne.info>
+J. Daniel Schmidt <jdsn@suse.de>
+Jake Dahn <jake@ansolabs.com>
+James E. Blair <jeblair@hp.com>
+Jason Cannavale <jason.cannavale@rackspace.com>
+Jason Koelker <jason@koelker.net>
+Jay Pipes <jaypipes@gmail.com>
+JC Martin <jcmartin@ebaysf.com>
+Jesse Andrews <anotherjesse@gmail.com>
+Jimmy Bergman <jimmy@sigint.se>
+Joe Gordon <jogo@cloudscaling.com>
+Joe Heck <heckj@mac.com>
+Joel Moore <joelbm24@gmail.com>
+Johannes Erdfelt <johannes.erdfelt@rackspace.com>
+John Dewey <john@dewey.ws>
+John Garbutt <john.garbutt@citrix.com>
+John Griffith <john.griffith@solidfire.com>
+John Kennedy <john.m.kennedy@intel.com>
+John Tran <jtran@attinteractive.com>
+Jonathan Bryce <jbryce@jbryce.com>
+Jordan Rinke <jordan@openstack.org>
+Joseph Suh <jsuh@isi.edu>
+Joseph W. Breu <breu@breu.org>
+Josh Durgin <joshd@hq.newdream.net>
+Josh Kearney <josh@jk0.org>
+Josh Kleinpeter <josh@kleinpeter.org>
+Joshua Harlow <harlowja@yahoo-inc.com>
+Joshua McKenty <jmckenty@gmail.com>
+Juan G. Hernando Rivero <ghe@debian.org>
+Julien Danjou <julien.danjou@ecindernce.com>
+Justin Santa Barbara <justin@fathomdb.com>
+Justin Shepherd <jshepher@rackspace.com>
+Kei Masumoto <masumotok@nttdata.co.jp>
+Keisuke Tagami <tagami.keisuke@lab.ntt.co.jp>
+masumoto<masumotok@nttdata.co.jp>
+masukotm<masukotm@nttdata.co.jp>
+Ken Pepple <ken.pepple@gmail.com>
+Kevin Bringard <kbringard@attinteractive.com>
+Kevin L. Mitchell <kevin.mitchell@rackspace.com>
+Kiall Mac Innes <kiall@managedit.ie>
+Kirill Shileev <kshileev@gmail.com>
+Koji Iida <iida.koji@lab.ntt.co.jp>
+Liam Kelleher  <liam.kelleher@hp.com>
+Likitha Shetty <likitha.shetty@citrix.com>
+Loganathan Parthipan <parthipan@hp.com>
+Lorin Hochstein <lorin@nimbisservices.com>
+Lvov Maxim <usrleon@gmail.com>
+Mandar Vaze <mandar.vaze@vertex.co.in>
+Mandell Degerness <mdegerne@gmail.com>
+Mark McClain <mark.mcclain@dreamhost.com>
+Mark McLoughlin <markmc@redhat.com>
+Mark Washenberger <mark.washenberger@rackspace.com>
+Maru Newby <mnewby@internap.com>
+Masanori Itoh <itoumsn@nttdata.co.jp>
+Matt Dietz <matt.dietz@rackspace.com>
+Matt Stephenson <mattstep@mattstep.net>
+Matthew Hooker <matt@cloudscaling.com>
+Michael Basnight <mbasnigh@rackspace.com>
+Michael Gundlach <michael.gundlach@rackspace.com>
+Michael Still <mikal@stillhq.com>
+Mike Lundy <mike@pistoncloud.com>
+Mike Milner <mike.milner@canonical.com>
+Mike Pittaro <mikeyp@lahondaresearch.org>
+Mike Scherbakov <mihgen@gmail.com>
+Mikyung Kang <mkkang@isi.edu>
+Mohammed Naser <mnaser@vexxhost.com>
+Monsyne Dragon <mdragon@rackspace.com>
+Monty Taylor <mordred@inaugust.com>
+MORITA Kazutaka <morita.kazutaka@gmail.com>
+MotoKen <motokentsai@gmail.com>
+Muneyuki Noguchi <noguchimn@nttdata.co.jp>
+Nachi Ueno <ueno.nachi@lab.ntt.co.jp>
+Naveed Massjouni <naveedm9@gmail.com>
+Nick Bartos <nick@pistoncloud.com>
+Nikhil Komawar <nikhil.komawar@rackspace.com>
+Nikolay Sokolov <nsokolov@griddynamics.com>
+Nirmal Ranganathan <rnirmal@gmail.com>
+Ollie Leahy <oliver.leahy@hp.com>
+Pádraig Brady <pbrady@redhat.com>
+Paul McMillan <paul.mcmillan@nebula.com>
+Paul Voccio <paul@openstack.org>
+Peng Yong <ppyy@pubyun.com>
+Philip Knouff <philip.knouff@mailtrust.com>
+Renier Morales <renierm@us.ibm.com>
+Renuka Apte <renuka.apte@citrix.com>
+Ricardo Carrillo Cruz <emaildericky@gmail.com>
+Rick Clark <rick@openstack.org>
+Rick Harris <rconradharris@gmail.com>
+Rob Kost <kost@isi.edu>
+Robert Esker <esker@netapp.com>
+Russell Bryant <rbryant@redhat.com>
+Russell Sim <russell.sim@gmail.com>
+Ryan Lane <rlane@wikimedia.org>
+Ryan Lucio <rlucio@internap.com>
+Ryu Ishimoto <ryu@midokura.jp>
+Salvatore Orlando <salvatore.orlando@eu.citrix.com>
+Sandy Walsh <sandy.walsh@rackspace.com>
+Sateesh Chodapuneedi <sateesh.chodapuneedi@citrix.com>
+Scott Moser <smoser@ubuntu.com>
+Sean Dague <sdague@linux.vnet.ibm.com>
+Soren Hansen <soren.hansen@rackspace.com>
+Stanislaw Pitucha <stanislaw.pitucha@hp.com>
+Stephanie Reese <reese.sm@gmail.com>
+Sumit Naiksatam <snaiksat@cisco.com>
+Thierry Carrez <thierry@openstack.org>
+Tim Simpson <tim.simpson@rackspace.com>
+Todd Willey <todd@ansolabs.com>
+Tomoe Sugihara <tomoe@midokura.com>
+Tomoya Masuko<masukotm@nttdata.co.jp>
+Thorsten Tarrach <thorsten@atomia.com>
+Trey Morris <trey.morris@rackspace.com>
+Troy Toman <troy.toman@rackspace.com>
+Tushar Patil <tushar.vitthal.patil@gmail.com>
+Unmesh Gurjar <unmesh.gurjar@vertex.co.in>
+Vasiliy Shlykov <vash@vasiliyshlykov.org>
+Vishvananda Ishaya <vishvananda@gmail.com>
+Vivek Y S <vivek.ys@gmail.com>
+Vladimir Popovski <vladimir@zadarastorage.com>
+Vaddi kiran <vaddi_kiran@persistent.co.in>
+William Henry <whenry@redhat.com>
+William Kelly <william.kelly@rackspace.com>
+William Wolf <throughnothing@gmail.com>
+Yaguang Tang <heut2008@gmail.com>
+Yoshiaki Tamura <yoshi@midokura.jp>
+Youcef Laribi <Youcef.Laribi@eu.citrix.com>
+Yun Mao <yunmao@gmail.com>
+Yun Shen <Yun.Shen@hp.com>
+Yuriy Taraday <yorik.sar@gmail.com>
+Zed Shaw <zedshaw@zedshaw.com>
+Zhixue Wu <Zhixue.Wu@citrix.com>
+Zhongyue Luo <lzyeval@gmail.com>
+Ziad Sawalha <github@highbridgellc.com>
diff --git a/HACKING.rst b/HACKING.rst
new file mode 100644
index 000000000..e9c0162f5
--- /dev/null
+++ b/HACKING.rst
@@ -0,0 +1,213 @@
+Cinder Style Commandments
+=======================
+
+- Step 1: Read http://www.python.org/dev/peps/pep-0008/
+- Step 2: Read http://www.python.org/dev/peps/pep-0008/ again
+- Step 3: Read on
+
+
+General
+-------
+- Put two newlines between top-level code (funcs, classes, etc)
+- Put one newline between methods in classes and anywhere else
+- Do not write "except:", use "except Exception:" at the very least
+- Include your name with TODOs as in "#TODO(termie)"
+- Do not shadow a built-in or reserved word. Example::
+
+    def list():
+        return [1, 2, 3]
+
+    mylist = list() # BAD, shadows `list` built-in
+
+    class Foo(object):
+        def list(self):
+            return [1, 2, 3]
+
+    mylist = Foo().list() # OKAY, does not shadow built-in
+
+
+Imports
+-------
+- Do not import objects, only modules (*)
+- Do not import more than one module per line (*)
+- Do not make relative imports
+- Order your imports by the full module path
+- Organize your imports according to the following template
+
+(*) exceptions are:
+
+- imports from ``migrate`` package
+- imports from ``sqlalchemy`` package
+- imports from ``cinder.db.sqlalchemy.session`` module
+
+Example::
+
+  # vim: tabstop=4 shiftwidth=4 softtabstop=4
+  {{stdlib imports in human alphabetical order}}
+  \n
+  {{third-party lib imports in human alphabetical order}}
+  \n
+  {{cinder imports in human alphabetical order}}
+  \n
+  \n
+  {{begin your code}}
+
+
+Human Alphabetical Order Examples
+---------------------------------
+Example::
+
+  import httplib
+  import logging
+  import random
+  import StringIO
+  import time
+  import unittest
+
+  import eventlet
+  import webob.exc
+
+  import cinder.api.ec2
+  from cinder.api import openstack
+  from cinder.auth import users
+  from cinder.endpoint import cloud
+  import cinder.flags
+  from cinder import test
+
+
+Docstrings
+----------
+Example::
+
+  """A one line docstring looks like this and ends in a period."""
+
+
+  """A multi line docstring has a one-line summary, less than 80 characters.
+
+  Then a new paragraph after a newline that explains in more detail any
+  general information about the function, class or method. Example usages
+  are also great to have here if it is a complex class for function.
+
+  When writing the docstring for a class, an extra line should be placed
+  after the closing quotations. For more in-depth explanations for these
+  decisions see http://www.python.org/dev/peps/pep-0257/
+
+  If you are going to describe parameters and return values, use Sphinx, the
+  appropriate syntax is as follows.
+
+  :param foo: the foo parameter
+  :param bar: the bar parameter
+  :returns: return_type -- description of the return value
+  :returns: description of the return value
+  :raises: AttributeError, KeyError
+  """
+
+
+Dictionaries/Lists
+------------------
+If a dictionary (dict) or list object is longer than 80 characters, its items
+should be split with newlines. Embedded iterables should have their items
+indented. Additionally, the last item in the dictionary should have a trailing
+comma. This increases readability and simplifies future diffs.
+
+Example::
+
+  my_dictionary = {
+      "image": {
+          "name": "Just a Snapshot",
+          "size": 2749573,
+          "properties": {
+               "user_id": 12,
+               "arch": "x86_64",
+          },
+          "things": [
+              "thing_one",
+              "thing_two",
+          ],
+          "status": "ACTIVE",
+      },
+  }
+
+
+Calling Methods
+---------------
+Calls to methods 80 characters or longer should format each argument with
+newlines. This is not a requirement, but a guideline::
+
+    unnecessarily_long_function_name('string one',
+                                     'string two',
+                                     kwarg1=constants.ACTIVE,
+                                     kwarg2=['a', 'b', 'c'])
+
+
+Rather than constructing parameters inline, it is better to break things up::
+
+    list_of_strings = [
+        'what_a_long_string',
+        'not as long',
+    ]
+
+    dict_of_numbers = {
+        'one': 1,
+        'two': 2,
+        'twenty four': 24,
+    }
+
+    object_one.call_a_method('string three',
+                             'string four',
+                             kwarg1=list_of_strings,
+                             kwarg2=dict_of_numbers)
+
+
+Internationalization (i18n) Strings
+-----------------------------------
+In order to support multiple languages, we have a mechanism to support
+automatic translations of exception and log strings.
+
+Example::
+
+    msg = _("An error occurred")
+    raise HTTPBadRequest(explanation=msg)
+
+If you have a variable to place within the string, first internationalize the
+template string then do the replacement.
+
+Example::
+
+    msg = _("Missing parameter: %s") % ("flavor",)
+    LOG.error(msg)
+
+If you have multiple variables to place in the string, use keyword parameters.
+This helps our translators reorder parameters when needed.
+
+Example::
+
+    msg = _("The server with id %(s_id)s has no key %(m_key)s")
+    LOG.error(msg % {"s_id": "1234", "m_key": "imageId"})
+
+
+Creating Unit Tests
+-------------------
+For every new feature, unit tests should be created that both test and
+(implicitly) document the usage of said feature. If submitting a patch for a
+bug that had no unit test, a new passing unit test should be added. If a
+submitted bug fix does have a unit test, be sure to add a new one that fails
+without the patch and passes with the patch.
+
+For more information on creating unit tests and utilizing the testing
+infrastructure in OpenStack Cinder, please read cinder/testing/README.rst.
+
+
+openstack-common
+----------------
+
+A number of modules from openstack-common are imported into the project.
+
+These modules are "incubating" in openstack-common and are kept in sync
+with the help of openstack-common's update.py script. See:
+
+  http://wiki.openstack.org/CommonLibrary#Incubation
+
+The copy of the code should never be directly modified here. Please
+always update openstack-common first and then run the script to copy
+the changes across.
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 000000000..68c771a09
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,176 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 000000000..97278f3f4
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1,37 @@
+include HACKING.rst
+include LICENSE run_tests.sh
+include README.rst
+include MANIFEST.in pylintrc Authors
+include openstack-common.conf
+include babel.cfg tox.ini
+graft cinder/CA
+graft doc
+graft smoketests
+graft tools
+graft etc
+graft contrib
+graft plugins
+graft cinder/api/openstack/*/schemas
+include cinder/auth/*.schema
+include cinder/auth/cinderrc.template
+include cinder/auth/opendj.sh
+include cinder/auth/slap.sh
+include cinder/db/sqlalchemy/migrate_repo/migrate.cfg
+include cinder/db/sqlalchemy/migrate_repo/README
+include cinder/db/sqlalchemy/migrate_repo/versions/*.sql
+include cinder/openstack/common/README
+include cinder/virt/interfaces.template
+include cinder/virt/libvirt*.xml.template
+include cinder/virt/cpuinfo.xml.template
+include cinder/testing/README.rst
+include cinder/tests/db/cinder.austin.sqlite
+include cinder/tests/image/*.tar.gz
+include cinder/tests/policy.json
+include cinder/tests/test_migrations.conf
+include cinder/tests/xenapi/vm_rrd.xml
+include plugins/xenapi/README
+include plugins/xenapi/etc/xapi.d/plugins/objectstore
+include plugins/xenapi/etc/xapi.d/plugins/pluginlib_cinder.py
+global-exclude *.pyc
+
+recursive-include cinder/locale *
diff --git a/README.rst b/README.rst
new file mode 100644
index 000000000..822401a80
--- /dev/null
+++ b/README.rst
@@ -0,0 +1,21 @@
+The Choose Your Own Adventure README for Cinder
+===============================================
+
+You have come across a storage service for an open cloud computing service.
+It has identified itself as "Cinder."   It was abstracted from the Nova project.
+
+To monitor it from a distance: follow `@openstack <http://twitter.com/openstack>`_ on twitter.
+
+To tame it for use in your own cloud: read http://docs.openstack.org
+
+To study its anatomy: read http://cinder.openstack.org
+
+To dissect it in detail: visit http://github.com/openstack/cinder
+
+To taunt it with its weaknesses: use http://bugs.launchpad.net/cinder
+
+To watch it: http://jenkins.openstack.org
+
+To hack at it: read HACKING
+
+To cry over its pylint problems: http://jenkins.openstack.org/job/cinder-pylint/violations
diff --git a/babel.cfg b/babel.cfg
new file mode 100644
index 000000000..15cd6cb76
--- /dev/null
+++ b/babel.cfg
@@ -0,0 +1,2 @@
+[python: **.py]
+
diff --git a/bin/cinder-all b/bin/cinder-all
new file mode 100755
index 000000000..8bec9bbb3
--- /dev/null
+++ b/bin/cinder-all
@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack, LLC
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License");
+#    you may not use this file except in compliance with the License.
+#    You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the specific language governing permissions and
+#    limitations under the License.
+
+"""Starter script for All cinder services.
+
+This script attempts to start all the cinder services in one process.  Each
+service is started in its own greenthread.  Please note that exceptions and
+sys.exit() on the starting of a service are logged and the script will
+continue attempting to launch the rest of the services.
+
+"""
+
+import eventlet
+eventlet.monkey_patch()
+
+import os
+import sys
+
+
+possible_topdir = os.path.normpath(os.path.join(os.path.abspath(
+        sys.argv[0]), os.pardir, os.pardir))
+if os.path.exists(os.path.join(possible_topdir, "cinder", "__init__.py")):
+    sys.path.insert(0, possible_topdir)
+
+
+from cinder import flags
+from cinder import log as logging
+from cinder import service
+from cinder import utils
+
+
+LOG = logging.getLogger('cinder.all')
+
+if __name__ == '__main__':
+    utils.default_flagfile()
+    flags.FLAGS(sys.argv)
+    logging.setup()
+    utils.monkey_patch()
+    servers = []
+    # cinder-api
+    for api in flags.FLAGS.enabled_apis:
+        try:
+            servers.append(service.WSGIService(api))
+        except (Exception, SystemExit):
+            logging.exception(_('Failed to load %s') % '%s-api' % api)
+
+    for binary in ['cinder-volume', 'cinder-scheduler']:
+        try:
+            servers.append(service.Service.create(binary=binary))
+        except (Exception, SystemExit):
+            LOG.exception(_('Failed to load %s'), binary)
+    service.serve(*servers)
+    service.wait()
diff --git a/bin/cinder-api b/bin/cinder-api
new file mode 100755
index 000000000..ba28b1a44
--- /dev/null
+++ b/bin/cinder-api
@@ -0,0 +1,47 @@
+#!/usr/bin/env python
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License");
+#    you may not use this file except in compliance with the License.
+#    You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the specific language governing permissions and
+#    limitations under the License.
+
+"""Starter script for Cinder OS API."""
+
+import eventlet
+eventlet.monkey_patch()
+
+import os
+import sys
+
+
+possible_topdir = os.path.normpath(os.path.join(os.path.abspath(
+        sys.argv[0]), os.pardir, os.pardir))
+if os.path.exists(os.path.join(possible_topdir, "cinder", "__init__.py")):
+    sys.path.insert(0, possible_topdir)
+
+
+from cinder import flags
+from cinder import log as logging
+from cinder import service
+from cinder import utils
+
+if __name__ == '__main__':
+    utils.default_flagfile()
+    flags.FLAGS(sys.argv)
+    logging.setup()
+    utils.monkey_patch()
+    server = service.WSGIService('osapi_volume')
+    service.serve(server)
+    service.wait()
diff --git a/bin/cinder-manage b/bin/cinder-manage
new file mode 100755
index 000000000..0cc6d82c8
--- /dev/null
+++ b/bin/cinder-manage
@@ -0,0 +1,635 @@
+#!/usr/bin/env python
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 X.commerce, a business unit of eBay Inc.
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+# Interactive shell based on Django:
+#
+# Copyright (c) 2005, the Lawrence Journal-World
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+#     1. Redistributions of source code must retain the above copyright notice,
+#        this list of conditions and the following disclaimer.
+#
+#     2. Redistributions in binary form must reproduce the above copyright
+#        notice, this list of conditions and the following disclaimer in the
+#        documentation and/or other materials provided with the distribution.
+#
+#     3. Neither the name of Django nor the names of its contributors may be
+#        used to endorse or promote products derived from this software without
+#        specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+"""
+  CLI interface for cinder management.
+"""
+
+import ast
+import errno
+import gettext
+import json
+import math
+import netaddr
+import optparse
+import os
+import StringIO
+import sys
+
+
+# If ../cinder/__init__.py exists, add ../ to Python search path, so that
+# it will override what happens to be installed in /usr/(local/)lib/python...
+POSSIBLE_TOPDIR = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
+                                   os.pardir,
+                                   os.pardir))
+if os.path.exists(os.path.join(POSSIBLE_TOPDIR, 'cinder', '__init__.py')):
+    sys.path.insert(0, POSSIBLE_TOPDIR)
+
+gettext.install('cinder', unicode=1)
+
+from cinder.compat import flagfile
+from cinder import context
+from cinder import db
+from cinder.db import migration
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+from cinder.openstack.common import importutils
+from cinder import quota
+from cinder import rpc
+from cinder import utils
+from cinder import version
+from cinder.volume import volume_types
+
+FLAGS = flags.FLAGS
+
+
+# Decorators for actions
+def args(*args, **kwargs):
+    def _decorator(func):
+        func.__dict__.setdefault('options', []).insert(0, (args, kwargs))
+        return func
+    return _decorator
+
+
+def param2id(object_id):
+    """Helper function to convert various id types to internal id.
+    args: [object_id], e.g. 'vol-0000000a' or 'volume-0000000a' or '10'
+    """
+    if '-' in object_id:
+        # FIXME(ja): mapping occurs in nova?
+        pass
+    else:
+        return int(object_id)
+
+
+class ShellCommands(object):
+    def bpython(self):
+        """Runs a bpython shell.
+
+        Falls back to Ipython/python shell if unavailable"""
+        self.run('bpython')
+
+    def ipython(self):
+        """Runs an Ipython shell.
+
+        Falls back to Python shell if unavailable"""
+        self.run('ipython')
+
+    def python(self):
+        """Runs a python shell.
+
+        Falls back to Python shell if unavailable"""
+        self.run('python')
+
+    @args('--shell', dest="shell", metavar='<bpython|ipython|python >',
+            help='Python shell')
+    def run(self, shell=None):
+        """Runs a Python interactive interpreter."""
+        if not shell:
+            shell = 'bpython'
+
+        if shell == 'bpython':
+            try:
+                import bpython
+                bpython.embed()
+            except ImportError:
+                shell = 'ipython'
+        if shell == 'ipython':
+            try:
+                import IPython
+                # Explicitly pass an empty list as arguments, because
+                # otherwise IPython would use sys.argv from this script.
+                shell = IPython.Shell.IPShell(argv=[])
+                shell.mainloop()
+            except ImportError:
+                shell = 'python'
+
+        if shell == 'python':
+            import code
+            try:
+                # Try activating rlcompleter, because it's handy.
+                import readline
+            except ImportError:
+                pass
+            else:
+                # We don't have to wrap the following import in a 'try',
+                # because we already know 'readline' was imported successfully.
+                import rlcompleter
+                readline.parse_and_bind("tab:complete")
+            code.interact()
+
+    @args('--path', dest='path', metavar='<path>', help='Script path')
+    def script(self, path):
+        """Runs the script from the specifed path with flags set properly.
+        arguments: path"""
+        exec(compile(open(path).read(), path, 'exec'), locals(), globals())
+
+
+def _db_error(caught_exception):
+    print caught_exception
+    print _("The above error may show that the database has not "
+            "been created.\nPlease create a database using "
+            "'cinder-manage db sync' before running this command.")
+    exit(1)
+
+
+class HostCommands(object):
+    """List hosts"""
+
+    def list(self, zone=None):
+        """Show a list of all physical hosts. Filter by zone.
+        args: [zone]"""
+        print "%-25s\t%-15s" % (_('host'),
+                                _('zone'))
+        ctxt = context.get_admin_context()
+        now = utils.utcnow()
+        services = db.service_get_all(ctxt)
+        if zone:
+            services = [s for s in services if s['availability_zone'] == zone]
+        hosts = []
+        for srv in services:
+            if not [h for h in hosts if h['host'] == srv['host']]:
+                hosts.append(srv)
+
+        for h in hosts:
+            print "%-25s\t%-15s" % (h['host'], h['availability_zone'])
+
+
+class DbCommands(object):
+    """Class for managing the database."""
+
+    def __init__(self):
+        pass
+
+    @args('--version', dest='version', metavar='<version>',
+            help='Database version')
+    def sync(self, version=None):
+        """Sync the database up to the most recent version."""
+        return migration.db_sync(version)
+
+    def version(self):
+        """Print the current database version."""
+        print migration.db_version()
+
+
+class VersionCommands(object):
+    """Class for exposing the codebase version."""
+
+    def __init__(self):
+        pass
+
+    def list(self):
+        print _("%(version)s (%(vcs)s)") % \
+                {'version': version.version_string(),
+                 'vcs': version.version_string_with_vcs()}
+
+    def __call__(self):
+        self.list()
+
+
+class VolumeCommands(object):
+    """Methods for dealing with a cloud in an odd state"""
+
+    @args('--volume', dest='volume_id', metavar='<volume id>',
+            help='Volume ID')
+    def delete(self, volume_id):
+        """Delete a volume, bypassing the check that it
+        must be available."""
+        ctxt = context.get_admin_context()
+        volume = db.volume_get(ctxt, param2id(volume_id))
+        host = volume['host']
+
+        if not host:
+            print "Volume not yet assigned to host."
+            print "Deleting volume from database and skipping rpc."
+            db.volume_destroy(ctxt, param2id(volume_id))
+            return
+
+        if volume['status'] == 'in-use':
+            print "Volume is in-use."
+            print "Detach volume from instance and then try again."
+            return
+
+        rpc.cast(ctxt,
+                 db.queue_get_for(ctxt, FLAGS.volume_topic, host),
+                 {"method": "delete_volume",
+                  "args": {"volume_id": volume['id']}})
+
+    @args('--volume', dest='volume_id', metavar='<volume id>',
+            help='Volume ID')
+    def reattach(self, volume_id):
+        """Re-attach a volume that has previously been attached
+        to an instance.  Typically called after a compute host
+        has been rebooted."""
+        ctxt = context.get_admin_context()
+        volume = db.volume_get(ctxt, param2id(volume_id))
+        if not volume['instance_id']:
+            print "volume is not attached to an instance"
+            return
+        instance = db.instance_get(ctxt, volume['instance_id'])
+        host = instance['host']
+        rpc.cast(ctxt,
+                 db.queue_get_for(ctxt, FLAGS.compute_topic, host),
+                 {"method": "attach_volume",
+                  "args": {"instance_id": instance['id'],
+                           "volume_id": volume['id'],
+                           "mountpoint": volume['mountpoint']}})
+
+
+class StorageManagerCommands(object):
+    """Class for mangaging Storage Backends and Flavors"""
+
+    def flavor_list(self, flavor=None):
+        ctxt = context.get_admin_context()
+
+        try:
+            if flavor is None:
+                flavors = db.sm_flavor_get_all(ctxt)
+            else:
+                flavors = db.sm_flavor_get(ctxt, flavor)
+        except exception.NotFound as ex:
+            print "error: %s" % ex
+            sys.exit(2)
+
+        print "%-18s\t%-20s\t%s" % (_('id'),
+                                    _('Label'),
+                                    _('Description'))
+
+        for flav in flavors:
+            print "%-18s\t%-20s\t%s" % (
+                    flav['id'],
+                    flav['label'],
+                    flav['description'])
+
+    def flavor_create(self, label, desc):
+        # TODO(renukaapte) flavor name must be unique
+        try:
+            db.sm_flavor_create(context.get_admin_context(),
+                                dict(label=label,
+                                     description=desc))
+        except exception.DBError, e:
+            _db_error(e)
+
+    def flavor_delete(self, label):
+        try:
+            db.sm_flavor_delete(context.get_admin_context(), label)
+
+        except exception.DBError, e:
+            _db_error(e)
+
+    def _splitfun(self, item):
+        i = item.split("=")
+        return i[0:2]
+
+    def backend_list(self, backend_conf_id=None):
+        ctxt = context.get_admin_context()
+
+        try:
+            if backend_conf_id is None:
+                backends = db.sm_backend_conf_get_all(ctxt)
+            else:
+                backends = db.sm_backend_conf_get(ctxt, backend_conf_id)
+
+        except exception.NotFound as ex:
+            print "error: %s" % ex
+            sys.exit(2)
+
+        print "%-5s\t%-10s\t%-40s\t%-10s\t%s" % (_('id'),
+                                                      _('Flavor id'),
+                                                      _('SR UUID'),
+                                                      _('SR Type'),
+                                                      _('Config Parameters'),)
+
+        for b in backends:
+            print "%-5s\t%-10s\t%-40s\t%-10s\t%s" % (b['id'],
+                                                     b['flavor_id'],
+                                                     b['sr_uuid'],
+                                                     b['sr_type'],
+                                                     b['config_params'],)
+
+    def backend_add(self, flavor_label, sr_type, *args):
+        # TODO(renukaapte) Add backend_introduce.
+        ctxt = context.get_admin_context()
+        params = dict(map(self._splitfun, args))
+        sr_uuid = utils.gen_uuid()
+
+        if flavor_label is None:
+            print "error: backend needs to be associated with flavor"
+            sys.exit(2)
+
+        try:
+            flavors = db.sm_flavor_get(ctxt, flavor_label)
+
+        except exception.NotFound as ex:
+            print "error: %s" % ex
+            sys.exit(2)
+
+        config_params = " ".join(['%s=%s' %
+                               (key, params[key]) for key in params])
+
+        if 'sr_uuid' in params:
+            sr_uuid = params['sr_uuid']
+            try:
+                backend = db.sm_backend_conf_get_by_sr(ctxt, sr_uuid)
+            except exception.DBError, e:
+                _db_error(e)
+
+            if backend:
+                print 'Backend config found. Would you like to recreate this?'
+                print '(WARNING:Recreating will destroy all VDIs on backend!!)'
+                c = raw_input('Proceed? (y/n) ')
+                if c == 'y' or c == 'Y':
+                    try:
+                        db.sm_backend_conf_update(ctxt, backend['id'],
+                                        dict(created=False,
+                                             flavor_id=flavors['id'],
+                                             sr_type=sr_type,
+                                             config_params=config_params))
+                    except exception.DBError, e:
+                        _db_error(e)
+                return
+
+            else:
+                print 'Backend config not found. Would you like to create it?'
+
+        print '(WARNING: Creating will destroy all data on backend!!!)'
+        c = raw_input('Proceed? (y/n) ')
+        if c == 'y' or c == 'Y':
+            try:
+                db.sm_backend_conf_create(ctxt,
+                                          dict(flavor_id=flavors['id'],
+                                               sr_uuid=sr_uuid,
+                                               sr_type=sr_type,
+                                               config_params=config_params))
+            except exception.DBError, e:
+                _db_error(e)
+
+    def backend_remove(self, backend_conf_id):
+        try:
+            db.sm_backend_conf_delete(context.get_admin_context(),
+                                      backend_conf_id)
+
+        except exception.DBError, e:
+            _db_error(e)
+
+
+class ConfigCommands(object):
+    """Class for exposing the flags defined by flag_file(s)."""
+
+    def __init__(self):
+        pass
+
+    def list(self):
+        for key, value in FLAGS.iteritems():
+            if value is not None:
+                print '%s = %s' % (key, value)
+
+    @args('--infile', dest='infile', metavar='<path>',
+          help='old-style flagfile to convert to config')
+    @args('--outfile', dest='outfile', metavar='<path>',
+          help='path for output file. Writes config'
+               'to stdout if not specified.')
+    def convert(self, infile, outfile=None):
+        """Converts a flagfile and prints results to stdout."""
+        arg = '--flagfile=%s' % infile
+        with flagfile.handle_flagfiles_managed([arg]) as newargs:
+            with open(newargs[0].split('=')[1]) as configfile:
+                config = configfile.read()
+            if outfile:
+                with open(outfile, 'w') as configfile:
+                    configfile.write(config)
+            else:
+                print config,
+
+
+class GetLogCommands(object):
+    """Get logging information"""
+
+    def errors(self):
+        """Get all of the errors from the log files"""
+        error_found = 0
+        if FLAGS.logdir:
+            logs = [x for x in os.listdir(FLAGS.logdir) if x.endswith('.log')]
+            for file in logs:
+                log_file = os.path.join(FLAGS.logdir, file)
+                lines = [line.strip() for line in open(log_file, "r")]
+                lines.reverse()
+                print_name = 0
+                for index, line in enumerate(lines):
+                    if line.find(" ERROR ") > 0:
+                        error_found += 1
+                        if print_name == 0:
+                            print log_file + ":-"
+                            print_name = 1
+                        print "Line %d : %s" % (len(lines) - index, line)
+        if error_found == 0:
+            print "No errors in logfiles!"
+
+    def syslog(self, num_entries=10):
+        """Get <num_entries> of the cinder syslog events"""
+        entries = int(num_entries)
+        count = 0
+        log_file = ''
+        if os.path.exists('/var/log/syslog'):
+            log_file = '/var/log/syslog'
+        elif os.path.exists('/var/log/messages'):
+            log_file = '/var/log/messages'
+        else:
+            print "Unable to find system log file!"
+            sys.exit(1)
+        lines = [line.strip() for line in open(log_file, "r")]
+        lines.reverse()
+        print "Last %s cinder syslog entries:-" % (entries)
+        for line in lines:
+            if line.find("cinder") > 0:
+                count += 1
+                print "%s" % (line)
+            if count == entries:
+                break
+
+        if count == 0:
+            print "No cinder entries in syslog!"
+
+
+CATEGORIES = [
+    ('config', ConfigCommands),
+    ('db', DbCommands),
+    ('host', HostCommands),
+    ('logs', GetLogCommands),
+    ('shell', ShellCommands),
+    ('sm', StorageManagerCommands),
+    ('version', VersionCommands),
+    ('volume', VolumeCommands),
+]
+
+
+def lazy_match(name, key_value_tuples):
+    """Finds all objects that have a key that case insensitively contains
+    [name] key_value_tuples is a list of tuples of the form (key, value)
+    returns a list of tuples of the form (key, value)"""
+    result = []
+    for (k, v) in key_value_tuples:
+        if k.lower().find(name.lower()) == 0:
+            result.append((k, v))
+    if len(result) == 0:
+        print "%s does not match any options:" % name
+        for k, _v in key_value_tuples:
+            print "\t%s" % k
+        sys.exit(2)
+    if len(result) > 1:
+        print "%s matched multiple options:" % name
+        for k, _v in result:
+            print "\t%s" % k
+        sys.exit(2)
+    return result
+
+
+def methods_of(obj):
+    """Get all callable methods of an object that don't start with underscore
+    returns a list of tuples of the form (method_name, method)"""
+    result = []
+    for i in dir(obj):
+        if callable(getattr(obj, i)) and not i.startswith('_'):
+            result.append((i, getattr(obj, i)))
+    return result
+
+
+def main():
+    """Parse options and call the appropriate class/method."""
+    flagfile = utils.default_flagfile()
+
+    if flagfile and not os.access(flagfile, os.R_OK):
+        st = os.stat(flagfile)
+        print "Could not read %s. Re-running with sudo" % flagfile
+        try:
+            os.execvp('sudo', ['sudo', '-u', '#%s' % st.st_uid] + sys.argv)
+        except Exception:
+            print 'sudo failed, continuing as if nothing happened'
+
+    rpc.register_opts(FLAGS)
+
+    try:
+        argv = FLAGS(sys.argv)
+        logging.setup()
+    except IOError, e:
+        if e.errno == errno.EACCES:
+            print _('Please re-run cinder-manage as root.')
+            sys.exit(2)
+        raise
+    script_name = argv.pop(0)
+    if len(argv) < 1:
+        print _("\nOpenStack Cinder version: %(version)s (%(vcs)s)\n") % \
+                {'version': version.version_string(),
+                 'vcs': version.version_string_with_vcs()}
+        print script_name + " category action [<args>]"
+        print _("Available categories:")
+        for k, _v in CATEGORIES:
+            print "\t%s" % k
+        sys.exit(2)
+    category = argv.pop(0)
+    matches = lazy_match(category, CATEGORIES)
+    # instantiate the command group object
+    category, fn = matches[0]
+    command_object = fn()
+    actions = methods_of(command_object)
+    if len(argv) < 1:
+        if hasattr(command_object, '__call__'):
+            action = ''
+            fn = command_object.__call__
+        else:
+            print script_name + " category action [<args>]"
+            print _("Available actions for %s category:") % category
+            for k, _v in actions:
+                print "\t%s" % k
+            sys.exit(2)
+    else:
+        action = argv.pop(0)
+        matches = lazy_match(action, actions)
+        action, fn = matches[0]
+
+    # For not decorated methods
+    options = getattr(fn, 'options', [])
+
+    usage = "%%prog %s %s <args> [options]" % (category, action)
+    parser = optparse.OptionParser(usage=usage)
+    for ar, kw in options:
+        parser.add_option(*ar, **kw)
+    (opts, fn_args) = parser.parse_args(argv)
+    fn_kwargs = vars(opts)
+
+    for k, v in fn_kwargs.items():
+        if v is None:
+            del fn_kwargs[k]
+        elif isinstance(v, basestring):
+            fn_kwargs[k] = v.decode('utf-8')
+        else:
+            fn_kwargs[k] = v
+
+    fn_args = [arg.decode('utf-8') for arg in fn_args]
+
+    # call the action with the remaining arguments
+    try:
+        fn(*fn_args, **fn_kwargs)
+        rpc.cleanup()
+        sys.exit(0)
+    except TypeError:
+        print _("Possible wrong number of arguments supplied")
+        print fn.__doc__
+        parser.print_help()
+        raise
+    except Exception:
+        print _("Command failed, please check log for more info")
+        raise
+
+if __name__ == '__main__':
+    main()
diff --git a/bin/cinder-rootwrap b/bin/cinder-rootwrap
new file mode 100755
index 000000000..537324c6c
--- /dev/null
+++ b/bin/cinder-rootwrap
@@ -0,0 +1,74 @@
+#!/usr/bin/env python
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 Openstack, LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Root wrapper for Cinder
+
+   Uses modules in cinder.rootwrap containing filters for commands
+   that cinder is allowed to run as another user.
+
+   To switch to using this, you should:
+   * Set "--root_helper=sudo cinder-rootwrap" in cinder.conf
+   * Allow cinder to run cinder-rootwrap as root in cinder_sudoers:
+     cinder ALL = (root) NOPASSWD: /usr/bin/cinder-rootwrap
+     (all other commands can be removed from this file)
+
+   To make allowed commands node-specific, your packaging should only
+   install cinder/rootwrap/{compute,network,volume}.py respectively on
+   compute, network and volume nodes (i.e. cinder-api nodes should not
+   have any of those files installed).
+"""
+
+import os
+import subprocess
+import sys
+
+
+RC_UNAUTHORIZED = 99
+RC_NOCOMMAND = 98
+
+if __name__ == '__main__':
+    # Split arguments, require at least a command
+    execname = sys.argv.pop(0)
+    if len(sys.argv) == 0:
+        print "%s: %s" % (execname, "No command specified")
+        sys.exit(RC_NOCOMMAND)
+
+    userargs = sys.argv[:]
+
+    # Add ../ to sys.path to allow running from branch
+    possible_topdir = os.path.normpath(os.path.join(os.path.abspath(execname),
+                                                    os.pardir, os.pardir))
+    if os.path.exists(os.path.join(possible_topdir, "cinder", "__init__.py")):
+        sys.path.insert(0, possible_topdir)
+
+    from cinder.rootwrap import wrapper
+
+    # Execute command if it matches any of the loaded filters
+    filters = wrapper.load_filters()
+    filtermatch = wrapper.match_filter(filters, userargs)
+    if filtermatch:
+        obj = subprocess.Popen(filtermatch.get_command(userargs),
+                               stdin=sys.stdin,
+                               stdout=sys.stdout,
+                               stderr=sys.stderr,
+                               env=filtermatch.get_environment(userargs))
+        obj.wait()
+        sys.exit(obj.returncode)
+
+    print "Unauthorized command: %s" % ' '.join(userargs)
+    sys.exit(RC_UNAUTHORIZED)
diff --git a/bin/cinder-scheduler b/bin/cinder-scheduler
new file mode 100755
index 000000000..f423bef63
--- /dev/null
+++ b/bin/cinder-scheduler
@@ -0,0 +1,51 @@
+#!/usr/bin/env python
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Starter script for Cinder Scheduler."""
+
+import eventlet
+eventlet.monkey_patch()
+
+import gettext
+import os
+import sys
+
+# If ../cinder/__init__.py exists, add ../ to Python search path, so that
+# it will override what happens to be installed in /usr/(local/)lib/python...
+possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
+                                   os.pardir,
+                                   os.pardir))
+if os.path.exists(os.path.join(possible_topdir, 'cinder', '__init__.py')):
+    sys.path.insert(0, possible_topdir)
+
+gettext.install('cinder', unicode=1)
+
+from cinder import flags
+from cinder import log as logging
+from cinder import service
+from cinder import utils
+
+if __name__ == '__main__':
+    utils.default_flagfile()
+    flags.FLAGS(sys.argv)
+    logging.setup()
+    utils.monkey_patch()
+    server = service.Service.create(binary='cinder-scheduler')
+    service.serve(server)
+    service.wait()
diff --git a/bin/cinder-volume b/bin/cinder-volume
new file mode 100755
index 000000000..53aa635a6
--- /dev/null
+++ b/bin/cinder-volume
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Starter script for Cinder Volume."""
+
+import eventlet
+eventlet.monkey_patch()
+
+import os
+import sys
+
+# If ../cinder/__init__.py exists, add ../ to Python search path, so that
+# it will override what happens to be installed in /usr/(local/)lib/python...
+possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
+                                   os.pardir,
+                                   os.pardir))
+if os.path.exists(os.path.join(possible_topdir, 'cinder', '__init__.py')):
+    sys.path.insert(0, possible_topdir)
+
+
+from cinder import flags
+from cinder import log as logging
+from cinder import service
+from cinder import utils
+
+if __name__ == '__main__':
+    utils.default_flagfile()
+    flags.FLAGS(sys.argv)
+    logging.setup()
+    utils.monkey_patch()
+    server = service.Service.create(binary='cinder-volume')
+    service.serve(server)
+    service.wait()
diff --git a/bin/clear_rabbit_queues b/bin/clear_rabbit_queues
new file mode 100755
index 000000000..d652d6e14
--- /dev/null
+++ b/bin/clear_rabbit_queues
@@ -0,0 +1,80 @@
+#!/usr/bin/env python
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 Openstack, LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Admin/debug script to wipe rabbitMQ (AMQP) queues cinder uses.
+   This can be used if you need to change durable options on queues,
+   or to wipe all messages in the queue system if things are in a
+   serious bad way.
+
+"""
+
+import datetime
+import gettext
+import os
+import sys
+import time
+
+# If ../cinder/__init__.py exists, add ../ to Python search path, so that
+# it will override what happens to be installed in /usr/(local/)lib/python...
+POSSIBLE_TOPDIR = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
+                                   os.pardir,
+                                   os.pardir))
+if os.path.exists(os.path.join(POSSIBLE_TOPDIR, 'cinder', '__init__.py')):
+    sys.path.insert(0, POSSIBLE_TOPDIR)
+
+gettext.install('cinder', unicode=1)
+
+
+from cinder import context
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+from cinder.openstack.common import cfg
+from cinder import rpc
+from cinder import utils
+
+
+delete_exchange_opt = \
+    cfg.BoolOpt('delete_exchange',
+                default=False,
+                help='delete cinder exchange too.')
+
+FLAGS = flags.FLAGS
+FLAGS.register_cli_opt(delete_exchange_opt)
+
+
+def delete_exchange(exch):
+    conn = rpc.create_connection()
+    x = conn.get_channel()
+    x.exchange_delete(exch)
+
+
+def delete_queues(queues):
+    conn = rpc.create_connection()
+    x = conn.get_channel()
+    for q in queues:
+        x.queue_delete(q)
+
+if __name__ == '__main__':
+    utils.default_flagfile()
+    args = flags.FLAGS(sys.argv)
+    logging.setup()
+    rpc.register_opts(flags.FLAGS)
+    delete_queues(args[1:])
+    if FLAGS.delete_exchange:
+        delete_exchange(FLAGS.control_exchange)
diff --git a/cinder/__init__.py b/cinder/__init__.py
new file mode 100644
index 000000000..238c2812e
--- /dev/null
+++ b/cinder/__init__.py
@@ -0,0 +1,42 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+:mod:`cinder` -- Cloud IaaS Platform
+===================================
+
+.. automodule:: cinder
+   :platform: Unix
+   :synopsis: Infrastructure-as-a-Service Cloud platform.
+.. moduleauthor:: Jesse Andrews <jesse@ansolabs.com>
+.. moduleauthor:: Devin Carlen <devin.carlen@gmail.com>
+.. moduleauthor:: Vishvananda Ishaya <vishvananda@gmail.com>
+.. moduleauthor:: Joshua McKenty <joshua@cognition.ca>
+.. moduleauthor:: Manish Singh <yosh@gimp.org>
+.. moduleauthor:: Andy Smith <andy@anarkystic.com>
+"""
+
+import gettext
+import logging
+
+
+gettext.install('cinder', unicode=1)
+# NOTE(jkoelker) This configures the root logger if it is not already
+#                configured so messages from logging setup can be written
+#                to the console
+logging.basicConfig(format='%(message)s')
diff --git a/cinder/api/__init__.py b/cinder/api/__init__.py
new file mode 100644
index 000000000..747015af5
--- /dev/null
+++ b/cinder/api/__init__.py
@@ -0,0 +1,17 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
diff --git a/cinder/api/auth.py b/cinder/api/auth.py
new file mode 100644
index 000000000..1b8f303e2
--- /dev/null
+++ b/cinder/api/auth.py
@@ -0,0 +1,103 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 OpenStack, LLC
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+Common Auth Middleware.
+
+"""
+
+import webob.dec
+import webob.exc
+
+from cinder import context
+from cinder import flags
+from cinder import log as logging
+from cinder.openstack.common import cfg
+from cinder import wsgi
+
+
+use_forwarded_for_opt = cfg.BoolOpt('use_forwarded_for',
+        default=False,
+        help='Treat X-Forwarded-For as the canonical remote address. '
+             'Only enable this if you have a sanitizing proxy.')
+
+FLAGS = flags.FLAGS
+FLAGS.register_opt(use_forwarded_for_opt)
+LOG = logging.getLogger(__name__)
+
+
+def pipeline_factory(loader, global_conf, **local_conf):
+    """A paste pipeline replica that keys off of auth_strategy."""
+    pipeline = local_conf[FLAGS.auth_strategy]
+    if not FLAGS.api_rate_limit:
+        limit_name = FLAGS.auth_strategy + '_nolimit'
+        pipeline = local_conf.get(limit_name, pipeline)
+    pipeline = pipeline.split()
+    filters = [loader.get_filter(n) for n in pipeline[:-1]]
+    app = loader.get_app(pipeline[-1])
+    filters.reverse()
+    for filter in filters:
+        app = filter(app)
+    return app
+
+
+class InjectContext(wsgi.Middleware):
+    """Add a 'cinder.context' to WSGI environ."""
+
+    def __init__(self, context, *args, **kwargs):
+        self.context = context
+        super(InjectContext, self).__init__(*args, **kwargs)
+
+    @webob.dec.wsgify(RequestClass=wsgi.Request)
+    def __call__(self, req):
+        req.environ['cinder.context'] = self.context
+        return self.application
+
+
+class CinderKeystoneContext(wsgi.Middleware):
+    """Make a request context from keystone headers"""
+
+    @webob.dec.wsgify(RequestClass=wsgi.Request)
+    def __call__(self, req):
+        user_id = req.headers.get('X_USER')
+        user_id = req.headers.get('X_USER_ID', user_id)
+        if user_id is None:
+            LOG.debug("Neither X_USER_ID nor X_USER found in request")
+            return webob.exc.HTTPUnauthorized()
+        # get the roles
+        roles = [r.strip() for r in req.headers.get('X_ROLE', '').split(',')]
+        if 'X_TENANT_ID' in req.headers:
+            # This is the new header since Keystone went to ID/Name
+            project_id = req.headers['X_TENANT_ID']
+        else:
+            # This is for legacy compatibility
+            project_id = req.headers['X_TENANT']
+
+        # Get the auth token
+        auth_token = req.headers.get('X_AUTH_TOKEN',
+                                     req.headers.get('X_STORAGE_TOKEN'))
+
+        # Build a context, including the auth_token...
+        remote_address = req.remote_addr
+        if FLAGS.use_forwarded_for:
+            remote_address = req.headers.get('X-Forwarded-For', remote_address)
+        ctx = context.RequestContext(user_id,
+                                     project_id,
+                                     roles=roles,
+                                     auth_token=auth_token,
+                                     remote_address=remote_address)
+
+        req.environ['cinder.context'] = ctx
+        return self.application
diff --git a/cinder/api/openstack/__init__.py b/cinder/api/openstack/__init__.py
new file mode 100644
index 000000000..22ff5de04
--- /dev/null
+++ b/cinder/api/openstack/__init__.py
@@ -0,0 +1,143 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+WSGI middleware for OpenStack API controllers.
+"""
+
+import routes
+import webob.dec
+import webob.exc
+
+from cinder.api.openstack import wsgi
+from cinder import log as logging
+from cinder import wsgi as base_wsgi
+
+
+LOG = logging.getLogger(__name__)
+
+
+class FaultWrapper(base_wsgi.Middleware):
+    """Calls down the middleware stack, making exceptions into faults."""
+
+    @webob.dec.wsgify(RequestClass=wsgi.Request)
+    def __call__(self, req):
+        try:
+            return req.get_response(self.application)
+        except Exception as ex:
+            LOG.exception(_("Caught error: %s"), unicode(ex))
+            msg_dict = dict(url=req.url, status=500)
+            LOG.info(_("%(url)s returned with HTTP %(status)d") % msg_dict)
+            exc = webob.exc.HTTPInternalServerError()
+            # NOTE(johannes): We leave the explanation empty here on
+            # purpose. It could possibly have sensitive information
+            # that should not be returned back to the user. See
+            # bugs 868360 and 874472
+            return wsgi.Fault(exc)
+
+
+class APIMapper(routes.Mapper):
+    def routematch(self, url=None, environ=None):
+        if url is "":
+            result = self._match("", environ)
+            return result[0], result[1]
+        return routes.Mapper.routematch(self, url, environ)
+
+
+class ProjectMapper(APIMapper):
+    def resource(self, member_name, collection_name, **kwargs):
+        if not ('parent_resource' in kwargs):
+            kwargs['path_prefix'] = '{project_id}/'
+        else:
+            parent_resource = kwargs['parent_resource']
+            p_collection = parent_resource['collection_name']
+            p_member = parent_resource['member_name']
+            kwargs['path_prefix'] = '{project_id}/%s/:%s_id' % (p_collection,
+                                                                p_member)
+        routes.Mapper.resource(self, member_name,
+                                     collection_name,
+                                     **kwargs)
+
+
+class APIRouter(base_wsgi.Router):
+    """
+    Routes requests on the OpenStack API to the appropriate controller
+    and method.
+    """
+    ExtensionManager = None  # override in subclasses
+
+    @classmethod
+    def factory(cls, global_config, **local_config):
+        """Simple paste factory, :class:`cinder.wsgi.Router` doesn't have"""
+        return cls()
+
+    def __init__(self, ext_mgr=None):
+        if ext_mgr is None:
+            if self.ExtensionManager:
+                ext_mgr = self.ExtensionManager()
+            else:
+                raise Exception(_("Must specify an ExtensionManager class"))
+
+        mapper = ProjectMapper()
+        self.resources = {}
+        self._setup_routes(mapper)
+        self._setup_ext_routes(mapper, ext_mgr)
+        self._setup_extensions(ext_mgr)
+        super(APIRouter, self).__init__(mapper)
+
+    def _setup_ext_routes(self, mapper, ext_mgr):
+        for resource in ext_mgr.get_resources():
+            LOG.debug(_('Extended resource: %s'),
+                      resource.collection)
+
+            wsgi_resource = wsgi.Resource(resource.controller)
+            self.resources[resource.collection] = wsgi_resource
+            kargs = dict(
+                controller=wsgi_resource,
+                collection=resource.collection_actions,
+                member=resource.member_actions)
+
+            if resource.parent:
+                kargs['parent_resource'] = resource.parent
+
+            mapper.resource(resource.collection, resource.collection, **kargs)
+
+            if resource.custom_routes_fn:
+                resource.custom_routes_fn(mapper, wsgi_resource)
+
+    def _setup_extensions(self, ext_mgr):
+        for extension in ext_mgr.get_controller_extensions():
+            ext_name = extension.extension.name
+            collection = extension.collection
+            controller = extension.controller
+
+            if collection not in self.resources:
+                LOG.warning(_('Extension %(ext_name)s: Cannot extend '
+                              'resource %(collection)s: No such resource') %
+                            locals())
+                continue
+
+            LOG.debug(_('Extension %(ext_name)s extending resource: '
+                        '%(collection)s') % locals())
+
+            resource = self.resources[collection]
+            resource.register_actions(controller)
+            resource.register_extensions(controller)
+
+    def _setup_routes(self, mapper):
+        raise NotImplementedError
diff --git a/cinder/api/openstack/auth.py b/cinder/api/openstack/auth.py
new file mode 100644
index 000000000..cbc208432
--- /dev/null
+++ b/cinder/api/openstack/auth.py
@@ -0,0 +1,65 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import os
+
+import webob.dec
+import webob.exc
+
+from cinder.api.openstack import wsgi
+from cinder import context
+from cinder import flags
+from cinder import log as logging
+from cinder import wsgi as base_wsgi
+
+LOG = logging.getLogger(__name__)
+FLAGS = flags.FLAGS
+flags.DECLARE('use_forwarded_for', 'cinder.api.auth')
+
+
+class NoAuthMiddleware(base_wsgi.Middleware):
+    """Return a fake token if one isn't specified."""
+
+    @webob.dec.wsgify(RequestClass=wsgi.Request)
+    def __call__(self, req):
+        if 'X-Auth-Token' not in req.headers:
+            user_id = req.headers.get('X-Auth-User', 'admin')
+            project_id = req.headers.get('X-Auth-Project-Id', 'admin')
+            os_url = os.path.join(req.url, project_id)
+            res = webob.Response()
+            # NOTE(vish): This is expecting and returning Auth(1.1), whereas
+            #             keystone uses 2.0 auth.  We should probably allow
+            #             2.0 auth here as well.
+            res.headers['X-Auth-Token'] = '%s:%s' % (user_id, project_id)
+            res.headers['X-Server-Management-Url'] = os_url
+            res.content_type = 'text/plain'
+            res.status = '204'
+            return res
+
+        token = req.headers['X-Auth-Token']
+        user_id, _sep, project_id = token.partition(':')
+        project_id = project_id or user_id
+        remote_address = getattr(req, 'remote_address', '127.0.0.1')
+        if FLAGS.use_forwarded_for:
+            remote_address = req.headers.get('X-Forwarded-For', remote_address)
+        ctx = context.RequestContext(user_id,
+                                     project_id,
+                                     is_admin=True,
+                                     remote_address=remote_address)
+
+        req.environ['cinder.context'] = ctx
+        return self.application
diff --git a/cinder/api/openstack/common.py b/cinder/api/openstack/common.py
new file mode 100644
index 000000000..ce2d2bd93
--- /dev/null
+++ b/cinder/api/openstack/common.py
@@ -0,0 +1,380 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import functools
+import os
+import re
+import urlparse
+
+import webob
+from xml.dom import minidom
+
+from cinder.api.openstack import wsgi
+from cinder.api.openstack import xmlutil
+from cinder import flags
+from cinder import log as logging
+from cinder import quota
+
+
+LOG = logging.getLogger(__name__)
+FLAGS = flags.FLAGS
+
+
+XML_NS_V1 = 'http://docs.openstack.org/volume/api/v1'
+
+
+def get_pagination_params(request):
+    """Return marker, limit tuple from request.
+
+    :param request: `wsgi.Request` possibly containing 'marker' and 'limit'
+                    GET variables. 'marker' is the id of the last element
+                    the client has seen, and 'limit' is the maximum number
+                    of items to return. If 'limit' is not specified, 0, or
+                    > max_limit, we default to max_limit. Negative values
+                    for either marker or limit will cause
+                    exc.HTTPBadRequest() exceptions to be raised.
+
+    """
+    params = {}
+    if 'limit' in request.GET:
+        params['limit'] = _get_limit_param(request)
+    if 'marker' in request.GET:
+        params['marker'] = _get_marker_param(request)
+    return params
+
+
+def _get_limit_param(request):
+    """Extract integer limit from request or fail"""
+    try:
+        limit = int(request.GET['limit'])
+    except ValueError:
+        msg = _('limit param must be an integer')
+        raise webob.exc.HTTPBadRequest(explanation=msg)
+    if limit < 0:
+        msg = _('limit param must be positive')
+        raise webob.exc.HTTPBadRequest(explanation=msg)
+    return limit
+
+
+def _get_marker_param(request):
+    """Extract marker id from request or fail"""
+    return request.GET['marker']
+
+
+def limited(items, request, max_limit=FLAGS.osapi_max_limit):
+    """Return a slice of items according to requested offset and limit.
+
+    :param items: A sliceable entity
+    :param request: ``wsgi.Request`` possibly containing 'offset' and 'limit'
+                    GET variables. 'offset' is where to start in the list,
+                    and 'limit' is the maximum number of items to return. If
+                    'limit' is not specified, 0, or > max_limit, we default
+                    to max_limit. Negative values for either offset or limit
+                    will cause exc.HTTPBadRequest() exceptions to be raised.
+    :kwarg max_limit: The maximum number of items to return from 'items'
+    """
+    try:
+        offset = int(request.GET.get('offset', 0))
+    except ValueError:
+        msg = _('offset param must be an integer')
+        raise webob.exc.HTTPBadRequest(explanation=msg)
+
+    try:
+        limit = int(request.GET.get('limit', max_limit))
+    except ValueError:
+        msg = _('limit param must be an integer')
+        raise webob.exc.HTTPBadRequest(explanation=msg)
+
+    if limit < 0:
+        msg = _('limit param must be positive')
+        raise webob.exc.HTTPBadRequest(explanation=msg)
+
+    if offset < 0:
+        msg = _('offset param must be positive')
+        raise webob.exc.HTTPBadRequest(explanation=msg)
+
+    limit = min(max_limit, limit or max_limit)
+    range_end = offset + limit
+    return items[offset:range_end]
+
+
+def limited_by_marker(items, request, max_limit=FLAGS.osapi_max_limit):
+    """Return a slice of items according to the requested marker and limit."""
+    params = get_pagination_params(request)
+
+    limit = params.get('limit', max_limit)
+    marker = params.get('marker')
+
+    limit = min(max_limit, limit)
+    start_index = 0
+    if marker:
+        start_index = -1
+        for i, item in enumerate(items):
+            if 'flavorid' in item:
+                if item['flavorid'] == marker:
+                    start_index = i + 1
+                    break
+            elif item['id'] == marker or item.get('uuid') == marker:
+                start_index = i + 1
+                break
+        if start_index < 0:
+            msg = _('marker [%s] not found') % marker
+            raise webob.exc.HTTPBadRequest(explanation=msg)
+    range_end = start_index + limit
+    return items[start_index:range_end]
+
+
+def get_id_from_href(href):
+    """Return the id or uuid portion of a url.
+
+    Given: 'http://www.foo.com/bar/123?q=4'
+    Returns: '123'
+
+    Given: 'http://www.foo.com/bar/abc123?q=4'
+    Returns: 'abc123'
+
+    """
+    return urlparse.urlsplit("%s" % href).path.split('/')[-1]
+
+
+def remove_version_from_href(href):
+    """Removes the first api version from the href.
+
+    Given: 'http://www.cinder.com/v1.1/123'
+    Returns: 'http://www.cinder.com/123'
+
+    Given: 'http://www.cinder.com/v1.1'
+    Returns: 'http://www.cinder.com'
+
+    """
+    parsed_url = urlparse.urlsplit(href)
+    url_parts = parsed_url.path.split('/', 2)
+
+    # NOTE: this should match vX.X or vX
+    expression = re.compile(r'^v([0-9]+|[0-9]+\.[0-9]+)(/.*|$)')
+    if expression.match(url_parts[1]):
+        del url_parts[1]
+
+    new_path = '/'.join(url_parts)
+
+    if new_path == parsed_url.path:
+        msg = _('href %s does not contain version') % href
+        LOG.debug(msg)
+        raise ValueError(msg)
+
+    parsed_url = list(parsed_url)
+    parsed_url[2] = new_path
+    return urlparse.urlunsplit(parsed_url)
+
+
+def get_version_from_href(href):
+    """Returns the api version in the href.
+
+    Returns the api version in the href.
+    If no version is found, '2' is returned
+
+    Given: 'http://www.cinder.com/123'
+    Returns: '2'
+
+    Given: 'http://www.cinder.com/v1.1'
+    Returns: '1.1'
+
+    """
+    try:
+        expression = r'/v([0-9]+|[0-9]+\.[0-9]+)(/|$)'
+        return re.findall(expression, href)[0][0]
+    except IndexError:
+        return '2'
+
+
+def dict_to_query_str(params):
+    # TODO(throughnothing): we should just use urllib.urlencode instead of this
+    # But currently we don't work with urlencoded url's
+    param_str = ""
+    for key, val in params.iteritems():
+        param_str = param_str + '='.join([str(key), str(val)]) + '&'
+
+    return param_str.rstrip('&')
+
+
+def raise_http_conflict_for_instance_invalid_state(exc, action):
+    """Return a webob.exc.HTTPConflict instance containing a message
+    appropriate to return via the API based on the original
+    InstanceInvalidState exception.
+    """
+    attr = exc.kwargs.get('attr')
+    state = exc.kwargs.get('state')
+    if attr and state:
+        msg = _("Cannot '%(action)s' while instance is in %(attr)s %(state)s")
+    else:
+        # At least give some meaningful message
+        msg = _("Instance is in an invalid state for '%(action)s'")
+    raise webob.exc.HTTPConflict(explanation=msg % locals())
+
+
+class MetadataDeserializer(wsgi.MetadataXMLDeserializer):
+    def deserialize(self, text):
+        dom = minidom.parseString(text)
+        metadata_node = self.find_first_child_named(dom, "metadata")
+        metadata = self.extract_metadata(metadata_node)
+        return {'body': {'metadata': metadata}}
+
+
+class MetaItemDeserializer(wsgi.MetadataXMLDeserializer):
+    def deserialize(self, text):
+        dom = minidom.parseString(text)
+        metadata_item = self.extract_metadata(dom)
+        return {'body': {'meta': metadata_item}}
+
+
+class MetadataXMLDeserializer(wsgi.XMLDeserializer):
+
+    def extract_metadata(self, metadata_node):
+        """Marshal the metadata attribute of a parsed request"""
+        if metadata_node is None:
+            return {}
+        metadata = {}
+        for meta_node in self.find_children_named(metadata_node, "meta"):
+            key = meta_node.getAttribute("key")
+            metadata[key] = self.extract_text(meta_node)
+        return metadata
+
+    def _extract_metadata_container(self, datastring):
+        dom = minidom.parseString(datastring)
+        metadata_node = self.find_first_child_named(dom, "metadata")
+        metadata = self.extract_metadata(metadata_node)
+        return {'body': {'metadata': metadata}}
+
+    def create(self, datastring):
+        return self._extract_metadata_container(datastring)
+
+    def update_all(self, datastring):
+        return self._extract_metadata_container(datastring)
+
+    def update(self, datastring):
+        dom = minidom.parseString(datastring)
+        metadata_item = self.extract_metadata(dom)
+        return {'body': {'meta': metadata_item}}
+
+
+metadata_nsmap = {None: xmlutil.XMLNS_V11}
+
+
+class MetaItemTemplate(xmlutil.TemplateBuilder):
+    def construct(self):
+        sel = xmlutil.Selector('meta', xmlutil.get_items, 0)
+        root = xmlutil.TemplateElement('meta', selector=sel)
+        root.set('key', 0)
+        root.text = 1
+        return xmlutil.MasterTemplate(root, 1, nsmap=metadata_nsmap)
+
+
+class MetadataTemplateElement(xmlutil.TemplateElement):
+    def will_render(self, datum):
+        return True
+
+
+class MetadataTemplate(xmlutil.TemplateBuilder):
+    def construct(self):
+        root = MetadataTemplateElement('metadata', selector='metadata')
+        elem = xmlutil.SubTemplateElement(root, 'meta',
+                                          selector=xmlutil.get_items)
+        elem.set('key', 0)
+        elem.text = 1
+        return xmlutil.MasterTemplate(root, 1, nsmap=metadata_nsmap)
+
+
+def check_snapshots_enabled(f):
+    @functools.wraps(f)
+    def inner(*args, **kwargs):
+        if not FLAGS.allow_instance_snapshots:
+            LOG.warn(_('Rejecting snapshot request, snapshots currently'
+                       ' disabled'))
+            msg = _("Instance snapshots are not permitted at this time.")
+            raise webob.exc.HTTPBadRequest(explanation=msg)
+        return f(*args, **kwargs)
+    return inner
+
+
+class ViewBuilder(object):
+    """Model API responses as dictionaries."""
+
+    _collection_name = None
+
+    def _get_links(self, request, identifier):
+        return [{
+            "rel": "self",
+            "href": self._get_href_link(request, identifier),
+        },
+        {
+            "rel": "bookmark",
+            "href": self._get_bookmark_link(request, identifier),
+        }]
+
+    def _get_next_link(self, request, identifier):
+        """Return href string with proper limit and marker params."""
+        params = request.params.copy()
+        params["marker"] = identifier
+        prefix = self._update_link_prefix(request.application_url,
+                                          FLAGS.osapi_compute_link_prefix)
+        url = os.path.join(prefix,
+                           request.environ["cinder.context"].project_id,
+                           self._collection_name)
+        return "%s?%s" % (url, dict_to_query_str(params))
+
+    def _get_href_link(self, request, identifier):
+        """Return an href string pointing to this object."""
+        prefix = self._update_link_prefix(request.application_url,
+                                          FLAGS.osapi_compute_link_prefix)
+        return os.path.join(prefix,
+                            request.environ["cinder.context"].project_id,
+                            self._collection_name,
+                            str(identifier))
+
+    def _get_bookmark_link(self, request, identifier):
+        """Create a URL that refers to a specific resource."""
+        base_url = remove_version_from_href(request.application_url)
+        base_url = self._update_link_prefix(base_url,
+                                            FLAGS.osapi_compute_link_prefix)
+        return os.path.join(base_url,
+                            request.environ["cinder.context"].project_id,
+                            self._collection_name,
+                            str(identifier))
+
+    def _get_collection_links(self, request, items, id_key="uuid"):
+        """Retrieve 'next' link, if applicable."""
+        links = []
+        limit = int(request.params.get("limit", 0))
+        if limit and limit == len(items):
+            last_item = items[-1]
+            if id_key in last_item:
+                last_item_id = last_item[id_key]
+            else:
+                last_item_id = last_item["id"]
+            links.append({
+                "rel": "next",
+                "href": self._get_next_link(request, last_item_id),
+            })
+        return links
+
+    def _update_link_prefix(self, orig_url, prefix):
+        if not prefix:
+            return orig_url
+        url_parts = list(urlparse.urlsplit(orig_url))
+        prefix_parts = list(urlparse.urlsplit(prefix))
+        url_parts[0:2] = prefix_parts[0:2]
+        return urlparse.urlunsplit(url_parts)
diff --git a/cinder/api/openstack/compute/__init__.py b/cinder/api/openstack/compute/__init__.py
new file mode 100644
index 000000000..7372b0c97
--- /dev/null
+++ b/cinder/api/openstack/compute/__init__.py
@@ -0,0 +1,23 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+WSGI middleware for OpenStack Compute API.
+"""
+
+from cinder.api.openstack.compute import versions
diff --git a/cinder/api/openstack/compute/schemas/atom-link.rng b/cinder/api/openstack/compute/schemas/atom-link.rng
new file mode 100644
index 000000000..edba5eee6
--- /dev/null
+++ b/cinder/api/openstack/compute/schemas/atom-link.rng
@@ -0,0 +1,141 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  -*- rnc -*-
+  RELAX NG Compact Syntax Grammar for the
+  Atom Format Specification Version 11
+-->
+<grammar xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:s="http://www.ascc.net/xml/schematron" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+  <start>
+    <choice>
+      <ref name="atomLink"/>
+    </choice>
+  </start>
+  <!-- Common attributes -->
+  <define name="atomCommonAttributes">
+    <optional>
+      <attribute name="xml:base">
+        <ref name="atomUri"/>
+      </attribute>
+    </optional>
+    <optional>
+      <attribute name="xml:lang">
+        <ref name="atomLanguageTag"/>
+      </attribute>
+    </optional>
+    <zeroOrMore>
+      <ref name="undefinedAttribute"/>
+    </zeroOrMore>
+  </define>
+  <!-- atom:link -->
+  <define name="atomLink">
+    <element name="atom:link">
+      <ref name="atomCommonAttributes"/>
+      <attribute name="href">
+        <ref name="atomUri"/>
+      </attribute>
+      <optional>
+        <attribute name="rel">
+          <choice>
+            <ref name="atomNCName"/>
+            <ref name="atomUri"/>
+          </choice>
+        </attribute>
+      </optional>
+      <optional>
+        <attribute name="type">
+          <ref name="atomMediaType"/>
+        </attribute>
+      </optional>
+      <optional>
+        <attribute name="hreflang">
+          <ref name="atomLanguageTag"/>
+        </attribute>
+      </optional>
+      <optional>
+        <attribute name="title"/>
+      </optional>
+      <optional>
+        <attribute name="length"/>
+      </optional>
+      <ref name="undefinedContent"/>
+    </element>
+  </define>
+  <!-- Low-level simple types -->
+  <define name="atomNCName">
+    <data type="string">
+      <param name="minLength">1</param>
+      <param name="pattern">[^:]*</param>
+    </data>
+  </define>
+  <!-- Whatever a media type is, it contains at least one slash -->
+  <define name="atomMediaType">
+    <data type="string">
+      <param name="pattern">.+/.+</param>
+    </data>
+  </define>
+  <!-- As defined in RFC 3066 -->
+  <define name="atomLanguageTag">
+    <data type="string">
+      <param name="pattern">[A-Za-z]{1,8}(-[A-Za-z0-9]{1,8})*</param>
+    </data>
+  </define>
+  <!--
+    Unconstrained; it's not entirely clear how IRI fit into
+    xsd:anyURI so let's not try to constrain it here
+  -->
+  <define name="atomUri">
+    <text/>
+  </define>
+  <!-- Other Extensibility -->
+  <define name="undefinedAttribute">
+    <attribute>
+      <anyName>
+        <except>
+          <name>xml:base</name>
+          <name>xml:lang</name>
+          <nsName ns=""/>
+        </except>
+      </anyName>
+    </attribute>
+  </define>
+  <define name="undefinedContent">
+    <zeroOrMore>
+      <choice>
+        <text/>
+        <ref name="anyForeignElement"/>
+      </choice>
+    </zeroOrMore>
+  </define>
+  <define name="anyElement">
+    <element>
+      <anyName/>
+      <zeroOrMore>
+        <choice>
+          <attribute>
+            <anyName/>
+          </attribute>
+          <text/>
+          <ref name="anyElement"/>
+        </choice>
+      </zeroOrMore>
+    </element>
+  </define>
+  <define name="anyForeignElement">
+    <element>
+      <anyName>
+        <except>
+          <nsName ns="http://www.w3.org/2005/Atom"/>
+        </except>
+      </anyName>
+      <zeroOrMore>
+        <choice>
+          <attribute>
+            <anyName/>
+          </attribute>
+          <text/>
+          <ref name="anyElement"/>
+        </choice>
+      </zeroOrMore>
+    </element>
+  </define>
+</grammar>
diff --git a/cinder/api/openstack/compute/schemas/v1.1/extension.rng b/cinder/api/openstack/compute/schemas/v1.1/extension.rng
new file mode 100644
index 000000000..b16d8c130
--- /dev/null
+++ b/cinder/api/openstack/compute/schemas/v1.1/extension.rng
@@ -0,0 +1,11 @@
+<element name="extension" ns="http://docs.openstack.org/common/api/v1.0"
+    xmlns="http://relaxng.org/ns/structure/1.0">
+  <attribute name="alias">     <text/> </attribute>
+  <attribute name="name">      <text/> </attribute>
+  <attribute name="namespace"> <text/> </attribute>
+  <attribute name="updated">   <text/> </attribute>
+  <element name="description"> <text/> </element>
+  <zeroOrMore>
+    <externalRef href="../atom-link.rng"/>
+  </zeroOrMore>
+</element>
diff --git a/cinder/api/openstack/compute/schemas/v1.1/extensions.rng b/cinder/api/openstack/compute/schemas/v1.1/extensions.rng
new file mode 100644
index 000000000..8538eaf2d
--- /dev/null
+++ b/cinder/api/openstack/compute/schemas/v1.1/extensions.rng
@@ -0,0 +1,6 @@
+<element name="extensions" xmlns="http://relaxng.org/ns/structure/1.0"
+         ns="http://docs.openstack.org/common/api/v1.0">
+  <zeroOrMore>
+    <externalRef href="extension.rng"/>
+  </zeroOrMore>
+</element>
diff --git a/cinder/api/openstack/compute/schemas/v1.1/metadata.rng b/cinder/api/openstack/compute/schemas/v1.1/metadata.rng
new file mode 100644
index 000000000..b2f5d702a
--- /dev/null
+++ b/cinder/api/openstack/compute/schemas/v1.1/metadata.rng
@@ -0,0 +1,9 @@
+  <element name="metadata" ns="http://docs.openstack.org/compute/api/v1.1"
+    xmlns="http://relaxng.org/ns/structure/1.0">
+    <zeroOrMore>
+      <element name="meta">
+        <attribute name="key"> <text/> </attribute>
+        <text/>
+      </element>
+    </zeroOrMore>
+  </element>
diff --git a/cinder/api/openstack/compute/versions.py b/cinder/api/openstack/compute/versions.py
new file mode 100644
index 000000000..d5108c0cf
--- /dev/null
+++ b/cinder/api/openstack/compute/versions.py
@@ -0,0 +1,244 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import datetime
+
+from lxml import etree
+
+from cinder.api.openstack.compute.views import versions as views_versions
+from cinder.api.openstack import wsgi
+from cinder.api.openstack import xmlutil
+
+
+LINKS = {
+   'v2.0': {
+       'pdf': 'http://docs.openstack.org/'
+               'api/openstack-compute/1.1/os-compute-devguide-1.1.pdf',
+       'wadl': 'http://docs.openstack.org/'
+               'api/openstack-compute/1.1/wadl/os-compute-1.1.wadl',
+    },
+}
+
+
+VERSIONS = {
+    "v2.0": {
+        "id": "v2.0",
+        "status": "CURRENT",
+        "updated": "2011-01-21T11:33:21Z",
+        "links": [
+            {
+                "rel": "describedby",
+                "type": "application/pdf",
+                "href": LINKS['v2.0']['pdf'],
+            },
+            {
+                "rel": "describedby",
+                "type": "application/vnd.sun.wadl+xml",
+                "href": LINKS['v2.0']['wadl'],
+            },
+        ],
+        "media-types": [
+            {
+                "base": "application/xml",
+                "type": "application/vnd.openstack.compute+xml;version=2",
+            },
+            {
+                "base": "application/json",
+                "type": "application/vnd.openstack.compute+json;version=2",
+            }
+        ],
+    }
+}
+
+
+class MediaTypesTemplateElement(xmlutil.TemplateElement):
+    def will_render(self, datum):
+        return 'media-types' in datum
+
+
+def make_version(elem):
+    elem.set('id')
+    elem.set('status')
+    elem.set('updated')
+
+    mts = MediaTypesTemplateElement('media-types')
+    elem.append(mts)
+
+    mt = xmlutil.SubTemplateElement(mts, 'media-type', selector='media-types')
+    mt.set('base')
+    mt.set('type')
+
+    xmlutil.make_links(elem, 'links')
+
+
+version_nsmap = {None: xmlutil.XMLNS_COMMON_V10, 'atom': xmlutil.XMLNS_ATOM}
+
+
+class VersionTemplate(xmlutil.TemplateBuilder):
+    def construct(self):
+        root = xmlutil.TemplateElement('version', selector='version')
+        make_version(root)
+        return xmlutil.MasterTemplate(root, 1, nsmap=version_nsmap)
+
+
+class VersionsTemplate(xmlutil.TemplateBuilder):
+    def construct(self):
+        root = xmlutil.TemplateElement('versions')
+        elem = xmlutil.SubTemplateElement(root, 'version', selector='versions')
+        make_version(elem)
+        return xmlutil.MasterTemplate(root, 1, nsmap=version_nsmap)
+
+
+class ChoicesTemplate(xmlutil.TemplateBuilder):
+    def construct(self):
+        root = xmlutil.TemplateElement('choices')
+        elem = xmlutil.SubTemplateElement(root, 'version', selector='choices')
+        make_version(elem)
+        return xmlutil.MasterTemplate(root, 1, nsmap=version_nsmap)
+
+
+class AtomSerializer(wsgi.XMLDictSerializer):
+
+    NSMAP = {None: xmlutil.XMLNS_ATOM}
+
+    def __init__(self, metadata=None, xmlns=None):
+        self.metadata = metadata or {}
+        if not xmlns:
+            self.xmlns = wsgi.XMLNS_ATOM
+        else:
+            self.xmlns = xmlns
+
+    def _get_most_recent_update(self, versions):
+        recent = None
+        for version in versions:
+            updated = datetime.datetime.strptime(version['updated'],
+                                        '%Y-%m-%dT%H:%M:%SZ')
+            if not recent:
+                recent = updated
+            elif updated > recent:
+                recent = updated
+
+        return recent.strftime('%Y-%m-%dT%H:%M:%SZ')
+
+    def _get_base_url(self, link_href):
+        # Make sure no trailing /
+        link_href = link_href.rstrip('/')
+        return link_href.rsplit('/', 1)[0] + '/'
+
+    def _create_feed(self, versions, feed_title, feed_id):
+        feed = etree.Element('feed', nsmap=self.NSMAP)
+        title = etree.SubElement(feed, 'title')
+        title.set('type', 'text')
+        title.text = feed_title
+
+        # Set this updated to the most recently updated version
+        recent = self._get_most_recent_update(versions)
+        etree.SubElement(feed, 'updated').text = recent
+
+        etree.SubElement(feed, 'id').text = feed_id
+
+        link = etree.SubElement(feed, 'link')
+        link.set('rel', 'self')
+        link.set('href', feed_id)
+
+        author = etree.SubElement(feed, 'author')
+        etree.SubElement(author, 'name').text = 'Rackspace'
+        etree.SubElement(author, 'uri').text = 'http://www.rackspace.com/'
+
+        for version in versions:
+            feed.append(self._create_version_entry(version))
+
+        return feed
+
+    def _create_version_entry(self, version):
+        entry = etree.Element('entry')
+        etree.SubElement(entry, 'id').text = version['links'][0]['href']
+        title = etree.SubElement(entry, 'title')
+        title.set('type', 'text')
+        title.text = 'Version %s' % version['id']
+        etree.SubElement(entry, 'updated').text = version['updated']
+
+        for link in version['links']:
+            link_elem = etree.SubElement(entry, 'link')
+            link_elem.set('rel', link['rel'])
+            link_elem.set('href', link['href'])
+            if 'type' in link:
+                link_elem.set('type', link['type'])
+
+        content = etree.SubElement(entry, 'content')
+        content.set('type', 'text')
+        content.text = 'Version %s %s (%s)' % (version['id'],
+                                               version['status'],
+                                               version['updated'])
+        return entry
+
+
+class VersionsAtomSerializer(AtomSerializer):
+    def default(self, data):
+        versions = data['versions']
+        feed_id = self._get_base_url(versions[0]['links'][0]['href'])
+        feed = self._create_feed(versions, 'Available API Versions', feed_id)
+        return self._to_xml(feed)
+
+
+class VersionAtomSerializer(AtomSerializer):
+    def default(self, data):
+        version = data['version']
+        feed_id = version['links'][0]['href']
+        feed = self._create_feed([version], 'About This Version', feed_id)
+        return self._to_xml(feed)
+
+
+class Versions(wsgi.Resource):
+    def __init__(self):
+        super(Versions, self).__init__(None)
+
+    @wsgi.serializers(xml=VersionsTemplate,
+                      atom=VersionsAtomSerializer)
+    def index(self, req):
+        """Return all versions."""
+        builder = views_versions.get_view_builder(req)
+        return builder.build_versions(VERSIONS)
+
+    @wsgi.serializers(xml=ChoicesTemplate)
+    @wsgi.response(300)
+    def multi(self, req):
+        """Return multiple choices."""
+        builder = views_versions.get_view_builder(req)
+        return builder.build_choices(VERSIONS, req)
+
+    def get_action_args(self, request_environment):
+        """Parse dictionary created by routes library."""
+        args = {}
+        if request_environment['PATH_INFO'] == '/':
+            args['action'] = 'index'
+        else:
+            args['action'] = 'multi'
+
+        return args
+
+
+class VersionV2(object):
+    @wsgi.serializers(xml=VersionTemplate,
+                      atom=VersionAtomSerializer)
+    def show(self, req):
+        builder = views_versions.get_view_builder(req)
+        return builder.build_version(VERSIONS['v2.0'])
+
+
+def create_resource():
+    return wsgi.Resource(VersionV2())
diff --git a/cinder/api/openstack/compute/views/__init__.py b/cinder/api/openstack/compute/views/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/cinder/api/openstack/compute/views/versions.py b/cinder/api/openstack/compute/views/versions.py
new file mode 100644
index 000000000..cb2fd9f4a
--- /dev/null
+++ b/cinder/api/openstack/compute/views/versions.py
@@ -0,0 +1,94 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010-2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import copy
+import os
+
+
+def get_view_builder(req):
+    base_url = req.application_url
+    return ViewBuilder(base_url)
+
+
+class ViewBuilder(object):
+
+    def __init__(self, base_url):
+        """
+        :param base_url: url of the root wsgi application
+        """
+        self.base_url = base_url
+
+    def build_choices(self, VERSIONS, req):
+        version_objs = []
+        for version in VERSIONS:
+            version = VERSIONS[version]
+            version_objs.append({
+                "id": version['id'],
+                "status": version['status'],
+                "links": [
+                    {
+                        "rel": "self",
+                        "href": self.generate_href(req.path),
+                    },
+                ],
+                "media-types": version['media-types'],
+            })
+
+        return dict(choices=version_objs)
+
+    def build_versions(self, versions):
+        version_objs = []
+        for version in sorted(versions.keys()):
+            version = versions[version]
+            version_objs.append({
+                "id": version['id'],
+                "status": version['status'],
+                "updated": version['updated'],
+                "links": self._build_links(version),
+            })
+
+        return dict(versions=version_objs)
+
+    def build_version(self, version):
+        reval = copy.deepcopy(version)
+        reval['links'].insert(0, {
+            "rel": "self",
+            "href": self.base_url.rstrip('/') + '/',
+        })
+        return dict(version=reval)
+
+    def _build_links(self, version_data):
+        """Generate a container of links that refer to the provided version."""
+        href = self.generate_href()
+
+        links = [
+            {
+                "rel": "self",
+                "href": href,
+            },
+        ]
+
+        return links
+
+    def generate_href(self, path=None):
+        """Create an url that refers to a specific version_number."""
+        version_number = 'v2'
+        if path:
+            path = path.strip('/')
+            return os.path.join(self.base_url, version_number, path)
+        else:
+            return os.path.join(self.base_url, version_number) + '/'
diff --git a/cinder/api/openstack/extensions.py b/cinder/api/openstack/extensions.py
new file mode 100644
index 000000000..baa9510b6
--- /dev/null
+++ b/cinder/api/openstack/extensions.py
@@ -0,0 +1,395 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# Copyright 2011 Justin Santa Barbara
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import os
+
+import webob.dec
+import webob.exc
+
+import cinder.api.openstack
+from cinder.api.openstack import wsgi
+from cinder.api.openstack import xmlutil
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+from cinder.openstack.common import exception as common_exception
+from cinder.openstack.common import importutils
+import cinder.policy
+
+
+LOG = logging.getLogger(__name__)
+FLAGS = flags.FLAGS
+
+
+class ExtensionDescriptor(object):
+    """Base class that defines the contract for extensions.
+
+    Note that you don't have to derive from this class to have a valid
+    extension; it is purely a convenience.
+
+    """
+
+    # The name of the extension, e.g., 'Fox In Socks'
+    name = None
+
+    # The alias for the extension, e.g., 'FOXNSOX'
+    alias = None
+
+    # Description comes from the docstring for the class
+
+    # The XML namespace for the extension, e.g.,
+    # 'http://www.fox.in.socks/api/ext/pie/v1.0'
+    namespace = None
+
+    # The timestamp when the extension was last updated, e.g.,
+    # '2011-01-22T13:25:27-06:00'
+    updated = None
+
+    def __init__(self, ext_mgr):
+        """Register extension with the extension manager."""
+
+        ext_mgr.register(self)
+
+    def get_resources(self):
+        """List of extensions.ResourceExtension extension objects.
+
+        Resources define new nouns, and are accessible through URLs.
+
+        """
+        resources = []
+        return resources
+
+    def get_controller_extensions(self):
+        """List of extensions.ControllerExtension extension objects.
+
+        Controller extensions are used to extend existing controllers.
+        """
+        controller_exts = []
+        return controller_exts
+
+    @classmethod
+    def nsmap(cls):
+        """Synthesize a namespace map from extension."""
+
+        # Start with a base nsmap
+        nsmap = ext_nsmap.copy()
+
+        # Add the namespace for the extension
+        nsmap[cls.alias] = cls.namespace
+
+        return nsmap
+
+    @classmethod
+    def xmlname(cls, name):
+        """Synthesize element and attribute names."""
+
+        return '{%s}%s' % (cls.namespace, name)
+
+
+def make_ext(elem):
+    elem.set('name')
+    elem.set('namespace')
+    elem.set('alias')
+    elem.set('updated')
+
+    desc = xmlutil.SubTemplateElement(elem, 'description')
+    desc.text = 'description'
+
+    xmlutil.make_links(elem, 'links')
+
+
+ext_nsmap = {None: xmlutil.XMLNS_COMMON_V10, 'atom': xmlutil.XMLNS_ATOM}
+
+
+class ExtensionTemplate(xmlutil.TemplateBuilder):
+    def construct(self):
+        root = xmlutil.TemplateElement('extension', selector='extension')
+        make_ext(root)
+        return xmlutil.MasterTemplate(root, 1, nsmap=ext_nsmap)
+
+
+class ExtensionsTemplate(xmlutil.TemplateBuilder):
+    def construct(self):
+        root = xmlutil.TemplateElement('extensions')
+        elem = xmlutil.SubTemplateElement(root, 'extension',
+                                          selector='extensions')
+        make_ext(elem)
+        return xmlutil.MasterTemplate(root, 1, nsmap=ext_nsmap)
+
+
+class ExtensionsResource(wsgi.Resource):
+
+    def __init__(self, extension_manager):
+        self.extension_manager = extension_manager
+        super(ExtensionsResource, self).__init__(None)
+
+    def _translate(self, ext):
+        ext_data = {}
+        ext_data['name'] = ext.name
+        ext_data['alias'] = ext.alias
+        ext_data['description'] = ext.__doc__
+        ext_data['namespace'] = ext.namespace
+        ext_data['updated'] = ext.updated
+        ext_data['links'] = []  # TODO(dprince): implement extension links
+        return ext_data
+
+    @wsgi.serializers(xml=ExtensionsTemplate)
+    def index(self, req):
+        extensions = []
+        for _alias, ext in self.extension_manager.extensions.iteritems():
+            extensions.append(self._translate(ext))
+        return dict(extensions=extensions)
+
+    @wsgi.serializers(xml=ExtensionTemplate)
+    def show(self, req, id):
+        try:
+            # NOTE(dprince): the extensions alias is used as the 'id' for show
+            ext = self.extension_manager.extensions[id]
+        except KeyError:
+            raise webob.exc.HTTPNotFound()
+
+        return dict(extension=self._translate(ext))
+
+    def delete(self, req, id):
+        raise webob.exc.HTTPNotFound()
+
+    def create(self, req):
+        raise webob.exc.HTTPNotFound()
+
+
+class ExtensionManager(object):
+    """Load extensions from the configured extension path.
+
+    See cinder/tests/api/openstack/extensions/foxinsocks/extension.py for an
+    example extension implementation.
+
+    """
+
+    def register(self, ext):
+        # Do nothing if the extension doesn't check out
+        if not self._check_extension(ext):
+            return
+
+        alias = ext.alias
+        LOG.audit(_('Loaded extension: %s'), alias)
+
+        if alias in self.extensions:
+            raise exception.Error("Found duplicate extension: %s" % alias)
+        self.extensions[alias] = ext
+
+    def get_resources(self):
+        """Returns a list of ResourceExtension objects."""
+
+        resources = []
+        resources.append(ResourceExtension('extensions',
+                                           ExtensionsResource(self)))
+
+        for ext in self.extensions.values():
+            try:
+                resources.extend(ext.get_resources())
+            except AttributeError:
+                # NOTE(dprince): Extension aren't required to have resource
+                # extensions
+                pass
+        return resources
+
+    def get_controller_extensions(self):
+        """Returns a list of ControllerExtension objects."""
+        controller_exts = []
+        for ext in self.extensions.values():
+            try:
+                controller_exts.extend(ext.get_controller_extensions())
+            except AttributeError:
+                # NOTE(Vek): Extensions aren't required to have
+                # controller extensions
+                pass
+        return controller_exts
+
+    def _check_extension(self, extension):
+        """Checks for required methods in extension objects."""
+        try:
+            LOG.debug(_('Ext name: %s'), extension.name)
+            LOG.debug(_('Ext alias: %s'), extension.alias)
+            LOG.debug(_('Ext description: %s'),
+                      ' '.join(extension.__doc__.strip().split()))
+            LOG.debug(_('Ext namespace: %s'), extension.namespace)
+            LOG.debug(_('Ext updated: %s'), extension.updated)
+        except AttributeError as ex:
+            LOG.exception(_("Exception loading extension: %s"), unicode(ex))
+            return False
+
+        return True
+
+    def load_extension(self, ext_factory):
+        """Execute an extension factory.
+
+        Loads an extension.  The 'ext_factory' is the name of a
+        callable that will be imported and called with one
+        argument--the extension manager.  The factory callable is
+        expected to call the register() method at least once.
+        """
+
+        LOG.debug(_("Loading extension %s"), ext_factory)
+
+        # Load the factory
+        factory = importutils.import_class(ext_factory)
+
+        # Call it
+        LOG.debug(_("Calling extension factory %s"), ext_factory)
+        factory(self)
+
+    def _load_extensions(self):
+        """Load extensions specified on the command line."""
+
+        extensions = list(self.cls_list)
+
+        for ext_factory in extensions:
+            try:
+                self.load_extension(ext_factory)
+            except Exception as exc:
+                LOG.warn(_('Failed to load extension %(ext_factory)s: '
+                           '%(exc)s') % locals())
+
+
+class ControllerExtension(object):
+    """Extend core controllers of cinder OpenStack API.
+
+    Provide a way to extend existing cinder OpenStack API core
+    controllers.
+    """
+
+    def __init__(self, extension, collection, controller):
+        self.extension = extension
+        self.collection = collection
+        self.controller = controller
+
+
+class ResourceExtension(object):
+    """Add top level resources to the OpenStack API in cinder."""
+
+    def __init__(self, collection, controller, parent=None,
+                 collection_actions=None, member_actions=None,
+                 custom_routes_fn=None):
+        if not collection_actions:
+            collection_actions = {}
+        if not member_actions:
+            member_actions = {}
+        self.collection = collection
+        self.controller = controller
+        self.parent = parent
+        self.collection_actions = collection_actions
+        self.member_actions = member_actions
+        self.custom_routes_fn = custom_routes_fn
+
+
+def wrap_errors(fn):
+    """Ensure errors are not passed along."""
+    def wrapped(*args, **kwargs):
+        try:
+            return fn(*args, **kwargs)
+        except webob.exc.HTTPException:
+            raise
+        except Exception:
+            raise webob.exc.HTTPInternalServerError()
+    return wrapped
+
+
+def load_standard_extensions(ext_mgr, logger, path, package, ext_list=None):
+    """Registers all standard API extensions."""
+
+    # Walk through all the modules in our directory...
+    our_dir = path[0]
+    for dirpath, dirnames, filenames in os.walk(our_dir):
+        # Compute the relative package name from the dirpath
+        relpath = os.path.relpath(dirpath, our_dir)
+        if relpath == '.':
+            relpkg = ''
+        else:
+            relpkg = '.%s' % '.'.join(relpath.split(os.sep))
+
+        # Now, consider each file in turn, only considering .py files
+        for fname in filenames:
+            root, ext = os.path.splitext(fname)
+
+            # Skip __init__ and anything that's not .py
+            if ext != '.py' or root == '__init__':
+                continue
+
+            # Try loading it
+            classname = "%s%s" % (root[0].upper(), root[1:])
+            classpath = ("%s%s.%s.%s" %
+                         (package, relpkg, root, classname))
+
+            if ext_list is not None and classname not in ext_list:
+                logger.debug("Skipping extension: %s" % classpath)
+                continue
+
+            try:
+                ext_mgr.load_extension(classpath)
+            except Exception as exc:
+                logger.warn(_('Failed to load extension %(classpath)s: '
+                              '%(exc)s') % locals())
+
+        # Now, let's consider any subdirectories we may have...
+        subdirs = []
+        for dname in dirnames:
+            # Skip it if it does not have __init__.py
+            if not os.path.exists(os.path.join(dirpath, dname,
+                                               '__init__.py')):
+                continue
+
+            # If it has extension(), delegate...
+            ext_name = ("%s%s.%s.extension" %
+                        (package, relpkg, dname))
+            try:
+                ext = importutils.import_class(ext_name)
+            except common_exception.NotFound:
+                # extension() doesn't exist on it, so we'll explore
+                # the directory for ourselves
+                subdirs.append(dname)
+            else:
+                try:
+                    ext(ext_mgr)
+                except Exception as exc:
+                    logger.warn(_('Failed to load extension %(ext_name)s: '
+                                  '%(exc)s') % locals())
+
+        # Update the list of directories we'll explore...
+        dirnames[:] = subdirs
+
+
+def extension_authorizer(api_name, extension_name):
+    def authorize(context, target=None):
+        if target is None:
+            target = {'project_id': context.project_id,
+                      'user_id': context.user_id}
+        action = '%s_extension:%s' % (api_name, extension_name)
+        cinder.policy.enforce(context, action, target)
+    return authorize
+
+
+def soft_extension_authorizer(api_name, extension_name):
+    hard_authorize = extension_authorizer(api_name, extension_name)
+
+    def authorize(context):
+        try:
+            hard_authorize(context)
+            return True
+        except exception.NotAuthorized:
+            return False
+    return authorize
diff --git a/cinder/api/openstack/urlmap.py b/cinder/api/openstack/urlmap.py
new file mode 100644
index 000000000..ac3209854
--- /dev/null
+++ b/cinder/api/openstack/urlmap.py
@@ -0,0 +1,297 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import paste.urlmap
+import re
+import urllib2
+
+from cinder import log as logging
+from cinder.api.openstack import wsgi
+
+
+_quoted_string_re = r'"[^"\\]*(?:\\.[^"\\]*)*"'
+_option_header_piece_re = re.compile(r';\s*([^\s;=]+|%s)\s*'
+                                     r'(?:=\s*([^;]+|%s))?\s*' %
+    (_quoted_string_re, _quoted_string_re))
+
+LOG = logging.getLogger(__name__)
+
+
+def unquote_header_value(value):
+    """Unquotes a header value.
+    This does not use the real unquoting but what browsers are actually
+    using for quoting.
+
+    :param value: the header value to unquote.
+    """
+    if value and value[0] == value[-1] == '"':
+        # this is not the real unquoting, but fixing this so that the
+        # RFC is met will result in bugs with internet explorer and
+        # probably some other browsers as well.  IE for example is
+        # uploading files with "C:\foo\bar.txt" as filename
+        value = value[1:-1]
+    return value
+
+
+def parse_list_header(value):
+    """Parse lists as described by RFC 2068 Section 2.
+
+    In particular, parse comma-separated lists where the elements of
+    the list may include quoted-strings.  A quoted-string could
+    contain a comma.  A non-quoted string could have quotes in the
+    middle.  Quotes are removed automatically after parsing.
+
+    The return value is a standard :class:`list`:
+
+    >>> parse_list_header('token, "quoted value"')
+    ['token', 'quoted value']
+
+    :param value: a string with a list header.
+    :return: :class:`list`
+    """
+    result = []
+    for item in urllib2.parse_http_list(value):
+        if item[:1] == item[-1:] == '"':
+            item = unquote_header_value(item[1:-1])
+        result.append(item)
+    return result
+
+
+def parse_options_header(value):
+    """Parse a ``Content-Type`` like header into a tuple with the content
+    type and the options:
+
+    >>> parse_options_header('Content-Type: text/html; mimetype=text/html')
+    ('Content-Type:', {'mimetype': 'text/html'})
+
+    :param value: the header to parse.
+    :return: (str, options)
+    """
+    def _tokenize(string):
+        for match in _option_header_piece_re.finditer(string):
+            key, value = match.groups()
+            key = unquote_header_value(key)
+            if value is not None:
+                value = unquote_header_value(value)
+            yield key, value
+
+    if not value:
+        return '', {}
+
+    parts = _tokenize(';' + value)
+    name = parts.next()[0]
+    extra = dict(parts)
+    return name, extra
+
+
+class Accept(object):
+    def __init__(self, value):
+        self._content_types = [parse_options_header(v) for v in
+                               parse_list_header(value)]
+
+    def best_match(self, supported_content_types):
+        # FIXME: Should we have a more sophisticated matching algorithm that
+        # takes into account the version as well?
+        best_quality = -1
+        best_content_type = None
+        best_params = {}
+        best_match = '*/*'
+
+        for content_type in supported_content_types:
+            for content_mask, params in self._content_types:
+                try:
+                    quality = float(params.get('q', 1))
+                except ValueError:
+                    continue
+
+                if quality < best_quality:
+                    continue
+                elif best_quality == quality:
+                    if best_match.count('*') <= content_mask.count('*'):
+                        continue
+
+                if self._match_mask(content_mask, content_type):
+                    best_quality = quality
+                    best_content_type = content_type
+                    best_params = params
+                    best_match = content_mask
+
+        return best_content_type, best_params
+
+    def content_type_params(self, best_content_type):
+        """Find parameters in Accept header for given content type."""
+        for content_type, params in self._content_types:
+            if best_content_type == content_type:
+                return params
+
+        return {}
+
+    def _match_mask(self, mask, content_type):
+        if '*' not in mask:
+            return content_type == mask
+        if mask == '*/*':
+            return True
+        mask_major = mask[:-2]
+        content_type_major = content_type.split('/', 1)[0]
+        return content_type_major == mask_major
+
+
+def urlmap_factory(loader, global_conf, **local_conf):
+    if 'not_found_app' in local_conf:
+        not_found_app = local_conf.pop('not_found_app')
+    else:
+        not_found_app = global_conf.get('not_found_app')
+    if not_found_app:
+        not_found_app = loader.get_app(not_found_app, global_conf=global_conf)
+    urlmap = URLMap(not_found_app=not_found_app)
+    for path, app_name in local_conf.items():
+        path = paste.urlmap.parse_path_expression(path)
+        app = loader.get_app(app_name, global_conf=global_conf)
+        urlmap[path] = app
+    return urlmap
+
+
+class URLMap(paste.urlmap.URLMap):
+    def _match(self, host, port, path_info):
+        """Find longest match for a given URL path."""
+        for (domain, app_url), app in self.applications:
+            if domain and domain != host and domain != host + ':' + port:
+                continue
+            if (path_info == app_url
+                or path_info.startswith(app_url + '/')):
+                return app, app_url
+
+        return None, None
+
+    def _set_script_name(self, app, app_url):
+        def wrap(environ, start_response):
+            environ['SCRIPT_NAME'] += app_url
+            return app(environ, start_response)
+
+        return wrap
+
+    def _munge_path(self, app, path_info, app_url):
+        def wrap(environ, start_response):
+            environ['SCRIPT_NAME'] += app_url
+            environ['PATH_INFO'] = path_info[len(app_url):]
+            return app(environ, start_response)
+
+        return wrap
+
+    def _path_strategy(self, host, port, path_info):
+        """Check path suffix for MIME type and path prefix for API version."""
+        mime_type = app = app_url = None
+
+        parts = path_info.rsplit('.', 1)
+        if len(parts) > 1:
+            possible_type = 'application/' + parts[1]
+            if possible_type in wsgi.SUPPORTED_CONTENT_TYPES:
+                mime_type = possible_type
+
+        parts = path_info.split('/')
+        if len(parts) > 1:
+            possible_app, possible_app_url = self._match(host, port, path_info)
+            # Don't use prefix if it ends up matching default
+            if possible_app and possible_app_url:
+                app_url = possible_app_url
+                app = self._munge_path(possible_app, path_info, app_url)
+
+        return mime_type, app, app_url
+
+    def _content_type_strategy(self, host, port, environ):
+        """Check Content-Type header for API version."""
+        app = None
+        params = parse_options_header(environ.get('CONTENT_TYPE', ''))[1]
+        if 'version' in params:
+            app, app_url = self._match(host, port, '/v' + params['version'])
+            if app:
+                app = self._set_script_name(app, app_url)
+
+        return app
+
+    def _accept_strategy(self, host, port, environ, supported_content_types):
+        """Check Accept header for best matching MIME type and API version."""
+        accept = Accept(environ.get('HTTP_ACCEPT', ''))
+
+        app = None
+
+        # Find the best match in the Accept header
+        mime_type, params = accept.best_match(supported_content_types)
+        if 'version' in params:
+            app, app_url = self._match(host, port, '/v' + params['version'])
+            if app:
+                app = self._set_script_name(app, app_url)
+
+        return mime_type, app
+
+    def __call__(self, environ, start_response):
+        host = environ.get('HTTP_HOST', environ.get('SERVER_NAME')).lower()
+        if ':' in host:
+            host, port = host.split(':', 1)
+        else:
+            if environ['wsgi.url_scheme'] == 'http':
+                port = '80'
+            else:
+                port = '443'
+
+        path_info = environ['PATH_INFO']
+        path_info = self.normalize_url(path_info, False)[1]
+
+        # The MIME type for the response is determined in one of two ways:
+        # 1) URL path suffix (eg /servers/detail.json)
+        # 2) Accept header (eg application/json;q=0.8, application/xml;q=0.2)
+
+        # The API version is determined in one of three ways:
+        # 1) URL path prefix (eg /v1.1/tenant/servers/detail)
+        # 2) Content-Type header (eg application/json;version=1.1)
+        # 3) Accept header (eg application/json;q=0.8;version=1.1)
+
+        supported_content_types = list(wsgi.SUPPORTED_CONTENT_TYPES)
+
+        mime_type, app, app_url = self._path_strategy(host, port, path_info)
+
+        # Accept application/atom+xml for the index query of each API
+        # version mount point as well as the root index
+        if (app_url and app_url + '/' == path_info) or path_info == '/':
+            supported_content_types.append('application/atom+xml')
+
+        if not app:
+            app = self._content_type_strategy(host, port, environ)
+
+        if not mime_type or not app:
+            possible_mime_type, possible_app = self._accept_strategy(
+                    host, port, environ, supported_content_types)
+            if possible_mime_type and not mime_type:
+                mime_type = possible_mime_type
+            if possible_app and not app:
+                app = possible_app
+
+        if not mime_type:
+            mime_type = 'application/json'
+
+        if not app:
+            # Didn't match a particular version, probably matches default
+            app, app_url = self._match(host, port, path_info)
+            if app:
+                app = self._munge_path(app, path_info, app_url)
+
+        if app:
+            environ['cinder.best_content_type'] = mime_type
+            return app(environ, start_response)
+
+        environ['paste.urlmap_object'] = self
+        return self.not_found_application(environ, start_response)
diff --git a/cinder/api/openstack/volume/__init__.py b/cinder/api/openstack/volume/__init__.py
new file mode 100644
index 000000000..2d9ac302b
--- /dev/null
+++ b/cinder/api/openstack/volume/__init__.py
@@ -0,0 +1,62 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+WSGI middleware for OpenStack Volume API.
+"""
+
+import cinder.api.openstack
+from cinder.api.openstack.volume import extensions
+from cinder.api.openstack.volume import snapshots
+from cinder.api.openstack.volume import types
+from cinder.api.openstack.volume import volumes
+from cinder.api.openstack.volume import versions
+from cinder import log as logging
+
+
+LOG = logging.getLogger(__name__)
+
+
+class APIRouter(cinder.api.openstack.APIRouter):
+    """
+    Routes requests on the OpenStack API to the appropriate controller
+    and method.
+    """
+    ExtensionManager = extensions.ExtensionManager
+
+    def _setup_routes(self, mapper):
+        self.resources['versions'] = versions.create_resource()
+        mapper.connect("versions", "/",
+                    controller=self.resources['versions'],
+                    action='show')
+
+        mapper.redirect("", "/")
+
+        self.resources['volumes'] = volumes.create_resource()
+        mapper.resource("volume", "volumes",
+                        controller=self.resources['volumes'],
+                        collection={'detail': 'GET'})
+
+        self.resources['types'] = types.create_resource()
+        mapper.resource("type", "types",
+                        controller=self.resources['types'])
+
+        self.resources['snapshots'] = snapshots.create_resource()
+        mapper.resource("snapshot", "snapshots",
+                        controller=self.resources['snapshots'],
+                        collection={'detail': 'GET'})
diff --git a/cinder/api/openstack/volume/contrib/__init__.py b/cinder/api/openstack/volume/contrib/__init__.py
new file mode 100644
index 000000000..c49a4c6d3
--- /dev/null
+++ b/cinder/api/openstack/volume/contrib/__init__.py
@@ -0,0 +1,39 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 Justin Santa Barbara
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Contrib contains extensions that are shipped with cinder.
+
+It can't be called 'extensions' because that causes namespacing problems.
+
+"""
+
+from cinder import flags
+from cinder import log as logging
+from cinder.api.openstack import extensions
+
+
+FLAGS = flags.FLAGS
+LOG = logging.getLogger(__name__)
+
+
+def standard_extensions(ext_mgr):
+    extensions.load_standard_extensions(ext_mgr, LOG, __path__, __package__)
+
+
+def select_extensions(ext_mgr):
+    extensions.load_standard_extensions(ext_mgr, LOG, __path__, __package__,
+                                        FLAGS.osapi_volume_ext_list)
diff --git a/cinder/api/openstack/volume/contrib/types_extra_specs.py b/cinder/api/openstack/volume/contrib/types_extra_specs.py
new file mode 100644
index 000000000..e0c4d595c
--- /dev/null
+++ b/cinder/api/openstack/volume/contrib/types_extra_specs.py
@@ -0,0 +1,152 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 Zadara Storage Inc.
+# Copyright (c) 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""The volume types extra specs extension"""
+
+import webob
+
+from cinder.api.openstack import extensions
+from cinder.api.openstack import wsgi
+from cinder.api.openstack import xmlutil
+from cinder import db
+from cinder import exception
+from cinder.volume import volume_types
+
+
+authorize = extensions.extension_authorizer('volume', 'types_extra_specs')
+
+
+class VolumeTypeExtraSpecsTemplate(xmlutil.TemplateBuilder):
+    def construct(self):
+        root = xmlutil.make_flat_dict('extra_specs', selector='extra_specs')
+        return xmlutil.MasterTemplate(root, 1)
+
+
+class VolumeTypeExtraSpecTemplate(xmlutil.TemplateBuilder):
+    def construct(self):
+        tagname = xmlutil.Selector('key')
+
+        def extraspec_sel(obj, do_raise=False):
+            # Have to extract the key and value for later use...
+            key, value = obj.items()[0]
+            return dict(key=key, value=value)
+
+        root = xmlutil.TemplateElement(tagname, selector=extraspec_sel)
+        root.text = 'value'
+        return xmlutil.MasterTemplate(root, 1)
+
+
+class VolumeTypeExtraSpecsController(object):
+    """ The volume type extra specs API controller for the OpenStack API """
+
+    def _get_extra_specs(self, context, type_id):
+        extra_specs = db.volume_type_extra_specs_get(context, type_id)
+        specs_dict = {}
+        for key, value in extra_specs.iteritems():
+            specs_dict[key] = value
+        return dict(extra_specs=specs_dict)
+
+    def _check_body(self, body):
+        if not body:
+            expl = _('No Request Body')
+            raise webob.exc.HTTPBadRequest(explanation=expl)
+
+    def _check_type(self, context, type_id):
+        try:
+            volume_types.get_volume_type(context, type_id)
+        except exception.NotFound as ex:
+            raise webob.exc.HTTPNotFound(explanation=unicode(ex))
+
+    @wsgi.serializers(xml=VolumeTypeExtraSpecsTemplate)
+    def index(self, req, type_id):
+        """ Returns the list of extra specs for a given volume type """
+        context = req.environ['cinder.context']
+        authorize(context)
+        self._check_type(context, type_id)
+        return self._get_extra_specs(context, type_id)
+
+    @wsgi.serializers(xml=VolumeTypeExtraSpecsTemplate)
+    def create(self, req, type_id, body=None):
+        context = req.environ['cinder.context']
+        authorize(context)
+        self._check_type(context, type_id)
+        self._check_body(body)
+        specs = body.get('extra_specs')
+        if not isinstance(specs, dict):
+            expl = _('Malformed extra specs')
+            raise webob.exc.HTTPBadRequest(explanation=expl)
+        db.volume_type_extra_specs_update_or_create(context,
+                                                    type_id,
+                                                    specs)
+        return body
+
+    @wsgi.serializers(xml=VolumeTypeExtraSpecTemplate)
+    def update(self, req, type_id, id, body=None):
+        context = req.environ['cinder.context']
+        authorize(context)
+        self._check_type(context, type_id)
+        self._check_body(body)
+        if not id in body:
+            expl = _('Request body and URI mismatch')
+            raise webob.exc.HTTPBadRequest(explanation=expl)
+        if len(body) > 1:
+            expl = _('Request body contains too many items')
+            raise webob.exc.HTTPBadRequest(explanation=expl)
+        db.volume_type_extra_specs_update_or_create(context,
+                                                    type_id,
+                                                    body)
+        return body
+
+    @wsgi.serializers(xml=VolumeTypeExtraSpecTemplate)
+    def show(self, req, type_id, id):
+        """Return a single extra spec item."""
+        context = req.environ['cinder.context']
+        authorize(context)
+        self._check_type(context, type_id)
+        specs = self._get_extra_specs(context, type_id)
+        if id in specs['extra_specs']:
+            return {id: specs['extra_specs'][id]}
+        else:
+            raise webob.exc.HTTPNotFound()
+
+    def delete(self, req, type_id, id):
+        """ Deletes an existing extra spec """
+        context = req.environ['cinder.context']
+        self._check_type(context, type_id)
+        authorize(context)
+        db.volume_type_extra_specs_delete(context, type_id, id)
+        return webob.Response(status_int=202)
+
+
+class Types_extra_specs(extensions.ExtensionDescriptor):
+    """Types extra specs support"""
+
+    name = "TypesExtraSpecs"
+    alias = "os-types-extra-specs"
+    namespace = "http://docs.openstack.org/volume/ext/types-extra-specs/api/v1"
+    updated = "2011-08-24T00:00:00+00:00"
+
+    def get_resources(self):
+        resources = []
+        res = extensions.ResourceExtension('extra_specs',
+                            VolumeTypeExtraSpecsController(),
+                            parent=dict(
+                                member_name='type',
+                                collection_name='types'))
+        resources.append(res)
+
+        return resources
diff --git a/cinder/api/openstack/volume/contrib/types_manage.py b/cinder/api/openstack/volume/contrib/types_manage.py
new file mode 100644
index 000000000..bb8921a0f
--- /dev/null
+++ b/cinder/api/openstack/volume/contrib/types_manage.py
@@ -0,0 +1,91 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 Zadara Storage Inc.
+# Copyright (c) 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""The volume types manage extension."""
+
+import webob
+
+from cinder.api.openstack import extensions
+from cinder.api.openstack.volume import types
+from cinder.api.openstack import wsgi
+from cinder import exception
+from cinder.volume import volume_types
+
+
+authorize = extensions.extension_authorizer('volume', 'types_manage')
+
+
+class VolumeTypesManageController(wsgi.Controller):
+    """ The volume types API controller for the OpenStack API """
+
+    @wsgi.action("create")
+    @wsgi.serializers(xml=types.VolumeTypeTemplate)
+    def _create(self, req, body):
+        """Creates a new volume type."""
+        context = req.environ['cinder.context']
+        authorize(context)
+
+        if not body or body == "":
+            raise webob.exc.HTTPUnprocessableEntity()
+
+        vol_type = body.get('volume_type', None)
+        if vol_type is None or vol_type == "":
+            raise webob.exc.HTTPUnprocessableEntity()
+
+        name = vol_type.get('name', None)
+        specs = vol_type.get('extra_specs', {})
+
+        if name is None or name == "":
+            raise webob.exc.HTTPUnprocessableEntity()
+
+        try:
+            volume_types.create(context, name, specs)
+            vol_type = volume_types.get_volume_type_by_name(context, name)
+        except exception.VolumeTypeExists as err:
+            raise webob.exc.HTTPConflict(explanation=str(err))
+        except exception.NotFound:
+            raise webob.exc.HTTPNotFound()
+
+        return {'volume_type': vol_type}
+
+    @wsgi.action("delete")
+    def _delete(self, req, id):
+        """ Deletes an existing volume type """
+        context = req.environ['cinder.context']
+        authorize(context)
+
+        try:
+            vol_type = volume_types.get_volume_type(context, id)
+            volume_types.destroy(context, vol_type['name'])
+        except exception.NotFound:
+            raise webob.exc.HTTPNotFound()
+
+        return webob.Response(status_int=202)
+
+
+class Types_manage(extensions.ExtensionDescriptor):
+    """Types manage support"""
+
+    name = "TypesManage"
+    alias = "os-types-manage"
+    namespace = "http://docs.openstack.org/volume/ext/types-manage/api/v1"
+    updated = "2011-08-24T00:00:00+00:00"
+
+    def get_controller_extensions(self):
+        controller = VolumeTypesManageController()
+        extension = extensions.ControllerExtension(self, 'types', controller)
+        return [extension]
diff --git a/cinder/api/openstack/volume/extensions.py b/cinder/api/openstack/volume/extensions.py
new file mode 100644
index 000000000..ffe284555
--- /dev/null
+++ b/cinder/api/openstack/volume/extensions.py
@@ -0,0 +1,33 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from cinder.api.openstack import extensions as base_extensions
+from cinder import flags
+from cinder import log as logging
+
+
+LOG = logging.getLogger(__name__)
+FLAGS = flags.FLAGS
+
+
+class ExtensionManager(base_extensions.ExtensionManager):
+    def __init__(self):
+        LOG.audit(_('Initializing extension manager.'))
+
+        self.cls_list = FLAGS.osapi_volume_extension
+        self.extensions = {}
+        self._load_extensions()
diff --git a/cinder/api/openstack/volume/snapshots.py b/cinder/api/openstack/volume/snapshots.py
new file mode 100644
index 000000000..f6d5304ec
--- /dev/null
+++ b/cinder/api/openstack/volume/snapshots.py
@@ -0,0 +1,170 @@
+# Copyright 2011 Justin Santa Barbara
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""The volumes snapshots api."""
+
+from webob import exc
+import webob
+
+from cinder.api.openstack import common
+from cinder.api.openstack import wsgi
+from cinder.api.openstack import xmlutil
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+from cinder import volume
+
+
+LOG = logging.getLogger(__name__)
+
+
+FLAGS = flags.FLAGS
+
+
+def _translate_snapshot_detail_view(context, vol):
+    """Maps keys for snapshots details view."""
+
+    d = _translate_snapshot_summary_view(context, vol)
+
+    # NOTE(gagupta): No additional data / lookups at the moment
+    return d
+
+
+def _translate_snapshot_summary_view(context, vol):
+    """Maps keys for snapshots summary view."""
+    d = {}
+
+    # TODO(bcwaldon): remove str cast once we use uuids
+    d['id'] = str(vol['id'])
+    d['volume_id'] = str(vol['volume_id'])
+    d['status'] = vol['status']
+    # NOTE(gagupta): We map volume_size as the snapshot size
+    d['size'] = vol['volume_size']
+    d['created_at'] = vol['created_at']
+    d['display_name'] = vol['display_name']
+    d['display_description'] = vol['display_description']
+    return d
+
+
+def make_snapshot(elem):
+    elem.set('id')
+    elem.set('status')
+    elem.set('size')
+    elem.set('created_at')
+    elem.set('display_name')
+    elem.set('display_description')
+    elem.set('volume_id')
+
+
+class SnapshotTemplate(xmlutil.TemplateBuilder):
+    def construct(self):
+        root = xmlutil.TemplateElement('snapshot', selector='snapshot')
+        make_snapshot(root)
+        return xmlutil.MasterTemplate(root, 1)
+
+
+class SnapshotsTemplate(xmlutil.TemplateBuilder):
+    def construct(self):
+        root = xmlutil.TemplateElement('snapshots')
+        elem = xmlutil.SubTemplateElement(root, 'snapshot',
+                                          selector='snapshots')
+        make_snapshot(elem)
+        return xmlutil.MasterTemplate(root, 1)
+
+
+class SnapshotsController(object):
+    """The Volumes API controller for the OpenStack API."""
+
+    def __init__(self):
+        self.volume_api = volume.API()
+        super(SnapshotsController, self).__init__()
+
+    @wsgi.serializers(xml=SnapshotTemplate)
+    def show(self, req, id):
+        """Return data about the given snapshot."""
+        context = req.environ['cinder.context']
+
+        try:
+            vol = self.volume_api.get_snapshot(context, id)
+        except exception.NotFound:
+            raise exc.HTTPNotFound()
+
+        return {'snapshot': _translate_snapshot_detail_view(context, vol)}
+
+    def delete(self, req, id):
+        """Delete a snapshot."""
+        context = req.environ['cinder.context']
+
+        LOG.audit(_("Delete snapshot with id: %s"), id, context=context)
+
+        try:
+            snapshot = self.volume_api.get_snapshot(context, id)
+            self.volume_api.delete_snapshot(context, snapshot)
+        except exception.NotFound:
+            raise exc.HTTPNotFound()
+        return webob.Response(status_int=202)
+
+    @wsgi.serializers(xml=SnapshotsTemplate)
+    def index(self, req):
+        """Returns a summary list of snapshots."""
+        return self._items(req, entity_maker=_translate_snapshot_summary_view)
+
+    @wsgi.serializers(xml=SnapshotsTemplate)
+    def detail(self, req):
+        """Returns a detailed list of snapshots."""
+        return self._items(req, entity_maker=_translate_snapshot_detail_view)
+
+    def _items(self, req, entity_maker):
+        """Returns a list of snapshots, transformed through entity_maker."""
+        context = req.environ['cinder.context']
+
+        snapshots = self.volume_api.get_all_snapshots(context)
+        limited_list = common.limited(snapshots, req)
+        res = [entity_maker(context, snapshot) for snapshot in limited_list]
+        return {'snapshots': res}
+
+    @wsgi.serializers(xml=SnapshotTemplate)
+    def create(self, req, body):
+        """Creates a new snapshot."""
+        context = req.environ['cinder.context']
+
+        if not body:
+            return exc.HTTPUnprocessableEntity()
+
+        snapshot = body['snapshot']
+        volume_id = snapshot['volume_id']
+        volume = self.volume_api.get(context, volume_id)
+        force = snapshot.get('force', False)
+        msg = _("Create snapshot from volume %s")
+        LOG.audit(msg, volume_id, context=context)
+
+        if force:
+            new_snapshot = self.volume_api.create_snapshot_force(context,
+                                        volume,
+                                        snapshot.get('display_name'),
+                                        snapshot.get('display_description'))
+        else:
+            new_snapshot = self.volume_api.create_snapshot(context,
+                                        volume,
+                                        snapshot.get('display_name'),
+                                        snapshot.get('display_description'))
+
+        retval = _translate_snapshot_detail_view(context, new_snapshot)
+
+        return {'snapshot': retval}
+
+
+def create_resource():
+    return wsgi.Resource(SnapshotsController())
diff --git a/cinder/api/openstack/volume/types.py b/cinder/api/openstack/volume/types.py
new file mode 100644
index 000000000..8fea06190
--- /dev/null
+++ b/cinder/api/openstack/volume/types.py
@@ -0,0 +1,76 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 Zadara Storage Inc.
+# Copyright (c) 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+""" The volume type & volume types extra specs extension"""
+
+from webob import exc
+
+from cinder.api.openstack import wsgi
+from cinder.api.openstack import xmlutil
+from cinder import exception
+from cinder.volume import volume_types
+
+
+def make_voltype(elem):
+    elem.set('id')
+    elem.set('name')
+    extra_specs = xmlutil.make_flat_dict('extra_specs', selector='extra_specs')
+    elem.append(extra_specs)
+
+
+class VolumeTypeTemplate(xmlutil.TemplateBuilder):
+    def construct(self):
+        root = xmlutil.TemplateElement('volume_type', selector='volume_type')
+        make_voltype(root)
+        return xmlutil.MasterTemplate(root, 1)
+
+
+class VolumeTypesTemplate(xmlutil.TemplateBuilder):
+    def construct(self):
+        root = xmlutil.TemplateElement('volume_types')
+        elem = xmlutil.SubTemplateElement(root, 'volume_type',
+                                          selector='volume_types')
+        make_voltype(elem)
+        return xmlutil.MasterTemplate(root, 1)
+
+
+class VolumeTypesController(object):
+    """ The volume types API controller for the OpenStack API """
+
+    @wsgi.serializers(xml=VolumeTypesTemplate)
+    def index(self, req):
+        """ Returns the list of volume types """
+        context = req.environ['cinder.context']
+        return {'volume_types': volume_types.get_all_types(context).values()}
+
+    @wsgi.serializers(xml=VolumeTypeTemplate)
+    def show(self, req, id):
+        """ Return a single volume type item """
+        context = req.environ['cinder.context']
+
+        try:
+            vol_type = volume_types.get_volume_type(context, id)
+        except exception.NotFound:
+            raise exc.HTTPNotFound()
+
+        # TODO(bcwaldon): remove str cast once we use uuids
+        vol_type['id'] = str(vol_type['id'])
+        return {'volume_type': vol_type}
+
+
+def create_resource():
+    return wsgi.Resource(VolumeTypesController())
diff --git a/cinder/api/openstack/volume/versions.py b/cinder/api/openstack/volume/versions.py
new file mode 100644
index 000000000..7dcfdbe6c
--- /dev/null
+++ b/cinder/api/openstack/volume/versions.py
@@ -0,0 +1,83 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+
+from cinder.api.openstack.compute import versions
+from cinder.api.openstack.volume.views import versions as views_versions
+from cinder.api.openstack import wsgi
+
+
+VERSIONS = {
+    "v1.0": {
+        "id": "v1.0",
+        "status": "CURRENT",
+        "updated": "2012-01-04T11:33:21Z",
+        "links": [
+            {
+                "rel": "describedby",
+                "type": "application/pdf",
+                "href": "http://jorgew.github.com/block-storage-api/"
+                        "content/os-block-storage-1.0.pdf",
+            },
+            {
+                "rel": "describedby",
+                "type": "application/vnd.sun.wadl+xml",
+                #(anthony) FIXME
+                "href": "http://docs.rackspacecloud.com/"
+                        "servers/api/v1.1/application.wadl",
+            },
+        ],
+        "media-types": [
+            {
+                "base": "application/xml",
+                "type": "application/vnd.openstack.volume+xml;version=1",
+            },
+            {
+                "base": "application/json",
+                "type": "application/vnd.openstack.volume+json;version=1",
+            }
+        ],
+    }
+}
+
+
+class Versions(versions.Versions):
+    @wsgi.serializers(xml=versions.VersionsTemplate,
+                      atom=versions.VersionsAtomSerializer)
+    def index(self, req):
+        """Return all versions."""
+        builder = views_versions.get_view_builder(req)
+        return builder.build_versions(VERSIONS)
+
+    @wsgi.serializers(xml=versions.ChoicesTemplate)
+    @wsgi.response(300)
+    def multi(self, req):
+        """Return multiple choices."""
+        builder = views_versions.get_view_builder(req)
+        return builder.build_choices(VERSIONS, req)
+
+
+class VolumeVersionV1(object):
+    @wsgi.serializers(xml=versions.VersionTemplate,
+                      atom=versions.VersionAtomSerializer)
+    def show(self, req):
+        builder = views_versions.get_view_builder(req)
+        return builder.build_version(VERSIONS['v1.0'])
+
+
+def create_resource():
+    return wsgi.Resource(VolumeVersionV1())
diff --git a/cinder/api/openstack/volume/views/__init__.py b/cinder/api/openstack/volume/views/__init__.py
new file mode 100644
index 000000000..d65c689a8
--- /dev/null
+++ b/cinder/api/openstack/volume/views/__init__.py
@@ -0,0 +1,16 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
diff --git a/cinder/api/openstack/volume/views/versions.py b/cinder/api/openstack/volume/views/versions.py
new file mode 100644
index 000000000..a4bd164b2
--- /dev/null
+++ b/cinder/api/openstack/volume/views/versions.py
@@ -0,0 +1,36 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010-2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import os
+
+from cinder.api.openstack.compute.views import versions as compute_views
+
+
+def get_view_builder(req):
+    base_url = req.application_url
+    return ViewBuilder(base_url)
+
+
+class ViewBuilder(compute_views.ViewBuilder):
+    def generate_href(self, path=None):
+        """Create an url that refers to a specific version_number."""
+        version_number = 'v1'
+        if path:
+            path = path.strip('/')
+            return os.path.join(self.base_url, version_number, path)
+        else:
+            return os.path.join(self.base_url, version_number) + '/'
diff --git a/cinder/api/openstack/volume/volumes.py b/cinder/api/openstack/volume/volumes.py
new file mode 100644
index 000000000..9d4b4b5d5
--- /dev/null
+++ b/cinder/api/openstack/volume/volumes.py
@@ -0,0 +1,263 @@
+# Copyright 2011 Justin Santa Barbara
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""The volumes api."""
+
+from webob import exc
+import webob
+
+from cinder.api.openstack import common
+from cinder.api.openstack import wsgi
+from cinder.api.openstack import xmlutil
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+from cinder import volume
+from cinder.volume import volume_types
+
+
+LOG = logging.getLogger(__name__)
+
+
+FLAGS = flags.FLAGS
+
+
+def _translate_attachment_detail_view(_context, vol):
+    """Maps keys for attachment details view."""
+
+    d = _translate_attachment_summary_view(_context, vol)
+
+    # No additional data / lookups at the moment
+
+    return d
+
+
+def _translate_attachment_summary_view(_context, vol):
+    """Maps keys for attachment summary view."""
+    d = {}
+
+    # TODO(bcwaldon): remove str cast once we use uuids
+    volume_id = str(vol['id'])
+
+    # NOTE(justinsb): We use the volume id as the id of the attachment object
+    d['id'] = volume_id
+
+    d['volume_id'] = volume_id
+    if vol.get('instance'):
+        d['server_id'] = vol['instance']['uuid']
+    if vol.get('mountpoint'):
+        d['device'] = vol['mountpoint']
+
+    return d
+
+
+def _translate_volume_detail_view(context, vol):
+    """Maps keys for volumes details view."""
+
+    d = _translate_volume_summary_view(context, vol)
+
+    # No additional data / lookups at the moment
+
+    return d
+
+
+def _translate_volume_summary_view(context, vol):
+    """Maps keys for volumes summary view."""
+    d = {}
+
+    # TODO(bcwaldon): remove str cast once we use uuids
+    d['id'] = str(vol['id'])
+    d['status'] = vol['status']
+    d['size'] = vol['size']
+    d['availability_zone'] = vol['availability_zone']
+    d['created_at'] = vol['created_at']
+
+    d['attachments'] = []
+    if vol['attach_status'] == 'attached':
+        attachment = _translate_attachment_detail_view(context, vol)
+        d['attachments'].append(attachment)
+
+    d['display_name'] = vol['display_name']
+    d['display_description'] = vol['display_description']
+
+    if vol['volume_type_id'] and vol.get('volume_type'):
+        d['volume_type'] = vol['volume_type']['name']
+    else:
+        # TODO(bcwaldon): remove str cast once we use uuids
+        d['volume_type'] = str(vol['volume_type_id'])
+
+    d['snapshot_id'] = vol['snapshot_id']
+    # TODO(bcwaldon): remove str cast once we use uuids
+    if d['snapshot_id'] is not None:
+        d['snapshot_id'] = str(d['snapshot_id'])
+
+    LOG.audit(_("vol=%s"), vol, context=context)
+
+    if vol.get('volume_metadata'):
+        meta_dict = {}
+        for i in vol['volume_metadata']:
+            meta_dict[i['key']] = i['value']
+        d['metadata'] = meta_dict
+    else:
+        d['metadata'] = {}
+
+    return d
+
+
+def make_attachment(elem):
+    elem.set('id')
+    elem.set('server_id')
+    elem.set('volume_id')
+    elem.set('device')
+
+
+def make_volume(elem):
+    elem.set('id')
+    elem.set('status')
+    elem.set('size')
+    elem.set('availability_zone')
+    elem.set('created_at')
+    elem.set('display_name')
+    elem.set('display_description')
+    elem.set('volume_type')
+    elem.set('snapshot_id')
+
+    attachments = xmlutil.SubTemplateElement(elem, 'attachments')
+    attachment = xmlutil.SubTemplateElement(attachments, 'attachment',
+                                            selector='attachments')
+    make_attachment(attachment)
+
+    metadata = xmlutil.make_flat_dict('metadata')
+    elem.append(metadata)
+
+
+volume_nsmap = {None: xmlutil.XMLNS_VOLUME_V1, 'atom': xmlutil.XMLNS_ATOM}
+
+
+class VolumeTemplate(xmlutil.TemplateBuilder):
+    def construct(self):
+        root = xmlutil.TemplateElement('volume', selector='volume')
+        make_volume(root)
+        return xmlutil.MasterTemplate(root, 1, nsmap=volume_nsmap)
+
+
+class VolumesTemplate(xmlutil.TemplateBuilder):
+    def construct(self):
+        root = xmlutil.TemplateElement('volumes')
+        elem = xmlutil.SubTemplateElement(root, 'volume', selector='volumes')
+        make_volume(elem)
+        return xmlutil.MasterTemplate(root, 1, nsmap=volume_nsmap)
+
+
+class VolumeController(object):
+    """The Volumes API controller for the OpenStack API."""
+
+    def __init__(self):
+        self.volume_api = volume.API()
+        super(VolumeController, self).__init__()
+
+    @wsgi.serializers(xml=VolumeTemplate)
+    def show(self, req, id):
+        """Return data about the given volume."""
+        context = req.environ['cinder.context']
+
+        try:
+            vol = self.volume_api.get(context, id)
+        except exception.NotFound:
+            raise exc.HTTPNotFound()
+
+        return {'volume': _translate_volume_detail_view(context, vol)}
+
+    def delete(self, req, id):
+        """Delete a volume."""
+        context = req.environ['cinder.context']
+
+        LOG.audit(_("Delete volume with id: %s"), id, context=context)
+
+        try:
+            volume = self.volume_api.get(context, id)
+            self.volume_api.delete(context, volume)
+        except exception.NotFound:
+            raise exc.HTTPNotFound()
+        return webob.Response(status_int=202)
+
+    @wsgi.serializers(xml=VolumesTemplate)
+    def index(self, req):
+        """Returns a summary list of volumes."""
+        return self._items(req, entity_maker=_translate_volume_summary_view)
+
+    @wsgi.serializers(xml=VolumesTemplate)
+    def detail(self, req):
+        """Returns a detailed list of volumes."""
+        return self._items(req, entity_maker=_translate_volume_detail_view)
+
+    def _items(self, req, entity_maker):
+        """Returns a list of volumes, transformed through entity_maker."""
+        context = req.environ['cinder.context']
+
+        volumes = self.volume_api.get_all(context)
+        limited_list = common.limited(volumes, req)
+        res = [entity_maker(context, vol) for vol in limited_list]
+        return {'volumes': res}
+
+    @wsgi.serializers(xml=VolumeTemplate)
+    def create(self, req, body):
+        """Creates a new volume."""
+        context = req.environ['cinder.context']
+
+        if not body:
+            raise exc.HTTPUnprocessableEntity()
+
+        volume = body['volume']
+        size = volume['size']
+        LOG.audit(_("Create volume of %s GB"), size, context=context)
+
+        kwargs = {}
+
+        req_volume_type = volume.get('volume_type', None)
+        if req_volume_type:
+            try:
+                kwargs['volume_type'] = volume_types.get_volume_type_by_name(
+                        context, req_volume_type)
+            except exception.NotFound:
+                raise exc.HTTPNotFound()
+
+        kwargs['metadata'] = volume.get('metadata', None)
+
+        snapshot_id = volume.get('snapshot_id')
+        if snapshot_id is not None:
+            kwargs['snapshot'] = self.volume_api.get_snapshot(context,
+                                                              snapshot_id)
+        else:
+            kwargs['snapshot'] = None
+
+        kwargs['availability_zone'] = volume.get('availability_zone', None)
+
+        new_volume = self.volume_api.create(context,
+                                            size,
+                                            volume.get('display_name'),
+                                            volume.get('display_description'),
+                                            **kwargs)
+
+        # TODO(vish): Instance should be None at db layer instead of
+        #             trying to lazy load, but for now we turn it into
+        #             a dict to avoid an error.
+        retval = _translate_volume_detail_view(context, dict(new_volume))
+
+        return {'volume': retval}
+
+
+def create_resource():
+    return wsgi.Resource(VolumeController())
diff --git a/cinder/api/openstack/wsgi.py b/cinder/api/openstack/wsgi.py
new file mode 100644
index 000000000..bb309056e
--- /dev/null
+++ b/cinder/api/openstack/wsgi.py
@@ -0,0 +1,1123 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import inspect
+from xml.dom import minidom
+from xml.parsers import expat
+import math
+import time
+
+from lxml import etree
+import webob
+
+from cinder import exception
+from cinder import log as logging
+from cinder import utils
+from cinder import wsgi
+
+
+XMLNS_V1 = 'http://docs.openstack.org/volume/api/v1'
+
+XMLNS_ATOM = 'http://www.w3.org/2005/Atom'
+
+LOG = logging.getLogger(__name__)
+
+# The vendor content types should serialize identically to the non-vendor
+# content types. So to avoid littering the code with both options, we
+# map the vendor to the other when looking up the type
+_CONTENT_TYPE_MAP = {
+    'application/vnd.openstack.volume+json': 'application/json',
+    'application/vnd.openstack.volume+xml': 'application/xml',
+}
+
+SUPPORTED_CONTENT_TYPES = (
+    'application/json',
+    'application/vnd.openstack.volume+json',
+    'application/xml',
+    'application/vnd.openstack.volume+xml',
+)
+
+_MEDIA_TYPE_MAP = {
+    'application/vnd.openstack.volume+json': 'json',
+    'application/json': 'json',
+    'application/vnd.openstack.volume+xml': 'xml',
+    'application/xml': 'xml',
+    'application/atom+xml': 'atom',
+}
+
+
+class Request(webob.Request):
+    """Add some OpenStack API-specific logic to the base webob.Request."""
+
+    def best_match_content_type(self):
+        """Determine the requested response content-type."""
+        if 'cinder.best_content_type' not in self.environ:
+            # Calculate the best MIME type
+            content_type = None
+
+            # Check URL path suffix
+            parts = self.path.rsplit('.', 1)
+            if len(parts) > 1:
+                possible_type = 'application/' + parts[1]
+                if possible_type in SUPPORTED_CONTENT_TYPES:
+                    content_type = possible_type
+
+            if not content_type:
+                content_type = self.accept.best_match(SUPPORTED_CONTENT_TYPES)
+
+            self.environ['cinder.best_content_type'] = (content_type or
+                                                      'application/json')
+
+        return self.environ['cinder.best_content_type']
+
+    def get_content_type(self):
+        """Determine content type of the request body.
+
+        Does not do any body introspection, only checks header
+
+        """
+        if not "Content-Type" in self.headers:
+            return None
+
+        allowed_types = SUPPORTED_CONTENT_TYPES
+        content_type = self.content_type
+
+        if content_type not in allowed_types:
+            raise exception.InvalidContentType(content_type=content_type)
+
+        return content_type
+
+
+class ActionDispatcher(object):
+    """Maps method name to local methods through action name."""
+
+    def dispatch(self, *args, **kwargs):
+        """Find and call local method."""
+        action = kwargs.pop('action', 'default')
+        action_method = getattr(self, str(action), self.default)
+        return action_method(*args, **kwargs)
+
+    def default(self, data):
+        raise NotImplementedError()
+
+
+class TextDeserializer(ActionDispatcher):
+    """Default request body deserialization"""
+
+    def deserialize(self, datastring, action='default'):
+        return self.dispatch(datastring, action=action)
+
+    def default(self, datastring):
+        return {}
+
+
+class JSONDeserializer(TextDeserializer):
+
+    def _from_json(self, datastring):
+        try:
+            return utils.loads(datastring)
+        except ValueError:
+            msg = _("cannot understand JSON")
+            raise exception.MalformedRequestBody(reason=msg)
+
+    def default(self, datastring):
+        return {'body': self._from_json(datastring)}
+
+
+class XMLDeserializer(TextDeserializer):
+
+    def __init__(self, metadata=None):
+        """
+        :param metadata: information needed to deserialize xml into
+                         a dictionary.
+        """
+        super(XMLDeserializer, self).__init__()
+        self.metadata = metadata or {}
+
+    def _from_xml(self, datastring):
+        plurals = set(self.metadata.get('plurals', {}))
+
+        try:
+            node = minidom.parseString(datastring).childNodes[0]
+            return {node.nodeName: self._from_xml_node(node, plurals)}
+        except expat.ExpatError:
+            msg = _("cannot understand XML")
+            raise exception.MalformedRequestBody(reason=msg)
+
+    def _from_xml_node(self, node, listnames):
+        """Convert a minidom node to a simple Python type.
+
+        :param listnames: list of XML node names whose subnodes should
+                          be considered list items.
+
+        """
+        if len(node.childNodes) == 1 and node.childNodes[0].nodeType == 3:
+            return node.childNodes[0].nodeValue
+        elif node.nodeName in listnames:
+            return [self._from_xml_node(n, listnames) for n in node.childNodes]
+        else:
+            result = dict()
+            for attr in node.attributes.keys():
+                result[attr] = node.attributes[attr].nodeValue
+            for child in node.childNodes:
+                if child.nodeType != node.TEXT_NODE:
+                    result[child.nodeName] = self._from_xml_node(child,
+                                                                 listnames)
+            return result
+
+    def find_first_child_named(self, parent, name):
+        """Search a nodes children for the first child with a given name"""
+        for node in parent.childNodes:
+            if node.nodeName == name:
+                return node
+        return None
+
+    def find_children_named(self, parent, name):
+        """Return all of a nodes children who have the given name"""
+        for node in parent.childNodes:
+            if node.nodeName == name:
+                yield node
+
+    def extract_text(self, node):
+        """Get the text field contained by the given node"""
+        if len(node.childNodes) == 1:
+            child = node.childNodes[0]
+            if child.nodeType == child.TEXT_NODE:
+                return child.nodeValue
+        return ""
+
+    def find_attribute_or_element(self, parent, name):
+        """Get an attribute value; fallback to an element if not found"""
+        if parent.hasAttribute(name):
+            return parent.getAttribute(name)
+
+        node = self.find_first_child_named(parent, name)
+        if node:
+            return self.extract_text(node)
+
+        return None
+
+    def default(self, datastring):
+        return {'body': self._from_xml(datastring)}
+
+
+class MetadataXMLDeserializer(XMLDeserializer):
+
+    def extract_metadata(self, metadata_node):
+        """Marshal the metadata attribute of a parsed request"""
+        metadata = {}
+        if metadata_node is not None:
+            for meta_node in self.find_children_named(metadata_node, "meta"):
+                key = meta_node.getAttribute("key")
+                metadata[key] = self.extract_text(meta_node)
+        return metadata
+
+
+class DictSerializer(ActionDispatcher):
+    """Default request body serialization"""
+
+    def serialize(self, data, action='default'):
+        return self.dispatch(data, action=action)
+
+    def default(self, data):
+        return ""
+
+
+class JSONDictSerializer(DictSerializer):
+    """Default JSON request body serialization"""
+
+    def default(self, data):
+        return utils.dumps(data)
+
+
+class XMLDictSerializer(DictSerializer):
+
+    def __init__(self, metadata=None, xmlns=None):
+        """
+        :param metadata: information needed to deserialize xml into
+                         a dictionary.
+        :param xmlns: XML namespace to include with serialized xml
+        """
+        super(XMLDictSerializer, self).__init__()
+        self.metadata = metadata or {}
+        self.xmlns = xmlns
+
+    def default(self, data):
+        # We expect data to contain a single key which is the XML root.
+        root_key = data.keys()[0]
+        doc = minidom.Document()
+        node = self._to_xml_node(doc, self.metadata, root_key, data[root_key])
+
+        return self.to_xml_string(node)
+
+    def to_xml_string(self, node, has_atom=False):
+        self._add_xmlns(node, has_atom)
+        return node.toxml('UTF-8')
+
+    #NOTE (ameade): the has_atom should be removed after all of the
+    # xml serializers and view builders have been updated to the current
+    # spec that required all responses include the xmlns:atom, the has_atom
+    # flag is to prevent current tests from breaking
+    def _add_xmlns(self, node, has_atom=False):
+        if self.xmlns is not None:
+            node.setAttribute('xmlns', self.xmlns)
+        if has_atom:
+            node.setAttribute('xmlns:atom', "http://www.w3.org/2005/Atom")
+
+    def _to_xml_node(self, doc, metadata, nodename, data):
+        """Recursive method to convert data members to XML nodes."""
+        result = doc.createElement(nodename)
+
+        # Set the xml namespace if one is specified
+        # TODO(justinsb): We could also use prefixes on the keys
+        xmlns = metadata.get('xmlns', None)
+        if xmlns:
+            result.setAttribute('xmlns', xmlns)
+
+        #TODO(bcwaldon): accomplish this without a type-check
+        if isinstance(data, list):
+            collections = metadata.get('list_collections', {})
+            if nodename in collections:
+                metadata = collections[nodename]
+                for item in data:
+                    node = doc.createElement(metadata['item_name'])
+                    node.setAttribute(metadata['item_key'], str(item))
+                    result.appendChild(node)
+                return result
+            singular = metadata.get('plurals', {}).get(nodename, None)
+            if singular is None:
+                if nodename.endswith('s'):
+                    singular = nodename[:-1]
+                else:
+                    singular = 'item'
+            for item in data:
+                node = self._to_xml_node(doc, metadata, singular, item)
+                result.appendChild(node)
+        #TODO(bcwaldon): accomplish this without a type-check
+        elif isinstance(data, dict):
+            collections = metadata.get('dict_collections', {})
+            if nodename in collections:
+                metadata = collections[nodename]
+                for k, v in data.items():
+                    node = doc.createElement(metadata['item_name'])
+                    node.setAttribute(metadata['item_key'], str(k))
+                    text = doc.createTextNode(str(v))
+                    node.appendChild(text)
+                    result.appendChild(node)
+                return result
+            attrs = metadata.get('attributes', {}).get(nodename, {})
+            for k, v in data.items():
+                if k in attrs:
+                    result.setAttribute(k, str(v))
+                else:
+                    node = self._to_xml_node(doc, metadata, k, v)
+                    result.appendChild(node)
+        else:
+            # Type is atom
+            node = doc.createTextNode(str(data))
+            result.appendChild(node)
+        return result
+
+    def _create_link_nodes(self, xml_doc, links):
+        link_nodes = []
+        for link in links:
+            link_node = xml_doc.createElement('atom:link')
+            link_node.setAttribute('rel', link['rel'])
+            link_node.setAttribute('href', link['href'])
+            if 'type' in link:
+                link_node.setAttribute('type', link['type'])
+            link_nodes.append(link_node)
+        return link_nodes
+
+    def _to_xml(self, root):
+        """Convert the xml object to an xml string."""
+        return etree.tostring(root, encoding='UTF-8', xml_declaration=True)
+
+
+def serializers(**serializers):
+    """Attaches serializers to a method.
+
+    This decorator associates a dictionary of serializers with a
+    method.  Note that the function attributes are directly
+    manipulated; the method is not wrapped.
+    """
+
+    def decorator(func):
+        if not hasattr(func, 'wsgi_serializers'):
+            func.wsgi_serializers = {}
+        func.wsgi_serializers.update(serializers)
+        return func
+    return decorator
+
+
+def deserializers(**deserializers):
+    """Attaches deserializers to a method.
+
+    This decorator associates a dictionary of deserializers with a
+    method.  Note that the function attributes are directly
+    manipulated; the method is not wrapped.
+    """
+
+    def decorator(func):
+        if not hasattr(func, 'wsgi_deserializers'):
+            func.wsgi_deserializers = {}
+        func.wsgi_deserializers.update(deserializers)
+        return func
+    return decorator
+
+
+def response(code):
+    """Attaches response code to a method.
+
+    This decorator associates a response code with a method.  Note
+    that the function attributes are directly manipulated; the method
+    is not wrapped.
+    """
+
+    def decorator(func):
+        func.wsgi_code = code
+        return func
+    return decorator
+
+
+class ResponseObject(object):
+    """Bundles a response object with appropriate serializers.
+
+    Object that app methods may return in order to bind alternate
+    serializers with a response object to be serialized.  Its use is
+    optional.
+    """
+
+    def __init__(self, obj, code=None, **serializers):
+        """Binds serializers with an object.
+
+        Takes keyword arguments akin to the @serializer() decorator
+        for specifying serializers.  Serializers specified will be
+        given preference over default serializers or method-specific
+        serializers on return.
+        """
+
+        self.obj = obj
+        self.serializers = serializers
+        self._default_code = 200
+        self._code = code
+        self._headers = {}
+        self.serializer = None
+        self.media_type = None
+
+    def __getitem__(self, key):
+        """Retrieves a header with the given name."""
+
+        return self._headers[key.lower()]
+
+    def __setitem__(self, key, value):
+        """Sets a header with the given name to the given value."""
+
+        self._headers[key.lower()] = value
+
+    def __delitem__(self, key):
+        """Deletes the header with the given name."""
+
+        del self._headers[key.lower()]
+
+    def _bind_method_serializers(self, meth_serializers):
+        """Binds method serializers with the response object.
+
+        Binds the method serializers with the response object.
+        Serializers specified to the constructor will take precedence
+        over serializers specified to this method.
+
+        :param meth_serializers: A dictionary with keys mapping to
+                                 response types and values containing
+                                 serializer objects.
+        """
+
+        # We can't use update because that would be the wrong
+        # precedence
+        for mtype, serializer in meth_serializers.items():
+            self.serializers.setdefault(mtype, serializer)
+
+    def get_serializer(self, content_type, default_serializers=None):
+        """Returns the serializer for the wrapped object.
+
+        Returns the serializer for the wrapped object subject to the
+        indicated content type.  If no serializer matching the content
+        type is attached, an appropriate serializer drawn from the
+        default serializers will be used.  If no appropriate
+        serializer is available, raises InvalidContentType.
+        """
+
+        default_serializers = default_serializers or {}
+
+        try:
+            mtype = _MEDIA_TYPE_MAP.get(content_type, content_type)
+            if mtype in self.serializers:
+                return mtype, self.serializers[mtype]
+            else:
+                return mtype, default_serializers[mtype]
+        except (KeyError, TypeError):
+            raise exception.InvalidContentType(content_type=content_type)
+
+    def preserialize(self, content_type, default_serializers=None):
+        """Prepares the serializer that will be used to serialize.
+
+        Determines the serializer that will be used and prepares an
+        instance of it for later call.  This allows the serializer to
+        be accessed by extensions for, e.g., template extension.
+        """
+
+        mtype, serializer = self.get_serializer(content_type,
+                                                default_serializers)
+        self.media_type = mtype
+        self.serializer = serializer()
+
+    def attach(self, **kwargs):
+        """Attach slave templates to serializers."""
+
+        if self.media_type in kwargs:
+            self.serializer.attach(kwargs[self.media_type])
+
+    def serialize(self, request, content_type, default_serializers=None):
+        """Serializes the wrapped object.
+
+        Utility method for serializing the wrapped object.  Returns a
+        webob.Response object.
+        """
+
+        if self.serializer:
+            serializer = self.serializer
+        else:
+            _mtype, _serializer = self.get_serializer(content_type,
+                                                      default_serializers)
+            serializer = _serializer()
+
+        response = webob.Response()
+        response.status_int = self.code
+        for hdr, value in self._headers.items():
+            response.headers[hdr] = value
+        response.headers['Content-Type'] = content_type
+        if self.obj is not None:
+            response.body = serializer.serialize(self.obj)
+
+        return response
+
+    @property
+    def code(self):
+        """Retrieve the response status."""
+
+        return self._code or self._default_code
+
+    @property
+    def headers(self):
+        """Retrieve the headers."""
+
+        return self._headers.copy()
+
+
+def action_peek_json(body):
+    """Determine action to invoke."""
+
+    try:
+        decoded = utils.loads(body)
+    except ValueError:
+        msg = _("cannot understand JSON")
+        raise exception.MalformedRequestBody(reason=msg)
+
+    # Make sure there's exactly one key...
+    if len(decoded) != 1:
+        msg = _("too many body keys")
+        raise exception.MalformedRequestBody(reason=msg)
+
+    # Return the action and the decoded body...
+    return decoded.keys()[0]
+
+
+def action_peek_xml(body):
+    """Determine action to invoke."""
+
+    dom = minidom.parseString(body)
+    action_node = dom.childNodes[0]
+
+    return action_node.tagName
+
+
+class ResourceExceptionHandler(object):
+    """Context manager to handle Resource exceptions.
+
+    Used when processing exceptions generated by API implementation
+    methods (or their extensions).  Converts most exceptions to Fault
+    exceptions, with the appropriate logging.
+    """
+
+    def __enter__(self):
+        return None
+
+    def __exit__(self, ex_type, ex_value, ex_traceback):
+        if not ex_value:
+            return True
+
+        if isinstance(ex_value, exception.NotAuthorized):
+            msg = unicode(ex_value)
+            raise Fault(webob.exc.HTTPForbidden(explanation=msg))
+        elif isinstance(ex_value, exception.Invalid):
+            raise Fault(exception.ConvertedException(
+                code=ex_value.code, explanation=unicode(ex_value)))
+        elif isinstance(ex_value, TypeError):
+            exc_info = (ex_type, ex_value, ex_traceback)
+            LOG.error(_('Exception handling resource: %s') % ex_value,
+                    exc_info=exc_info)
+            raise Fault(webob.exc.HTTPBadRequest())
+        elif isinstance(ex_value, Fault):
+            LOG.info(_("Fault thrown: %s"), unicode(ex_value))
+            raise ex_value
+        elif isinstance(ex_value, webob.exc.HTTPException):
+            LOG.info(_("HTTP exception thrown: %s"), unicode(ex_value))
+            raise Fault(ex_value)
+
+        # We didn't handle the exception
+        return False
+
+
+class Resource(wsgi.Application):
+    """WSGI app that handles (de)serialization and controller dispatch.
+
+    WSGI app that reads routing information supplied by RoutesMiddleware
+    and calls the requested action method upon its controller.  All
+    controller action methods must accept a 'req' argument, which is the
+    incoming wsgi.Request. If the operation is a PUT or POST, the controller
+    method must also accept a 'body' argument (the deserialized request body).
+    They may raise a webob.exc exception or return a dict, which will be
+    serialized by requested content type.
+
+    Exceptions derived from webob.exc.HTTPException will be automatically
+    wrapped in Fault() to provide API friendly error responses.
+
+    """
+
+    def __init__(self, controller, action_peek=None, **deserializers):
+        """
+        :param controller: object that implement methods created by routes lib
+        :param action_peek: dictionary of routines for peeking into an action
+                            request body to determine the desired action
+        """
+
+        self.controller = controller
+
+        default_deserializers = dict(xml=XMLDeserializer,
+                                     json=JSONDeserializer)
+        default_deserializers.update(deserializers)
+
+        self.default_deserializers = default_deserializers
+        self.default_serializers = dict(xml=XMLDictSerializer,
+                                        json=JSONDictSerializer)
+
+        self.action_peek = dict(xml=action_peek_xml,
+                                json=action_peek_json)
+        self.action_peek.update(action_peek or {})
+
+        # Copy over the actions dictionary
+        self.wsgi_actions = {}
+        if controller:
+            self.register_actions(controller)
+
+        # Save a mapping of extensions
+        self.wsgi_extensions = {}
+        self.wsgi_action_extensions = {}
+
+    def register_actions(self, controller):
+        """Registers controller actions with this resource."""
+
+        actions = getattr(controller, 'wsgi_actions', {})
+        for key, method_name in actions.items():
+            self.wsgi_actions[key] = getattr(controller, method_name)
+
+    def register_extensions(self, controller):
+        """Registers controller extensions with this resource."""
+
+        extensions = getattr(controller, 'wsgi_extensions', [])
+        for method_name, action_name in extensions:
+            # Look up the extending method
+            extension = getattr(controller, method_name)
+
+            if action_name:
+                # Extending an action...
+                if action_name not in self.wsgi_action_extensions:
+                    self.wsgi_action_extensions[action_name] = []
+                self.wsgi_action_extensions[action_name].append(extension)
+            else:
+                # Extending a regular method
+                if method_name not in self.wsgi_extensions:
+                    self.wsgi_extensions[method_name] = []
+                self.wsgi_extensions[method_name].append(extension)
+
+    def get_action_args(self, request_environment):
+        """Parse dictionary created by routes library."""
+
+        # NOTE(Vek): Check for get_action_args() override in the
+        # controller
+        if hasattr(self.controller, 'get_action_args'):
+            return self.controller.get_action_args(request_environment)
+
+        try:
+            args = request_environment['wsgiorg.routing_args'][1].copy()
+        except (KeyError, IndexError, AttributeError):
+            return {}
+
+        try:
+            del args['controller']
+        except KeyError:
+            pass
+
+        try:
+            del args['format']
+        except KeyError:
+            pass
+
+        return args
+
+    def get_body(self, request):
+        try:
+            content_type = request.get_content_type()
+        except exception.InvalidContentType:
+            LOG.debug(_("Unrecognized Content-Type provided in request"))
+            return None, ''
+
+        if not content_type:
+            LOG.debug(_("No Content-Type provided in request"))
+            return None, ''
+
+        if len(request.body) <= 0:
+            LOG.debug(_("Empty body provided in request"))
+            return None, ''
+
+        return content_type, request.body
+
+    def deserialize(self, meth, content_type, body):
+        meth_deserializers = getattr(meth, 'wsgi_deserializers', {})
+        try:
+            mtype = _MEDIA_TYPE_MAP.get(content_type, content_type)
+            if mtype in meth_deserializers:
+                deserializer = meth_deserializers[mtype]
+            else:
+                deserializer = self.default_deserializers[mtype]
+        except (KeyError, TypeError):
+            raise exception.InvalidContentType(content_type=content_type)
+
+        return deserializer().deserialize(body)
+
+    def pre_process_extensions(self, extensions, request, action_args):
+        # List of callables for post-processing extensions
+        post = []
+
+        for ext in extensions:
+            if inspect.isgeneratorfunction(ext):
+                response = None
+
+                # If it's a generator function, the part before the
+                # yield is the preprocessing stage
+                try:
+                    with ResourceExceptionHandler():
+                        gen = ext(req=request, **action_args)
+                        response = gen.next()
+                except Fault as ex:
+                    response = ex
+
+                # We had a response...
+                if response:
+                    return response, []
+
+                # No response, queue up generator for post-processing
+                post.append(gen)
+            else:
+                # Regular functions only perform post-processing
+                post.append(ext)
+
+        # Run post-processing in the reverse order
+        return None, reversed(post)
+
+    def post_process_extensions(self, extensions, resp_obj, request,
+                                action_args):
+        for ext in extensions:
+            response = None
+            if inspect.isgenerator(ext):
+                # If it's a generator, run the second half of
+                # processing
+                try:
+                    with ResourceExceptionHandler():
+                        response = ext.send(resp_obj)
+                except StopIteration:
+                    # Normal exit of generator
+                    continue
+                except Fault as ex:
+                    response = ex
+            else:
+                # Regular functions get post-processing...
+                try:
+                    with ResourceExceptionHandler():
+                        response = ext(req=request, resp_obj=resp_obj,
+                                       **action_args)
+                except Fault as ex:
+                    response = ex
+
+            # We had a response...
+            if response:
+                return response
+
+        return None
+
+    @webob.dec.wsgify(RequestClass=Request)
+    def __call__(self, request):
+        """WSGI method that controls (de)serialization and method dispatch."""
+
+        LOG.info("%(method)s %(url)s" % {"method": request.method,
+                                         "url": request.url})
+
+        # Identify the action, its arguments, and the requested
+        # content type
+        action_args = self.get_action_args(request.environ)
+        action = action_args.pop('action', None)
+        content_type, body = self.get_body(request)
+        accept = request.best_match_content_type()
+
+        # NOTE(Vek): Splitting the function up this way allows for
+        #            auditing by external tools that wrap the existing
+        #            function.  If we try to audit __call__(), we can
+        #            run into troubles due to the @webob.dec.wsgify()
+        #            decorator.
+        return self._process_stack(request, action, action_args,
+                                   content_type, body, accept)
+
+    def _process_stack(self, request, action, action_args,
+                       content_type, body, accept):
+        """Implement the processing stack."""
+
+        # Get the implementing method
+        try:
+            meth, extensions = self.get_method(request, action,
+                                               content_type, body)
+        except (AttributeError, TypeError):
+            return Fault(webob.exc.HTTPNotFound())
+        except KeyError as ex:
+            msg = _("There is no such action: %s") % ex.args[0]
+            return Fault(webob.exc.HTTPBadRequest(explanation=msg))
+        except exception.MalformedRequestBody:
+            msg = _("Malformed request body")
+            return Fault(webob.exc.HTTPBadRequest(explanation=msg))
+
+        # Now, deserialize the request body...
+        try:
+            if content_type:
+                contents = self.deserialize(meth, content_type, body)
+            else:
+                contents = {}
+        except exception.InvalidContentType:
+            msg = _("Unsupported Content-Type")
+            return Fault(webob.exc.HTTPBadRequest(explanation=msg))
+        except exception.MalformedRequestBody:
+            msg = _("Malformed request body")
+            return Fault(webob.exc.HTTPBadRequest(explanation=msg))
+
+        # Update the action args
+        action_args.update(contents)
+
+        project_id = action_args.pop("project_id", None)
+        context = request.environ.get('cinder.context')
+        if (context and project_id and (project_id != context.project_id)):
+            msg = _("Malformed request url")
+            return Fault(webob.exc.HTTPBadRequest(explanation=msg))
+
+        # Run pre-processing extensions
+        response, post = self.pre_process_extensions(extensions,
+                                                     request, action_args)
+
+        if not response:
+            try:
+                with ResourceExceptionHandler():
+                    action_result = self.dispatch(meth, request, action_args)
+            except Fault as ex:
+                response = ex
+
+        if not response:
+            # No exceptions; convert action_result into a
+            # ResponseObject
+            resp_obj = None
+            if type(action_result) is dict or action_result is None:
+                resp_obj = ResponseObject(action_result)
+            elif isinstance(action_result, ResponseObject):
+                resp_obj = action_result
+            else:
+                response = action_result
+
+            # Run post-processing extensions
+            if resp_obj:
+                _set_request_id_header(request, resp_obj)
+                # Do a preserialize to set up the response object
+                serializers = getattr(meth, 'wsgi_serializers', {})
+                resp_obj._bind_method_serializers(serializers)
+                if hasattr(meth, 'wsgi_code'):
+                    resp_obj._default_code = meth.wsgi_code
+                resp_obj.preserialize(accept, self.default_serializers)
+
+                # Process post-processing extensions
+                response = self.post_process_extensions(post, resp_obj,
+                                                        request, action_args)
+
+            if resp_obj and not response:
+                response = resp_obj.serialize(request, accept,
+                                              self.default_serializers)
+
+        try:
+            msg_dict = dict(url=request.url, status=response.status_int)
+            msg = _("%(url)s returned with HTTP %(status)d") % msg_dict
+        except AttributeError, e:
+            msg_dict = dict(url=request.url, e=e)
+            msg = _("%(url)s returned a fault: %(e)s") % msg_dict
+
+        LOG.info(msg)
+
+        return response
+
+    def get_method(self, request, action, content_type, body):
+        """Look up the action-specific method and its extensions."""
+
+        # Look up the method
+        try:
+            if not self.controller:
+                meth = getattr(self, action)
+            else:
+                meth = getattr(self.controller, action)
+        except AttributeError:
+            if (not self.wsgi_actions or
+                action not in ['action', 'create', 'delete']):
+                # Propagate the error
+                raise
+        else:
+            return meth, self.wsgi_extensions.get(action, [])
+
+        if action == 'action':
+            # OK, it's an action; figure out which action...
+            mtype = _MEDIA_TYPE_MAP.get(content_type)
+            action_name = self.action_peek[mtype](body)
+        else:
+            action_name = action
+
+        # Look up the action method
+        return (self.wsgi_actions[action_name],
+                self.wsgi_action_extensions.get(action_name, []))
+
+    def dispatch(self, method, request, action_args):
+        """Dispatch a call to the action-specific method."""
+
+        return method(req=request, **action_args)
+
+
+def action(name):
+    """Mark a function as an action.
+
+    The given name will be taken as the action key in the body.
+
+    This is also overloaded to allow extensions to provide
+    non-extending definitions of create and delete operations.
+    """
+
+    def decorator(func):
+        func.wsgi_action = name
+        return func
+    return decorator
+
+
+def extends(*args, **kwargs):
+    """Indicate a function extends an operation.
+
+    Can be used as either::
+
+        @extends
+        def index(...):
+            pass
+
+    or as::
+
+        @extends(action='resize')
+        def _action_resize(...):
+            pass
+    """
+
+    def decorator(func):
+        # Store enough information to find what we're extending
+        func.wsgi_extends = (func.__name__, kwargs.get('action'))
+        return func
+
+    # If we have positional arguments, call the decorator
+    if args:
+        return decorator(*args)
+
+    # OK, return the decorator instead
+    return decorator
+
+
+class ControllerMetaclass(type):
+    """Controller metaclass.
+
+    This metaclass automates the task of assembling a dictionary
+    mapping action keys to method names.
+    """
+
+    def __new__(mcs, name, bases, cls_dict):
+        """Adds the wsgi_actions dictionary to the class."""
+
+        # Find all actions
+        actions = {}
+        extensions = []
+        for key, value in cls_dict.items():
+            if not callable(value):
+                continue
+            if getattr(value, 'wsgi_action', None):
+                actions[value.wsgi_action] = key
+            elif getattr(value, 'wsgi_extends', None):
+                extensions.append(value.wsgi_extends)
+
+        # Add the actions and extensions to the class dict
+        cls_dict['wsgi_actions'] = actions
+        cls_dict['wsgi_extensions'] = extensions
+
+        return super(ControllerMetaclass, mcs).__new__(mcs, name, bases,
+                                                       cls_dict)
+
+
+class Controller(object):
+    """Default controller."""
+
+    __metaclass__ = ControllerMetaclass
+
+    _view_builder_class = None
+
+    def __init__(self, view_builder=None):
+        """Initialize controller with a view builder instance."""
+        if view_builder:
+            self._view_builder = view_builder
+        elif self._view_builder_class:
+            self._view_builder = self._view_builder_class()
+        else:
+            self._view_builder = None
+
+
+class Fault(webob.exc.HTTPException):
+    """Wrap webob.exc.HTTPException to provide API friendly response."""
+
+    _fault_names = {
+            400: "badRequest",
+            401: "unauthorized",
+            403: "forbidden",
+            404: "itemNotFound",
+            405: "badMethod",
+            409: "conflictingRequest",
+            413: "overLimit",
+            415: "badMediaType",
+            501: "notImplemented",
+            503: "serviceUnavailable"}
+
+    def __init__(self, exception):
+        """Create a Fault for the given webob.exc.exception."""
+        self.wrapped_exc = exception
+        self.status_int = exception.status_int
+
+    @webob.dec.wsgify(RequestClass=Request)
+    def __call__(self, req):
+        """Generate a WSGI response based on the exception passed to ctor."""
+        # Replace the body with fault details.
+        code = self.wrapped_exc.status_int
+        fault_name = self._fault_names.get(code, "computeFault")
+        fault_data = {
+            fault_name: {
+                'code': code,
+                'message': self.wrapped_exc.explanation}}
+        if code == 413:
+            retry = self.wrapped_exc.headers['Retry-After']
+            fault_data[fault_name]['retryAfter'] = retry
+
+        # 'code' is an attribute on the fault tag itself
+        metadata = {'attributes': {fault_name: 'code'}}
+
+        xml_serializer = XMLDictSerializer(metadata, XMLNS_V1)
+
+        content_type = req.best_match_content_type()
+        serializer = {
+            'application/xml': xml_serializer,
+            'application/json': JSONDictSerializer(),
+        }[content_type]
+
+        self.wrapped_exc.body = serializer.serialize(fault_data)
+        self.wrapped_exc.content_type = content_type
+        _set_request_id_header(req, self.wrapped_exc.headers)
+
+        return self.wrapped_exc
+
+    def __str__(self):
+        return self.wrapped_exc.__str__()
+
+
+class OverLimitFault(webob.exc.HTTPException):
+    """
+    Rate-limited request response.
+    """
+
+    def __init__(self, message, details, retry_time):
+        """
+        Initialize new `OverLimitFault` with relevant information.
+        """
+        hdrs = OverLimitFault._retry_after(retry_time)
+        self.wrapped_exc = webob.exc.HTTPRequestEntityTooLarge(headers=hdrs)
+        self.content = {
+            "overLimitFault": {
+                "code": self.wrapped_exc.status_int,
+                "message": message,
+                "details": details,
+            },
+        }
+
+    @staticmethod
+    def _retry_after(retry_time):
+        delay = int(math.ceil(retry_time - time.time()))
+        retry_after = delay if delay > 0 else 0
+        headers = {'Retry-After': '%d' % retry_after}
+        return headers
+
+    @webob.dec.wsgify(RequestClass=Request)
+    def __call__(self, request):
+        """
+        Return the wrapped exception with a serialized body conforming to our
+        error format.
+        """
+        content_type = request.best_match_content_type()
+        metadata = {"attributes": {"overLimitFault": "code"}}
+
+        xml_serializer = XMLDictSerializer(metadata, XMLNS_V1)
+        serializer = {
+            'application/xml': xml_serializer,
+            'application/json': JSONDictSerializer(),
+        }[content_type]
+
+        content = serializer.serialize(self.content)
+        self.wrapped_exc.body = content
+
+        return self.wrapped_exc
+
+
+def _set_request_id_header(req, headers):
+    context = req.environ.get('cinder.context')
+    if context:
+        headers['x-compute-request-id'] = context.request_id
diff --git a/cinder/api/openstack/xmlutil.py b/cinder/api/openstack/xmlutil.py
new file mode 100644
index 000000000..5dfe0c122
--- /dev/null
+++ b/cinder/api/openstack/xmlutil.py
@@ -0,0 +1,908 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import os.path
+
+from lxml import etree
+
+from cinder import utils
+
+
+XMLNS_V10 = 'http://docs.rackspacecloud.com/servers/api/v1.0'
+XMLNS_V11 = 'http://docs.openstack.org/compute/api/v1.1'
+XMLNS_COMMON_V10 = 'http://docs.openstack.org/common/api/v1.0'
+XMLNS_ATOM = 'http://www.w3.org/2005/Atom'
+XMLNS_VOLUME_V1 = 'http://docs.openstack.org/volume/api/v1'
+
+
+def validate_schema(xml, schema_name):
+    if isinstance(xml, str):
+        xml = etree.fromstring(xml)
+    base_path = 'cinder/api/openstack/compute/schemas/v1.1/'
+    if schema_name in ('atom', 'atom-link'):
+        base_path = 'cinder/api/openstack/compute/schemas/'
+    schema_path = os.path.join(utils.cinderdir(),
+                               '%s%s.rng' % (base_path, schema_name))
+    schema_doc = etree.parse(schema_path)
+    relaxng = etree.RelaxNG(schema_doc)
+    relaxng.assertValid(xml)
+
+
+class Selector(object):
+    """Selects datum to operate on from an object."""
+
+    def __init__(self, *chain):
+        """Initialize the selector.
+
+        Each argument is a subsequent index into the object.
+        """
+
+        self.chain = chain
+
+    def __repr__(self):
+        """Return a representation of the selector."""
+
+        return "Selector" + repr(self.chain)
+
+    def __call__(self, obj, do_raise=False):
+        """Select a datum to operate on.
+
+        Selects the relevant datum within the object.
+
+        :param obj: The object from which to select the object.
+        :param do_raise: If False (the default), return None if the
+                         indexed datum does not exist.  Otherwise,
+                         raise a KeyError.
+        """
+
+        # Walk the selector list
+        for elem in self.chain:
+            # If it's callable, call it
+            if callable(elem):
+                obj = elem(obj)
+            else:
+                # Use indexing
+                try:
+                    obj = obj[elem]
+                except (KeyError, IndexError):
+                    # No sense going any further
+                    if do_raise:
+                        # Convert to a KeyError, for consistency
+                        raise KeyError(elem)
+                    return None
+
+        # Return the finally-selected object
+        return obj
+
+
+def get_items(obj):
+    """Get items in obj."""
+
+    return list(obj.items())
+
+
+class EmptyStringSelector(Selector):
+    """Returns the empty string if Selector would return None."""
+    def __call__(self, obj, do_raise=False):
+        """Returns empty string if the selected value does not exist."""
+
+        try:
+            return super(EmptyStringSelector, self).__call__(obj, True)
+        except KeyError:
+            return ""
+
+
+class ConstantSelector(object):
+    """Returns a constant."""
+
+    def __init__(self, value):
+        """Initialize the selector.
+
+        :param value: The value to return.
+        """
+
+        self.value = value
+
+    def __repr__(self):
+        """Return a representation of the selector."""
+
+        return repr(self.value)
+
+    def __call__(self, _obj, _do_raise=False):
+        """Select a datum to operate on.
+
+        Returns a constant value.  Compatible with
+        Selector.__call__().
+        """
+
+        return self.value
+
+
+class TemplateElement(object):
+    """Represent an element in the template."""
+
+    def __init__(self, tag, attrib=None, selector=None, subselector=None,
+                 **extra):
+        """Initialize an element.
+
+        Initializes an element in the template.  Keyword arguments
+        specify attributes to be set on the element; values must be
+        callables.  See TemplateElement.set() for more information.
+
+        :param tag: The name of the tag to create.
+        :param attrib: An optional dictionary of element attributes.
+        :param selector: An optional callable taking an object and
+                         optional boolean do_raise indicator and
+                         returning the object bound to the element.
+        :param subselector: An optional callable taking an object and
+                            optional boolean do_raise indicator and
+                            returning the object bound to the element.
+                            This is used to further refine the datum
+                            object returned by selector in the event
+                            that it is a list of objects.
+        """
+
+        # Convert selector into a Selector
+        if selector is None:
+            selector = Selector()
+        elif not callable(selector):
+            selector = Selector(selector)
+
+        # Convert subselector into a Selector
+        if subselector is not None and not callable(subselector):
+            subselector = Selector(subselector)
+
+        self.tag = tag
+        self.selector = selector
+        self.subselector = subselector
+        self.attrib = {}
+        self._text = None
+        self._children = []
+        self._childmap = {}
+
+        # Run the incoming attributes through set() so that they
+        # become selectorized
+        if not attrib:
+            attrib = {}
+        attrib.update(extra)
+        for k, v in attrib.items():
+            self.set(k, v)
+
+    def __repr__(self):
+        """Return a representation of the template element."""
+
+        return ('<%s.%s %r at %#x>' %
+                (self.__class__.__module__, self.__class__.__name__,
+                 self.tag, id(self)))
+
+    def __len__(self):
+        """Return the number of child elements."""
+
+        return len(self._children)
+
+    def __contains__(self, key):
+        """Determine whether a child node named by key exists."""
+
+        return key in self._childmap
+
+    def __getitem__(self, idx):
+        """Retrieve a child node by index or name."""
+
+        if isinstance(idx, basestring):
+            # Allow access by node name
+            return self._childmap[idx]
+        else:
+            return self._children[idx]
+
+    def append(self, elem):
+        """Append a child to the element."""
+
+        # Unwrap templates...
+        elem = elem.unwrap()
+
+        # Avoid duplications
+        if elem.tag in self._childmap:
+            raise KeyError(elem.tag)
+
+        self._children.append(elem)
+        self._childmap[elem.tag] = elem
+
+    def extend(self, elems):
+        """Append children to the element."""
+
+        # Pre-evaluate the elements
+        elemmap = {}
+        elemlist = []
+        for elem in elems:
+            # Unwrap templates...
+            elem = elem.unwrap()
+
+            # Avoid duplications
+            if elem.tag in self._childmap or elem.tag in elemmap:
+                raise KeyError(elem.tag)
+
+            elemmap[elem.tag] = elem
+            elemlist.append(elem)
+
+        # Update the children
+        self._children.extend(elemlist)
+        self._childmap.update(elemmap)
+
+    def insert(self, idx, elem):
+        """Insert a child element at the given index."""
+
+        # Unwrap templates...
+        elem = elem.unwrap()
+
+        # Avoid duplications
+        if elem.tag in self._childmap:
+            raise KeyError(elem.tag)
+
+        self._children.insert(idx, elem)
+        self._childmap[elem.tag] = elem
+
+    def remove(self, elem):
+        """Remove a child element."""
+
+        # Unwrap templates...
+        elem = elem.unwrap()
+
+        # Check if element exists
+        if elem.tag not in self._childmap or self._childmap[elem.tag] != elem:
+            raise ValueError(_('element is not a child'))
+
+        self._children.remove(elem)
+        del self._childmap[elem.tag]
+
+    def get(self, key):
+        """Get an attribute.
+
+        Returns a callable which performs datum selection.
+
+        :param key: The name of the attribute to get.
+        """
+
+        return self.attrib[key]
+
+    def set(self, key, value=None):
+        """Set an attribute.
+
+        :param key: The name of the attribute to set.
+
+        :param value: A callable taking an object and optional boolean
+                      do_raise indicator and returning the datum bound
+                      to the attribute.  If None, a Selector() will be
+                      constructed from the key.  If a string, a
+                      Selector() will be constructed from the string.
+        """
+
+        # Convert value to a selector
+        if value is None:
+            value = Selector(key)
+        elif not callable(value):
+            value = Selector(value)
+
+        self.attrib[key] = value
+
+    def keys(self):
+        """Return the attribute names."""
+
+        return self.attrib.keys()
+
+    def items(self):
+        """Return the attribute names and values."""
+
+        return self.attrib.items()
+
+    def unwrap(self):
+        """Unwraps a template to return a template element."""
+
+        # We are a template element
+        return self
+
+    def wrap(self):
+        """Wraps a template element to return a template."""
+
+        # Wrap in a basic Template
+        return Template(self)
+
+    def apply(self, elem, obj):
+        """Apply text and attributes to an etree.Element.
+
+        Applies the text and attribute instructions in the template
+        element to an etree.Element instance.
+
+        :param elem: An etree.Element instance.
+        :param obj: The base object associated with this template
+                    element.
+        """
+
+        # Start with the text...
+        if self.text is not None:
+            elem.text = unicode(self.text(obj))
+
+        # Now set up all the attributes...
+        for key, value in self.attrib.items():
+            try:
+                elem.set(key, unicode(value(obj, True)))
+            except KeyError:
+                # Attribute has no value, so don't include it
+                pass
+
+    def _render(self, parent, datum, patches, nsmap):
+        """Internal rendering.
+
+        Renders the template node into an etree.Element object.
+        Returns the etree.Element object.
+
+        :param parent: The parent etree.Element instance.
+        :param datum: The datum associated with this template element.
+        :param patches: A list of other template elements that must
+                        also be applied.
+        :param nsmap: An optional namespace dictionary to be
+                      associated with the etree.Element instance.
+        """
+
+        # Allocate a node
+        if callable(self.tag):
+            tagname = self.tag(datum)
+        else:
+            tagname = self.tag
+        elem = etree.Element(tagname, nsmap=nsmap)
+
+        # If we have a parent, append the node to the parent
+        if parent is not None:
+            parent.append(elem)
+
+        # If the datum is None, do nothing else
+        if datum is None:
+            return elem
+
+        # Apply this template element to the element
+        self.apply(elem, datum)
+
+        # Additionally, apply the patches
+        for patch in patches:
+            patch.apply(elem, datum)
+
+        # We have fully rendered the element; return it
+        return elem
+
+    def render(self, parent, obj, patches=[], nsmap=None):
+        """Render an object.
+
+        Renders an object against this template node.  Returns a list
+        of two-item tuples, where the first item is an etree.Element
+        instance and the second item is the datum associated with that
+        instance.
+
+        :param parent: The parent for the etree.Element instances.
+        :param obj: The object to render this template element
+                    against.
+        :param patches: A list of other template elements to apply
+                        when rendering this template element.
+        :param nsmap: An optional namespace dictionary to attach to
+                      the etree.Element instances.
+        """
+
+        # First, get the datum we're rendering
+        data = None if obj is None else self.selector(obj)
+
+        # Check if we should render at all
+        if not self.will_render(data):
+            return []
+        elif data is None:
+            return [(self._render(parent, None, patches, nsmap), None)]
+
+        # Make the data into a list if it isn't already
+        if not isinstance(data, list):
+            data = [data]
+        elif parent is None:
+            raise ValueError(_('root element selecting a list'))
+
+        # Render all the elements
+        elems = []
+        for datum in data:
+            if self.subselector is not None:
+                datum = self.subselector(datum)
+            elems.append((self._render(parent, datum, patches, nsmap), datum))
+
+        # Return all the elements rendered, as well as the
+        # corresponding datum for the next step down the tree
+        return elems
+
+    def will_render(self, datum):
+        """Hook method.
+
+        An overridable hook method to determine whether this template
+        element will be rendered at all.  By default, returns False
+        (inhibiting rendering) if the datum is None.
+
+        :param datum: The datum associated with this template element.
+        """
+
+        # Don't render if datum is None
+        return datum is not None
+
+    def _text_get(self):
+        """Template element text.
+
+        Either None or a callable taking an object and optional
+        boolean do_raise indicator and returning the datum bound to
+        the text of the template element.
+        """
+
+        return self._text
+
+    def _text_set(self, value):
+        # Convert value to a selector
+        if value is not None and not callable(value):
+            value = Selector(value)
+
+        self._text = value
+
+    def _text_del(self):
+        self._text = None
+
+    text = property(_text_get, _text_set, _text_del)
+
+    def tree(self):
+        """Return string representation of the template tree.
+
+        Returns a representation of the template rooted at this
+        element as a string, suitable for inclusion in debug logs.
+        """
+
+        # Build the inner contents of the tag...
+        contents = [self.tag, '!selector=%r' % self.selector]
+
+        # Add the text...
+        if self.text is not None:
+            contents.append('!text=%r' % self.text)
+
+        # Add all the other attributes
+        for key, value in self.attrib.items():
+            contents.append('%s=%r' % (key, value))
+
+        # If there are no children, return it as a closed tag
+        if len(self) == 0:
+            return '<%s/>' % ' '.join([str(i) for i in contents])
+
+        # OK, recurse to our children
+        children = [c.tree() for c in self]
+
+        # Return the result
+        return ('<%s>%s</%s>' %
+                (' '.join(contents), ''.join(children), self.tag))
+
+
+def SubTemplateElement(parent, tag, attrib=None, selector=None,
+                       subselector=None, **extra):
+    """Create a template element as a child of another.
+
+    Corresponds to the etree.SubElement interface.  Parameters are as
+    for TemplateElement, with the addition of the parent.
+    """
+
+    # Convert attributes
+    attrib = attrib or {}
+    attrib.update(extra)
+
+    # Get a TemplateElement
+    elem = TemplateElement(tag, attrib=attrib, selector=selector,
+                           subselector=subselector)
+
+    # Append the parent safely
+    if parent is not None:
+        parent.append(elem)
+
+    return elem
+
+
+class Template(object):
+    """Represent a template."""
+
+    def __init__(self, root, nsmap=None):
+        """Initialize a template.
+
+        :param root: The root element of the template.
+        :param nsmap: An optional namespace dictionary to be
+                      associated with the root element of the
+                      template.
+        """
+
+        self.root = root.unwrap() if root is not None else None
+        self.nsmap = nsmap or {}
+        self.serialize_options = dict(encoding='UTF-8', xml_declaration=True)
+
+    def _serialize(self, parent, obj, siblings, nsmap=None):
+        """Internal serialization.
+
+        Recursive routine to build a tree of etree.Element instances
+        from an object based on the template.  Returns the first
+        etree.Element instance rendered, or None.
+
+        :param parent: The parent etree.Element instance.  Can be
+                       None.
+        :param obj: The object to render.
+        :param siblings: The TemplateElement instances against which
+                         to render the object.
+        :param nsmap: An optional namespace dictionary to be
+                      associated with the etree.Element instance
+                      rendered.
+        """
+
+        # First step, render the element
+        elems = siblings[0].render(parent, obj, siblings[1:], nsmap)
+
+        # Now, recurse to all child elements
+        seen = set()
+        for idx, sibling in enumerate(siblings):
+            for child in sibling:
+                # Have we handled this child already?
+                if child.tag in seen:
+                    continue
+                seen.add(child.tag)
+
+                # Determine the child's siblings
+                nieces = [child]
+                for sib in siblings[idx + 1:]:
+                    if child.tag in sib:
+                        nieces.append(sib[child.tag])
+
+                # Now we recurse for every data element
+                for elem, datum in elems:
+                    self._serialize(elem, datum, nieces)
+
+        # Return the first element; at the top level, this will be the
+        # root element
+        if elems:
+            return elems[0][0]
+
+    def serialize(self, obj, *args, **kwargs):
+        """Serialize an object.
+
+        Serializes an object against the template.  Returns a string
+        with the serialized XML.  Positional and keyword arguments are
+        passed to etree.tostring().
+
+        :param obj: The object to serialize.
+        """
+
+        elem = self.make_tree(obj)
+        if elem is None:
+            return ''
+
+        for k, v in self.serialize_options.items():
+            kwargs.setdefault(k, v)
+
+        # Serialize it into XML
+        return etree.tostring(elem, *args, **kwargs)
+
+    def make_tree(self, obj):
+        """Create a tree.
+
+        Serializes an object against the template.  Returns an Element
+        node with appropriate children.
+
+        :param obj: The object to serialize.
+        """
+
+        # If the template is empty, return the empty string
+        if self.root is None:
+            return None
+
+        # Get the siblings and nsmap of the root element
+        siblings = self._siblings()
+        nsmap = self._nsmap()
+
+        # Form the element tree
+        return self._serialize(None, obj, siblings, nsmap)
+
+    def _siblings(self):
+        """Hook method for computing root siblings.
+
+        An overridable hook method to return the siblings of the root
+        element.  By default, this is the root element itself.
+        """
+
+        return [self.root]
+
+    def _nsmap(self):
+        """Hook method for computing the namespace dictionary.
+
+        An overridable hook method to return the namespace dictionary.
+        """
+
+        return self.nsmap.copy()
+
+    def unwrap(self):
+        """Unwraps a template to return a template element."""
+
+        # Return the root element
+        return self.root
+
+    def wrap(self):
+        """Wraps a template element to return a template."""
+
+        # We are a template
+        return self
+
+    def apply(self, master):
+        """Hook method for determining slave applicability.
+
+        An overridable hook method used to determine if this template
+        is applicable as a slave to a given master template.
+
+        :param master: The master template to test.
+        """
+
+        return True
+
+    def tree(self):
+        """Return string representation of the template tree.
+
+        Returns a representation of the template as a string, suitable
+        for inclusion in debug logs.
+        """
+
+        return "%r: %s" % (self, self.root.tree())
+
+
+class MasterTemplate(Template):
+    """Represent a master template.
+
+    Master templates are versioned derivatives of templates that
+    additionally allow slave templates to be attached.  Slave
+    templates allow modification of the serialized result without
+    directly changing the master.
+    """
+
+    def __init__(self, root, version, nsmap=None):
+        """Initialize a master template.
+
+        :param root: The root element of the template.
+        :param version: The version number of the template.
+        :param nsmap: An optional namespace dictionary to be
+                      associated with the root element of the
+                      template.
+        """
+
+        super(MasterTemplate, self).__init__(root, nsmap)
+        self.version = version
+        self.slaves = []
+
+    def __repr__(self):
+        """Return string representation of the template."""
+
+        return ("<%s.%s object version %s at %#x>" %
+                (self.__class__.__module__, self.__class__.__name__,
+                 self.version, id(self)))
+
+    def _siblings(self):
+        """Hook method for computing root siblings.
+
+        An overridable hook method to return the siblings of the root
+        element.  This is the root element plus the root elements of
+        all the slave templates.
+        """
+
+        return [self.root] + [slave.root for slave in self.slaves]
+
+    def _nsmap(self):
+        """Hook method for computing the namespace dictionary.
+
+        An overridable hook method to return the namespace dictionary.
+        The namespace dictionary is computed by taking the master
+        template's namespace dictionary and updating it from all the
+        slave templates.
+        """
+
+        nsmap = self.nsmap.copy()
+        for slave in self.slaves:
+            nsmap.update(slave._nsmap())
+        return nsmap
+
+    def attach(self, *slaves):
+        """Attach one or more slave templates.
+
+        Attaches one or more slave templates to the master template.
+        Slave templates must have a root element with the same tag as
+        the master template.  The slave template's apply() method will
+        be called to determine if the slave should be applied to this
+        master; if it returns False, that slave will be skipped.
+        (This allows filtering of slaves based on the version of the
+        master template.)
+        """
+
+        slave_list = []
+        for slave in slaves:
+            slave = slave.wrap()
+
+            # Make sure we have a tree match
+            if slave.root.tag != self.root.tag:
+                slavetag = slave.root.tag
+                mastertag = self.root.tag
+                msg = _("Template tree mismatch; adding slave %(slavetag)s "
+                        "to master %(mastertag)s") % locals()
+                raise ValueError(msg)
+
+            # Make sure slave applies to this template
+            if not slave.apply(self):
+                continue
+
+            slave_list.append(slave)
+
+        # Add the slaves
+        self.slaves.extend(slave_list)
+
+    def copy(self):
+        """Return a copy of this master template."""
+
+        # Return a copy of the MasterTemplate
+        tmp = self.__class__(self.root, self.version, self.nsmap)
+        tmp.slaves = self.slaves[:]
+        return tmp
+
+
+class SlaveTemplate(Template):
+    """Represent a slave template.
+
+    Slave templates are versioned derivatives of templates.  Each
+    slave has a minimum version and optional maximum version of the
+    master template to which they can be attached.
+    """
+
+    def __init__(self, root, min_vers, max_vers=None, nsmap=None):
+        """Initialize a slave template.
+
+        :param root: The root element of the template.
+        :param min_vers: The minimum permissible version of the master
+                         template for this slave template to apply.
+        :param max_vers: An optional upper bound for the master
+                         template version.
+        :param nsmap: An optional namespace dictionary to be
+                      associated with the root element of the
+                      template.
+        """
+
+        super(SlaveTemplate, self).__init__(root, nsmap)
+        self.min_vers = min_vers
+        self.max_vers = max_vers
+
+    def __repr__(self):
+        """Return string representation of the template."""
+
+        return ("<%s.%s object versions %s-%s at %#x>" %
+                (self.__class__.__module__, self.__class__.__name__,
+                 self.min_vers, self.max_vers, id(self)))
+
+    def apply(self, master):
+        """Hook method for determining slave applicability.
+
+        An overridable hook method used to determine if this template
+        is applicable as a slave to a given master template.  This
+        version requires the master template to have a version number
+        between min_vers and max_vers.
+
+        :param master: The master template to test.
+        """
+
+        # Does the master meet our minimum version requirement?
+        if master.version < self.min_vers:
+            return False
+
+        # How about our maximum version requirement?
+        if self.max_vers is not None and master.version > self.max_vers:
+            return False
+
+        return True
+
+
+class TemplateBuilder(object):
+    """Template builder.
+
+    This class exists to allow templates to be lazily built without
+    having to build them each time they are needed.  It must be
+    subclassed, and the subclass must implement the construct()
+    method, which must return a Template (or subclass) instance.  The
+    constructor will always return the template returned by
+    construct(), or, if it has a copy() method, a copy of that
+    template.
+    """
+
+    _tmpl = None
+
+    def __new__(cls, copy=True):
+        """Construct and return a template.
+
+        :param copy: If True (the default), a copy of the template
+                     will be constructed and returned, if possible.
+        """
+
+        # Do we need to construct the template?
+        if cls._tmpl is None:
+            tmp = super(TemplateBuilder, cls).__new__(cls)
+
+            # Construct the template
+            cls._tmpl = tmp.construct()
+
+        # If the template has a copy attribute, return the result of
+        # calling it
+        if copy and hasattr(cls._tmpl, 'copy'):
+            return cls._tmpl.copy()
+
+        # Return the template
+        return cls._tmpl
+
+    def construct(self):
+        """Construct a template.
+
+        Called to construct a template instance, which it must return.
+        Only called once.
+        """
+
+        raise NotImplementedError(_("subclasses must implement construct()!"))
+
+
+def make_links(parent, selector=None):
+    """
+    Attach an Atom <links> element to the parent.
+    """
+
+    elem = SubTemplateElement(parent, '{%s}link' % XMLNS_ATOM,
+                              selector=selector)
+    elem.set('rel')
+    elem.set('type')
+    elem.set('href')
+
+    # Just for completeness...
+    return elem
+
+
+def make_flat_dict(name, selector=None, subselector=None, ns=None):
+    """
+    Utility for simple XML templates that traditionally used
+    XMLDictSerializer with no metadata.  Returns a template element
+    where the top-level element has the given tag name, and where
+    sub-elements have tag names derived from the object's keys and
+    text derived from the object's values.  This only works for flat
+    dictionary objects, not dictionaries containing nested lists or
+    dictionaries.
+    """
+
+    # Set up the names we need...
+    if ns is None:
+        elemname = name
+        tagname = Selector(0)
+    else:
+        elemname = '{%s}%s' % (ns, name)
+        tagname = lambda obj, do_raise=False: '{%s}%s' % (ns, obj[0])
+
+    if selector is None:
+        selector = name
+
+    # Build the root element
+    root = TemplateElement(elemname, selector=selector,
+                           subselector=subselector)
+
+    # Build an element to represent all the keys and values
+    elem = SubTemplateElement(root, tagname, selector=get_items)
+    elem.text = 1
+
+    # Return the template
+    return root
diff --git a/cinder/api/sizelimit.py b/cinder/api/sizelimit.py
new file mode 100644
index 000000000..3bde3bf8d
--- /dev/null
+++ b/cinder/api/sizelimit.py
@@ -0,0 +1,54 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2012 OpenStack, LLC
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+Request Body limiting middleware.
+
+"""
+
+import webob.dec
+import webob.exc
+
+from cinder import context
+from cinder import flags
+from cinder import log as logging
+from cinder.openstack.common import cfg
+from cinder import wsgi
+
+
+#default request size is 112k
+max_request_body_size_opt = cfg.BoolOpt('osapi_max_request_body_size',
+        default=114688,
+        help='')
+
+FLAGS = flags.FLAGS
+FLAGS.register_opt(max_request_body_size_opt)
+LOG = logging.getLogger(__name__)
+
+
+class RequestBodySizeLimiter(wsgi.Middleware):
+    """Add a 'cinder.context' to WSGI environ."""
+
+    def __init__(self, *args, **kwargs):
+        super(RequestBodySizeLimiter, self).__init__(*args, **kwargs)
+
+    @webob.dec.wsgify(RequestClass=wsgi.Request)
+    def __call__(self, req):
+        if (req.content_length > FLAGS.osapi_max_request_body_size
+            or len(req.body) > FLAGS.osapi_max_request_body_size):
+            msg = _("Request is too large.")
+            raise webob.exc.HTTPBadRequest(explanation=msg)
+        else:
+            return self.application
diff --git a/cinder/common/__init__.py b/cinder/common/__init__.py
new file mode 100644
index 000000000..0a3b98867
--- /dev/null
+++ b/cinder/common/__init__.py
@@ -0,0 +1,15 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 Red Hat, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
diff --git a/cinder/common/memorycache.py b/cinder/common/memorycache.py
new file mode 100644
index 000000000..564526092
--- /dev/null
+++ b/cinder/common/memorycache.py
@@ -0,0 +1,64 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Super simple fake memcache client."""
+
+from cinder import utils
+
+
+class Client(object):
+    """Replicates a tiny subset of memcached client interface."""
+
+    def __init__(self, *args, **kwargs):
+        """Ignores the passed in args."""
+        self.cache = {}
+
+    def get(self, key):
+        """Retrieves the value for a key or None.
+
+        this expunges expired keys during each get"""
+
+        for k in self.cache.keys():
+            (timeout, _value) = self.cache[k]
+            if timeout and utils.utcnow_ts() >= timeout:
+                del self.cache[k]
+
+        return self.cache.get(key, (0, None))[1]
+
+    def set(self, key, value, time=0, min_compress_len=0):
+        """Sets the value for a key."""
+        timeout = 0
+        if time != 0:
+            timeout = utils.utcnow_ts() + time
+        self.cache[key] = (timeout, value)
+        return True
+
+    def add(self, key, value, time=0, min_compress_len=0):
+        """Sets the value for a key if it doesn't exist."""
+        if not self.get(key) is None:
+            return False
+        return self.set(key, value, time, min_compress_len)
+
+    def incr(self, key, delta=1):
+        """Increments the value for a key."""
+        value = self.get(key)
+        if value is None:
+            return None
+        new_value = int(value) + delta
+        self.cache[key] = (self.cache[key][0], str(new_value))
+        return new_value
diff --git a/cinder/common/policy.py b/cinder/common/policy.py
new file mode 100644
index 000000000..ec944a1cc
--- /dev/null
+++ b/cinder/common/policy.py
@@ -0,0 +1,222 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 OpenStack, LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Common Policy Engine Implementation"""
+
+import json
+import urllib
+import urllib2
+
+
+class NotAuthorized(Exception):
+    pass
+
+
+_BRAIN = None
+
+
+def set_brain(brain):
+    """Set the brain used by enforce().
+
+    Defaults use Brain() if not set.
+
+    """
+    global _BRAIN
+    _BRAIN = brain
+
+
+def reset():
+    """Clear the brain used by enforce()."""
+    global _BRAIN
+    _BRAIN = None
+
+
+def enforce(match_list, target_dict, credentials_dict):
+    """Enforces authorization of some rules against credentials.
+
+    :param match_list: nested tuples of data to match against
+
+        The basic brain supports three types of match lists:
+
+            1) rules
+
+                looks like: ``('rule:compute:get_instance',)``
+
+                Retrieves the named rule from the rules dict and recursively
+                checks against the contents of the rule.
+
+            2) roles
+
+                looks like: ``('role:compute:admin',)``
+
+                Matches if the specified role is in credentials_dict['roles'].
+
+            3) generic
+
+                looks like: ``('tenant_id:%(tenant_id)s',)``
+
+                Substitutes values from the target dict into the match using
+                the % operator and matches them against the creds dict.
+
+        Combining rules:
+
+            The brain returns True if any of the outer tuple of rules
+            match and also True if all of the inner tuples match. You
+            can use this to perform simple boolean logic.  For
+            example, the following rule would return True if the creds
+            contain the role 'admin' OR the if the tenant_id matches
+            the target dict AND the the creds contains the role
+            'compute_sysadmin':
+
+            ::
+
+                {
+                    "rule:combined": (
+                        'role:admin',
+                        ('tenant_id:%(tenant_id)s', 'role:compute_sysadmin')
+                    )
+                }
+
+        Note that rule and role are reserved words in the credentials match, so
+        you can't match against properties with those names. Custom brains may
+        also add new reserved words. For example, the HttpBrain adds http as a
+        reserved word.
+
+    :param target_dict: dict of object properties
+
+      Target dicts contain as much information as we can about the object being
+      operated on.
+
+    :param credentials_dict: dict of actor properties
+
+      Credentials dicts contain as much information as we can about the user
+      performing the action.
+
+    :raises NotAuthorized: if the check fails
+
+    """
+    global _BRAIN
+    if not _BRAIN:
+        _BRAIN = Brain()
+    if not _BRAIN.check(match_list, target_dict, credentials_dict):
+        raise NotAuthorized()
+
+
+class Brain(object):
+    """Implements policy checking."""
+    @classmethod
+    def load_json(cls, data, default_rule=None):
+        """Init a brain using json instead of a rules dictionary."""
+        rules_dict = json.loads(data)
+        return cls(rules=rules_dict, default_rule=default_rule)
+
+    def __init__(self, rules=None, default_rule=None):
+        self.rules = rules or {}
+        self.default_rule = default_rule
+
+    def add_rule(self, key, match):
+        self.rules[key] = match
+
+    def _check(self, match, target_dict, cred_dict):
+        match_kind, match_value = match.split(':', 1)
+        try:
+            f = getattr(self, '_check_%s' % match_kind)
+        except AttributeError:
+            if not self._check_generic(match, target_dict, cred_dict):
+                return False
+        else:
+            if not f(match_value, target_dict, cred_dict):
+                return False
+        return True
+
+    def check(self, match_list, target_dict, cred_dict):
+        """Checks authorization of some rules against credentials.
+
+        Detailed description of the check with examples in policy.enforce().
+
+        :param match_list: nested tuples of data to match against
+        :param target_dict: dict of object properties
+        :param credentials_dict: dict of actor properties
+
+        :returns: True if the check passes
+
+        """
+        if not match_list:
+            return True
+        for and_list in match_list:
+            if isinstance(and_list, basestring):
+                and_list = (and_list,)
+            if all([self._check(item, target_dict, cred_dict)
+                    for item in and_list]):
+                return True
+        return False
+
+    def _check_rule(self, match, target_dict, cred_dict):
+        """Recursively checks credentials based on the brains rules."""
+        try:
+            new_match_list = self.rules[match]
+        except KeyError:
+            if self.default_rule and match != self.default_rule:
+                new_match_list = ('rule:%s' % self.default_rule,)
+            else:
+                return False
+
+        return self.check(new_match_list, target_dict, cred_dict)
+
+    def _check_role(self, match, target_dict, cred_dict):
+        """Check that there is a matching role in the cred dict."""
+        return match.lower() in [x.lower() for x in cred_dict['roles']]
+
+    def _check_generic(self, match, target_dict, cred_dict):
+        """Check an individual match.
+
+        Matches look like:
+
+            tenant:%(tenant_id)s
+            role:compute:admin
+
+        """
+
+        # TODO(termie): do dict inspection via dot syntax
+        match = match % target_dict
+        key, value = match.split(':', 1)
+        if key in cred_dict:
+            return value == cred_dict[key]
+        return False
+
+
+class HttpBrain(Brain):
+    """A brain that can check external urls for policy.
+
+    Posts json blobs for target and credentials.
+
+    """
+
+    def _check_http(self, match, target_dict, cred_dict):
+        """Check http: rules by calling to a remote server.
+
+        This example implementation simply verifies that the response is
+        exactly 'True'. A custom brain using response codes could easily
+        be implemented.
+
+        """
+        url = match % target_dict
+        data = {'target': json.dumps(target_dict),
+                'credentials': json.dumps(cred_dict)}
+        post_data = urllib.urlencode(data)
+        f = urllib2.urlopen(url, post_data)
+        return f.read() == "True"
diff --git a/cinder/compat/__init__.py b/cinder/compat/__init__.py
new file mode 100644
index 000000000..8f085d939
--- /dev/null
+++ b/cinder/compat/__init__.py
@@ -0,0 +1,15 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2012 Red Hat, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
diff --git a/cinder/compat/flagfile.py b/cinder/compat/flagfile.py
new file mode 100644
index 000000000..9690217b2
--- /dev/null
+++ b/cinder/compat/flagfile.py
@@ -0,0 +1,188 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2012 Red Hat, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import contextlib
+import os
+import shutil
+import tempfile
+
+'''
+Compatibility code for handling the deprecated --flagfile option.
+
+gflags style configuration files are deprecated and will be removed in future.
+
+The code in this module transles --flagfile options into --config-file and can
+be removed when support for --flagfile is removed.
+'''
+
+
+def _get_flagfile(argp):
+    '''Parse the filename from a --flagfile argument.
+
+    The current and next arguments are passed as a 2 item list. If the
+    flagfile filename is in the next argument, the two arguments are
+    joined into the first item while the second item is set to None.
+    '''
+    i = argp[0].find('-flagfile')
+    if i < 0:
+        return None
+
+    # Accept -flagfile or -flagfile
+    if i != 0 and (i != 1 or argp[0][i] != '-'):
+        return None
+
+    i += len('-flagfile')
+    if i == len(argp[0]):  # Accept [-]-flagfile foo
+        argp[0] += '=' + argp[1]
+        argp[1] = None
+
+    if argp[0][i] != '=':  # Accept [-]-flagfile=foo
+        return None
+
+    return argp[0][i + 1:]
+
+
+def _open_file_for_reading(path):
+    '''Helper method which test code may stub out.'''
+    return open(path, 'r')
+
+
+def _open_fd_for_writing(fd, _path):
+    '''Helper method which test code may stub out.'''
+    return os.fdopen(fd, 'w')
+
+
+def _read_lines(flagfile):
+    '''Read a flag file, returning all lines with comments stripped.'''
+    with _open_file_for_reading(flagfile) as f:
+        lines = f.readlines()
+    ret = []
+    for l in lines:
+        if l.isspace() or l.startswith('#') or l.startswith('//'):
+            continue
+        ret.append(l.strip())
+    return ret
+
+
+def _read_flagfile(arg, next_arg, tempdir=None):
+    '''Convert a --flagfile argument to --config-file.
+
+    If the supplied argument is a --flagfile argument, read the contents
+    of the file and convert it to a .ini format config file. Return a
+    --config-file argument with the converted file.
+
+    If the flag file contains more --flagfile arguments, multiple
+    --config-file arguments will be returned.
+
+    The returned argument list may also contain None values which should
+    be filtered out later.
+    '''
+    argp = [arg, next_arg]
+    flagfile = _get_flagfile(argp)
+    if not flagfile:
+        return argp
+
+    args = _read_lines(flagfile)
+
+    if args and not args[0].startswith('--'):
+        # This is a config file, not a flagfile, so return it.
+        return ['--config-file=' + flagfile] + argp[1:]
+
+    #
+    # We're recursing here to convert any --flagfile arguments
+    # read from this flagfile into --config-file arguments
+    #
+    # We don't actually include those --config-file arguments
+    # in the generated config file; instead we include all those
+    # --config-file args in the final command line
+    #
+    args = _iterate_args(args, _read_flagfile, tempdir=tempdir)
+
+    config_file_args = []
+
+    (fd, tmpconf) = tempfile.mkstemp(suffix='.conf', dir=tempdir)
+
+    with _open_fd_for_writing(fd, tmpconf) as f:
+        f.write('[DEFAULT]\n')
+        for arg in args:
+            if arg.startswith('--config-file='):
+                config_file_args.append(arg)
+                continue
+            if '=' in arg:
+                f.write(arg[2:] + '\n')
+            elif arg[2:].startswith('no'):
+                f.write(arg[4:] + '=false\n')
+            else:
+                f.write(arg[2:] + '=true\n')
+
+    return ['--config-file=' + tmpconf] + argp[1:] + config_file_args
+
+
+def _iterate_args(args, iterator, **kwargs):
+    '''Run an iterator function on the supplied args list.
+
+    The iterator is passed the current arg and next arg and returns a
+    list of args. The returned args replace the suppied args in the
+    resulting args list.
+
+    The iterator will be passed None for the next arg when processing
+    the last arg.
+    '''
+    args.append(None)
+
+    ret = []
+    for i in range(len(args)):
+        if args[i] is None:  # last item, or consumed file name
+            continue
+
+        modified = iterator(args[i], args[i + 1], **kwargs)
+        args[i], args[i + 1] = modified[:2]
+
+        ret.extend(modified[:1] + modified[2:])  # don't append next arg
+
+    return filter(None, ret)
+
+
+def handle_flagfiles(args, tempdir=None):
+    '''Replace --flagfile arguments with --config-file arguments.
+
+    Replace any --flagfile argument in the supplied list with a --config-file
+    argument containing a temporary config file with the contents of the flag
+    file translated to .ini format.
+
+    The tempdir argument is a directory which will be used to create temporary
+    files.
+    '''
+    return _iterate_args(args[:], _read_flagfile, tempdir=tempdir)
+
+
+@contextlib.contextmanager
+def handle_flagfiles_managed(args):
+    '''A context manager for handle_flagfiles() which removes temp files.
+
+    For use with the 'with' statement, i.e.::
+
+        with handle_flagfiles_managed(args) as args:
+             # Do stuff
+        # Any temporary fils have been removed
+    '''
+    # NOTE(johannes): Would be nice to use utils.tempdir(), but it
+    # causes an import loop
+    tempdir = tempfile.mkdtemp(prefix='cinder-conf-')
+    try:
+        yield handle_flagfiles(args, tempdir=tempdir)
+    finally:
+        shutil.rmtree(tempdir)
diff --git a/cinder/compute/__init__.py b/cinder/compute/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/cinder/compute/aggregate_states.py b/cinder/compute/aggregate_states.py
new file mode 100644
index 000000000..92e194027
--- /dev/null
+++ b/cinder/compute/aggregate_states.py
@@ -0,0 +1,44 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Possible states for host aggregates.
+
+An aggregate may be 'created', in which case the admin has triggered its
+creation, but the underlying hypervisor pool has not actually being set up
+yet. An aggregate may be 'changing', meaning that the underlying hypervisor
+pool is being setup. An aggregate may be 'active', in which case the underlying
+hypervisor pool is up and running. An aggregate may be 'dismissed' when it has
+no hosts and it has been deleted. An aggregate may be in 'error' in all other
+cases.
+A 'created' aggregate becomes 'changing' during the first request of
+adding a host. During a 'changing' status no other requests will be accepted;
+this is to allow the hypervisor layer to instantiate the underlying pool
+without any potential race condition that may incur in master/slave-based
+configurations. The aggregate goes into the 'active' state when the underlying
+pool has been correctly instantiated.
+All other operations (e.g. add/remove hosts) that succeed will keep the
+aggregate in the 'active' state. If a number of continuous requests fail,
+an 'active' aggregate goes into an 'error' state. To recover from such a state,
+admin intervention is required. Currently an error state is irreversible,
+that is, in order to recover from it an aggregate must be deleted.
+"""
+
+CREATED = 'created'
+CHANGING = 'changing'
+ACTIVE = 'active'
+ERROR = 'error'
+DISMISSED = 'dismissed'
diff --git a/cinder/context.py b/cinder/context.py
new file mode 100644
index 000000000..a9b5519c2
--- /dev/null
+++ b/cinder/context.py
@@ -0,0 +1,138 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""RequestContext: context for requests that persist through all of cinder."""
+
+import copy
+
+from cinder import log as logging
+from cinder.openstack.common import local
+from cinder import utils
+
+
+LOG = logging.getLogger(__name__)
+
+
+def generate_request_id():
+    return 'req-' + str(utils.gen_uuid())
+
+
+class RequestContext(object):
+    """Security context and request information.
+
+    Represents the user taking a given action within the system.
+
+    """
+
+    def __init__(self, user_id, project_id, is_admin=None, read_deleted="no",
+                 roles=None, remote_address=None, timestamp=None,
+                 request_id=None, auth_token=None, overwrite=True,
+                 quota_class=None, **kwargs):
+        """
+        :param read_deleted: 'no' indicates deleted records are hidden, 'yes'
+            indicates deleted records are visible, 'only' indicates that
+            *only* deleted records are visible.
+
+        :param overwrite: Set to False to ensure that the greenthread local
+            copy of the index is not overwritten.
+
+        :param kwargs: Extra arguments that might be present, but we ignore
+            because they possibly came in from older rpc messages.
+        """
+        if kwargs:
+            LOG.warn(_('Arguments dropped when creating context: %s') %
+                    str(kwargs))
+
+        self.user_id = user_id
+        self.project_id = project_id
+        self.roles = roles or []
+        self.is_admin = is_admin
+        if self.is_admin is None:
+            self.is_admin = 'admin' in [x.lower() for x in self.roles]
+        elif self.is_admin and 'admin' not in self.roles:
+            self.roles.append('admin')
+        self.read_deleted = read_deleted
+        self.remote_address = remote_address
+        if not timestamp:
+            timestamp = utils.utcnow()
+        if isinstance(timestamp, basestring):
+            timestamp = utils.parse_strtime(timestamp)
+        self.timestamp = timestamp
+        if not request_id:
+            request_id = generate_request_id()
+        self.request_id = request_id
+        self.auth_token = auth_token
+        self.quota_class = quota_class
+        if overwrite or not hasattr(local.store, 'context'):
+            self.update_store()
+
+    def _get_read_deleted(self):
+        return self._read_deleted
+
+    def _set_read_deleted(self, read_deleted):
+        if read_deleted not in ('no', 'yes', 'only'):
+            raise ValueError(_("read_deleted can only be one of 'no', "
+                               "'yes' or 'only', not %r") % read_deleted)
+        self._read_deleted = read_deleted
+
+    def _del_read_deleted(self):
+        del self._read_deleted
+
+    read_deleted = property(_get_read_deleted, _set_read_deleted,
+                            _del_read_deleted)
+
+    def update_store(self):
+        local.store.context = self
+
+    def to_dict(self):
+        return {'user_id': self.user_id,
+                'project_id': self.project_id,
+                'is_admin': self.is_admin,
+                'read_deleted': self.read_deleted,
+                'roles': self.roles,
+                'remote_address': self.remote_address,
+                'timestamp': utils.strtime(self.timestamp),
+                'request_id': self.request_id,
+                'auth_token': self.auth_token,
+                'quota_class': self.quota_class}
+
+    @classmethod
+    def from_dict(cls, values):
+        return cls(**values)
+
+    def elevated(self, read_deleted=None, overwrite=False):
+        """Return a version of this context with admin flag set."""
+        context = copy.copy(self)
+        context.is_admin = True
+
+        if 'admin' not in context.roles:
+            context.roles.append('admin')
+
+        if read_deleted is not None:
+            context.read_deleted = read_deleted
+
+        return context
+
+
+def get_admin_context(read_deleted="no"):
+    return RequestContext(user_id=None,
+                          project_id=None,
+                          is_admin=True,
+                          read_deleted=read_deleted,
+                          overwrite=False)
diff --git a/cinder/db/__init__.py b/cinder/db/__init__.py
new file mode 100644
index 000000000..f4eb417ec
--- /dev/null
+++ b/cinder/db/__init__.py
@@ -0,0 +1,23 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+DB abstraction for Cinder
+"""
+
+from cinder.db.api import *
diff --git a/cinder/db/api.py b/cinder/db/api.py
new file mode 100644
index 000000000..1e39531fd
--- /dev/null
+++ b/cinder/db/api.py
@@ -0,0 +1,1335 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 X.commerce, a business unit of eBay Inc.
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Defines interface for DB access.
+
+The underlying driver is loaded as a :class:`LazyPluggable`.
+
+Functions in this module are imported into the cinder.db namespace. Call these
+functions from cinder.db namespace, not the cinder.db.api namespace.
+
+All functions in this module return objects that implement a dictionary-like
+interface. Currently, many of these objects are sqlalchemy objects that
+implement a dictionary interface. However, a future goal is to have all of
+these objects be simple dictionaries.
+
+
+**Related Flags**
+
+:db_backend:  string to lookup in the list of LazyPluggable backends.
+              `sqlalchemy` is the only supported backend right now.
+
+:sql_connection:  string specifying the sqlalchemy connection to use, like:
+                  `sqlite:///var/lib/cinder/cinder.sqlite`.
+
+:enable_new_services:  when adding a new service to the database, is it in the
+                       pool of available hardware (Default: True)
+
+"""
+
+from cinder import exception
+from cinder import flags
+from cinder.openstack.common import cfg
+from cinder import utils
+
+
+db_opts = [
+    cfg.StrOpt('db_backend',
+               default='sqlalchemy',
+               help='The backend to use for db'),
+    cfg.BoolOpt('enable_new_services',
+                default=True,
+                help='Services to be added to the available pool on create'),
+    cfg.StrOpt('instance_name_template',
+               default='instance-%08x',
+               help='Template string to be used to generate instance names'),
+    cfg.StrOpt('volume_name_template',
+               default='volume-%s',
+               help='Template string to be used to generate instance names'),
+    cfg.StrOpt('snapshot_name_template',
+               default='snapshot-%s',
+               help='Template string to be used to generate snapshot names'),
+    ]
+
+FLAGS = flags.FLAGS
+FLAGS.register_opts(db_opts)
+
+IMPL = utils.LazyPluggable('db_backend',
+                           sqlalchemy='cinder.db.sqlalchemy.api')
+
+
+class NoMoreNetworks(exception.Error):
+    """No more available networks."""
+    pass
+
+
+class NoMoreTargets(exception.Error):
+    """No more available targets"""
+    pass
+
+
+###################
+
+
+def service_destroy(context, service_id):
+    """Destroy the service or raise if it does not exist."""
+    return IMPL.service_destroy(context, service_id)
+
+
+def service_get(context, service_id):
+    """Get a service or raise if it does not exist."""
+    return IMPL.service_get(context, service_id)
+
+
+def service_get_by_host_and_topic(context, host, topic):
+    """Get a service by host it's on and topic it listens to."""
+    return IMPL.service_get_by_host_and_topic(context, host, topic)
+
+
+def service_get_all(context, disabled=None):
+    """Get all services."""
+    return IMPL.service_get_all(context, disabled)
+
+
+def service_get_all_by_topic(context, topic):
+    """Get all services for a given topic."""
+    return IMPL.service_get_all_by_topic(context, topic)
+
+
+def service_get_all_by_host(context, host):
+    """Get all services for a given host."""
+    return IMPL.service_get_all_by_host(context, host)
+
+
+def service_get_all_compute_by_host(context, host):
+    """Get all compute services for a given host."""
+    return IMPL.service_get_all_compute_by_host(context, host)
+
+
+def service_get_all_compute_sorted(context):
+    """Get all compute services sorted by instance count.
+
+    :returns: a list of (Service, instance_count) tuples.
+
+    """
+    return IMPL.service_get_all_compute_sorted(context)
+
+
+def service_get_all_volume_sorted(context):
+    """Get all volume services sorted by volume count.
+
+    :returns: a list of (Service, volume_count) tuples.
+
+    """
+    return IMPL.service_get_all_volume_sorted(context)
+
+
+def service_get_by_args(context, host, binary):
+    """Get the state of an service by node name and binary."""
+    return IMPL.service_get_by_args(context, host, binary)
+
+
+def service_create(context, values):
+    """Create a service from the values dictionary."""
+    return IMPL.service_create(context, values)
+
+
+def service_update(context, service_id, values):
+    """Set the given properties on an service and update it.
+
+    Raises NotFound if service does not exist.
+
+    """
+    return IMPL.service_update(context, service_id, values)
+
+
+###################
+
+
+def compute_node_get(context, compute_id):
+    """Get an computeNode or raise if it does not exist."""
+    return IMPL.compute_node_get(context, compute_id)
+
+
+def compute_node_get_all(context):
+    """Get all computeNodes."""
+    return IMPL.compute_node_get_all(context)
+
+
+def compute_node_create(context, values):
+    """Create a computeNode from the values dictionary."""
+    return IMPL.compute_node_create(context, values)
+
+
+def compute_node_update(context, compute_id, values, auto_adjust=True):
+    """Set the given properties on an computeNode and update it.
+
+    Raises NotFound if computeNode does not exist.
+    """
+    return IMPL.compute_node_update(context, compute_id, values, auto_adjust)
+
+
+def compute_node_get_by_host(context, host):
+    return IMPL.compute_node_get_by_host(context, host)
+
+
+def compute_node_utilization_update(context, host, free_ram_mb_delta=0,
+                          free_disk_gb_delta=0, work_delta=0, vm_delta=0):
+    return IMPL.compute_node_utilization_update(context, host,
+                          free_ram_mb_delta, free_disk_gb_delta, work_delta,
+                          vm_delta)
+
+
+def compute_node_utilization_set(context, host, free_ram_mb=None,
+                                 free_disk_gb=None, work=None, vms=None):
+    return IMPL.compute_node_utilization_set(context, host, free_ram_mb,
+                                             free_disk_gb, work, vms)
+
+###################
+
+
+def certificate_create(context, values):
+    """Create a certificate from the values dictionary."""
+    return IMPL.certificate_create(context, values)
+
+
+def certificate_get_all_by_project(context, project_id):
+    """Get all certificates for a project."""
+    return IMPL.certificate_get_all_by_project(context, project_id)
+
+
+def certificate_get_all_by_user(context, user_id):
+    """Get all certificates for a user."""
+    return IMPL.certificate_get_all_by_user(context, user_id)
+
+
+def certificate_get_all_by_user_and_project(context, user_id, project_id):
+    """Get all certificates for a user and project."""
+    return IMPL.certificate_get_all_by_user_and_project(context,
+                                                        user_id,
+                                                        project_id)
+
+
+###################
+
+def floating_ip_get(context, id):
+    return IMPL.floating_ip_get(context, id)
+
+
+def floating_ip_get_pools(context):
+    """Returns a list of floating ip pools"""
+    return IMPL.floating_ip_get_pools(context)
+
+
+def floating_ip_allocate_address(context, project_id, pool):
+    """Allocate free floating ip from specified pool and return the address.
+
+    Raises if one is not available.
+
+    """
+    return IMPL.floating_ip_allocate_address(context, project_id, pool)
+
+
+def floating_ip_create(context, values):
+    """Create a floating ip from the values dictionary."""
+    return IMPL.floating_ip_create(context, values)
+
+
+def floating_ip_count_by_project(context, project_id):
+    """Count floating ips used by project."""
+    return IMPL.floating_ip_count_by_project(context, project_id)
+
+
+def floating_ip_deallocate(context, address):
+    """Deallocate an floating ip by address."""
+    return IMPL.floating_ip_deallocate(context, address)
+
+
+def floating_ip_destroy(context, address):
+    """Destroy the floating_ip or raise if it does not exist."""
+    return IMPL.floating_ip_destroy(context, address)
+
+
+def floating_ip_disassociate(context, address):
+    """Disassociate an floating ip from a fixed ip by address.
+
+    :returns: the address of the existing fixed ip.
+
+    """
+    return IMPL.floating_ip_disassociate(context, address)
+
+
+def floating_ip_fixed_ip_associate(context, floating_address,
+                                   fixed_address, host):
+    """Associate an floating ip to a fixed_ip by address."""
+    return IMPL.floating_ip_fixed_ip_associate(context,
+                                               floating_address,
+                                               fixed_address,
+                                               host)
+
+
+def floating_ip_get_all(context):
+    """Get all floating ips."""
+    return IMPL.floating_ip_get_all(context)
+
+
+def floating_ip_get_all_by_host(context, host):
+    """Get all floating ips by host."""
+    return IMPL.floating_ip_get_all_by_host(context, host)
+
+
+def floating_ip_get_all_by_project(context, project_id):
+    """Get all floating ips by project."""
+    return IMPL.floating_ip_get_all_by_project(context, project_id)
+
+
+def floating_ip_get_by_address(context, address):
+    """Get a floating ip by address or raise if it doesn't exist."""
+    return IMPL.floating_ip_get_by_address(context, address)
+
+
+def floating_ip_get_by_fixed_address(context, fixed_address):
+    """Get a floating ips by fixed address"""
+    return IMPL.floating_ip_get_by_fixed_address(context, fixed_address)
+
+
+def floating_ip_get_by_fixed_ip_id(context, fixed_ip_id):
+    """Get a floating ips by fixed address"""
+    return IMPL.floating_ip_get_by_fixed_ip_id(context, fixed_ip_id)
+
+
+def floating_ip_update(context, address, values):
+    """Update a floating ip by address or raise if it doesn't exist."""
+    return IMPL.floating_ip_update(context, address, values)
+
+
+def floating_ip_set_auto_assigned(context, address):
+    """Set auto_assigned flag to floating ip"""
+    return IMPL.floating_ip_set_auto_assigned(context, address)
+
+
+def dnsdomain_list(context):
+    """Get a list of all zones in our database, public and private."""
+    return IMPL.dnsdomain_list(context)
+
+
+def dnsdomain_register_for_zone(context, fqdomain, zone):
+    """Associated a DNS domain with an availability zone"""
+    return IMPL.dnsdomain_register_for_zone(context, fqdomain, zone)
+
+
+def dnsdomain_register_for_project(context, fqdomain, project):
+    """Associated a DNS domain with a project id"""
+    return IMPL.dnsdomain_register_for_project(context, fqdomain, project)
+
+
+def dnsdomain_unregister(context, fqdomain):
+    """Purge associations for the specified DNS zone"""
+    return IMPL.dnsdomain_unregister(context, fqdomain)
+
+
+def dnsdomain_get(context, fqdomain):
+    """Get the db record for the specified domain."""
+    return IMPL.dnsdomain_get(context, fqdomain)
+
+
+####################
+
+
+def migration_update(context, id, values):
+    """Update a migration instance."""
+    return IMPL.migration_update(context, id, values)
+
+
+def migration_create(context, values):
+    """Create a migration record."""
+    return IMPL.migration_create(context, values)
+
+
+def migration_get(context, migration_id):
+    """Finds a migration by the id."""
+    return IMPL.migration_get(context, migration_id)
+
+
+def migration_get_by_instance_and_status(context, instance_uuid, status):
+    """Finds a migration by the instance uuid its migrating."""
+    return IMPL.migration_get_by_instance_and_status(context, instance_uuid,
+            status)
+
+
+def migration_get_all_unconfirmed(context, confirm_window):
+    """Finds all unconfirmed migrations within the confirmation window."""
+    return IMPL.migration_get_all_unconfirmed(context, confirm_window)
+
+
+###################
+
+
+def queue_get_for(context, topic, physical_node_id):
+    """Return a channel to send a message to a node with a topic."""
+    return IMPL.queue_get_for(context, topic, physical_node_id)
+
+
+###################
+
+
+def iscsi_target_count_by_host(context, host):
+    """Return count of export devices."""
+    return IMPL.iscsi_target_count_by_host(context, host)
+
+
+def iscsi_target_create_safe(context, values):
+    """Create an iscsi_target from the values dictionary.
+
+    The device is not returned. If the create violates the unique
+    constraints because the iscsi_target and host already exist,
+    no exception is raised.
+
+    """
+    return IMPL.iscsi_target_create_safe(context, values)
+
+
+###############
+
+
+def auth_token_destroy(context, token_id):
+    """Destroy an auth token."""
+    return IMPL.auth_token_destroy(context, token_id)
+
+
+def auth_token_get(context, token_hash):
+    """Retrieves a token given the hash representing it."""
+    return IMPL.auth_token_get(context, token_hash)
+
+
+def auth_token_update(context, token_hash, values):
+    """Updates a token given the hash representing it."""
+    return IMPL.auth_token_update(context, token_hash, values)
+
+
+def auth_token_create(context, token):
+    """Creates a new token."""
+    return IMPL.auth_token_create(context, token)
+
+
+###################
+
+
+def quota_create(context, project_id, resource, limit):
+    """Create a quota for the given project and resource."""
+    return IMPL.quota_create(context, project_id, resource, limit)
+
+
+def quota_get(context, project_id, resource):
+    """Retrieve a quota or raise if it does not exist."""
+    return IMPL.quota_get(context, project_id, resource)
+
+
+def quota_get_all_by_project(context, project_id):
+    """Retrieve all quotas associated with a given project."""
+    return IMPL.quota_get_all_by_project(context, project_id)
+
+
+def quota_update(context, project_id, resource, limit):
+    """Update a quota or raise if it does not exist."""
+    return IMPL.quota_update(context, project_id, resource, limit)
+
+
+def quota_destroy(context, project_id, resource):
+    """Destroy the quota or raise if it does not exist."""
+    return IMPL.quota_destroy(context, project_id, resource)
+
+
+def quota_destroy_all_by_project(context, project_id):
+    """Destroy all quotas associated with a given project."""
+    return IMPL.quota_get_all_by_project(context, project_id)
+
+
+###################
+
+
+def quota_class_create(context, class_name, resource, limit):
+    """Create a quota class for the given name and resource."""
+    return IMPL.quota_class_create(context, class_name, resource, limit)
+
+
+def quota_class_get(context, class_name, resource):
+    """Retrieve a quota class or raise if it does not exist."""
+    return IMPL.quota_class_get(context, class_name, resource)
+
+
+def quota_class_get_all_by_name(context, class_name):
+    """Retrieve all quotas associated with a given quota class."""
+    return IMPL.quota_class_get_all_by_name(context, class_name)
+
+
+def quota_class_update(context, class_name, resource, limit):
+    """Update a quota class or raise if it does not exist."""
+    return IMPL.quota_class_update(context, class_name, resource, limit)
+
+
+def quota_class_destroy(context, class_name, resource):
+    """Destroy the quota class or raise if it does not exist."""
+    return IMPL.quota_class_destroy(context, class_name, resource)
+
+
+def quota_class_destroy_all_by_name(context, class_name):
+    """Destroy all quotas associated with a given quota class."""
+    return IMPL.quota_class_destroy_all_by_name(context, class_name)
+
+
+###################
+
+
+def volume_allocate_iscsi_target(context, volume_id, host):
+    """Atomically allocate a free iscsi_target from the pool."""
+    return IMPL.volume_allocate_iscsi_target(context, volume_id, host)
+
+
+def volume_attached(context, volume_id, instance_id, mountpoint):
+    """Ensure that a volume is set as attached."""
+    return IMPL.volume_attached(context, volume_id, instance_id, mountpoint)
+
+
+def volume_create(context, values):
+    """Create a volume from the values dictionary."""
+    return IMPL.volume_create(context, values)
+
+
+def volume_data_get_for_project(context, project_id):
+    """Get (volume_count, gigabytes) for project."""
+    return IMPL.volume_data_get_for_project(context, project_id)
+
+
+def volume_destroy(context, volume_id):
+    """Destroy the volume or raise if it does not exist."""
+    return IMPL.volume_destroy(context, volume_id)
+
+
+def volume_detached(context, volume_id):
+    """Ensure that a volume is set as detached."""
+    return IMPL.volume_detached(context, volume_id)
+
+
+def volume_get(context, volume_id):
+    """Get a volume or raise if it does not exist."""
+    return IMPL.volume_get(context, volume_id)
+
+
+def volume_get_all(context):
+    """Get all volumes."""
+    return IMPL.volume_get_all(context)
+
+
+def volume_get_all_by_host(context, host):
+    """Get all volumes belonging to a host."""
+    return IMPL.volume_get_all_by_host(context, host)
+
+
+def volume_get_all_by_instance(context, instance_id):
+    """Get all volumes belonging to a instance."""
+    return IMPL.volume_get_all_by_instance(context, instance_id)
+
+
+def volume_get_all_by_project(context, project_id):
+    """Get all volumes belonging to a project."""
+    return IMPL.volume_get_all_by_project(context, project_id)
+
+
+def volume_get_instance(context, volume_id):
+    """Get the instance that a volume is attached to."""
+    return IMPL.volume_get_instance(context, volume_id)
+
+
+def volume_get_iscsi_target_num(context, volume_id):
+    """Get the target num (tid) allocated to the volume."""
+    return IMPL.volume_get_iscsi_target_num(context, volume_id)
+
+
+def volume_update(context, volume_id, values):
+    """Set the given properties on an volume and update it.
+
+    Raises NotFound if volume does not exist.
+
+    """
+    return IMPL.volume_update(context, volume_id, values)
+
+
+####################
+
+
+def snapshot_create(context, values):
+    """Create a snapshot from the values dictionary."""
+    return IMPL.snapshot_create(context, values)
+
+
+def snapshot_destroy(context, snapshot_id):
+    """Destroy the snapshot or raise if it does not exist."""
+    return IMPL.snapshot_destroy(context, snapshot_id)
+
+
+def snapshot_get(context, snapshot_id):
+    """Get a snapshot or raise if it does not exist."""
+    return IMPL.snapshot_get(context, snapshot_id)
+
+
+def snapshot_get_all(context):
+    """Get all snapshots."""
+    return IMPL.snapshot_get_all(context)
+
+
+def snapshot_get_all_by_project(context, project_id):
+    """Get all snapshots belonging to a project."""
+    return IMPL.snapshot_get_all_by_project(context, project_id)
+
+
+def snapshot_get_all_for_volume(context, volume_id):
+    """Get all snapshots for a volume."""
+    return IMPL.snapshot_get_all_for_volume(context, volume_id)
+
+
+def snapshot_update(context, snapshot_id, values):
+    """Set the given properties on an snapshot and update it.
+
+    Raises NotFound if snapshot does not exist.
+
+    """
+    return IMPL.snapshot_update(context, snapshot_id, values)
+
+
+####################
+
+
+def block_device_mapping_create(context, values):
+    """Create an entry of block device mapping"""
+    return IMPL.block_device_mapping_create(context, values)
+
+
+def block_device_mapping_update(context, bdm_id, values):
+    """Update an entry of block device mapping"""
+    return IMPL.block_device_mapping_update(context, bdm_id, values)
+
+
+def block_device_mapping_update_or_create(context, values):
+    """Update an entry of block device mapping.
+    If not existed, create a new entry"""
+    return IMPL.block_device_mapping_update_or_create(context, values)
+
+
+def block_device_mapping_get_all_by_instance(context, instance_uuid):
+    """Get all block device mapping belonging to a instance"""
+    return IMPL.block_device_mapping_get_all_by_instance(context,
+                                                         instance_uuid)
+
+
+def block_device_mapping_destroy(context, bdm_id):
+    """Destroy the block device mapping."""
+    return IMPL.block_device_mapping_destroy(context, bdm_id)
+
+
+def block_device_mapping_destroy_by_instance_and_volume(context, instance_uuid,
+                                                        volume_id):
+    """Destroy the block device mapping or raise if it does not exist."""
+    return IMPL.block_device_mapping_destroy_by_instance_and_volume(
+        context, instance_uuid, volume_id)
+
+
+####################
+
+
+def security_group_get_all(context):
+    """Get all security groups."""
+    return IMPL.security_group_get_all(context)
+
+
+def security_group_get(context, security_group_id):
+    """Get security group by its id."""
+    return IMPL.security_group_get(context, security_group_id)
+
+
+def security_group_get_by_name(context, project_id, group_name):
+    """Returns a security group with the specified name from a project."""
+    return IMPL.security_group_get_by_name(context, project_id, group_name)
+
+
+def security_group_get_by_project(context, project_id):
+    """Get all security groups belonging to a project."""
+    return IMPL.security_group_get_by_project(context, project_id)
+
+
+def security_group_get_by_instance(context, instance_id):
+    """Get security groups to which the instance is assigned."""
+    return IMPL.security_group_get_by_instance(context, instance_id)
+
+
+def security_group_exists(context, project_id, group_name):
+    """Indicates if a group name exists in a project."""
+    return IMPL.security_group_exists(context, project_id, group_name)
+
+
+def security_group_in_use(context, group_id):
+    """Indicates if a security group is currently in use."""
+    return IMPL.security_group_in_use(context, group_id)
+
+
+def security_group_create(context, values):
+    """Create a new security group."""
+    return IMPL.security_group_create(context, values)
+
+
+def security_group_destroy(context, security_group_id):
+    """Deletes a security group."""
+    return IMPL.security_group_destroy(context, security_group_id)
+
+
+def security_group_count_by_project(context, project_id):
+    """Count number of security groups in a project."""
+    return IMPL.security_group_count_by_project(context, project_id)
+
+
+####################
+
+
+def security_group_rule_create(context, values):
+    """Create a new security group."""
+    return IMPL.security_group_rule_create(context, values)
+
+
+def security_group_rule_get_by_security_group(context, security_group_id):
+    """Get all rules for a a given security group."""
+    return IMPL.security_group_rule_get_by_security_group(context,
+                                                          security_group_id)
+
+
+def security_group_rule_get_by_security_group_grantee(context,
+                                                      security_group_id):
+    """Get all rules that grant access to the given security group."""
+    return IMPL.security_group_rule_get_by_security_group_grantee(context,
+                                                             security_group_id)
+
+
+def security_group_rule_destroy(context, security_group_rule_id):
+    """Deletes a security group rule."""
+    return IMPL.security_group_rule_destroy(context, security_group_rule_id)
+
+
+def security_group_rule_get(context, security_group_rule_id):
+    """Gets a security group rule."""
+    return IMPL.security_group_rule_get(context, security_group_rule_id)
+
+
+def security_group_rule_count_by_group(context, security_group_id):
+    """Count rules in a given security group."""
+    return IMPL.security_group_rule_count_by_group(context, security_group_id)
+
+
+###################
+
+
+def provider_fw_rule_create(context, rule):
+    """Add a firewall rule at the provider level (all hosts & instances)."""
+    return IMPL.provider_fw_rule_create(context, rule)
+
+
+def provider_fw_rule_get_all(context):
+    """Get all provider-level firewall rules."""
+    return IMPL.provider_fw_rule_get_all(context)
+
+
+def provider_fw_rule_destroy(context, rule_id):
+    """Delete a provider firewall rule from the database."""
+    return IMPL.provider_fw_rule_destroy(context, rule_id)
+
+
+###################
+
+
+def user_get(context, id):
+    """Get user by id."""
+    return IMPL.user_get(context, id)
+
+
+def user_get_by_uid(context, uid):
+    """Get user by uid."""
+    return IMPL.user_get_by_uid(context, uid)
+
+
+def user_get_by_access_key(context, access_key):
+    """Get user by access key."""
+    return IMPL.user_get_by_access_key(context, access_key)
+
+
+def user_create(context, values):
+    """Create a new user."""
+    return IMPL.user_create(context, values)
+
+
+def user_delete(context, id):
+    """Delete a user."""
+    return IMPL.user_delete(context, id)
+
+
+def user_get_all(context):
+    """Create a new user."""
+    return IMPL.user_get_all(context)
+
+
+def user_add_role(context, user_id, role):
+    """Add another global role for user."""
+    return IMPL.user_add_role(context, user_id, role)
+
+
+def user_remove_role(context, user_id, role):
+    """Remove global role from user."""
+    return IMPL.user_remove_role(context, user_id, role)
+
+
+def user_get_roles(context, user_id):
+    """Get global roles for user."""
+    return IMPL.user_get_roles(context, user_id)
+
+
+def user_add_project_role(context, user_id, project_id, role):
+    """Add project role for user."""
+    return IMPL.user_add_project_role(context, user_id, project_id, role)
+
+
+def user_remove_project_role(context, user_id, project_id, role):
+    """Remove project role from user."""
+    return IMPL.user_remove_project_role(context, user_id, project_id, role)
+
+
+def user_get_roles_for_project(context, user_id, project_id):
+    """Return list of roles a user holds on project."""
+    return IMPL.user_get_roles_for_project(context, user_id, project_id)
+
+
+def user_update(context, user_id, values):
+    """Update user."""
+    return IMPL.user_update(context, user_id, values)
+
+
+###################
+
+
+def project_get(context, id):
+    """Get project by id."""
+    return IMPL.project_get(context, id)
+
+
+def project_create(context, values):
+    """Create a new project."""
+    return IMPL.project_create(context, values)
+
+
+def project_add_member(context, project_id, user_id):
+    """Add user to project."""
+    return IMPL.project_add_member(context, project_id, user_id)
+
+
+def project_get_all(context):
+    """Get all projects."""
+    return IMPL.project_get_all(context)
+
+
+def project_get_by_user(context, user_id):
+    """Get all projects of which the given user is a member."""
+    return IMPL.project_get_by_user(context, user_id)
+
+
+def project_remove_member(context, project_id, user_id):
+    """Remove the given user from the given project."""
+    return IMPL.project_remove_member(context, project_id, user_id)
+
+
+def project_update(context, project_id, values):
+    """Update Remove the given user from the given project."""
+    return IMPL.project_update(context, project_id, values)
+
+
+def project_delete(context, project_id):
+    """Delete project."""
+    return IMPL.project_delete(context, project_id)
+
+
+def project_get_networks(context, project_id, associate=True):
+    """Return the network associated with the project.
+
+    If associate is true, it will attempt to associate a new
+    network if one is not found, otherwise it returns None.
+
+    """
+    return IMPL.project_get_networks(context, project_id, associate)
+
+
+###################
+
+
+def console_pool_create(context, values):
+    """Create console pool."""
+    return IMPL.console_pool_create(context, values)
+
+
+def console_pool_get(context, pool_id):
+    """Get a console pool."""
+    return IMPL.console_pool_get(context, pool_id)
+
+
+def console_pool_get_by_host_type(context, compute_host, proxy_host,
+                                  console_type):
+    """Fetch a console pool for a given proxy host, compute host, and type."""
+    return IMPL.console_pool_get_by_host_type(context,
+                                              compute_host,
+                                              proxy_host,
+                                              console_type)
+
+
+def console_pool_get_all_by_host_type(context, host, console_type):
+    """Fetch all pools for given proxy host and type."""
+    return IMPL.console_pool_get_all_by_host_type(context,
+                                                  host,
+                                                  console_type)
+
+
+def console_create(context, values):
+    """Create a console."""
+    return IMPL.console_create(context, values)
+
+
+def console_delete(context, console_id):
+    """Delete a console."""
+    return IMPL.console_delete(context, console_id)
+
+
+def console_get_by_pool_instance(context, pool_id, instance_id):
+    """Get console entry for a given instance and pool."""
+    return IMPL.console_get_by_pool_instance(context, pool_id, instance_id)
+
+
+def console_get_all_by_instance(context, instance_id):
+    """Get consoles for a given instance."""
+    return IMPL.console_get_all_by_instance(context, instance_id)
+
+
+def console_get(context, console_id, instance_id=None):
+    """Get a specific console (possibly on a given instance)."""
+    return IMPL.console_get(context, console_id, instance_id)
+
+
+    ##################
+
+
+def instance_type_create(context, values):
+    """Create a new instance type."""
+    return IMPL.instance_type_create(context, values)
+
+
+def instance_type_get_all(context, inactive=False, filters=None):
+    """Get all instance types."""
+    return IMPL.instance_type_get_all(
+        context, inactive=inactive, filters=filters)
+
+
+def instance_type_get(context, id):
+    """Get instance type by id."""
+    return IMPL.instance_type_get(context, id)
+
+
+def instance_type_get_by_name(context, name):
+    """Get instance type by name."""
+    return IMPL.instance_type_get_by_name(context, name)
+
+
+def instance_type_get_by_flavor_id(context, id):
+    """Get instance type by name."""
+    return IMPL.instance_type_get_by_flavor_id(context, id)
+
+
+def instance_type_destroy(context, name):
+    """Delete a instance type."""
+    return IMPL.instance_type_destroy(context, name)
+
+
+####################
+
+
+def cell_create(context, values):
+    """Create a new child Cell entry."""
+    return IMPL.cell_create(context, values)
+
+
+def cell_update(context, cell_id, values):
+    """Update a child Cell entry."""
+    return IMPL.cell_update(context, cell_id, values)
+
+
+def cell_delete(context, cell_id):
+    """Delete a child Cell."""
+    return IMPL.cell_delete(context, cell_id)
+
+
+def cell_get(context, cell_id):
+    """Get a specific child Cell."""
+    return IMPL.cell_get(context, cell_id)
+
+
+def cell_get_all(context):
+    """Get all child Cells."""
+    return IMPL.cell_get_all(context)
+
+
+####################
+
+
+def instance_metadata_get(context, instance_id):
+    """Get all metadata for an instance."""
+    return IMPL.instance_metadata_get(context, instance_id)
+
+
+def instance_metadata_delete(context, instance_id, key):
+    """Delete the given metadata item."""
+    IMPL.instance_metadata_delete(context, instance_id, key)
+
+
+def instance_metadata_update(context, instance_id, metadata, delete):
+    """Update metadata if it exists, otherwise create it."""
+    IMPL.instance_metadata_update(context, instance_id, metadata, delete)
+
+
+####################
+
+
+def agent_build_create(context, values):
+    """Create a new agent build entry."""
+    return IMPL.agent_build_create(context, values)
+
+
+def agent_build_get_by_triple(context, hypervisor, os, architecture):
+    """Get agent build by hypervisor/OS/architecture triple."""
+    return IMPL.agent_build_get_by_triple(context, hypervisor, os,
+            architecture)
+
+
+def agent_build_get_all(context):
+    """Get all agent builds."""
+    return IMPL.agent_build_get_all(context)
+
+
+def agent_build_destroy(context, agent_update_id):
+    """Destroy agent build entry."""
+    IMPL.agent_build_destroy(context, agent_update_id)
+
+
+def agent_build_update(context, agent_build_id, values):
+    """Update agent build entry."""
+    IMPL.agent_build_update(context, agent_build_id, values)
+
+
+####################
+
+
+def bw_usage_get_by_uuids(context, uuids, start_period):
+    """Return bw usages for instance(s) in a given audit period."""
+    return IMPL.bw_usage_get_by_uuids(context, uuids, start_period)
+
+
+def bw_usage_update(context,
+                    uuid,
+                    mac,
+                    start_period,
+                    bw_in, bw_out):
+    """Update cached bw usage for an instance and network
+       Creates new record if needed."""
+    return IMPL.bw_usage_update(context,
+                                uuid,
+                                mac,
+                                start_period,
+                                bw_in, bw_out)
+
+
+####################
+
+
+def instance_type_extra_specs_get(context, instance_type_id):
+    """Get all extra specs for an instance type."""
+    return IMPL.instance_type_extra_specs_get(context, instance_type_id)
+
+
+def instance_type_extra_specs_delete(context, instance_type_id, key):
+    """Delete the given extra specs item."""
+    IMPL.instance_type_extra_specs_delete(context, instance_type_id, key)
+
+
+def instance_type_extra_specs_update_or_create(context, instance_type_id,
+                                               extra_specs):
+    """Create or update instance type extra specs. This adds or modifies the
+    key/value pairs specified in the extra specs dict argument"""
+    IMPL.instance_type_extra_specs_update_or_create(context, instance_type_id,
+                                                    extra_specs)
+
+
+##################
+
+
+def volume_metadata_get(context, volume_id):
+    """Get all metadata for a volume."""
+    return IMPL.volume_metadata_get(context, volume_id)
+
+
+def volume_metadata_delete(context, volume_id, key):
+    """Delete the given metadata item."""
+    IMPL.volume_metadata_delete(context, volume_id, key)
+
+
+def volume_metadata_update(context, volume_id, metadata, delete):
+    """Update metadata if it exists, otherwise create it."""
+    IMPL.volume_metadata_update(context, volume_id, metadata, delete)
+
+
+##################
+
+
+def volume_type_create(context, values):
+    """Create a new volume type."""
+    return IMPL.volume_type_create(context, values)
+
+
+def volume_type_get_all(context, inactive=False):
+    """Get all volume types."""
+    return IMPL.volume_type_get_all(context, inactive)
+
+
+def volume_type_get(context, id):
+    """Get volume type by id."""
+    return IMPL.volume_type_get(context, id)
+
+
+def volume_type_get_by_name(context, name):
+    """Get volume type by name."""
+    return IMPL.volume_type_get_by_name(context, name)
+
+
+def volume_type_destroy(context, name):
+    """Delete a volume type."""
+    return IMPL.volume_type_destroy(context, name)
+
+
+####################
+
+
+def volume_type_extra_specs_get(context, volume_type_id):
+    """Get all extra specs for a volume type."""
+    return IMPL.volume_type_extra_specs_get(context, volume_type_id)
+
+
+def volume_type_extra_specs_delete(context, volume_type_id, key):
+    """Delete the given extra specs item."""
+    IMPL.volume_type_extra_specs_delete(context, volume_type_id, key)
+
+
+def volume_type_extra_specs_update_or_create(context, volume_type_id,
+                                               extra_specs):
+    """Create or update volume type extra specs. This adds or modifies the
+    key/value pairs specified in the extra specs dict argument"""
+    IMPL.volume_type_extra_specs_update_or_create(context, volume_type_id,
+                                                    extra_specs)
+
+
+###################
+
+
+def s3_image_get(context, image_id):
+    """Find local s3 image represented by the provided id"""
+    return IMPL.s3_image_get(context, image_id)
+
+
+def s3_image_get_by_uuid(context, image_uuid):
+    """Find local s3 image represented by the provided uuid"""
+    return IMPL.s3_image_get_by_uuid(context, image_uuid)
+
+
+def s3_image_create(context, image_uuid):
+    """Create local s3 image represented by provided uuid"""
+    return IMPL.s3_image_create(context, image_uuid)
+
+
+####################
+
+
+def sm_backend_conf_create(context, values):
+    """Create a new SM Backend Config entry."""
+    return IMPL.sm_backend_conf_create(context, values)
+
+
+def sm_backend_conf_update(context, sm_backend_conf_id, values):
+    """Update a SM Backend Config entry."""
+    return IMPL.sm_backend_conf_update(context, sm_backend_conf_id, values)
+
+
+def sm_backend_conf_delete(context, sm_backend_conf_id):
+    """Delete a SM Backend Config."""
+    return IMPL.sm_backend_conf_delete(context, sm_backend_conf_id)
+
+
+def sm_backend_conf_get(context, sm_backend_conf_id):
+    """Get a specific SM Backend Config."""
+    return IMPL.sm_backend_conf_get(context, sm_backend_conf_id)
+
+
+def sm_backend_conf_get_by_sr(context, sr_uuid):
+    """Get a specific SM Backend Config."""
+    return IMPL.sm_backend_conf_get_by_sr(context, sr_uuid)
+
+
+def sm_backend_conf_get_all(context):
+    """Get all SM Backend Configs."""
+    return IMPL.sm_backend_conf_get_all(context)
+
+
+####################
+
+
+def sm_flavor_create(context, values):
+    """Create a new SM Flavor entry."""
+    return IMPL.sm_flavor_create(context, values)
+
+
+def sm_flavor_update(context, sm_flavor_id, values):
+    """Update a SM Flavor entry."""
+    return IMPL.sm_flavor_update(context, values)
+
+
+def sm_flavor_delete(context, sm_flavor_id):
+    """Delete a SM Flavor."""
+    return IMPL.sm_flavor_delete(context, sm_flavor_id)
+
+
+def sm_flavor_get(context, sm_flavor):
+    """Get a specific SM Flavor."""
+    return IMPL.sm_flavor_get(context, sm_flavor)
+
+
+def sm_flavor_get_all(context):
+    """Get all SM Flavors."""
+    return IMPL.sm_flavor_get_all(context)
+
+
+####################
+
+
+def sm_volume_create(context, values):
+    """Create a new child Zone entry."""
+    return IMPL.sm_volume_create(context, values)
+
+
+def sm_volume_update(context, volume_id, values):
+    """Update a child Zone entry."""
+    return IMPL.sm_volume_update(context, values)
+
+
+def sm_volume_delete(context, volume_id):
+    """Delete a child Zone."""
+    return IMPL.sm_volume_delete(context, volume_id)
+
+
+def sm_volume_get(context, volume_id):
+    """Get a specific child Zone."""
+    return IMPL.sm_volume_get(context, volume_id)
+
+
+def sm_volume_get_all(context):
+    """Get all child Zones."""
+    return IMPL.sm_volume_get_all(context)
+
+
+####################
+
+
+def aggregate_create(context, values, metadata=None):
+    """Create a new aggregate with metadata."""
+    return IMPL.aggregate_create(context, values, metadata)
+
+
+def aggregate_get(context, aggregate_id):
+    """Get a specific aggregate by id."""
+    return IMPL.aggregate_get(context, aggregate_id)
+
+
+def aggregate_get_by_host(context, host):
+    """Get a specific aggregate by host"""
+    return IMPL.aggregate_get_by_host(context, host)
+
+
+def aggregate_update(context, aggregate_id, values):
+    """Update the attributes of an aggregates. If values contains a metadata
+    key, it updates the aggregate metadata too."""
+    return IMPL.aggregate_update(context, aggregate_id, values)
+
+
+def aggregate_delete(context, aggregate_id):
+    """Delete an aggregate."""
+    return IMPL.aggregate_delete(context, aggregate_id)
+
+
+def aggregate_get_all(context):
+    """Get all aggregates."""
+    return IMPL.aggregate_get_all(context)
+
+
+def aggregate_metadata_add(context, aggregate_id, metadata, set_delete=False):
+    """Add/update metadata. If set_delete=True, it adds only."""
+    IMPL.aggregate_metadata_add(context, aggregate_id, metadata, set_delete)
+
+
+def aggregate_metadata_get(context, aggregate_id):
+    """Get metadata for the specified aggregate."""
+    return IMPL.aggregate_metadata_get(context, aggregate_id)
+
+
+def aggregate_metadata_delete(context, aggregate_id, key):
+    """Delete the given metadata key."""
+    IMPL.aggregate_metadata_delete(context, aggregate_id, key)
+
+
+def aggregate_host_add(context, aggregate_id, host):
+    """Add host to the aggregate."""
+    IMPL.aggregate_host_add(context, aggregate_id, host)
+
+
+def aggregate_host_get_all(context, aggregate_id):
+    """Get hosts for the specified aggregate."""
+    return IMPL.aggregate_host_get_all(context, aggregate_id)
+
+
+def aggregate_host_delete(context, aggregate_id, host):
+    """Delete the given host from the aggregate."""
+    IMPL.aggregate_host_delete(context, aggregate_id, host)
+
+
+####################
+
+
+def instance_fault_create(context, values):
+    """Create a new Instance Fault."""
+    return IMPL.instance_fault_create(context, values)
+
+
+def instance_fault_get_by_instance_uuids(context, instance_uuids):
+    """Get all instance faults for the provided instance_uuids."""
+    return IMPL.instance_fault_get_by_instance_uuids(context, instance_uuids)
diff --git a/cinder/db/base.py b/cinder/db/base.py
new file mode 100644
index 000000000..8b9d437c6
--- /dev/null
+++ b/cinder/db/base.py
@@ -0,0 +1,40 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Base class for classes that need modular database access."""
+
+from cinder import flags
+from cinder.openstack.common import cfg
+from cinder.openstack.common import importutils
+
+
+db_driver_opt = cfg.StrOpt('db_driver',
+                           default='cinder.db',
+                           help='driver to use for database access')
+
+FLAGS = flags.FLAGS
+FLAGS.register_opt(db_driver_opt)
+
+
+class Base(object):
+    """DB driver is injected in the init method."""
+
+    def __init__(self, db_driver=None):
+        if not db_driver:
+            db_driver = FLAGS.db_driver
+        self.db = importutils.import_module(db_driver)  # pylint: disable=C0103
diff --git a/cinder/db/migration.py b/cinder/db/migration.py
new file mode 100644
index 000000000..87147ce92
--- /dev/null
+++ b/cinder/db/migration.py
@@ -0,0 +1,35 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Database setup and migration commands."""
+
+from cinder import utils
+
+
+IMPL = utils.LazyPluggable('db_backend',
+                           sqlalchemy='cinder.db.sqlalchemy.migration')
+
+
+def db_sync(version=None):
+    """Migrate the database to `version` or the most recent version."""
+    return IMPL.db_sync(version=version)
+
+
+def db_version():
+    """Display the current database version."""
+    return IMPL.db_version()
diff --git a/cinder/db/sqlalchemy/__init__.py b/cinder/db/sqlalchemy/__init__.py
new file mode 100644
index 000000000..747015af5
--- /dev/null
+++ b/cinder/db/sqlalchemy/__init__.py
@@ -0,0 +1,17 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
diff --git a/cinder/db/sqlalchemy/api.py b/cinder/db/sqlalchemy/api.py
new file mode 100644
index 000000000..2d40b3046
--- /dev/null
+++ b/cinder/db/sqlalchemy/api.py
@@ -0,0 +1,1499 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 X.commerce, a business unit of eBay Inc.
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Implementation of SQLAlchemy backend."""
+
+import datetime
+import functools
+import warnings
+
+from cinder import db
+from cinder import exception
+from cinder import flags
+from cinder import utils
+from cinder import log as logging
+from cinder.compute import aggregate_states
+from cinder.db.sqlalchemy import models
+from cinder.db.sqlalchemy.session import get_session
+from sqlalchemy.exc import IntegrityError
+from sqlalchemy.orm import joinedload
+from sqlalchemy.sql import func
+from sqlalchemy.sql.expression import literal_column
+
+FLAGS = flags.FLAGS
+
+LOG = logging.getLogger(__name__)
+
+
+def is_admin_context(context):
+    """Indicates if the request context is an administrator."""
+    if not context:
+        warnings.warn(_('Use of empty request context is deprecated'),
+                      DeprecationWarning)
+        raise Exception('die')
+    return context.is_admin
+
+
+def is_user_context(context):
+    """Indicates if the request context is a normal user."""
+    if not context:
+        return False
+    if context.is_admin:
+        return False
+    if not context.user_id or not context.project_id:
+        return False
+    return True
+
+
+def authorize_project_context(context, project_id):
+    """Ensures a request has permission to access the given project."""
+    if is_user_context(context):
+        if not context.project_id:
+            raise exception.NotAuthorized()
+        elif context.project_id != project_id:
+            raise exception.NotAuthorized()
+
+
+def authorize_user_context(context, user_id):
+    """Ensures a request has permission to access the given user."""
+    if is_user_context(context):
+        if not context.user_id:
+            raise exception.NotAuthorized()
+        elif context.user_id != user_id:
+            raise exception.NotAuthorized()
+
+
+def authorize_quota_class_context(context, class_name):
+    """Ensures a request has permission to access the given quota class."""
+    if is_user_context(context):
+        if not context.quota_class:
+            raise exception.NotAuthorized()
+        elif context.quota_class != class_name:
+            raise exception.NotAuthorized()
+
+
+def require_admin_context(f):
+    """Decorator to require admin request context.
+
+    The first argument to the wrapped function must be the context.
+
+    """
+
+    def wrapper(*args, **kwargs):
+        if not is_admin_context(args[0]):
+            raise exception.AdminRequired()
+        return f(*args, **kwargs)
+    return wrapper
+
+
+def require_context(f):
+    """Decorator to require *any* user or admin context.
+
+    This does no authorization for user or project access matching, see
+    :py:func:`authorize_project_context` and
+    :py:func:`authorize_user_context`.
+
+    The first argument to the wrapped function must be the context.
+
+    """
+
+    def wrapper(*args, **kwargs):
+        if not is_admin_context(args[0]) and not is_user_context(args[0]):
+            raise exception.NotAuthorized()
+        return f(*args, **kwargs)
+    return wrapper
+
+
+def require_volume_exists(f):
+    """Decorator to require the specified volume to exist.
+
+    Requires the wrapped function to use context and volume_id as
+    their first two arguments.
+    """
+
+    def wrapper(context, volume_id, *args, **kwargs):
+        db.volume_get(context, volume_id)
+        return f(context, volume_id, *args, **kwargs)
+    wrapper.__name__ = f.__name__
+    return wrapper
+
+
+def require_aggregate_exists(f):
+    """Decorator to require the specified aggregate to exist.
+
+    Requires the wrapped function to use context and aggregate_id as
+    their first two arguments.
+    """
+
+    @functools.wraps(f)
+    def wrapper(context, aggregate_id, *args, **kwargs):
+        db.aggregate_get(context, aggregate_id)
+        return f(context, aggregate_id, *args, **kwargs)
+    return wrapper
+
+
+def model_query(context, *args, **kwargs):
+    """Query helper that accounts for context's `read_deleted` field.
+
+    :param context: context to query under
+    :param session: if present, the session to use
+    :param read_deleted: if present, overrides context's read_deleted field.
+    :param project_only: if present and context is user-type, then restrict
+            query to match the context's project_id.
+    """
+    session = kwargs.get('session') or get_session()
+    read_deleted = kwargs.get('read_deleted') or context.read_deleted
+    project_only = kwargs.get('project_only')
+
+    query = session.query(*args)
+
+    if read_deleted == 'no':
+        query = query.filter_by(deleted=False)
+    elif read_deleted == 'yes':
+        pass  # omit the filter to include deleted and active
+    elif read_deleted == 'only':
+        query = query.filter_by(deleted=True)
+    else:
+        raise Exception(
+                _("Unrecognized read_deleted value '%s'") % read_deleted)
+
+    if project_only and is_user_context(context):
+        query = query.filter_by(project_id=context.project_id)
+
+    return query
+
+
+def exact_filter(query, model, filters, legal_keys):
+    """Applies exact match filtering to a query.
+
+    Returns the updated query.  Modifies filters argument to remove
+    filters consumed.
+
+    :param query: query to apply filters to
+    :param model: model object the query applies to, for IN-style
+                  filtering
+    :param filters: dictionary of filters; values that are lists,
+                    tuples, sets, or frozensets cause an 'IN' test to
+                    be performed, while exact matching ('==' operator)
+                    is used for other values
+    :param legal_keys: list of keys to apply exact filtering to
+    """
+
+    filter_dict = {}
+
+    # Walk through all the keys
+    for key in legal_keys:
+        # Skip ones we're not filtering on
+        if key not in filters:
+            continue
+
+        # OK, filtering on this key; what value do we search for?
+        value = filters.pop(key)
+
+        if isinstance(value, (list, tuple, set, frozenset)):
+            # Looking for values in a list; apply to query directly
+            column_attr = getattr(model, key)
+            query = query.filter(column_attr.in_(value))
+        else:
+            # OK, simple exact match; save for later
+            filter_dict[key] = value
+
+    # Apply simple exact matches
+    if filter_dict:
+        query = query.filter_by(**filter_dict)
+
+    return query
+
+
+###################
+
+
+@require_admin_context
+def service_destroy(context, service_id):
+    session = get_session()
+    with session.begin():
+        service_ref = service_get(context, service_id, session=session)
+        service_ref.delete(session=session)
+
+
+@require_admin_context
+def service_get(context, service_id, session=None):
+    result = model_query(context, models.Service, session=session).\
+                     filter_by(id=service_id).\
+                     first()
+    if not result:
+        raise exception.ServiceNotFound(service_id=service_id)
+
+    return result
+
+
+@require_admin_context
+def service_get_all(context, disabled=None):
+    query = model_query(context, models.Service)
+
+    if disabled is not None:
+        query = query.filter_by(disabled=disabled)
+
+    return query.all()
+
+
+@require_admin_context
+def service_get_all_by_topic(context, topic):
+    return model_query(context, models.Service, read_deleted="no").\
+                filter_by(disabled=False).\
+                filter_by(topic=topic).\
+                all()
+
+
+@require_admin_context
+def service_get_by_host_and_topic(context, host, topic):
+    return model_query(context, models.Service, read_deleted="no").\
+                filter_by(disabled=False).\
+                filter_by(host=host).\
+                filter_by(topic=topic).\
+                first()
+
+
+@require_admin_context
+def service_get_all_by_host(context, host):
+    return model_query(context, models.Service, read_deleted="no").\
+                filter_by(host=host).\
+                all()
+
+
+@require_admin_context
+def _service_get_all_topic_subquery(context, session, topic, subq, label):
+    sort_value = getattr(subq.c, label)
+    return model_query(context, models.Service,
+                       func.coalesce(sort_value, 0),
+                       session=session, read_deleted="no").\
+                filter_by(topic=topic).\
+                filter_by(disabled=False).\
+                outerjoin((subq, models.Service.host == subq.c.host)).\
+                order_by(sort_value).\
+                all()
+
+
+@require_admin_context
+def service_get_all_volume_sorted(context):
+    session = get_session()
+    with session.begin():
+        topic = 'volume'
+        label = 'volume_gigabytes'
+        subq = model_query(context, models.Volume.host,
+                           func.sum(models.Volume.size).label(label),
+                           session=session, read_deleted="no").\
+                       group_by(models.Volume.host).\
+                       subquery()
+        return _service_get_all_topic_subquery(context,
+                                               session,
+                                               topic,
+                                               subq,
+                                               label)
+
+
+@require_admin_context
+def service_get_by_args(context, host, binary):
+    result = model_query(context, models.Service).\
+                     filter_by(host=host).\
+                     filter_by(binary=binary).\
+                     first()
+
+    if not result:
+        raise exception.HostBinaryNotFound(host=host, binary=binary)
+
+    return result
+
+
+@require_admin_context
+def service_create(context, values):
+    service_ref = models.Service()
+    service_ref.update(values)
+    if not FLAGS.enable_new_services:
+        service_ref.disabled = True
+    service_ref.save()
+    return service_ref
+
+
+@require_admin_context
+def service_update(context, service_id, values):
+    session = get_session()
+    with session.begin():
+        service_ref = service_get(context, service_id, session=session)
+        service_ref.update(values)
+        service_ref.save(session=session)
+
+
+###################
+
+
+def _metadata_refs(metadata_dict, meta_class):
+    metadata_refs = []
+    if metadata_dict:
+        for k, v in metadata_dict.iteritems():
+            metadata_ref = meta_class()
+            metadata_ref['key'] = k
+            metadata_ref['value'] = v
+            metadata_refs.append(metadata_ref)
+    return metadata_refs
+
+
+def _dict_with_extra_specs(inst_type_query):
+    """Takes an instance, volume, or instance type query returned
+    by sqlalchemy and returns it as a dictionary, converting the
+    extra_specs entry from a list of dicts:
+
+    'extra_specs' : [{'key': 'k1', 'value': 'v1', ...}, ...]
+
+    to a single dict:
+
+    'extra_specs' : {'k1': 'v1'}
+
+    """
+    inst_type_dict = dict(inst_type_query)
+    extra_specs = dict([(x['key'], x['value'])
+                        for x in inst_type_query['extra_specs']])
+    inst_type_dict['extra_specs'] = extra_specs
+    return inst_type_dict
+
+
+###################
+
+
+def queue_get_for(context, topic, physical_node_id):
+    # FIXME(ja): this should be servername?
+    return "%s.%s" % (topic, physical_node_id)
+
+
+###################
+
+
+@require_admin_context
+def iscsi_target_count_by_host(context, host):
+    return model_query(context, models.IscsiTarget).\
+                   filter_by(host=host).\
+                   count()
+
+
+@require_admin_context
+def iscsi_target_create_safe(context, values):
+    iscsi_target_ref = models.IscsiTarget()
+
+    for (key, value) in values.iteritems():
+        iscsi_target_ref[key] = value
+    try:
+        iscsi_target_ref.save()
+        return iscsi_target_ref
+    except IntegrityError:
+        return None
+
+
+###################
+
+
+@require_context
+def quota_get(context, project_id, resource, session=None):
+    result = model_query(context, models.Quota, session=session,
+                         read_deleted="no").\
+                     filter_by(project_id=project_id).\
+                     filter_by(resource=resource).\
+                     first()
+
+    if not result:
+        raise exception.ProjectQuotaNotFound(project_id=project_id)
+
+    return result
+
+
+@require_context
+def quota_get_all_by_project(context, project_id):
+    authorize_project_context(context, project_id)
+
+    rows = model_query(context, models.Quota, read_deleted="no").\
+                   filter_by(project_id=project_id).\
+                   all()
+
+    result = {'project_id': project_id}
+    for row in rows:
+        result[row.resource] = row.hard_limit
+
+    return result
+
+
+@require_admin_context
+def quota_create(context, project_id, resource, limit):
+    quota_ref = models.Quota()
+    quota_ref.project_id = project_id
+    quota_ref.resource = resource
+    quota_ref.hard_limit = limit
+    quota_ref.save()
+    return quota_ref
+
+
+@require_admin_context
+def quota_update(context, project_id, resource, limit):
+    session = get_session()
+    with session.begin():
+        quota_ref = quota_get(context, project_id, resource, session=session)
+        quota_ref.hard_limit = limit
+        quota_ref.save(session=session)
+
+
+@require_admin_context
+def quota_destroy(context, project_id, resource):
+    session = get_session()
+    with session.begin():
+        quota_ref = quota_get(context, project_id, resource, session=session)
+        quota_ref.delete(session=session)
+
+
+@require_admin_context
+def quota_destroy_all_by_project(context, project_id):
+    session = get_session()
+    with session.begin():
+        quotas = model_query(context, models.Quota, session=session,
+                             read_deleted="no").\
+                         filter_by(project_id=project_id).\
+                         all()
+
+        for quota_ref in quotas:
+            quota_ref.delete(session=session)
+
+
+###################
+
+
+@require_context
+def quota_class_get(context, class_name, resource, session=None):
+    result = model_query(context, models.QuotaClass, session=session,
+                         read_deleted="no").\
+                     filter_by(class_name=class_name).\
+                     filter_by(resource=resource).\
+                     first()
+
+    if not result:
+        raise exception.QuotaClassNotFound(class_name=class_name)
+
+    return result
+
+
+@require_context
+def quota_class_get_all_by_name(context, class_name):
+    authorize_quota_class_context(context, class_name)
+
+    rows = model_query(context, models.QuotaClass, read_deleted="no").\
+                   filter_by(class_name=class_name).\
+                   all()
+
+    result = {'class_name': class_name}
+    for row in rows:
+        result[row.resource] = row.hard_limit
+
+    return result
+
+
+@require_admin_context
+def quota_class_create(context, class_name, resource, limit):
+    quota_class_ref = models.QuotaClass()
+    quota_class_ref.class_name = class_name
+    quota_class_ref.resource = resource
+    quota_class_ref.hard_limit = limit
+    quota_class_ref.save()
+    return quota_class_ref
+
+
+@require_admin_context
+def quota_class_update(context, class_name, resource, limit):
+    session = get_session()
+    with session.begin():
+        quota_class_ref = quota_class_get(context, class_name, resource,
+                                          session=session)
+        quota_class_ref.hard_limit = limit
+        quota_class_ref.save(session=session)
+
+
+@require_admin_context
+def quota_class_destroy(context, class_name, resource):
+    session = get_session()
+    with session.begin():
+        quota_class_ref = quota_class_get(context, class_name, resource,
+                                          session=session)
+        quota_class_ref.delete(session=session)
+
+
+@require_admin_context
+def quota_class_destroy_all_by_name(context, class_name):
+    session = get_session()
+    with session.begin():
+        quota_classes = model_query(context, models.QuotaClass,
+                                    session=session, read_deleted="no").\
+                                filter_by(class_name=class_name).\
+                                all()
+
+        for quota_class_ref in quota_classes:
+            quota_class_ref.delete(session=session)
+
+
+###################
+
+
+@require_admin_context
+def volume_allocate_iscsi_target(context, volume_id, host):
+    session = get_session()
+    with session.begin():
+        iscsi_target_ref = model_query(context, models.IscsiTarget,
+                                       session=session, read_deleted="no").\
+                                filter_by(volume=None).\
+                                filter_by(host=host).\
+                                with_lockmode('update').\
+                                first()
+
+        # NOTE(vish): if with_lockmode isn't supported, as in sqlite,
+        #             then this has concurrency issues
+        if not iscsi_target_ref:
+            raise db.NoMoreTargets()
+
+        iscsi_target_ref.volume_id = volume_id
+        session.add(iscsi_target_ref)
+
+    return iscsi_target_ref.target_num
+
+
+@require_admin_context
+def volume_attached(context, volume_id, instance_id, mountpoint):
+    session = get_session()
+    with session.begin():
+        volume_ref = volume_get(context, volume_id, session=session)
+        volume_ref['status'] = 'in-use'
+        volume_ref['mountpoint'] = mountpoint
+        volume_ref['attach_status'] = 'attached'
+        volume_ref['instance_id'] = instance_id
+        volume_ref.save(session=session)
+
+
+@require_context
+def volume_create(context, values):
+    values['volume_metadata'] = _metadata_refs(values.get('metadata'),
+                                               models.VolumeMetadata)
+    volume_ref = models.Volume()
+    if not values.get('id'):
+        values['id'] = str(utils.gen_uuid())
+    volume_ref.update(values)
+
+    session = get_session()
+    with session.begin():
+        volume_ref.save(session=session)
+
+    return volume_ref
+
+
+@require_admin_context
+def volume_data_get_for_project(context, project_id):
+    result = model_query(context,
+                         func.count(models.Volume.id),
+                         func.sum(models.Volume.size),
+                         read_deleted="no").\
+                     filter_by(project_id=project_id).\
+                     first()
+
+    # NOTE(vish): convert None to 0
+    return (result[0] or 0, result[1] or 0)
+
+
+@require_admin_context
+def volume_destroy(context, volume_id):
+    session = get_session()
+    with session.begin():
+        session.query(models.Volume).\
+                filter_by(id=volume_id).\
+                update({'deleted': True,
+                        'deleted_at': utils.utcnow(),
+                        'updated_at': literal_column('updated_at')})
+        session.query(models.IscsiTarget).\
+                filter_by(volume_id=volume_id).\
+                update({'volume_id': None})
+        session.query(models.VolumeMetadata).\
+                filter_by(volume_id=volume_id).\
+                update({'deleted': True,
+                        'deleted_at': utils.utcnow(),
+                        'updated_at': literal_column('updated_at')})
+
+
+@require_admin_context
+def volume_detached(context, volume_id):
+    session = get_session()
+    with session.begin():
+        volume_ref = volume_get(context, volume_id, session=session)
+        volume_ref['status'] = 'available'
+        volume_ref['mountpoint'] = None
+        volume_ref['attach_status'] = 'detached'
+        volume_ref.instance = None
+        volume_ref.save(session=session)
+
+
+@require_context
+def _volume_get_query(context, session=None, project_only=False):
+    return model_query(context, models.Volume, session=session,
+                       project_only=project_only).\
+                     options(joinedload('instance')).\
+                     options(joinedload('volume_metadata')).\
+                     options(joinedload('volume_type'))
+
+
+@require_context
+def volume_get(context, volume_id, session=None):
+    result = _volume_get_query(context, session=session, project_only=True).\
+                    filter_by(id=volume_id).\
+                    first()
+
+    if not result:
+        raise exception.VolumeNotFound(volume_id=volume_id)
+
+    return result
+
+
+@require_admin_context
+def volume_get_all(context):
+    return _volume_get_query(context).all()
+
+
+@require_admin_context
+def volume_get_all_by_host(context, host):
+    return _volume_get_query(context).filter_by(host=host).all()
+
+
+@require_admin_context
+def volume_get_all_by_instance(context, instance_id):
+    result = model_query(context, models.Volume, read_deleted="no").\
+                     options(joinedload('volume_metadata')).\
+                     options(joinedload('volume_type')).\
+                     filter_by(instance_id=instance_id).\
+                     all()
+
+    return result
+
+
+@require_context
+def volume_get_all_by_project(context, project_id):
+    authorize_project_context(context, project_id)
+    return _volume_get_query(context).filter_by(project_id=project_id).all()
+
+
+@require_admin_context
+def volume_get_instance(context, volume_id):
+    result = _volume_get_query(context).filter_by(id=volume_id).first()
+
+    if not result:
+        raise exception.VolumeNotFound(volume_id=volume_id)
+
+    return result.instance
+
+
+@require_admin_context
+def volume_get_iscsi_target_num(context, volume_id):
+    result = model_query(context, models.IscsiTarget, read_deleted="yes").\
+                     filter_by(volume_id=volume_id).\
+                     first()
+
+    if not result:
+        raise exception.ISCSITargetNotFoundForVolume(volume_id=volume_id)
+
+    return result.target_num
+
+
+@require_context
+def volume_update(context, volume_id, values):
+    session = get_session()
+    metadata = values.get('metadata')
+    if metadata is not None:
+        volume_metadata_update(context,
+                                volume_id,
+                                values.pop('metadata'),
+                                delete=True)
+    with session.begin():
+        volume_ref = volume_get(context, volume_id, session=session)
+        volume_ref.update(values)
+        volume_ref.save(session=session)
+
+
+####################
+
+def _volume_metadata_get_query(context, volume_id, session=None):
+    return model_query(context, models.VolumeMetadata,
+                       session=session, read_deleted="no").\
+                    filter_by(volume_id=volume_id)
+
+
+@require_context
+@require_volume_exists
+def volume_metadata_get(context, volume_id):
+    rows = _volume_metadata_get_query(context, volume_id).all()
+    result = {}
+    for row in rows:
+        result[row['key']] = row['value']
+
+    return result
+
+
+@require_context
+@require_volume_exists
+def volume_metadata_delete(context, volume_id, key):
+    _volume_metadata_get_query(context, volume_id).\
+        filter_by(key=key).\
+        update({'deleted': True,
+                'deleted_at': utils.utcnow(),
+                'updated_at': literal_column('updated_at')})
+
+
+@require_context
+@require_volume_exists
+def volume_metadata_get_item(context, volume_id, key, session=None):
+    result = _volume_metadata_get_query(context, volume_id, session=session).\
+                    filter_by(key=key).\
+                    first()
+
+    if not result:
+        raise exception.VolumeMetadataNotFound(metadata_key=key,
+                                               volume_id=volume_id)
+    return result
+
+
+@require_context
+@require_volume_exists
+def volume_metadata_update(context, volume_id, metadata, delete):
+    session = get_session()
+
+    # Set existing metadata to deleted if delete argument is True
+    if delete:
+        original_metadata = volume_metadata_get(context, volume_id)
+        for meta_key, meta_value in original_metadata.iteritems():
+            if meta_key not in metadata:
+                meta_ref = volume_metadata_get_item(context, volume_id,
+                                                    meta_key, session)
+                meta_ref.update({'deleted': True})
+                meta_ref.save(session=session)
+
+    meta_ref = None
+
+    # Now update all existing items with new values, or create new meta objects
+    for meta_key, meta_value in metadata.iteritems():
+
+        # update the value whether it exists or not
+        item = {"value": meta_value}
+
+        try:
+            meta_ref = volume_metadata_get_item(context, volume_id,
+                                                  meta_key, session)
+        except exception.VolumeMetadataNotFound, e:
+            meta_ref = models.VolumeMetadata()
+            item.update({"key": meta_key, "volume_id": volume_id})
+
+        meta_ref.update(item)
+        meta_ref.save(session=session)
+
+    return metadata
+
+
+###################
+
+
+@require_context
+def snapshot_create(context, values):
+    snapshot_ref = models.Snapshot()
+    if not values.get('id'):
+        values['id'] = str(utils.gen_uuid())
+    snapshot_ref.update(values)
+
+    session = get_session()
+    with session.begin():
+        snapshot_ref.save(session=session)
+    return snapshot_ref
+
+
+@require_admin_context
+def snapshot_destroy(context, snapshot_id):
+    session = get_session()
+    with session.begin():
+        session.query(models.Snapshot).\
+                filter_by(id=snapshot_id).\
+                update({'deleted': True,
+                        'deleted_at': utils.utcnow(),
+                        'updated_at': literal_column('updated_at')})
+
+
+@require_context
+def snapshot_get(context, snapshot_id, session=None):
+    result = model_query(context, models.Snapshot, session=session,
+                         project_only=True).\
+                filter_by(id=snapshot_id).\
+                first()
+
+    if not result:
+        raise exception.SnapshotNotFound(snapshot_id=snapshot_id)
+
+    return result
+
+
+@require_admin_context
+def snapshot_get_all(context):
+    return model_query(context, models.Snapshot).all()
+
+
+@require_context
+def snapshot_get_all_for_volume(context, volume_id):
+    return model_query(context, models.Snapshot, read_deleted='no',
+                       project_only=True).\
+              filter_by(volume_id=volume_id).all()
+
+
+@require_context
+def snapshot_get_all_by_project(context, project_id):
+    authorize_project_context(context, project_id)
+    return model_query(context, models.Snapshot).\
+                   filter_by(project_id=project_id).\
+                   all()
+
+
+@require_context
+def snapshot_update(context, snapshot_id, values):
+    session = get_session()
+    with session.begin():
+        snapshot_ref = snapshot_get(context, snapshot_id, session=session)
+        snapshot_ref.update(values)
+        snapshot_ref.save(session=session)
+
+
+###################
+
+
+@require_admin_context
+def migration_create(context, values):
+    migration = models.Migration()
+    migration.update(values)
+    migration.save()
+    return migration
+
+
+@require_admin_context
+def migration_update(context, id, values):
+    session = get_session()
+    with session.begin():
+        migration = migration_get(context, id, session=session)
+        migration.update(values)
+        migration.save(session=session)
+        return migration
+
+
+@require_admin_context
+def migration_get(context, id, session=None):
+    result = model_query(context, models.Migration, session=session,
+                         read_deleted="yes").\
+                     filter_by(id=id).\
+                     first()
+
+    if not result:
+        raise exception.MigrationNotFound(migration_id=id)
+
+    return result
+
+
+@require_admin_context
+def migration_get_by_instance_and_status(context, instance_uuid, status):
+    result = model_query(context, models.Migration, read_deleted="yes").\
+                     filter_by(instance_uuid=instance_uuid).\
+                     filter_by(status=status).\
+                     first()
+
+    if not result:
+        raise exception.MigrationNotFoundByStatus(instance_id=instance_uuid,
+                                                  status=status)
+
+    return result
+
+
+@require_admin_context
+def migration_get_all_unconfirmed(context, confirm_window, session=None):
+    confirm_window = datetime.datetime.utcnow() - datetime.timedelta(
+            seconds=confirm_window)
+
+    return model_query(context, models.Migration, session=session,
+                       read_deleted="yes").\
+            filter(models.Migration.updated_at <= confirm_window).\
+            filter_by(status="finished").\
+            all()
+
+
+##################
+
+
+@require_admin_context
+def volume_type_create(context, values):
+    """Create a new instance type. In order to pass in extra specs,
+    the values dict should contain a 'extra_specs' key/value pair:
+
+    {'extra_specs' : {'k1': 'v1', 'k2': 'v2', ...}}
+
+    """
+    session = get_session()
+    with session.begin():
+        try:
+            volume_type_get_by_name(context, values['name'], session)
+            raise exception.VolumeTypeExists(name=values['name'])
+        except exception.VolumeTypeNotFoundByName:
+            pass
+        try:
+            specs = values.get('extra_specs')
+
+            values['extra_specs'] = _metadata_refs(values.get('extra_specs'),
+                                                   models.VolumeTypeExtraSpecs)
+            volume_type_ref = models.VolumeTypes()
+            volume_type_ref.update(values)
+            volume_type_ref.save()
+        except Exception, e:
+            raise exception.DBError(e)
+        return volume_type_ref
+
+
+@require_context
+def volume_type_get_all(context, inactive=False, filters=None):
+    """
+    Returns a dict describing all volume_types with name as key.
+    """
+    filters = filters or {}
+
+    read_deleted = "yes" if inactive else "no"
+    rows = model_query(context, models.VolumeTypes,
+                       read_deleted=read_deleted).\
+                        options(joinedload('extra_specs')).\
+                        order_by("name").\
+                        all()
+
+    # TODO(sirp): this patern of converting rows to a result with extra_specs
+    # is repeated quite a bit, might be worth creating a method for it
+    result = {}
+    for row in rows:
+        result[row['name']] = _dict_with_extra_specs(row)
+
+    return result
+
+
+@require_context
+def volume_type_get(context, id, session=None):
+    """Returns a dict describing specific volume_type"""
+    result = model_query(context, models.VolumeTypes, session=session).\
+                    options(joinedload('extra_specs')).\
+                    filter_by(id=id).\
+                    first()
+
+    if not result:
+        raise exception.VolumeTypeNotFound(volume_type_id=id)
+
+    return _dict_with_extra_specs(result)
+
+
+@require_context
+def volume_type_get_by_name(context, name, session=None):
+    """Returns a dict describing specific volume_type"""
+    result = model_query(context, models.VolumeTypes, session=session).\
+                    options(joinedload('extra_specs')).\
+                    filter_by(name=name).\
+                    first()
+
+    if not result:
+        raise exception.VolumeTypeNotFoundByName(volume_type_name=name)
+    else:
+        return _dict_with_extra_specs(result)
+
+
+@require_admin_context
+def volume_type_destroy(context, name):
+    session = get_session()
+    with session.begin():
+        volume_type_ref = volume_type_get_by_name(context, name,
+                                                  session=session)
+        volume_type_id = volume_type_ref['id']
+        session.query(models.VolumeTypes).\
+                filter_by(id=volume_type_id).\
+                update({'deleted': True,
+                        'deleted_at': utils.utcnow(),
+                        'updated_at': literal_column('updated_at')})
+        session.query(models.VolumeTypeExtraSpecs).\
+                filter_by(volume_type_id=volume_type_id).\
+                update({'deleted': True,
+                        'deleted_at': utils.utcnow(),
+                        'updated_at': literal_column('updated_at')})
+
+
+####################
+
+
+def _volume_type_extra_specs_query(context, volume_type_id, session=None):
+    return model_query(context, models.VolumeTypeExtraSpecs, session=session,
+                       read_deleted="no").\
+                    filter_by(volume_type_id=volume_type_id)
+
+
+@require_context
+def volume_type_extra_specs_get(context, volume_type_id):
+    rows = _volume_type_extra_specs_query(context, volume_type_id).\
+                    all()
+
+    result = {}
+    for row in rows:
+        result[row['key']] = row['value']
+
+    return result
+
+
+@require_context
+def volume_type_extra_specs_delete(context, volume_type_id, key):
+    _volume_type_extra_specs_query(context, volume_type_id).\
+        filter_by(key=key).\
+        update({'deleted': True,
+                'deleted_at': utils.utcnow(),
+                'updated_at': literal_column('updated_at')})
+
+
+@require_context
+def volume_type_extra_specs_get_item(context, volume_type_id, key,
+                                     session=None):
+    result = _volume_type_extra_specs_query(
+                                    context, volume_type_id, session=session).\
+                    filter_by(key=key).\
+                    first()
+
+    if not result:
+        raise exception.VolumeTypeExtraSpecsNotFound(
+                   extra_specs_key=key, volume_type_id=volume_type_id)
+
+    return result
+
+
+@require_context
+def volume_type_extra_specs_update_or_create(context, volume_type_id,
+                                             specs):
+    session = get_session()
+    spec_ref = None
+    for key, value in specs.iteritems():
+        try:
+            spec_ref = volume_type_extra_specs_get_item(
+                context, volume_type_id, key, session)
+        except exception.VolumeTypeExtraSpecsNotFound, e:
+            spec_ref = models.VolumeTypeExtraSpecs()
+        spec_ref.update({"key": key, "value": value,
+                         "volume_type_id": volume_type_id,
+                         "deleted": 0})
+        spec_ref.save(session=session)
+    return specs
+
+
+####################
+
+
+@require_admin_context
+def sm_backend_conf_create(context, values):
+    backend_conf = models.SMBackendConf()
+    backend_conf.update(values)
+    backend_conf.save()
+    return backend_conf
+
+
+@require_admin_context
+def sm_backend_conf_update(context, sm_backend_id, values):
+    session = get_session()
+    with session.begin():
+        backend_conf = model_query(context, models.SMBackendConf,
+                                   session=session,
+                                   read_deleted="yes").\
+                           filter_by(id=sm_backend_id).\
+                           first()
+
+        if not backend_conf:
+            raise exception.NotFound(
+                _("No backend config with id %(sm_backend_id)s") % locals())
+
+        backend_conf.update(values)
+        backend_conf.save(session=session)
+    return backend_conf
+
+
+@require_admin_context
+def sm_backend_conf_delete(context, sm_backend_id):
+    # FIXME(sirp): for consistency, shouldn't this just mark as deleted with
+    # `purge` actually deleting the record?
+    session = get_session()
+    with session.begin():
+        model_query(context, models.SMBackendConf, session=session,
+                    read_deleted="yes").\
+                filter_by(id=sm_backend_id).\
+                delete()
+
+
+@require_admin_context
+def sm_backend_conf_get(context, sm_backend_id):
+    result = model_query(context, models.SMBackendConf, read_deleted="yes").\
+                     filter_by(id=sm_backend_id).\
+                     first()
+
+    if not result:
+        raise exception.NotFound(_("No backend config with id "
+                                   "%(sm_backend_id)s") % locals())
+
+    return result
+
+
+@require_admin_context
+def sm_backend_conf_get_by_sr(context, sr_uuid):
+    session = get_session()
+    return model_query(context, models.SMBackendConf, read_deleted="yes").\
+                    filter_by(sr_uuid=sr_uuid).\
+                    first()
+
+
+@require_admin_context
+def sm_backend_conf_get_all(context):
+    return model_query(context, models.SMBackendConf, read_deleted="yes").\
+                    all()
+
+
+####################
+
+
+def _sm_flavor_get_query(context, sm_flavor_label, session=None):
+    return model_query(context, models.SMFlavors, session=session,
+                       read_deleted="yes").\
+                        filter_by(label=sm_flavor_label)
+
+
+@require_admin_context
+def sm_flavor_create(context, values):
+    sm_flavor = models.SMFlavors()
+    sm_flavor.update(values)
+    sm_flavor.save()
+    return sm_flavor
+
+
+@require_admin_context
+def sm_flavor_update(context, sm_flavor_label, values):
+    sm_flavor = sm_flavor_get(context, sm_flavor_label)
+    sm_flavor.update(values)
+    sm_flavor.save()
+    return sm_flavor
+
+
+@require_admin_context
+def sm_flavor_delete(context, sm_flavor_label):
+    session = get_session()
+    with session.begin():
+        _sm_flavor_get_query(context, sm_flavor_label).delete()
+
+
+@require_admin_context
+def sm_flavor_get(context, sm_flavor_label):
+    result = _sm_flavor_get_query(context, sm_flavor_label).first()
+
+    if not result:
+        raise exception.NotFound(
+                _("No sm_flavor called %(sm_flavor)s") % locals())
+
+    return result
+
+
+@require_admin_context
+def sm_flavor_get_all(context):
+    return model_query(context, models.SMFlavors, read_deleted="yes").all()
+
+
+###############################
+
+
+def _sm_volume_get_query(context, volume_id, session=None):
+    return model_query(context, models.SMVolume, session=session,
+                       read_deleted="yes").\
+                        filter_by(id=volume_id)
+
+
+def sm_volume_create(context, values):
+    sm_volume = models.SMVolume()
+    sm_volume.update(values)
+    sm_volume.save()
+    return sm_volume
+
+
+def sm_volume_update(context, volume_id, values):
+    sm_volume = sm_volume_get(context, volume_id)
+    sm_volume.update(values)
+    sm_volume.save()
+    return sm_volume
+
+
+def sm_volume_delete(context, volume_id):
+    session = get_session()
+    with session.begin():
+        _sm_volume_get_query(context, volume_id, session=session).delete()
+
+
+def sm_volume_get(context, volume_id):
+    result = _sm_volume_get_query(context, volume_id).first()
+
+    if not result:
+        raise exception.NotFound(
+                _("No sm_volume with id %(volume_id)s") % locals())
+
+    return result
+
+
+def sm_volume_get_all(context):
+    return model_query(context, models.SMVolume, read_deleted="yes").all()
+
+
+################
+
+
+def _aggregate_get_query(context, model_class, id_field, id,
+                         session=None, read_deleted=None):
+    return model_query(context, model_class, session=session,
+                       read_deleted=read_deleted).filter(id_field == id)
+
+
+@require_admin_context
+def aggregate_create(context, values, metadata=None):
+    session = get_session()
+    aggregate = _aggregate_get_query(context,
+                                     models.Aggregate,
+                                     models.Aggregate.name,
+                                     values['name'],
+                                     session=session,
+                                     read_deleted='yes').first()
+    values.setdefault('operational_state', aggregate_states.CREATED)
+    if not aggregate:
+        aggregate = models.Aggregate()
+        aggregate.update(values)
+        aggregate.save(session=session)
+    elif aggregate.deleted:
+        values['deleted'] = False
+        values['deleted_at'] = None
+        aggregate.update(values)
+        aggregate.save(session=session)
+    else:
+        raise exception.AggregateNameExists(aggregate_name=values['name'])
+    if metadata:
+        aggregate_metadata_add(context, aggregate.id, metadata)
+    return aggregate
+
+
+@require_admin_context
+def aggregate_get(context, aggregate_id):
+    aggregate = _aggregate_get_query(context,
+                                     models.Aggregate,
+                                     models.Aggregate.id,
+                                     aggregate_id).first()
+
+    if not aggregate:
+        raise exception.AggregateNotFound(aggregate_id=aggregate_id)
+
+    return aggregate
+
+
+@require_admin_context
+def aggregate_get_by_host(context, host):
+    aggregate_host = _aggregate_get_query(context,
+                                          models.AggregateHost,
+                                          models.AggregateHost.host,
+                                          host).first()
+
+    if not aggregate_host:
+        raise exception.AggregateHostNotFound(host=host)
+
+    return aggregate_get(context, aggregate_host.aggregate_id)
+
+
+@require_admin_context
+def aggregate_update(context, aggregate_id, values):
+    session = get_session()
+    aggregate = _aggregate_get_query(context,
+                                     models.Aggregate,
+                                     models.Aggregate.id,
+                                     aggregate_id,
+                                     session=session).first()
+    if aggregate:
+        metadata = values.get('metadata')
+        if metadata is not None:
+            aggregate_metadata_add(context,
+                                   aggregate_id,
+                                   values.pop('metadata'),
+                                   set_delete=True)
+        with session.begin():
+            aggregate.update(values)
+            aggregate.save(session=session)
+        values['metadata'] = metadata
+        return aggregate
+    else:
+        raise exception.AggregateNotFound(aggregate_id=aggregate_id)
+
+
+@require_admin_context
+def aggregate_delete(context, aggregate_id):
+    query = _aggregate_get_query(context,
+                                 models.Aggregate,
+                                 models.Aggregate.id,
+                                 aggregate_id)
+    if query.first():
+        query.update({'deleted': True,
+                      'deleted_at': utils.utcnow(),
+                      'operational_state': aggregate_states.DISMISSED,
+                      'updated_at': literal_column('updated_at')})
+    else:
+        raise exception.AggregateNotFound(aggregate_id=aggregate_id)
+
+
+@require_admin_context
+def aggregate_get_all(context):
+    return model_query(context, models.Aggregate).all()
+
+
+@require_admin_context
+@require_aggregate_exists
+def aggregate_metadata_get(context, aggregate_id):
+    rows = model_query(context,
+                       models.AggregateMetadata).\
+                       filter_by(aggregate_id=aggregate_id).all()
+
+    return dict([(r['key'], r['value']) for r in rows])
+
+
+@require_admin_context
+@require_aggregate_exists
+def aggregate_metadata_delete(context, aggregate_id, key):
+    query = _aggregate_get_query(context,
+                                 models.AggregateMetadata,
+                                 models.AggregateMetadata.aggregate_id,
+                                 aggregate_id).\
+                                 filter_by(key=key)
+    if query.first():
+        query.update({'deleted': True,
+                      'deleted_at': utils.utcnow(),
+                      'updated_at': literal_column('updated_at')})
+    else:
+        raise exception.AggregateMetadataNotFound(aggregate_id=aggregate_id,
+                                                  metadata_key=key)
+
+
+@require_admin_context
+@require_aggregate_exists
+def aggregate_metadata_get_item(context, aggregate_id, key, session=None):
+    result = _aggregate_get_query(context,
+                                  models.AggregateMetadata,
+                                  models.AggregateMetadata.aggregate_id,
+                                  aggregate_id, session=session,
+                                  read_deleted='yes').\
+                                  filter_by(key=key).first()
+
+    if not result:
+        raise exception.AggregateMetadataNotFound(metadata_key=key,
+                                                 aggregate_id=aggregate_id)
+
+    return result
+
+
+@require_admin_context
+@require_aggregate_exists
+def aggregate_metadata_add(context, aggregate_id, metadata, set_delete=False):
+    session = get_session()
+
+    if set_delete:
+        original_metadata = aggregate_metadata_get(context, aggregate_id)
+        for meta_key, meta_value in original_metadata.iteritems():
+            if meta_key not in metadata:
+                meta_ref = aggregate_metadata_get_item(context, aggregate_id,
+                                                      meta_key, session)
+                meta_ref.update({'deleted': True})
+                meta_ref.save(session=session)
+
+    meta_ref = None
+
+    for meta_key, meta_value in metadata.iteritems():
+        item = {"value": meta_value}
+        try:
+            meta_ref = aggregate_metadata_get_item(context, aggregate_id,
+                                                  meta_key, session)
+            if meta_ref.deleted:
+                item.update({'deleted': False, 'deleted_at': None})
+        except exception.AggregateMetadataNotFound:
+            meta_ref = models.AggregateMetadata()
+            item.update({"key": meta_key, "aggregate_id": aggregate_id})
+
+        meta_ref.update(item)
+        meta_ref.save(session=session)
+
+    return metadata
+
+
+@require_admin_context
+@require_aggregate_exists
+def aggregate_host_get_all(context, aggregate_id):
+    rows = model_query(context,
+                       models.AggregateHost).\
+                       filter_by(aggregate_id=aggregate_id).all()
+
+    return [r.host for r in rows]
+
+
+@require_admin_context
+@require_aggregate_exists
+def aggregate_host_delete(context, aggregate_id, host):
+    query = _aggregate_get_query(context,
+                                 models.AggregateHost,
+                                 models.AggregateHost.aggregate_id,
+                                 aggregate_id).filter_by(host=host)
+    if query.first():
+        query.update({'deleted': True,
+                      'deleted_at': utils.utcnow(),
+                      'updated_at': literal_column('updated_at')})
+    else:
+        raise exception.AggregateHostNotFound(aggregate_id=aggregate_id,
+                                              host=host)
+
+
+@require_admin_context
+@require_aggregate_exists
+def aggregate_host_add(context, aggregate_id, host):
+    session = get_session()
+    host_ref = _aggregate_get_query(context,
+                                    models.AggregateHost,
+                                    models.AggregateHost.aggregate_id,
+                                    aggregate_id,
+                                    session=session,
+                                    read_deleted='yes').\
+                                    filter_by(host=host).first()
+    if not host_ref:
+        try:
+            host_ref = models.AggregateHost()
+            values = {"host": host, "aggregate_id": aggregate_id, }
+            host_ref.update(values)
+            host_ref.save(session=session)
+        except exception.DBError:
+            raise exception.AggregateHostConflict(host=host)
+    elif host_ref.deleted:
+        host_ref.update({'deleted': False, 'deleted_at': None})
+        host_ref.save(session=session)
+    else:
+        raise exception.AggregateHostExists(host=host,
+                                            aggregate_id=aggregate_id)
+    return host_ref
diff --git a/cinder/db/sqlalchemy/migrate_repo/README b/cinder/db/sqlalchemy/migrate_repo/README
new file mode 100644
index 000000000..6218f8cac
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/README
@@ -0,0 +1,4 @@
+This is a database migration repository.
+
+More information at
+http://code.google.com/p/sqlalchemy-migrate/
diff --git a/cinder/db/sqlalchemy/migrate_repo/__init__.py b/cinder/db/sqlalchemy/migrate_repo/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/cinder/db/sqlalchemy/migrate_repo/manage.py b/cinder/db/sqlalchemy/migrate_repo/manage.py
new file mode 100644
index 000000000..09e340f44
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/manage.py
@@ -0,0 +1,4 @@
+#!/usr/bin/env python
+from migrate.versioning.shell import main
+if __name__ == '__main__':
+    main(debug='False', repository='.')
diff --git a/cinder/db/sqlalchemy/migrate_repo/migrate.cfg b/cinder/db/sqlalchemy/migrate_repo/migrate.cfg
new file mode 100644
index 000000000..10c685c0e
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/migrate.cfg
@@ -0,0 +1,20 @@
+[db_settings]
+# Used to identify which repository this database is versioned under.
+# You can use the name of your project.
+repository_id=cinder
+
+# The name of the database table used to track the schema version.
+# This name shouldn't already be used by your project.
+# If this is changed once a database is under version control, you'll need to 
+# change the table name in each database too. 
+version_table=migrate_version
+
+# When committing a change script, Migrate will attempt to generate the 
+# sql for all supported databases; normally, if one of them fails - probably
+# because you don't have that database installed - it is ignored and the 
+# commit continues, perhaps ending successfully. 
+# Databases in this list MUST compile successfully during a commit, or the 
+# entire commit will fail. List the databases your application will actually 
+# be using to ensure your updates to that database work properly.
+# This must be a list; example: ['postgres','sqlite']
+required_dbs=[]
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/001_austin.py b/cinder/db/sqlalchemy/migrate_repo/versions/001_austin.py
new file mode 100644
index 000000000..2e21685f8
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/001_austin.py
@@ -0,0 +1,627 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+## Table code mostly autogenerated by genmodel.py
+from sqlalchemy import Boolean, Column, DateTime, ForeignKey
+from sqlalchemy import ForeignKeyConstraint, Integer, MetaData, String
+from sqlalchemy import Table, Text
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    #
+    # New Tables
+    #
+    auth_tokens = Table('auth_tokens', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('token_hash',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False),
+                   primary_key=True,
+                   nullable=False),
+            Column('user_id', Integer()),
+            Column('server_manageent_url',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('storage_url',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('cdn_management_url',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            )
+
+    export_devices = Table('export_devices', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('shelf_id', Integer()),
+            Column('blade_id', Integer()),
+            Column('volume_id',
+                   Integer(),
+                   ForeignKey('volumes.id'),
+                   nullable=True),
+            )
+
+    fixed_ips = Table('fixed_ips', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('address',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('network_id',
+                   Integer(),
+                   ForeignKey('networks.id'),
+                   nullable=True),
+            Column('instance_id',
+                   Integer(),
+                   ForeignKey('instances.id'),
+                   nullable=True),
+            Column('allocated', Boolean(create_constraint=True, name=None)),
+            Column('leased', Boolean(create_constraint=True, name=None)),
+            Column('reserved', Boolean(create_constraint=True, name=None)),
+            )
+
+    floating_ips = Table('floating_ips', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('address',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('fixed_ip_id',
+                   Integer(),
+                   ForeignKey('fixed_ips.id'),
+                   nullable=True),
+            Column('project_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('host',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            )
+
+    instances = Table('instances', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('internal_id', Integer()),
+            Column('admin_pass',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('user_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('project_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('image_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('kernel_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('ramdisk_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('server_name',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('launch_index', Integer()),
+            Column('key_name',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('key_data',
+                   Text(length=None, convert_unicode=False,
+                        assert_unicode=None,
+                        unicode_error=None, _warn_on_bytestring=False)),
+            Column('state', Integer()),
+            Column('state_description',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('memory_mb', Integer()),
+            Column('vcpus', Integer()),
+            Column('local_gb', Integer()),
+            Column('hostname',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('host',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('instance_type',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('user_data',
+                   Text(length=None, convert_unicode=False,
+                        assert_unicode=None,
+                        unicode_error=None, _warn_on_bytestring=False)),
+            Column('reservation_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('mac_address',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('scheduled_at', DateTime(timezone=False)),
+            Column('launched_at', DateTime(timezone=False)),
+            Column('terminated_at', DateTime(timezone=False)),
+            Column('display_name',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('display_description',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            )
+
+    key_pairs = Table('key_pairs', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('name',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('user_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('fingerprint',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('public_key',
+                   Text(length=None, convert_unicode=False,
+                        assert_unicode=None,
+                        unicode_error=None, _warn_on_bytestring=False)),
+            )
+
+    networks = Table('networks', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('injected', Boolean(create_constraint=True, name=None)),
+            Column('cidr',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('netmask',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('bridge',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('gateway',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('broadcast',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('dns',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('vlan', Integer()),
+            Column('vpn_public_address',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('vpn_public_port', Integer()),
+            Column('vpn_private_address',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('dhcp_start',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('project_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('host',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            )
+
+    projects = Table('projects', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False),
+                   primary_key=True,
+                   nullable=False),
+            Column('name',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('description',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('project_manager',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False),
+                   ForeignKey('users.id')),
+            )
+
+    quotas = Table('quotas', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('project_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('instances', Integer()),
+            Column('cores', Integer()),
+            Column('volumes', Integer()),
+            Column('gigabytes', Integer()),
+            Column('floating_ips', Integer()),
+            )
+
+    security_groups = Table('security_groups', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('name',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('description',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('user_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('project_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            )
+
+    security_group_inst_assoc = Table('security_group_instance_association',
+            meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('security_group_id',
+                   Integer(),
+                   ForeignKey('security_groups.id')),
+            Column('instance_id', Integer(), ForeignKey('instances.id')),
+            )
+
+    security_group_rules = Table('security_group_rules', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('parent_group_id',
+                   Integer(),
+                   ForeignKey('security_groups.id')),
+            Column('protocol',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('from_port', Integer()),
+            Column('to_port', Integer()),
+            Column('cidr',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('group_id',
+                   Integer(),
+                   ForeignKey('security_groups.id')),
+            )
+
+    services = Table('services', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('host',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('binary',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('topic',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('report_count', Integer(), nullable=False),
+            Column('disabled', Boolean(create_constraint=True, name=None)),
+            )
+
+    users = Table('users', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False),
+                   primary_key=True,
+                   nullable=False),
+            Column('name',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('access_key',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('secret_key',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('is_admin', Boolean(create_constraint=True, name=None)),
+            )
+
+    user_project_association = Table('user_project_association', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('user_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False),
+                   ForeignKey('users.id'),
+                   primary_key=True,
+                   nullable=False),
+            Column('project_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False),
+                   ForeignKey('projects.id'),
+                   primary_key=True,
+                   nullable=False),
+            )
+
+    user_project_role_association = Table('user_project_role_association',
+            meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('user_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False),
+                   primary_key=True,
+                   nullable=False),
+            Column('project_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False),
+                   primary_key=True,
+                   nullable=False),
+            Column('role',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False),
+                   primary_key=True,
+                   nullable=False),
+            ForeignKeyConstraint(['user_id',
+                                  'project_id'],
+                                 ['user_project_association.user_id',
+                                  'user_project_association.project_id']),
+            )
+
+    user_role_association = Table('user_role_association', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('user_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False),
+                   ForeignKey('users.id'),
+                   primary_key=True,
+                   nullable=False),
+            Column('role',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False),
+                   primary_key=True,
+                   nullable=False),
+            )
+
+    volumes = Table('volumes', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('ec2_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('user_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('project_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('host',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('size', Integer()),
+            Column('availability_zone',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('instance_id',
+                   Integer(),
+                   ForeignKey('instances.id'),
+                   nullable=True),
+            Column('mountpoint',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('attach_time',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('status',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('attach_status',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('scheduled_at', DateTime(timezone=False)),
+            Column('launched_at', DateTime(timezone=False)),
+            Column('terminated_at', DateTime(timezone=False)),
+            Column('display_name',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('display_description',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            )
+    tables = [auth_tokens,
+              instances, key_pairs, networks, fixed_ips, floating_ips,
+              quotas, security_groups, security_group_inst_assoc,
+              security_group_rules, services, users, projects,
+              user_project_association, user_project_role_association,
+              user_role_association, volumes, export_devices]
+
+    for table in tables:
+        try:
+            table.create()
+        except Exception:
+            LOG.info(repr(table))
+            LOG.exception('Exception while creating table')
+            meta.drop_all(tables=tables)
+            raise
+
+
+def downgrade(migrate_engine):
+    # Operations to reverse the above upgrade go here.
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    auth_tokens = Table('auth_tokens', meta, autoload=True)
+    export_devices = Table('export_devices', meta, autoload=True)
+    fixed_ips = Table('fixed_ips', meta, autoload=True)
+    floating_ips = Table('floating_ips', meta, autoload=True)
+    instances = Table('instances', meta, autoload=True)
+    key_pairs = Table('key_pairs', meta, autoload=True)
+    networks = Table('networks', meta, autoload=True)
+    projects = Table('projects', meta, autoload=True)
+    quotas = Table('quotas', meta, autoload=True)
+    security_groups = Table('security_groups', meta, autoload=True)
+    security_group_inst_assoc = Table('security_group_instance_association',
+                                      meta, autoload=True)
+    security_group_rules = Table('security_group_rules', meta, autoload=True)
+    services = Table('services', meta, autoload=True)
+    users = Table('users', meta, autoload=True)
+    user_project_association = Table('user_project_association', meta,
+                                     autoload=True)
+    user_project_role_association = Table('user_project_role_association',
+                                          meta,
+                                          autoload=True)
+    user_role_association = Table('user_role_association', meta, autoload=True)
+    volumes = Table('volumes', meta, autoload=True)
+
+    # table order matters, don't change
+    for table in (auth_tokens, export_devices, floating_ips, fixed_ips,
+                  key_pairs, networks,
+                  quotas, security_group_inst_assoc,
+                  security_group_rules, security_groups, services,
+                  user_project_role_association, user_project_association,
+                  user_role_association,
+                  projects, users, volumes, instances):
+        table.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/002_bexar.py b/cinder/db/sqlalchemy/migrate_repo/versions/002_bexar.py
new file mode 100644
index 000000000..ba1576b7b
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/002_bexar.py
@@ -0,0 +1,236 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, DateTime, ForeignKey
+from sqlalchemy import Integer, MetaData, String, Table, Text
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # load tables for fk
+    volumes = Table('volumes', meta, autoload=True)
+
+    instances = Table('instances', meta, autoload=True)
+    services = Table('services', meta, autoload=True)
+    networks = Table('networks', meta, autoload=True)
+    auth_tokens = Table('auth_tokens', meta, autoload=True)
+
+    #
+    # New Tables
+    #
+    certificates = Table('certificates', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('user_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('project_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('file_name',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            )
+
+    consoles = Table('consoles', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('instance_name',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('instance_id', Integer()),
+            Column('password',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('port', Integer(), nullable=True),
+            Column('pool_id',
+                   Integer(),
+                   ForeignKey('console_pools.id')),
+            )
+
+    console_pools = Table('console_pools', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('address',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('username',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('password',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('console_type',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('public_hostname',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('host',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('compute_host',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            )
+
+    instance_actions = Table('instance_actions', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('instance_id',
+                   Integer(),
+                   ForeignKey('instances.id')),
+            Column('action',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('error',
+                   Text(length=None, convert_unicode=False,
+                        assert_unicode=None,
+                        unicode_error=None, _warn_on_bytestring=False)),
+            )
+
+    iscsi_targets = Table('iscsi_targets', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('target_num', Integer()),
+            Column('host',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('volume_id',
+                   Integer(),
+                   ForeignKey('volumes.id'),
+                   nullable=True),
+            )
+
+    tables = [certificates, console_pools, consoles, instance_actions,
+              iscsi_targets]
+    for table in tables:
+        try:
+            table.create()
+        except Exception:
+            LOG.info(repr(table))
+            LOG.exception('Exception while creating table')
+            meta.drop_all(tables=tables)
+            raise
+
+    auth_tokens.c.user_id.alter(type=String(length=255,
+                                            convert_unicode=False,
+                                            assert_unicode=None,
+                                            unicode_error=None,
+                                            _warn_on_bytestring=False))
+
+    #
+    # New Columns
+    #
+    instances_availability_zone = Column(
+            'availability_zone',
+            String(length=255, convert_unicode=False, assert_unicode=None,
+                   unicode_error=None, _warn_on_bytestring=False))
+
+    instances_locked = Column('locked',
+                    Boolean(create_constraint=True, name=None))
+
+    networks_cidr_v6 = Column(
+            'cidr_v6',
+            String(length=255, convert_unicode=False, assert_unicode=None,
+                   unicode_error=None, _warn_on_bytestring=False))
+
+    networks_ra_server = Column(
+            'ra_server',
+            String(length=255, convert_unicode=False, assert_unicode=None,
+                   unicode_error=None, _warn_on_bytestring=False))
+
+    services_availability_zone = Column(
+            'availability_zone',
+            String(length=255, convert_unicode=False, assert_unicode=None,
+                   unicode_error=None, _warn_on_bytestring=False))
+
+    instances.create_column(instances_availability_zone)
+    instances.create_column(instances_locked)
+    networks.create_column(networks_cidr_v6)
+    networks.create_column(networks_ra_server)
+    services.create_column(services_availability_zone)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # load tables for fk
+    volumes = Table('volumes', meta, autoload=True)
+
+    instances = Table('instances', meta, autoload=True)
+    services = Table('services', meta, autoload=True)
+    networks = Table('networks', meta, autoload=True)
+    auth_tokens = Table('auth_tokens', meta, autoload=True)
+
+    certificates = Table('certificates', meta, autoload=True)
+    consoles = Table('consoles', meta, autoload=True)
+    console_pools = Table('console_pools', meta, autoload=True)
+    instance_actions = Table('instance_actions', meta, autoload=True)
+    iscsi_targets = Table('iscsi_targets', meta, autoload=True)
+
+    # table order matters, don't change
+    tables = [certificates, consoles, console_pools, instance_actions,
+              iscsi_targets]
+    for table in tables:
+        table.drop()
+
+    auth_tokens.c.user_id.alter(type=Integer())
+
+    instances.drop_column('availability_zone')
+    instances.drop_column('locked')
+    networks.drop_column('cidr_v6')
+    networks.drop_column('ra_server')
+    services.drop_column('availability_zone')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/002_postgresql_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/002_postgresql_downgrade.sql
new file mode 100644
index 000000000..cf5c1a208
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/002_postgresql_downgrade.sql
@@ -0,0 +1,20 @@
+BEGIN;
+
+    DROP TABLE certificates;
+    DROP TABLE consoles;
+    DROP TABLE console_pools;
+    DROP TABLE instance_actions;
+    DROP TABLE iscsi_targets;
+
+    ALTER TABLE auth_tokens ADD COLUMN user_id_backup INTEGER;
+    UPDATE auth_tokens SET user_id_backup = CAST(user_id AS INTEGER);
+    ALTER TABLE auth_tokens DROP COLUMN user_id;
+    ALTER TABLE auth_tokens RENAME COLUMN user_id_backup TO user_id;
+
+    ALTER TABLE instances DROP COLUMN availability_zone;
+    ALTER TABLE instances DROP COLUMN locked;
+    ALTER TABLE networks DROP COLUMN cidr_v6;
+    ALTER TABLE networks DROP COLUMN ra_server;
+    ALTER TABLE services DROP COLUMN availability_zone;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/002_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/002_sqlite_downgrade.sql
new file mode 100644
index 000000000..8c6a5beca
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/002_sqlite_downgrade.sql
@@ -0,0 +1,388 @@
+BEGIN TRANSACTION;
+
+    DROP TABLE certificates;
+
+    DROP TABLE console_pools;
+
+    DROP TABLE consoles;
+
+    DROP TABLE instance_actions;
+
+    DROP TABLE iscsi_targets;
+
+    CREATE TEMPORARY TABLE auth_tokens_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        token_hash VARCHAR(255) NOT NULL,
+        user_id VARCHAR(255),
+        server_manageent_url VARCHAR(255),
+        storage_url VARCHAR(255),
+        cdn_management_url VARCHAR(255),
+        PRIMARY KEY (token_hash),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO auth_tokens_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               token_hash,
+               user_id,
+               server_manageent_url,
+               storage_url,
+               cdn_management_url
+        FROM auth_tokens;
+
+    DROP TABLE auth_tokens;
+
+    CREATE TABLE auth_tokens (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        token_hash VARCHAR(255) NOT NULL,
+        user_id INTEGER,
+        server_manageent_url VARCHAR(255),
+        storage_url VARCHAR(255),
+        cdn_management_url VARCHAR(255),
+        PRIMARY KEY (token_hash),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO auth_tokens
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               token_hash,
+               user_id,
+               server_manageent_url,
+               storage_url,
+               cdn_management_url
+        FROM auth_tokens_backup;
+
+    DROP TABLE auth_tokens_backup;
+
+    CREATE TEMPORARY TABLE instances_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        internal_id INTEGER,
+        admin_pass VARCHAR(255),
+        user_id VARCHAR(255),
+        project_id VARCHAR(255),
+        image_id VARCHAR(255),
+        kernel_id VARCHAR(255),
+        ramdisk_id VARCHAR(255),
+        server_name VARCHAR(255),
+        launch_index INTEGER,
+        key_name VARCHAR(255),
+        key_data TEXT,
+        state INTEGER,
+        state_description VARCHAR(255),
+        memory_mb INTEGER,
+        vcpus INTEGER,
+        local_gb INTEGER,
+        hostname VARCHAR(255),
+        host VARCHAR(255),
+        instance_type VARCHAR(255),
+        user_data TEXT,
+        reservation_id VARCHAR(255),
+        mac_address VARCHAR(255),
+        scheduled_at DATETIME,
+        launched_at DATETIME,
+        terminated_at DATETIME,
+        display_name VARCHAR(255),
+        display_description VARCHAR(255),
+        availability_zone VARCHAR(255),
+        locked BOOLEAN,
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        CHECK (locked IN (0, 1))
+    );
+
+    INSERT INTO instances_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               internal_id,
+               admin_pass,
+               user_id,
+               project_id,
+               image_id,
+               kernel_id,
+               ramdisk_id,
+               server_name,
+               launch_index,
+               key_name,
+               key_data,
+               state,
+               state_description,
+               memory_mb,
+               vcpus,
+               local_gb,
+               hostname,
+               host,
+               instance_type,
+               user_data,
+               reservation_id,
+               mac_address,
+               scheduled_at,
+               launched_at,
+               terminated_at,
+               display_name,
+               display_description,
+               availability_zone,
+               locked
+        FROM instances;
+
+    DROP TABLE instances;
+
+    CREATE TABLE instances (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        internal_id INTEGER,
+        admin_pass VARCHAR(255),
+        user_id VARCHAR(255),
+        project_id VARCHAR(255),
+        image_id VARCHAR(255),
+        kernel_id VARCHAR(255),
+        ramdisk_id VARCHAR(255),
+        server_name VARCHAR(255),
+        launch_index INTEGER,
+        key_name VARCHAR(255),
+        key_data TEXT,
+        state INTEGER,
+        state_description VARCHAR(255),
+        memory_mb INTEGER,
+        vcpus INTEGER,
+        local_gb INTEGER,
+        hostname VARCHAR(255),
+        host VARCHAR(255),
+        instance_type VARCHAR(255),
+        user_data TEXT,
+        reservation_id VARCHAR(255),
+        mac_address VARCHAR(255),
+        scheduled_at DATETIME,
+        launched_at DATETIME,
+        terminated_at DATETIME,
+        display_name VARCHAR(255),
+        display_description VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO instances
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               internal_id,
+               admin_pass,
+               user_id,
+               project_id,
+               image_id,
+               kernel_id,
+               ramdisk_id,
+               server_name,
+               launch_index,
+               key_name,
+               key_data,
+               state,
+               state_description,
+               memory_mb,
+               vcpus,
+               local_gb,
+               hostname,
+               host,
+               instance_type,
+               user_data,
+               reservation_id,
+               mac_address,
+               scheduled_at,
+               launched_at,
+               terminated_at,
+               display_name,
+               display_description
+        FROM instances_backup;
+
+    DROP TABLE instances_backup;
+
+    CREATE TEMPORARY TABLE networks_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        injected BOOLEAN,
+        cidr VARCHAR(255),
+        netmask VARCHAR(255),
+        bridge VARCHAR(255),
+        gateway VARCHAR(255),
+        broadcast VARCHAR(255),
+        dns VARCHAR(255),
+        vlan INTEGER,
+        vpn_public_address VARCHAR(255),
+        vpn_public_port INTEGER,
+        vpn_private_address VARCHAR(255),
+        dhcp_start VARCHAR(255),
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        cidr_v6 VARCHAR(255),
+        ra_server VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        CHECK (injected IN (0, 1))
+    );
+
+    INSERT INTO networks_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               injected,
+               cidr,
+               netmask,
+               bridge,
+               gateway,
+               broadcast,
+               dns,
+               vlan,
+               vpn_public_address,
+               vpn_public_port,
+               vpn_private_address,
+               dhcp_start,
+               project_id,
+               host,
+               cidr_v6,
+               ra_server
+        FROM networks;
+
+    DROP TABLE networks;
+
+    CREATE TABLE networks (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        injected BOOLEAN,
+        cidr VARCHAR(255),
+        netmask VARCHAR(255),
+        bridge VARCHAR(255),
+        gateway VARCHAR(255),
+        broadcast VARCHAR(255),
+        dns VARCHAR(255),
+        vlan INTEGER,
+        vpn_public_address VARCHAR(255),
+        vpn_public_port INTEGER,
+        vpn_private_address VARCHAR(255),
+        dhcp_start VARCHAR(255),
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        CHECK (injected IN (0, 1))
+    );
+
+    INSERT INTO networks
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               injected,
+               cidr,
+               netmask,
+               bridge,
+               gateway,
+               broadcast,
+               dns,
+               vlan,
+               vpn_public_address,
+               vpn_public_port,
+               vpn_private_address,
+               dhcp_start,
+               project_id,
+               host
+        FROM networks_backup;
+
+    DROP TABLE networks_backup;
+
+    CREATE TEMPORARY TABLE services_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        host VARCHAR(255),
+        binary VARCHAR(255),
+        topic VARCHAR(255),
+        report_count INTEGER NOT NULL,
+        disabled BOOLEAN,
+        availability_zone VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        CHECK (disabled IN (0, 1))
+    );
+
+    INSERT INTO services_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               host,
+               binary,
+               topic,
+               report_count,
+               disabled,
+               availability_zone
+        FROM services;
+
+    DROP TABLE services;
+
+    CREATE TABLE services (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        host VARCHAR(255),
+        binary VARCHAR(255),
+        topic VARCHAR(255),
+        report_count INTEGER NOT NULL,
+        disabled BOOLEAN,
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        CHECK (disabled IN (0, 1))
+    );
+
+    INSERT INTO services
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               host,
+               binary,
+               topic,
+               report_count,
+               disabled
+        FROM services_backup;
+
+    DROP TABLE services_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/003_add_label_to_networks.py b/cinder/db/sqlalchemy/migrate_repo/versions/003_add_label_to_networks.py
new file mode 100644
index 000000000..668b77f0f
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/003_add_label_to_networks.py
@@ -0,0 +1,42 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, String, Table
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    networks = Table('networks', meta, autoload=True)
+
+    networks_label = Column(
+            'label',
+            String(length=255, convert_unicode=False, assert_unicode=None,
+                   unicode_error=None, _warn_on_bytestring=False))
+    networks.create_column(networks_label)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    networks = Table('networks', meta, autoload=True)
+
+    networks.drop_column('label')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/003_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/003_sqlite_downgrade.sql
new file mode 100644
index 000000000..01601cac0
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/003_sqlite_downgrade.sql
@@ -0,0 +1,111 @@
+BEGIN TRANSACTION;
+
+    CREATE TEMPORARY TABLE networks_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        injected BOOLEAN,
+        cidr VARCHAR(255),
+        netmask VARCHAR(255),
+        bridge VARCHAR(255),
+        gateway VARCHAR(255),
+        broadcast VARCHAR(255),
+        dns VARCHAR(255),
+        vlan INTEGER,
+        vpn_public_address VARCHAR(255),
+        vpn_public_port INTEGER,
+        vpn_private_address VARCHAR(255),
+        dhcp_start VARCHAR(255),
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        cidr_v6 VARCHAR(255),
+        ra_server VARCHAR(255),
+        label VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        CHECK (injected IN (0, 1))
+    );
+
+    INSERT INTO networks_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               injected,
+               cidr,
+               netmask,
+               bridge,
+               gateway,
+               broadcast,
+               dns,
+               vlan,
+               vpn_public_address,
+               vpn_public_port,
+               vpn_private_address,
+               dhcp_start,
+               project_id,
+               host,
+               cidr_v6,
+               ra_server,
+               label
+        FROM networks;
+
+    DROP TABLE networks;
+
+    CREATE TABLE networks (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        injected BOOLEAN,
+        cidr VARCHAR(255),
+        netmask VARCHAR(255),
+        bridge VARCHAR(255),
+        gateway VARCHAR(255),
+        broadcast VARCHAR(255),
+        dns VARCHAR(255),
+        vlan INTEGER,
+        vpn_public_address VARCHAR(255),
+        vpn_public_port INTEGER,
+        vpn_private_address VARCHAR(255),
+        dhcp_start VARCHAR(255),
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        cidr_v6 VARCHAR(255),
+        ra_server VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        CHECK (injected IN (0, 1))
+    );
+
+    INSERT INTO networks
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               injected,
+               cidr,
+               netmask,
+               bridge,
+               gateway,
+               broadcast,
+               dns,
+               vlan,
+               vpn_public_address,
+               vpn_public_port,
+               vpn_private_address,
+               dhcp_start,
+               project_id,
+               host,
+               cidr_v6,
+               ra_server
+        FROM networks_backup;
+
+    DROP TABLE networks_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/004_add_zone_tables.py b/cinder/db/sqlalchemy/migrate_repo/versions/004_add_zone_tables.py
new file mode 100644
index 000000000..e46d9d443
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/004_add_zone_tables.py
@@ -0,0 +1,66 @@
+# Copyright 2010 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, DateTime, Integer
+from sqlalchemy import MetaData, String, Table
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    #
+    # New Tables
+    #
+    zones = Table('zones', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('api_url',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('username',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('password',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            )
+
+    for table in (zones, ):
+        try:
+            table.create()
+        except Exception:
+            LOG.info(repr(table))
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    zones = Table('zones', meta, autoload=True)
+
+    for table in (zones, ):
+            table.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/005_add_instance_metadata.py b/cinder/db/sqlalchemy/migrate_repo/versions/005_add_instance_metadata.py
new file mode 100644
index 000000000..4eb66111a
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/005_add_instance_metadata.py
@@ -0,0 +1,81 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 Justin Santa Barbara
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer
+from sqlalchemy import MetaData, String, Table
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # load tables for fk
+    instances = Table('instances', meta, autoload=True)
+
+    quotas = Table('quotas', meta, autoload=True)
+
+    instance_metadata_table = Table('instance_metadata', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('instance_id',
+                   Integer(),
+                   ForeignKey('instances.id'),
+                   nullable=False),
+            Column('key',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('value',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)))
+
+    for table in (instance_metadata_table, ):
+        try:
+            table.create()
+        except Exception:
+            LOG.info(repr(table))
+            LOG.exception('Exception while creating table')
+            raise
+
+    quota_metadata_items = Column('metadata_items', Integer())
+    quotas.create_column(quota_metadata_items)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # load tables for fk
+    instances = Table('instances', meta, autoload=True)
+
+    quotas = Table('quotas', meta, autoload=True)
+
+    instance_metadata_table = Table('instance_metadata', meta, autoload=True)
+
+    for table in (instance_metadata_table, ):
+            table.drop()
+
+    quotas.drop_column('metadata_items')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/006_add_provider_data_to_volumes.py b/cinder/db/sqlalchemy/migrate_repo/versions/006_add_provider_data_to_volumes.py
new file mode 100644
index 000000000..df2be9df4
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/006_add_provider_data_to_volumes.py
@@ -0,0 +1,54 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 Justin Santa Barbara.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, String, Table
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    volumes = Table('volumes', meta, autoload=True)
+
+    # Add columns to existing tables
+    volumes_provider_location = Column('provider_location',
+                                       String(length=256,
+                                              convert_unicode=False,
+                                              assert_unicode=None,
+                                              unicode_error=None,
+                                              _warn_on_bytestring=False))
+
+    volumes_provider_auth = Column('provider_auth',
+                                   String(length=256,
+                                          convert_unicode=False,
+                                          assert_unicode=None,
+                                          unicode_error=None,
+                                          _warn_on_bytestring=False))
+    volumes.create_column(volumes_provider_location)
+    volumes.create_column(volumes_provider_auth)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    volumes = Table('volumes', meta, autoload=True)
+
+    volumes.drop_column('provider_location')
+    volumes.drop_column('provider_auth')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/006_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/006_sqlite_downgrade.sql
new file mode 100644
index 000000000..f55c28437
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/006_sqlite_downgrade.sql
@@ -0,0 +1,113 @@
+BEGIN TRANSACTION;
+
+    CREATE TEMPORARY TABLE volumes_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        ec2_id VARCHAR(255),
+        user_id VARCHAR(255),
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        size INTEGER,
+        availability_zone VARCHAR(255),
+        instance_id INTEGER,
+        mountpoint VARCHAR(255),
+        attach_time VARCHAR(255),
+        status VARCHAR(255),
+        attach_status VARCHAR(255),
+        scheduled_at DATETIME,
+        launched_at DATETIME,
+        terminated_at DATETIME,
+        display_name VARCHAR(255),
+        display_description VARCHAR(255),
+        provider_location VARCHAR(256),
+        provider_auth VARCHAR(256),
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        FOREIGN KEY(instance_id) REFERENCES instances (id)
+    );
+
+    INSERT INTO volumes_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               ec2_id,
+               user_id,
+               project_id,
+               host,
+               size,
+               availability_zone,
+               instance_id,
+               mountpoint,
+               attach_time,
+               status,
+               attach_status,
+               scheduled_at,
+               launched_at,
+               terminated_at,
+               display_name,
+               display_description,
+               provider_location,
+               provider_auth
+        FROM volumes;
+
+    DROP TABLE volumes;
+
+    CREATE TABLE volumes (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        ec2_id VARCHAR(255),
+        user_id VARCHAR(255),
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        size INTEGER,
+        availability_zone VARCHAR(255),
+        instance_id INTEGER,
+        mountpoint VARCHAR(255),
+        attach_time VARCHAR(255),
+        status VARCHAR(255),
+        attach_status VARCHAR(255),
+        scheduled_at DATETIME,
+        launched_at DATETIME,
+        terminated_at DATETIME,
+        display_name VARCHAR(255),
+        display_description VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        FOREIGN KEY(instance_id) REFERENCES instances (id)
+    );
+
+    INSERT INTO volumes
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               ec2_id,
+               user_id,
+               project_id,
+               host,
+               size,
+               availability_zone,
+               instance_id,
+               mountpoint,
+               attach_time,
+               status,
+               attach_status,
+               scheduled_at,
+               launched_at,
+               terminated_at,
+               display_name,
+               display_description
+        FROM volumes_backup;
+
+    DROP TABLE volumes_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/007_add_ipv6_to_fixed_ips.py b/cinder/db/sqlalchemy/migrate_repo/versions/007_add_ipv6_to_fixed_ips.py
new file mode 100644
index 000000000..d84fa1734
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/007_add_ipv6_to_fixed_ips.py
@@ -0,0 +1,70 @@
+# Copyright 2011 OpenStack LLC
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, String, Table
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    fixed_ips = Table('fixed_ips', meta, autoload=True)
+
+    #
+    # New Columns
+    #
+    fixed_ips_addressV6 = Column(
+        "addressV6",
+        String(
+            length=255,
+            convert_unicode=False,
+            assert_unicode=None,
+            unicode_error=None,
+            _warn_on_bytestring=False))
+
+    fixed_ips_netmaskV6 = Column(
+        "netmaskV6",
+        String(
+            length=3,
+            convert_unicode=False,
+            assert_unicode=None,
+            unicode_error=None,
+            _warn_on_bytestring=False))
+
+    fixed_ips_gatewayV6 = Column(
+        "gatewayV6",
+        String(
+            length=255,
+            convert_unicode=False,
+            assert_unicode=None,
+            unicode_error=None,
+            _warn_on_bytestring=False))
+    # Add columns to existing tables
+    fixed_ips.create_column(fixed_ips_addressV6)
+    fixed_ips.create_column(fixed_ips_netmaskV6)
+    fixed_ips.create_column(fixed_ips_gatewayV6)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    fixed_ips = Table('fixed_ips', meta, autoload=True)
+
+    fixed_ips.drop_column('addressV6')
+    fixed_ips.drop_column('netmaskV6')
+    fixed_ips.drop_column('gatewayV6')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/007_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/007_sqlite_downgrade.sql
new file mode 100644
index 000000000..44d347698
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/007_sqlite_downgrade.sql
@@ -0,0 +1,79 @@
+BEGIN TRANSACTION;
+
+    CREATE TEMPORARY TABLE fixed_ips_backup (
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        network_id INTEGER,
+        instance_id INTEGER,
+        allocated BOOLEAN DEFAULT FALSE,
+        leased BOOLEAN DEFAULT FALSE,
+        reserved BOOLEAN DEFAULT FALSE,
+        created_at DATETIME NOT NULL,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN NOT NULL,
+        addressV6 VARCHAR(255),
+        netmaskV6 VARCHAR(3),
+        gatewayV6 VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (leased IN (0, 1)),
+        CHECK (allocated IN (0, 1)),
+        CHECK (deleted IN (0, 1)),
+        CHECK (reserved IN (0, 1))
+    );
+
+    INSERT INTO fixed_ips_backup
+        SELECT id,
+               address,
+               network_id,
+               instance_id,
+               allocated,
+               leased,
+               reserved,
+               created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               addressV6,
+               netmaskV6,
+               gatewayV6
+        FROM fixed_ips;
+
+    DROP TABLE fixed_ips;
+
+    CREATE TABLE fixed_ips (
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        network_id INTEGER,
+        instance_id INTEGER,
+        allocated BOOLEAN DEFAULT FALSE,
+        leased BOOLEAN DEFAULT FALSE,
+        reserved BOOLEAN DEFAULT FALSE,
+        created_at DATETIME NOT NULL,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN NOT NULL,
+        PRIMARY KEY (id),
+        CHECK (leased IN (0, 1)),
+        CHECK (allocated IN (0, 1)),
+        CHECK (deleted IN (0, 1)),
+        CHECK (reserved IN (0, 1))
+    );
+
+    INSERT INTO fixed_ips
+        SELECT id,
+               address,
+               network_id,
+               instance_id,
+               allocated,
+               leased,
+               reserved,
+               created_at,
+               updated_at,
+               deleted_at,
+               deleted
+        FROM fixed_ips_backup;
+
+    DROP TABLE fixed_ips_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/008_add_instance_types.py b/cinder/db/sqlalchemy/migrate_repo/versions/008_add_instance_types.py
new file mode 100644
index 000000000..98e538628
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/008_add_instance_types.py
@@ -0,0 +1,85 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 Ken Pepple
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, DateTime, Integer
+from sqlalchemy import MetaData, String, Table
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here
+    # Don't create your own engine; bind migrate_engine
+    # to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+    #
+    # New Tables
+    #
+    instance_types = Table('instance_types', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('name',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False),
+                          unique=True),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('memory_mb', Integer(), nullable=False),
+            Column('vcpus', Integer(), nullable=False),
+            Column('local_gb', Integer(), nullable=False),
+            Column('flavorid', Integer(), nullable=False, unique=True),
+            Column('swap', Integer(), nullable=False, default=0),
+            Column('rxtx_quota', Integer(), nullable=False, default=0),
+            Column('rxtx_cap', Integer(), nullable=False, default=0))
+    try:
+        instance_types.create()
+    except Exception:
+        LOG.info(repr(instance_types))
+        LOG.exception('Exception while creating instance_types table')
+        raise
+
+    # Here are the old static instance types
+    INSTANCE_TYPES = {
+    'm1.tiny': dict(memory_mb=512, vcpus=1, local_gb=0, flavorid=1),
+    'm1.small': dict(memory_mb=2048, vcpus=1, local_gb=20, flavorid=2),
+    'm1.medium': dict(memory_mb=4096, vcpus=2, local_gb=40, flavorid=3),
+    'm1.large': dict(memory_mb=8192, vcpus=4, local_gb=80, flavorid=4),
+    'm1.xlarge': dict(memory_mb=16384, vcpus=8, local_gb=160, flavorid=5)}
+    try:
+        i = instance_types.insert()
+        for name, values in INSTANCE_TYPES.iteritems():
+            # FIXME(kpepple) should we be seeding created_at / updated_at ?
+            # now = datetime.datatime.utcnow()
+            i.execute({'name': name, 'memory_mb': values["memory_mb"],
+                        'vcpus': values["vcpus"], 'deleted': False,
+                        'local_gb': values["local_gb"],
+                        'flavorid': values["flavorid"]})
+    except Exception:
+        LOG.info(repr(instance_types))
+        LOG.exception('Exception while seeding instance_types table')
+        raise
+
+
+def downgrade(migrate_engine):
+    # Operations to reverse the above upgrade go here.
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instance_types = Table('instance_types', meta, autoload=True)
+    for table in (instance_types, ):
+        table.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/009_add_instance_migrations.py b/cinder/db/sqlalchemy/migrate_repo/versions/009_add_instance_migrations.py
new file mode 100644
index 000000000..acedd3ad0
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/009_add_instance_migrations.py
@@ -0,0 +1,70 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer
+from sqlalchemy import MetaData, String, Table
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # load tables for fk
+    instances = Table('instances', meta, autoload=True)
+
+    #
+    # New Tables
+    #
+    migrations = Table('migrations', meta,
+                Column('created_at', DateTime(timezone=False)),
+                Column('updated_at', DateTime(timezone=False)),
+                Column('deleted_at', DateTime(timezone=False)),
+                Column('deleted', Boolean(create_constraint=True, name=None)),
+                Column('id', Integer(), primary_key=True, nullable=False),
+                Column('source_compute', String(255)),
+                Column('dest_compute', String(255)),
+                Column('dest_host', String(255)),
+                Column('instance_id', Integer, ForeignKey('instances.id'),
+                    nullable=True),
+                Column('status', String(255)),
+          )
+
+    for table in (migrations, ):
+        try:
+            table.create()
+        except Exception:
+            LOG.info(repr(table))
+            LOG.exception('Exception while creating table')
+            raise
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # load tables for fk
+    instances = Table('instances', meta, autoload=True)
+
+    migrations = Table('migrations', meta, autoload=True)
+
+    for table in (migrations, ):
+            table.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/010_add_os_type_to_instances.py b/cinder/db/sqlalchemy/migrate_repo/versions/010_add_os_type_to_instances.py
new file mode 100644
index 000000000..da01940bd
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/010_add_os_type_to_instances.py
@@ -0,0 +1,45 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, String, Table
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    instances_os_type = Column('os_type',
+                               String(length=255, convert_unicode=False,
+                                      assert_unicode=None, unicode_error=None,
+                                      _warn_on_bytestring=False),
+                               nullable=True)
+    instances.create_column(instances_os_type)
+    migrate_engine.execute(instances.update()\
+                           .where(instances.c.os_type == None)\
+                           .values(os_type='linux'))
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    instances.drop_column('os_type')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/011_live_migration.py b/cinder/db/sqlalchemy/migrate_repo/versions/011_live_migration.py
new file mode 100644
index 000000000..c2a3560a3
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/011_live_migration.py
@@ -0,0 +1,85 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, DateTime, Integer, MetaData
+from sqlalchemy import Table, Text
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    compute_nodes = Table('compute_nodes', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('service_id', Integer(), nullable=False),
+
+            Column('vcpus', Integer(), nullable=False),
+            Column('memory_mb', Integer(), nullable=False),
+            Column('local_gb', Integer(), nullable=False),
+            Column('vcpus_used', Integer(), nullable=False),
+            Column('memory_mb_used', Integer(), nullable=False),
+            Column('local_gb_used', Integer(), nullable=False),
+            Column('hypervisor_type',
+                   Text(convert_unicode=False, assert_unicode=None,
+                   unicode_error=None, _warn_on_bytestring=False),
+                   nullable=False),
+            Column('hypervisor_version', Integer(), nullable=False),
+            Column('cpu_info',
+                   Text(convert_unicode=False, assert_unicode=None,
+                        unicode_error=None, _warn_on_bytestring=False),
+                   nullable=False),
+            )
+
+    try:
+        compute_nodes.create()
+    except Exception:
+        LOG.info(repr(compute_nodes))
+        LOG.exception('Exception while creating table')
+        meta.drop_all(tables=[compute_nodes])
+        raise
+
+    instances_launched_on = Column(
+             'launched_on',
+             Text(convert_unicode=False, assert_unicode=None,
+                  unicode_error=None, _warn_on_bytestring=False),
+                  nullable=True)
+    instances.create_column(instances_launched_on)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    compute_nodes = Table('compute_nodes', meta, autoload=True)
+
+    compute_nodes.drop()
+
+    instances.drop_column('launched_on')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/012_add_ipv6_flatmanager.py b/cinder/db/sqlalchemy/migrate_repo/versions/012_add_ipv6_flatmanager.py
new file mode 100644
index 000000000..a626d2c7d
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/012_add_ipv6_flatmanager.py
@@ -0,0 +1,90 @@
+# Copyright (c) 2011 NTT.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer
+from sqlalchemy import MetaData, String, Table
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # load tables for fk
+    instances = Table('instances', meta, autoload=True)
+
+    networks = Table('networks', meta, autoload=True)
+    fixed_ips = Table('fixed_ips', meta, autoload=True)
+
+    # Alter column name
+    networks.c.ra_server.alter(name='gateway_v6')
+    # Add new column to existing table
+    networks_netmask_v6 = Column(
+            'netmask_v6',
+            String(length=255, convert_unicode=False, assert_unicode=None,
+                   unicode_error=None, _warn_on_bytestring=False))
+    networks.create_column(networks_netmask_v6)
+
+    # drop existing columns from table
+    fixed_ips.c.addressV6.drop()
+    fixed_ips.c.netmaskV6.drop()
+    fixed_ips.c.gatewayV6.drop()
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # load tables for fk
+    instances = Table('instances', meta, autoload=True)
+
+    networks = Table('networks', meta, autoload=True)
+    fixed_ips = Table('fixed_ips', meta, autoload=True)
+
+    networks.c.gateway_v6.alter(name='ra_server')
+    networks.drop_column('netmask_v6')
+
+    fixed_ips_addressV6 = Column(
+        "addressV6",
+        String(
+            length=255,
+            convert_unicode=False,
+            assert_unicode=None,
+            unicode_error=None,
+            _warn_on_bytestring=False))
+
+    fixed_ips_netmaskV6 = Column(
+        "netmaskV6",
+        String(
+            length=3,
+            convert_unicode=False,
+            assert_unicode=None,
+            unicode_error=None,
+            _warn_on_bytestring=False))
+
+    fixed_ips_gatewayV6 = Column(
+        "gatewayV6",
+        String(
+            length=255,
+            convert_unicode=False,
+            assert_unicode=None,
+            unicode_error=None,
+            _warn_on_bytestring=False))
+
+    for column in (fixed_ips_addressV6,
+                   fixed_ips_netmaskV6,
+                   fixed_ips_gatewayV6):
+        fixed_ips.create_column(column)
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/012_sqlite_upgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/012_sqlite_upgrade.sql
new file mode 100644
index 000000000..0779f50e8
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/012_sqlite_upgrade.sql
@@ -0,0 +1,195 @@
+BEGIN TRANSACTION;
+
+    CREATE TEMPORARY TABLE networks_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        injected BOOLEAN,
+        cidr VARCHAR(255),
+        netmask VARCHAR(255),
+        bridge VARCHAR(255),
+        gateway VARCHAR(255),
+        broadcast VARCHAR(255),
+        dns VARCHAR(255),
+        vlan INTEGER,
+        vpn_public_address VARCHAR(255),
+        vpn_public_port INTEGER,
+        vpn_private_address VARCHAR(255),
+        dhcp_start VARCHAR(255),
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        cidr_v6 VARCHAR(255),
+        ra_server VARCHAR(255),
+        label VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (injected IN (0, 1)),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO networks_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               injected,
+               cidr,
+               netmask,
+               bridge,
+               gateway,
+               broadcast,
+               dns,
+               vlan,
+               vpn_public_address,
+               vpn_public_port,
+               vpn_private_address,
+               dhcp_start,
+               project_id,
+               host,
+               cidr_v6,
+               ra_server,
+               label
+        FROM networks;
+
+    DROP TABLE networks;
+
+    CREATE TABLE networks (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        injected BOOLEAN,
+        cidr VARCHAR(255),
+        netmask VARCHAR(255),
+        bridge VARCHAR(255),
+        gateway VARCHAR(255),
+        broadcast VARCHAR(255),
+        dns VARCHAR(255),
+        vlan INTEGER,
+        vpn_public_address VARCHAR(255),
+        vpn_public_port INTEGER,
+        vpn_private_address VARCHAR(255),
+        dhcp_start VARCHAR(255),
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        cidr_v6 VARCHAR(255),
+        gateway_v6 VARCHAR(255),
+        label VARCHAR(255),
+        netmask_v6 VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (injected IN (0, 1)),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO networks
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               injected,
+               cidr,
+               netmask,
+               bridge,
+               gateway,
+               broadcast,
+               dns,
+               vlan,
+               vpn_public_address,
+               vpn_public_port,
+               vpn_private_address,
+               dhcp_start,
+               project_id,
+               host,
+               cidr_v6,
+               ra_server AS gateway_v6,
+               label,
+               NULL AS netmask_v6
+        FROM networks_backup;
+
+    DROP TABLE networks_backup;
+
+    CREATE TEMPORARY TABLE fixed_ips_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        network_id INTEGER,
+        instance_id INTEGER,
+        allocated BOOLEAN,
+        leased BOOLEAN,
+        reserved BOOLEAN,
+        addressV6 VARCHAR(255),
+        netmaskV6 VARCHAR(3),
+        gatewayV6 VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (reserved IN (0, 1)),
+        CHECK (allocated IN (0, 1)),
+        CHECK (leased IN (0, 1)),
+        CHECK (deleted IN (0, 1)),
+        FOREIGN KEY(instance_id) REFERENCES instances (id),
+        FOREIGN KEY(network_id) REFERENCES networks (id)
+    );
+
+    INSERT INTO fixed_ips_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               address,
+               network_id,
+               instance_id,
+               allocated,
+               leased,
+               reserved,
+               addressV6,
+               netmaskV6,
+               gatewayV6
+        FROM fixed_ips;
+
+    DROP TABLE fixed_ips;
+
+    CREATE TABLE fixed_ips (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        network_id INTEGER,
+        instance_id INTEGER,
+        allocated BOOLEAN,
+        leased BOOLEAN,
+        reserved BOOLEAN,
+        PRIMARY KEY (id),
+        CHECK (reserved IN (0, 1)),
+        CHECK (allocated IN (0, 1)),
+        CHECK (leased IN (0, 1)),
+        CHECK (deleted IN (0, 1)),
+        FOREIGN KEY(instance_id) REFERENCES instances (id),
+        FOREIGN KEY(network_id) REFERENCES networks (id)
+    );
+
+    INSERT INTO fixed_ips
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               address,
+               network_id,
+               instance_id,
+               allocated,
+               leased,
+               reserved
+        FROM fixed_ips_backup;
+
+    DROP TABLE fixed_ips_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/013_add_flavors_to_migrations.py b/cinder/db/sqlalchemy/migrate_repo/versions/013_add_flavors_to_migrations.py
new file mode 100644
index 000000000..d8735ec7d
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/013_add_flavors_to_migrations.py
@@ -0,0 +1,43 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, Table
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    migrations = Table('migrations', meta, autoload=True)
+
+    old_flavor_id = Column('old_flavor_id', Integer())
+    new_flavor_id = Column('new_flavor_id', Integer())
+
+    migrations.create_column(old_flavor_id)
+    migrations.create_column(new_flavor_id)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    migrations = Table('migrations', meta, autoload=True)
+
+    migrations.drop_column('old_flavor_id')
+    migrations.drop_column('new_flavor_id')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/013_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/013_sqlite_downgrade.sql
new file mode 100644
index 000000000..fbba364be
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/013_sqlite_downgrade.sql
@@ -0,0 +1,69 @@
+BEGIN TRANSACTION;
+
+    CREATE TEMPORARY TABLE migrations_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        source_compute VARCHAR(255),
+        dest_compute VARCHAR(255),
+        dest_host VARCHAR(255),
+        instance_id INTEGER,
+        status VARCHAR(255),
+        old_flavor_id INTEGER,
+        new_flavor_id INTEGER,
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        FOREIGN KEY(instance_id) REFERENCES instances (id)
+    );
+
+    INSERT INTO migrations_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               source_compute,
+               dest_compute,
+               dest_host,
+               instance_id,
+               status,
+               old_flavor_id,
+               new_flavor_id
+        FROM migrations;
+
+    DROP TABLE migrations;
+
+    CREATE TABLE migrations (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        source_compute VARCHAR(255),
+        dest_compute VARCHAR(255),
+        dest_host VARCHAR(255),
+        instance_id INTEGER,
+        status VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        FOREIGN KEY(instance_id) REFERENCES instances (id)
+    );
+
+    INSERT INTO migrations
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               source_compute,
+               dest_compute,
+               dest_host,
+               instance_id,
+               status
+        FROM migrations_backup;
+
+    DROP TABLE migrations_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/014_add_instance_type_id_to_instances.py b/cinder/db/sqlalchemy/migrate_repo/versions/014_add_instance_type_id_to_instances.py
new file mode 100644
index 000000000..b363caca5
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/014_add_instance_type_id_to_instances.py
@@ -0,0 +1,74 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, String, Table
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instance_types = Table('instance_types', meta, autoload=True)
+    instances = Table('instances', meta, autoload=True)
+
+    c_instance_type_id = Column('instance_type_id',
+                               String(length=255, convert_unicode=False,
+                                      assert_unicode=None, unicode_error=None,
+                                      _warn_on_bytestring=False),
+                               nullable=True)
+
+    instances.create_column(c_instance_type_id)
+
+    type_names = {}
+    recs = migrate_engine.execute(instance_types.select())
+    for row in recs:
+        type_names[row[0]] = row[1]
+
+    for type_id, type_name in type_names.iteritems():
+        migrate_engine.execute(instances.update()\
+            .where(instances.c.instance_type == type_name)\
+            .values(instance_type_id=type_id))
+
+    instances.c.instance_type.drop()
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instance_types = Table('instance_types', meta, autoload=True)
+    instances = Table('instances', meta, autoload=True)
+
+    c_instance_type = Column('instance_type',
+                               String(length=255, convert_unicode=False,
+                                      assert_unicode=None, unicode_error=None,
+                                      _warn_on_bytestring=False),
+                               nullable=True)
+    instances.create_column(c_instance_type)
+
+    type_names = {}
+    recs = migrate_engine.execute(instance_types.select())
+    for row in recs:
+        type_names[row[0]] = row[1]
+
+    for type_id, type_name in type_names.iteritems():
+        migrate_engine.execute(instances.update()\
+            .where(instances.c.instance_type_id == type_id)\
+            .values(instance_type=type_name))
+
+    instances.c.instance_type_id.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/015_add_auto_assign_to_floating_ips.py b/cinder/db/sqlalchemy/migrate_repo/versions/015_add_auto_assign_to_floating_ips.py
new file mode 100644
index 000000000..51db85066
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/015_add_auto_assign_to_floating_ips.py
@@ -0,0 +1,35 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# Copyright 2011 Grid Dynamics
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, MetaData, Table
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+    floating_ips = Table('floating_ips', meta, autoload=True)
+    c_auto_assigned = Column('auto_assigned', Boolean, default=False)
+    floating_ips.create_column(c_auto_assigned)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    floating_ips = Table('floating_ips', meta, autoload=True)
+    floating_ips.drop_column('auto_assigned')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/015_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/015_sqlite_downgrade.sql
new file mode 100644
index 000000000..c599ef2b3
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/015_sqlite_downgrade.sql
@@ -0,0 +1,62 @@
+BEGIN TRANSACTION;
+    CREATE TEMPORARY TABLE floating_ips_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        fixed_ip_id INTEGER,
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        auto_assigned BOOLEAN,
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        CHECK (auto_assigned IN (0, 1)),
+        FOREIGN KEY(fixed_ip_id) REFERENCES fixed_ips (id)
+    );
+
+    INSERT INTO floating_ips_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               address,
+               fixed_ip_id,
+               project_id,
+               host,
+               auto_assigned
+        FROM floating_ips;
+
+    DROP TABLE floating_ips;
+
+    CREATE TABLE floating_ips (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        fixed_ip_id INTEGER,
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        FOREIGN KEY(fixed_ip_id) REFERENCES fixed_ips (id)
+    );
+
+    INSERT INTO floating_ips
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               address,
+               fixed_ip_id,
+               project_id,
+               host
+        FROM floating_ips_backup;
+
+    DROP TABLE floating_ips_backup;
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/016_make_quotas_key_and_value.py b/cinder/db/sqlalchemy/migrate_repo/versions/016_make_quotas_key_and_value.py
new file mode 100644
index 000000000..1c7081c4a
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/016_make_quotas_key_and_value.py
@@ -0,0 +1,213 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, DateTime, Integer
+from sqlalchemy import MetaData, String, Table
+
+from cinder import utils
+
+resources = [
+    'instances',
+    'cores',
+    'volumes',
+    'gigabytes',
+    'floating_ips',
+    'metadata_items',
+]
+
+
+def old_style_quotas_table(meta, name):
+    return Table(name, meta,
+                 Column('id', Integer(), primary_key=True),
+                 Column('created_at', DateTime(),
+                        default=utils.utcnow),
+                 Column('updated_at', DateTime(),
+                        onupdate=utils.utcnow),
+                 Column('deleted_at', DateTime()),
+                 Column('deleted', Boolean(), default=False),
+                 Column('project_id',
+                        String(length=255, convert_unicode=False,
+                               assert_unicode=None, unicode_error=None,
+                               _warn_on_bytestring=False)),
+                 Column('instances', Integer()),
+                 Column('cores', Integer()),
+                 Column('volumes', Integer()),
+                 Column('gigabytes', Integer()),
+                 Column('floating_ips', Integer()),
+                 Column('metadata_items', Integer()),
+                )
+
+
+def new_style_quotas_table(meta, name):
+    return Table(name, meta,
+                 Column('id', Integer(), primary_key=True),
+                 Column('created_at', DateTime(),
+                        default=utils.utcnow),
+                 Column('updated_at', DateTime(),
+                        onupdate=utils.utcnow),
+                 Column('deleted_at', DateTime()),
+                 Column('deleted', Boolean(), default=False),
+                 Column('project_id',
+                        String(length=255, convert_unicode=False,
+                               assert_unicode=None, unicode_error=None,
+                               _warn_on_bytestring=False)),
+                 Column('resource',
+                        String(length=255, convert_unicode=False,
+                               assert_unicode=None, unicode_error=None,
+                               _warn_on_bytestring=False),
+                        nullable=False),
+                 Column('hard_limit', Integer(), nullable=True),
+                )
+
+
+def quotas_table(meta, name='quotas'):
+    return Table(name, meta, autoload=True)
+
+
+def _assert_no_duplicate_project_ids(quotas):
+    project_ids = set()
+    message = ('There are multiple active quotas for project "%s" '
+               '(among others, possibly). '
+               'Please resolve all ambiguous quotas before '
+               'reattempting the migration.')
+    for quota in quotas:
+        assert quota.project_id not in project_ids, message % quota.project_id
+        project_ids.add(quota.project_id)
+
+
+def assert_old_quotas_have_no_active_duplicates(migrate_engine, quotas):
+    """Ensure that there are no duplicate non-deleted quota entries."""
+    select = quotas.select().where(quotas.c.deleted == False)
+    results = migrate_engine.execute(select)
+    _assert_no_duplicate_project_ids(list(results))
+
+
+def assert_new_quotas_have_no_active_duplicates(migrate_engine, quotas):
+    """Ensure that there are no duplicate non-deleted quota entries."""
+    for resource in resources:
+        select = quotas.select().\
+                where(quotas.c.deleted == False).\
+                where(quotas.c.resource == resource)
+        results = migrate_engine.execute(select)
+        _assert_no_duplicate_project_ids(list(results))
+
+
+def convert_forward(migrate_engine, old_quotas, new_quotas):
+    quotas = list(migrate_engine.execute(old_quotas.select()))
+    for quota in quotas:
+        for resource in resources:
+            hard_limit = getattr(quota, resource)
+            if hard_limit is None:
+                continue
+            insert = new_quotas.insert().values(
+                created_at=quota.created_at,
+                updated_at=quota.updated_at,
+                deleted_at=quota.deleted_at,
+                deleted=quota.deleted,
+                project_id=quota.project_id,
+                resource=resource,
+                hard_limit=hard_limit)
+            migrate_engine.execute(insert)
+
+
+def earliest(date1, date2):
+    if date1 is None and date2 is None:
+        return None
+    if date1 is None:
+        return date2
+    if date2 is None:
+        return date1
+    if date1 < date2:
+        return date1
+    return date2
+
+
+def latest(date1, date2):
+    if date1 is None and date2 is None:
+        return None
+    if date1 is None:
+        return date2
+    if date2 is None:
+        return date1
+    if date1 > date2:
+        return date1
+    return date2
+
+
+def convert_backward(migrate_engine, old_quotas, new_quotas):
+    quotas = {}
+    for quota in migrate_engine.execute(new_quotas.select()):
+        if (quota.resource not in resources
+            or quota.hard_limit is None or quota.deleted):
+            continue
+        if not quota.project_id in quotas:
+            quotas[quota.project_id] = {
+                'project_id': quota.project_id,
+                'created_at': quota.created_at,
+                'updated_at': quota.updated_at,
+                quota.resource: quota.hard_limit,
+            }
+        else:
+            quotas[quota.project_id]['created_at'] = earliest(
+                quota.created_at, quotas[quota.project_id]['created_at'])
+            quotas[quota.project_id]['updated_at'] = latest(
+                quota.updated_at, quotas[quota.project_id]['updated_at'])
+            quotas[quota.project_id][quota.resource] = quota.hard_limit
+
+    for quota in quotas.itervalues():
+        insert = old_quotas.insert().values(**quota)
+        migrate_engine.execute(insert)
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    old_quotas = quotas_table(meta)
+    assert_old_quotas_have_no_active_duplicates(migrate_engine, old_quotas)
+
+    new_quotas = new_style_quotas_table(meta, 'quotas_new')
+    new_quotas.create()
+    convert_forward(migrate_engine, old_quotas, new_quotas)
+    old_quotas.drop()
+
+    # clear metadata to work around this:
+    # http://code.google.com/p/sqlalchemy-migrate/issues/detail?id=128
+    meta.clear()
+    new_quotas = quotas_table(meta, 'quotas_new')
+    new_quotas.rename('quotas')
+
+
+def downgrade(migrate_engine):
+    # Operations to reverse the above upgrade go here.
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    new_quotas = quotas_table(meta)
+    assert_new_quotas_have_no_active_duplicates(migrate_engine, new_quotas)
+
+    old_quotas = old_style_quotas_table(meta, 'quotas_old')
+    old_quotas.create()
+    convert_backward(migrate_engine, old_quotas, new_quotas)
+    new_quotas.drop()
+
+    # clear metadata to work around this:
+    # http://code.google.com/p/sqlalchemy-migrate/issues/detail?id=128
+    meta.clear()
+    old_quotas = quotas_table(meta, 'quotas_old')
+    old_quotas.rename('quotas')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/017_make_instance_type_id_an_integer.py b/cinder/db/sqlalchemy/migrate_repo/versions/017_make_instance_type_id_an_integer.py
new file mode 100644
index 000000000..0aed48a7d
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/017_make_instance_type_id_an_integer.py
@@ -0,0 +1,87 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, String, Table
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    types = {}
+    for instance in migrate_engine.execute(instances.select()):
+        if instance.instance_type_id is None:
+            types[instance.id] = None
+            continue
+        try:
+            types[instance.id] = int(instance.instance_type_id)
+        except ValueError:
+            LOG.warn("Instance %s did not have instance_type_id "
+                         "converted to an integer because its value is %s" %
+                          (instance.id, instance.instance_type_id))
+            types[instance.id] = None
+
+    integer_column = Column('instance_type_id_int', Integer(), nullable=True)
+    string_column = instances.c.instance_type_id
+
+    integer_column.create(instances)
+    for instance_id, instance_type_id in types.iteritems():
+        update = instances.update().\
+                where(instances.c.id == instance_id).\
+                values(instance_type_id_int=instance_type_id)
+        migrate_engine.execute(update)
+
+    string_column.alter(name='instance_type_id_str')
+    integer_column.alter(name='instance_type_id')
+    string_column.drop()
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    integer_column = instances.c.instance_type_id
+    string_column = Column('instance_type_id_str',
+                           String(length=255, convert_unicode=False,
+                                  assert_unicode=None, unicode_error=None,
+                                  _warn_on_bytestring=False),
+                           nullable=True)
+
+    types = {}
+    for instance in migrate_engine.execute(instances.select()):
+        if instance.instance_type_id is None:
+            types[instance.id] = None
+        else:
+            types[instance.id] = str(instance.instance_type_id)
+
+    string_column.create(instances)
+    for instance_id, instance_type_id in types.iteritems():
+        update = instances.update().\
+                where(instances.c.id == instance_id).\
+                values(instance_type_id_str=instance_type_id)
+        migrate_engine.execute(update)
+
+    integer_column.alter(name='instance_type_id_int')
+    string_column.alter(name='instance_type_id')
+    integer_column.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/018_rename_server_management_url.py b/cinder/db/sqlalchemy/migrate_repo/versions/018_rename_server_management_url.py
new file mode 100644
index 000000000..59ead97ad
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/018_rename_server_management_url.py
@@ -0,0 +1,35 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import MetaData, Table
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+    tokens = Table('auth_tokens', meta, autoload=True)
+    c_manageent = tokens.c.server_manageent_url
+    c_manageent.alter(name='server_management_url')
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    tokens = Table('auth_tokens', meta, autoload=True)
+    c_management = tokens.c.server_management_url
+    c_management.alter(name='server_manageent_url')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/019_add_volume_snapshot_support.py b/cinder/db/sqlalchemy/migrate_repo/versions/019_add_volume_snapshot_support.py
new file mode 100644
index 000000000..e0670e3c7
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/019_add_volume_snapshot_support.py
@@ -0,0 +1,82 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 MORITA Kazutaka.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Table, MetaData
+from sqlalchemy import Integer, DateTime, Boolean, String
+
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    #
+    # New Tables
+    #
+    snapshots = Table('snapshots', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('volume_id', Integer(), nullable=False),
+            Column('user_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('project_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('status',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('progress',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('volume_size', Integer()),
+            Column('scheduled_at', DateTime(timezone=False)),
+            Column('display_name',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('display_description',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)))
+    try:
+        snapshots.create()
+    except Exception:
+        LOG.info(repr(snapshots))
+        LOG.exception('Exception while creating table')
+        meta.drop_all(tables=[snapshots])
+        raise
+
+
+def downgrade(migrate_engine):
+    # Operations to reverse the above upgrade go here.
+    meta = MetaData()
+    meta.bind = migrate_engine
+    snapshots = Table('snapshots', meta, autoload=True)
+    snapshots.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/020_add_snapshot_id_to_volumes.py b/cinder/db/sqlalchemy/migrate_repo/versions/020_add_snapshot_id_to_volumes.py
new file mode 100644
index 000000000..c5a632ca0
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/020_add_snapshot_id_to_volumes.py
@@ -0,0 +1,40 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 MORITA Kazutaka.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Table, MetaData, Integer
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    volumes = Table('volumes', meta, autoload=True)
+
+    snapshot_id = Column('snapshot_id', Integer())
+    # Add columns to existing tables
+    volumes.create_column(snapshot_id)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    volumes = Table('volumes', meta, autoload=True)
+
+    volumes.drop_column('snapshot_id')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/020_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/020_sqlite_downgrade.sql
new file mode 100644
index 000000000..97b946604
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/020_sqlite_downgrade.sql
@@ -0,0 +1,119 @@
+BEGIN TRANSACTION;
+
+    CREATE TEMPORARY TABLE volumes_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        ec2_id VARCHAR(255),
+        user_id VARCHAR(255),
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        size INTEGER,
+        availability_zone VARCHAR(255),
+        instance_id INTEGER,
+        mountpoint VARCHAR(255),
+        attach_time VARCHAR(255),
+        status VARCHAR(255),
+        attach_status VARCHAR(255),
+        scheduled_at DATETIME,
+        launched_at DATETIME,
+        terminated_at DATETIME,
+        display_name VARCHAR(255),
+        display_description VARCHAR(255),
+        provider_location VARCHAR(256),
+        provider_auth VARCHAR(256),
+        snapshot_id INTEGER,
+        PRIMARY KEY (id),
+        FOREIGN KEY(instance_id) REFERENCES instances (id),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO volumes_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               ec2_id,
+               user_id,
+               project_id,
+               host,
+               size,
+               availability_zone,
+               instance_id,
+               mountpoint,
+               attach_time,
+               status,
+               attach_status,
+               scheduled_at,
+               launched_at,
+               terminated_at,
+               display_name,
+               display_description,
+               provider_location,
+               provider_auth,
+               snapshot_id
+        FROM volumes;
+
+    DROP TABLE volumes;
+
+    CREATE TABLE volumes (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        ec2_id VARCHAR(255),
+        user_id VARCHAR(255),
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        size INTEGER,
+        availability_zone VARCHAR(255),
+        instance_id INTEGER,
+        mountpoint VARCHAR(255),
+        attach_time VARCHAR(255),
+        status VARCHAR(255),
+        attach_status VARCHAR(255),
+        scheduled_at DATETIME,
+        launched_at DATETIME,
+        terminated_at DATETIME,
+        display_name VARCHAR(255),
+        display_description VARCHAR(255),
+        provider_location VARCHAR(256),
+        provider_auth VARCHAR(256),
+        PRIMARY KEY (id),
+        FOREIGN KEY(instance_id) REFERENCES instances (id),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO volumes
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               ec2_id,
+               user_id,
+               project_id,
+               host,
+               size,
+               availability_zone,
+               instance_id,
+               mountpoint,
+               attach_time,
+               status,
+               attach_status,
+               scheduled_at,
+               launched_at,
+               terminated_at,
+               display_name,
+               display_description,
+               provider_location,
+               provider_auth
+        FROM volumes_backup;
+
+    DROP TABLE volumes_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/021_rename_image_ids.py b/cinder/db/sqlalchemy/migrate_repo/versions/021_rename_image_ids.py
new file mode 100644
index 000000000..64b539ed6
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/021_rename_image_ids.py
@@ -0,0 +1,38 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import MetaData, Table
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instances = Table('instances', meta, autoload=True)
+
+    image_id_column = instances.c.image_id
+    image_id_column.alter(name='image_ref')
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    image_ref_column = instances.c.image_ref
+    image_ref_column.alter(name='image_id')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/022_set_engine_mysql_innodb.py b/cinder/db/sqlalchemy/migrate_repo/versions/022_set_engine_mysql_innodb.py
new file mode 100644
index 000000000..2c10b790a
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/022_set_engine_mysql_innodb.py
@@ -0,0 +1,64 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import MetaData
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+    if migrate_engine.name == "mysql":
+        migrate_engine.execute("ALTER TABLE auth_tokens Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE certificates Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE compute_nodes Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE console_pools Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE consoles Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE export_devices Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE fixed_ips Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE floating_ips Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE instance_actions Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE instance_metadata Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE instance_types Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE instances Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE iscsi_targets Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE key_pairs Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE migrate_version Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE migrations Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE networks Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE projects Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE quotas Engine=InnoDB")
+        migrate_engine.execute(
+         "ALTER TABLE security_group_instance_association Engine=InnoDB")
+        migrate_engine.execute(
+         "ALTER TABLE security_group_rules Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE security_groups Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE services Engine=InnoDB")
+        migrate_engine.execute(
+         "ALTER TABLE user_project_association Engine=InnoDB")
+        migrate_engine.execute(
+         "ALTER TABLE user_project_role_association Engine=InnoDB")
+        migrate_engine.execute(
+         "ALTER TABLE user_role_association Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE users Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE volumes Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE zones Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE snapshots Engine=InnoDB")
+
+
+def downgrade(migrate_engine):
+    pass
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/023_add_vm_mode_to_instances.py b/cinder/db/sqlalchemy/migrate_repo/versions/023_add_vm_mode_to_instances.py
new file mode 100644
index 000000000..ee607dd92
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/023_add_vm_mode_to_instances.py
@@ -0,0 +1,42 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, MetaData, String, Table
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    instances_vm_mode = Column('vm_mode',
+                               String(length=255, convert_unicode=False,
+                                      assert_unicode=None, unicode_error=None,
+                                      _warn_on_bytestring=False),
+                               nullable=True)
+    instances.create_column(instances_vm_mode)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    instances.drop_column('vm_mode')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/024_add_block_device_mapping.py b/cinder/db/sqlalchemy/migrate_repo/versions/024_add_block_device_mapping.py
new file mode 100644
index 000000000..5c6ddb970
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/024_add_block_device_mapping.py
@@ -0,0 +1,92 @@
+# Copyright 2011 OpenStack LLC.
+# Copyright 2011 Isaku Yamahata
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import MetaData, Table, Column
+from sqlalchemy import DateTime, Boolean, Integer, String
+from sqlalchemy import ForeignKey
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # load tables for fk
+    instances = Table('instances', meta, autoload=True)
+    volumes = Table('volumes', meta, autoload=True)
+    snapshots = Table('snapshots', meta, autoload=True)
+
+    #
+    # New Tables
+    #
+    block_device_mapping = Table('block_device_mapping', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, autoincrement=True),
+            Column('instance_id',
+                   Integer(),
+                   ForeignKey('instances.id'),
+                   nullable=False),
+            Column('device_name',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False),
+                   nullable=False),
+            Column('delete_on_termination',
+                   Boolean(create_constraint=True, name=None),
+                   default=False),
+            Column('virtual_name',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False),
+                   nullable=True),
+            Column('snapshot_id',
+                   Integer(),
+                   ForeignKey('snapshots.id'),
+                   nullable=True),
+            Column('volume_id', Integer(), ForeignKey('volumes.id'),
+                   nullable=True),
+            Column('volume_size', Integer(), nullable=True),
+            Column('no_device',
+                   Boolean(create_constraint=True, name=None),
+                   nullable=True),
+            )
+    try:
+        block_device_mapping.create()
+    except Exception:
+        LOG.info(repr(block_device_mapping))
+        LOG.exception('Exception while creating table')
+        meta.drop_all(tables=[block_device_mapping])
+        raise
+
+
+def downgrade(migrate_engine):
+    # Operations to reverse the above upgrade go here.
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # load tables for fk
+    instances = Table('instances', meta, autoload=True)
+    volumes = Table('volumes', meta, autoload=True)
+    snapshots = Table('snapshots', meta, autoload=True)
+
+    block_device_mapping = Table('block_device_mapping', meta, autoload=True)
+    block_device_mapping.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/025_add_uuid_to_instances.py b/cinder/db/sqlalchemy/migrate_repo/versions/025_add_uuid_to_instances.py
new file mode 100644
index 000000000..313cb16de
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/025_add_uuid_to_instances.py
@@ -0,0 +1,45 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, String, Table
+
+from cinder import utils
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    uuid_column = Column("uuid", String(36))
+    instances.create_column(uuid_column)
+
+    rows = migrate_engine.execute(instances.select())
+    for row in rows:
+        instance_uuid = str(utils.gen_uuid())
+        migrate_engine.execute(instances.update()\
+                .where(instances.c.id == row[0])\
+                .values(uuid=instance_uuid))
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    instances.drop_column('uuid')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/026_add_agent_table.py b/cinder/db/sqlalchemy/migrate_repo/versions/026_add_agent_table.py
new file mode 100644
index 000000000..d8f038b0d
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/026_add_agent_table.py
@@ -0,0 +1,89 @@
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, DateTime, Integer
+from sqlalchemy import MetaData, String, Table
+from cinder import log as logging
+
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+    #
+    # New Tables
+    #
+    builds = Table('agent_builds', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('hypervisor',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('os',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('architecture',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('version',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('url',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('md5hash',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            )
+    for table in (builds, ):
+        try:
+            table.create()
+        except Exception:
+            LOG.info(repr(table))
+
+    instances = Table('instances', meta, autoload=True)
+
+    #
+    # New Columns
+    #
+    architecture = Column('architecture', String(length=255))
+
+    # Add columns to existing tables
+    instances.create_column(architecture)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    builds = Table('agent_builds', meta, autoload=True)
+    for table in (builds, ):
+            table.drop()
+
+    instances = Table('instances', meta, autoload=True)
+    instances.drop_column('architecture')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/027_add_provider_firewall_rules.py b/cinder/db/sqlalchemy/migrate_repo/versions/027_add_provider_firewall_rules.py
new file mode 100644
index 000000000..8b653444c
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/027_add_provider_firewall_rules.py
@@ -0,0 +1,65 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, DateTime
+from sqlalchemy import Integer, MetaData, String
+from sqlalchemy import Table
+
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+    #
+    # New Tables
+    #
+    provider_fw_rules = Table('provider_fw_rules', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('protocol',
+                   String(length=5, convert_unicode=False, assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('from_port', Integer()),
+            Column('to_port', Integer()),
+            Column('cidr',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)))
+    for table in (provider_fw_rules,):
+        try:
+            table.create()
+        except Exception:
+            LOG.info(repr(table))
+            LOG.exception('Exception while creating table')
+            raise
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    provider_fw_rules = Table('provider_fw_rules', meta, autoload=True)
+    for table in (provider_fw_rules,):
+            table.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/028_add_instance_type_extra_specs.py b/cinder/db/sqlalchemy/migrate_repo/versions/028_add_instance_type_extra_specs.py
new file mode 100644
index 000000000..b8346b735
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/028_add_instance_type_extra_specs.py
@@ -0,0 +1,76 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 University of Southern California
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer
+from sqlalchemy import MetaData, String, Table
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # load tables for fk
+    instance_types = Table('instance_types', meta, autoload=True)
+
+    #
+    # New Tables
+    #
+    instance_type_extra_specs_table = Table('instance_type_extra_specs', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('instance_type_id',
+                   Integer(),
+                   ForeignKey('instance_types.id'),
+                   nullable=False),
+            Column('key',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('value',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)))
+
+    for table in (instance_type_extra_specs_table, ):
+        try:
+            table.create()
+        except Exception:
+            LOG.info(repr(table))
+            LOG.exception('Exception while creating table')
+            raise
+
+
+def downgrade(migrate_engine):
+    # Operations to reverse the above upgrade go here.
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # load tables for fk
+    instance_types = Table('instance_types', meta, autoload=True)
+
+    instance_type_extra_specs_table = Table('instance_type_extra_specs',
+                                            meta,
+                                            autoload=True)
+    for table in (instance_type_extra_specs_table, ):
+        table.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/029_add_zone_weight_offsets.py b/cinder/db/sqlalchemy/migrate_repo/versions/029_add_zone_weight_offsets.py
new file mode 100644
index 000000000..80eb836c0
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/029_add_zone_weight_offsets.py
@@ -0,0 +1,41 @@
+# Copyright 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Float, Integer, MetaData, Table
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    zones = Table('zones', meta, autoload=True)
+
+    #
+    # New Columns
+    #
+    weight_offset = Column('weight_offset', Float(), default=0.0)
+    weight_scale = Column('weight_scale', Float(), default=1.0)
+
+    zones.create_column(weight_offset)
+    zones.create_column(weight_scale)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    zones = Table('zones', meta, autoload=True)
+
+    zones.drop_column('weight_offset')
+    zones.drop_column('weight_scale')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py b/cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py
new file mode 100644
index 000000000..a34baa83d
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py
@@ -0,0 +1,146 @@
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import select, Boolean, Column, DateTime, ForeignKey
+from sqlalchemy import Integer, MetaData, String
+from sqlalchemy import Table
+
+from cinder import log as logging
+from cinder import utils
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # grab tables and (column for dropping later)
+    instances = Table('instances', meta, autoload=True)
+    networks = Table('networks', meta, autoload=True)
+    fixed_ips = Table('fixed_ips', meta, autoload=True)
+    c = instances.columns['mac_address']
+
+    interface = Column('bridge_interface',
+                       String(length=255, convert_unicode=False,
+                              assert_unicode=None, unicode_error=None,
+                              _warn_on_bytestring=False))
+
+    virtual_interface_id = Column('virtual_interface_id',
+                           Integer())
+    # add interface column to networks table
+    # values will have to be set manually before running cinder
+    try:
+        networks.create_column(interface)
+    except Exception:
+        LOG.error(_("interface column not added to networks table"))
+        raise
+
+    #
+    # New Tables
+    #
+    virtual_interfaces = Table('virtual_interfaces', meta,
+            Column('created_at', DateTime(timezone=False),
+                   default=utils.utcnow()),
+            Column('updated_at', DateTime(timezone=False),
+                   onupdate=utils.utcnow()),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('address',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False),
+                   unique=True),
+            Column('network_id',
+                   Integer(),
+                   ForeignKey('networks.id')),
+            Column('instance_id',
+                   Integer(),
+                   ForeignKey('instances.id'),
+                   nullable=False),
+            mysql_engine='InnoDB')
+
+    # create virtual_interfaces table
+    try:
+        virtual_interfaces.create()
+    except Exception:
+        LOG.error(_("Table |%s| not created!"), repr(virtual_interfaces))
+        raise
+
+    # add virtual_interface_id column to fixed_ips table
+    try:
+        fixed_ips.create_column(virtual_interface_id)
+    except Exception:
+        LOG.error(_("VIF column not added to fixed_ips table"))
+        raise
+
+    # populate the virtual_interfaces table
+    # extract data from existing instance and fixed_ip tables
+    s = select([instances.c.id, instances.c.mac_address,
+                fixed_ips.c.network_id],
+               fixed_ips.c.instance_id == instances.c.id)
+    keys = ('instance_id', 'address', 'network_id')
+    join_list = [dict(zip(keys, row)) for row in s.execute()]
+    LOG.debug(_("join list for moving mac_addresses |%s|"), join_list)
+
+    # insert data into the table
+    if join_list:
+        i = virtual_interfaces.insert()
+        i.execute(join_list)
+
+    # populate the fixed_ips virtual_interface_id column
+    s = select([fixed_ips.c.id, fixed_ips.c.instance_id],
+               fixed_ips.c.instance_id != None)
+
+    for row in s.execute():
+        m = select([virtual_interfaces.c.id]).\
+            where(virtual_interfaces.c.instance_id == row['instance_id']).\
+            as_scalar()
+        u = fixed_ips.update().values(virtual_interface_id=m).\
+            where(fixed_ips.c.id == row['id'])
+        u.execute()
+
+    # drop the mac_address column from instances
+    c.drop()
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # grab tables and (column for dropping later)
+    instances = Table('instances', meta, autoload=True)
+    networks = Table('networks', meta, autoload=True)
+    fixed_ips = Table('fixed_ips', meta, autoload=True)
+    virtual_interfaces = Table('virtual_interfaces', meta, autoload=True)
+
+    mac_address = Column('mac_address',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False))
+
+    instances.create_column(mac_address)
+
+    s = select([instances.c.id, virtual_interfaces.c.address],
+               virtual_interfaces.c.instance_id == instances.c.id)
+
+    for row in s.execute():
+        u = instances.update().values(mac_address=row['address']).\
+                where(instances.c.id == row['id'])
+
+    networks.drop_column('bridge_interface')
+    virtual_interfaces.drop()
+    fixed_ips.drop_column('virtual_interface_id')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/030_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/030_sqlite_downgrade.sql
new file mode 100644
index 000000000..2486e6d2d
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/030_sqlite_downgrade.sql
@@ -0,0 +1,377 @@
+BEGIN TRANSACTION;
+
+    CREATE TEMPORARY TABLE instances_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        internal_id INTEGER,
+        admin_pass VARCHAR(255),
+        user_id VARCHAR(255),
+        project_id VARCHAR(255),
+        image_ref VARCHAR(255),
+        kernel_id VARCHAR(255),
+        ramdisk_id VARCHAR(255),
+        server_name VARCHAR(255),
+        launch_index INTEGER,
+        key_name VARCHAR(255),
+        key_data TEXT,
+        state INTEGER,
+        state_description VARCHAR(255),
+        memory_mb INTEGER,
+        vcpus INTEGER,
+        local_gb INTEGER,
+        hostname VARCHAR(255),
+        host VARCHAR(255),
+        user_data TEXT,
+        reservation_id VARCHAR(255),
+        scheduled_at DATETIME,
+        launched_at DATETIME,
+        terminated_at DATETIME,
+        display_name VARCHAR(255),
+        display_description VARCHAR(255),
+        availability_zone VARCHAR(255),
+        locked BOOLEAN,
+        os_type VARCHAR(255),
+        launched_on TEXT,
+        instance_type_id INTEGER,
+        vm_mode VARCHAR(255),
+        uuid VARCHAR(36),
+        architecture VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (locked IN (0, 1)),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO instances_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               internal_id,
+               admin_pass,
+               user_id,
+               project_id,
+               image_ref,
+               kernel_id,
+               ramdisk_id,
+               server_name,
+               launch_index,
+               key_name,
+               key_data,
+               state,
+               state_description,
+               memory_mb,
+               vcpus,
+               local_gb,
+               hostname,
+               host,
+               user_data,
+               reservation_id,
+               scheduled_at,
+               launched_at,
+               terminated_at,
+               display_name,
+               display_description,
+               availability_zone,
+               locked,
+               os_type,
+               launched_on,
+               instance_type_id,
+               vm_mode,
+               uuid,
+               architecture
+        FROM instances;
+
+    DROP TABLE instances;
+
+    CREATE TABLE instances (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        internal_id INTEGER,
+        admin_pass VARCHAR(255),
+        user_id VARCHAR(255),
+        project_id VARCHAR(255),
+        image_ref VARCHAR(255),
+        kernel_id VARCHAR(255),
+        ramdisk_id VARCHAR(255),
+        server_name VARCHAR(255),
+        launch_index INTEGER,
+        key_name VARCHAR(255),
+        key_data TEXT,
+        state INTEGER,
+        state_description VARCHAR(255),
+        memory_mb INTEGER,
+        vcpus INTEGER,
+        local_gb INTEGER,
+        hostname VARCHAR(255),
+        host VARCHAR(255),
+        user_data TEXT,
+        reservation_id VARCHAR(255),
+        scheduled_at DATETIME,
+        launched_at DATETIME,
+        terminated_at DATETIME,
+        display_name VARCHAR(255),
+        display_description VARCHAR(255),
+        availability_zone VARCHAR(255),
+        locked BOOLEAN,
+        os_type VARCHAR(255),
+        launched_on TEXT,
+        instance_type_id INTEGER,
+        vm_mode VARCHAR(255),
+        uuid VARCHAR(36),
+        architecture VARCHAR(255),
+        mac_address VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (locked IN (0, 1)),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO instances
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               internal_id,
+               admin_pass,
+               user_id,
+               project_id,
+               image_ref,
+               kernel_id,
+               ramdisk_id,
+               server_name,
+               launch_index,
+               key_name,
+               key_data,
+               state,
+               state_description,
+               memory_mb,
+               vcpus,
+               local_gb,
+               hostname,
+               host,
+               user_data,
+               reservation_id,
+               scheduled_at,
+               launched_at,
+               terminated_at,
+               display_name,
+               display_description,
+               availability_zone,
+               locked,
+               os_type,
+               launched_on,
+               instance_type_id,
+               vm_mode,
+               uuid,
+               architecture,
+               NULL AS mac_address
+        FROM instances_backup;
+
+    DROP TABLE instances_backup;
+
+    UPDATE instances SET mac_address=(SELECT address
+                                      FROM virtual_interfaces
+                                      WHERE virtual_interfaces.instance_id = instances.id);
+
+    CREATE TEMPORARY TABLE networks_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        injected BOOLEAN,
+        cidr VARCHAR(255),
+        netmask VARCHAR(255),
+        bridge VARCHAR(255),
+        gateway VARCHAR(255),
+        broadcast VARCHAR(255),
+        dns VARCHAR(255),
+        vlan INTEGER,
+        vpn_public_address VARCHAR(255),
+        vpn_public_port INTEGER,
+        vpn_private_address VARCHAR(255),
+        dhcp_start VARCHAR(255),
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        cidr_v6 VARCHAR(255),
+        gateway_v6 VARCHAR(255),
+        label VARCHAR(255),
+        netmask_v6 VARCHAR(255),
+        bridge_interface VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (injected IN (0, 1)),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO networks_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               injected,
+               cidr,
+               netmask,
+               bridge,
+               gateway,
+               broadcast,
+               dns,
+               vlan,
+               vpn_public_address,
+               vpn_public_port,
+               vpn_private_address,
+               dhcp_start,
+               project_id,
+               host,
+               cidr_v6,
+               gateway_v6,
+               label,
+               netmask_v6,
+               bridge_interface
+        FROM networks;
+
+    DROP TABLE networks;
+
+    CREATE TABLE networks (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        injected BOOLEAN,
+        cidr VARCHAR(255),
+        netmask VARCHAR(255),
+        bridge VARCHAR(255),
+        gateway VARCHAR(255),
+        broadcast VARCHAR(255),
+        dns VARCHAR(255),
+        vlan INTEGER,
+        vpn_public_address VARCHAR(255),
+        vpn_public_port INTEGER,
+        vpn_private_address VARCHAR(255),
+        dhcp_start VARCHAR(255),
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        cidr_v6 VARCHAR(255),
+        gateway_v6 VARCHAR(255),
+        label VARCHAR(255),
+        netmask_v6 VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (injected IN (0, 1)),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO networks
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               injected,
+               cidr,
+               netmask,
+               bridge,
+               gateway,
+               broadcast,
+               dns,
+               vlan,
+               vpn_public_address,
+               vpn_public_port,
+               vpn_private_address,
+               dhcp_start,
+               project_id,
+               host,
+               cidr_v6,
+               gateway_v6,
+               label,
+               netmask_v6
+        FROM networks_backup;
+
+    DROP TABLE networks_backup;
+
+    DROP TABLE virtual_interfaces;
+
+    CREATE TEMPORARY TABLE fixed_ips_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        network_id INTEGER,
+        instance_id INTEGER,
+        allocated BOOLEAN,
+        leased BOOLEAN,
+        reserved BOOLEAN,
+        virtual_interface_id INTEGER,
+        PRIMARY KEY (id),
+        CHECK (reserved IN (0, 1)),
+        CHECK (allocated IN (0, 1)),
+        CHECK (leased IN (0, 1)),
+        CHECK (deleted IN (0, 1)),
+        FOREIGN KEY(instance_id) REFERENCES instances (id),
+        FOREIGN KEY(network_id) REFERENCES networks (id)
+    );
+
+    INSERT INTO fixed_ips_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               address,
+               network_id,
+               instance_id,
+               allocated,
+               leased,
+               reserved,
+               virtual_interface_id
+        FROM fixed_ips;
+
+    DROP TABLE fixed_ips;
+
+    CREATE TABLE fixed_ips (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        network_id INTEGER,
+        instance_id INTEGER,
+        allocated BOOLEAN,
+        leased BOOLEAN,
+        reserved BOOLEAN,
+        PRIMARY KEY (id),
+        CHECK (reserved IN (0, 1)),
+        CHECK (allocated IN (0, 1)),
+        CHECK (leased IN (0, 1)),
+        CHECK (deleted IN (0, 1)),
+        FOREIGN KEY(instance_id) REFERENCES instances (id),
+        FOREIGN KEY(network_id) REFERENCES networks (id)
+    );
+
+    INSERT INTO fixed_ips
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               address,
+               network_id,
+               instance_id,
+               allocated,
+               leased,
+               reserved
+        FROM fixed_ips_backup;
+
+    DROP TABLE fixed_ips_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py b/cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py
new file mode 100644
index 000000000..4c1413b22
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py
@@ -0,0 +1,59 @@
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import MetaData, Table
+from migrate import ForeignKeyConstraint
+
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    dialect = migrate_engine.url.get_dialect().name
+
+    # grab tables
+    fixed_ips = Table('fixed_ips', meta, autoload=True)
+    virtual_interfaces = Table('virtual_interfaces', meta, autoload=True)
+
+    # add foreignkey if not sqlite
+    try:
+        if not dialect.startswith('sqlite'):
+            ForeignKeyConstraint(columns=[fixed_ips.c.virtual_interface_id],
+                                 refcolumns=[virtual_interfaces.c.id]).create()
+    except Exception:
+        LOG.error(_("foreign key constraint couldn't be added"))
+        raise
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    dialect = migrate_engine.url.get_dialect().name
+
+    # grab tables
+    fixed_ips = Table('fixed_ips', meta, autoload=True)
+    virtual_interfaces = Table('virtual_interfaces', meta, autoload=True)
+
+    # drop foreignkey if not sqlite
+    try:
+        if not dialect.startswith('sqlite'):
+            ForeignKeyConstraint(columns=[fixed_ips.c.virtual_interface_id],
+                                 refcolumns=[virtual_interfaces.c.id]).drop()
+    except Exception:
+        LOG.error(_("foreign key constraint couldn't be dropped"))
+        raise
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/031_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/031_sqlite_downgrade.sql
new file mode 100644
index 000000000..c1d26b180
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/031_sqlite_downgrade.sql
@@ -0,0 +1,48 @@
+BEGIN TRANSACTION;
+
+    CREATE TEMPORARY TABLE fixed_ips_backup (
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        virtual_interface_id INTEGER,
+        network_id INTEGER,
+        instance_id INTEGER,
+        allocated BOOLEAN default FALSE,
+        leased BOOLEAN default FALSE,
+        reserved BOOLEAN default FALSE,
+        created_at DATETIME NOT NULL,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN NOT NULL,
+        PRIMARY KEY (id),
+        FOREIGN KEY(virtual_interface_id) REFERENCES virtual_interfaces (id)
+    );
+
+    INSERT INTO fixed_ips_backup
+    SELECT id, address, virtual_interface_id, network_id, instance_id, allocated, leased, reserved, created_at, updated_at, deleted_at, deleted
+    FROM fixed_ips;
+
+    DROP TABLE fixed_ips;
+
+    CREATE TABLE fixed_ips (
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        virtual_interface_id INTEGER,
+        network_id INTEGER,
+        instance_id INTEGER,
+        allocated BOOLEAN default FALSE,
+        leased BOOLEAN default FALSE,
+        reserved BOOLEAN default FALSE,
+        created_at DATETIME NOT NULL,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN NOT NULL,
+        PRIMARY KEY (id)
+    );
+
+    INSERT INTO fixed_ips
+    SELECT id, address, virtual_interface_id, network_id, instance_id, allocated, leased, reserved, created_at, updated_at, deleted_at, deleted
+    FROM fixed_ips;
+
+    DROP TABLE fixed_ips_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/031_sqlite_upgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/031_sqlite_upgrade.sql
new file mode 100644
index 000000000..2a9362545
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/031_sqlite_upgrade.sql
@@ -0,0 +1,48 @@
+BEGIN TRANSACTION;
+
+    CREATE TEMPORARY TABLE fixed_ips_backup (
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        virtual_interface_id INTEGER,
+        network_id INTEGER,
+        instance_id INTEGER,
+        allocated BOOLEAN default FALSE,
+        leased BOOLEAN default FALSE,
+        reserved BOOLEAN default FALSE,
+        created_at DATETIME NOT NULL,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN NOT NULL,
+        PRIMARY KEY (id)
+    );
+
+    INSERT INTO fixed_ips_backup
+    SELECT id, address, virtual_interface_id, network_id, instance_id, allocated, leased, reserved, created_at, updated_at, deleted_at, deleted
+    FROM fixed_ips;
+
+    DROP TABLE fixed_ips;
+
+    CREATE TABLE fixed_ips (
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        virtual_interface_id INTEGER,
+        network_id INTEGER,
+        instance_id INTEGER,
+        allocated BOOLEAN default FALSE,
+        leased BOOLEAN default FALSE,
+        reserved BOOLEAN default FALSE,
+        created_at DATETIME NOT NULL,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN NOT NULL,
+        PRIMARY KEY (id),
+        FOREIGN KEY(virtual_interface_id) REFERENCES virtual_interfaces (id)
+    );
+
+    INSERT INTO fixed_ips
+    SELECT id, address, virtual_interface_id, network_id, instance_id, allocated, leased, reserved, created_at, updated_at, deleted_at, deleted
+    FROM fixed_ips;
+
+    DROP TABLE fixed_ips_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/032_add_root_device_name.py b/cinder/db/sqlalchemy/migrate_repo/versions/032_add_root_device_name.py
new file mode 100644
index 000000000..f12070c57
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/032_add_root_device_name.py
@@ -0,0 +1,42 @@
+# Copyright 2011 OpenStack LLC.
+# Copyright 2011 Isaku Yamahata
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, Table, String
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    root_device_name = Column(
+        'root_device_name',
+        String(length=255, convert_unicode=False, assert_unicode=None,
+               unicode_error=None, _warn_on_bytestring=False),
+        nullable=True)
+    instances.create_column(root_device_name)
+
+
+def downgrade(migrate_engine):
+    # Operations to reverse the above upgrade go here.
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    instances.drop_column('root_device_name')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/033_ha_network.py b/cinder/db/sqlalchemy/migrate_repo/versions/033_ha_network.py
new file mode 100644
index 000000000..becc353f6
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/033_ha_network.py
@@ -0,0 +1,42 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 OpenStack, LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Table, MetaData, Boolean, String
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    fixed_ips_host = Column('host', String(255))
+    fixed_ips = Table('fixed_ips', meta, autoload=True)
+    fixed_ips.create_column(fixed_ips_host)
+
+    networks_multi_host = Column('multi_host', Boolean, default=False)
+    networks = Table('networks', meta, autoload=True)
+    networks.create_column(networks_multi_host)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    fixed_ips = Table('fixed_ips', meta, autoload=True)
+    fixed_ips.drop_column('host')
+
+    networks = Table('networks', meta, autoload=True)
+    networks.drop_column('multi_host')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/033_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/033_sqlite_downgrade.sql
new file mode 100644
index 000000000..34188d866
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/033_sqlite_downgrade.sql
@@ -0,0 +1,193 @@
+BEGIN TRANSACTION;
+
+    CREATE TEMPORARY TABLE fixed_ips_backup (
+            id INTEGER NOT NULL,
+            address VARCHAR(255),
+            virtual_interface_id INTEGER,
+            network_id INTEGER,
+            instance_id INTEGER,
+            allocated BOOLEAN default FALSE,
+            leased BOOLEAN default FALSE,
+            reserved BOOLEAN default FALSE,
+            created_at DATETIME NOT NULL,
+            updated_at DATETIME,
+            deleted_at DATETIME,
+            deleted BOOLEAN NOT NULL,
+            host VARCHAR(255),
+            PRIMARY KEY (id),
+            FOREIGN KEY(virtual_interface_id) REFERENCES virtual_interfaces (id)
+    );
+
+    INSERT INTO fixed_ips_backup
+            SELECT id,
+                   address,
+                   virtual_interface_id,
+                   network_id,
+                   instance_id,
+                   allocated,
+                   leased,
+                   reserved,
+                   created_at,
+                   updated_at,
+                   deleted_at,
+                   deleted,
+                   host
+            FROM fixed_ips;
+
+    DROP TABLE fixed_ips;
+
+    CREATE TABLE fixed_ips (
+            id INTEGER NOT NULL,
+            address VARCHAR(255),
+            virtual_interface_id INTEGER,
+            network_id INTEGER,
+            instance_id INTEGER,
+            allocated BOOLEAN default FALSE,
+            leased BOOLEAN default FALSE,
+            reserved BOOLEAN default FALSE,
+            created_at DATETIME NOT NULL,
+            updated_at DATETIME,
+            deleted_at DATETIME,
+            deleted BOOLEAN NOT NULL,
+            PRIMARY KEY (id),
+            FOREIGN KEY(virtual_interface_id) REFERENCES virtual_interfaces (id)
+    );
+
+    INSERT INTO fixed_ips
+            SELECT id,
+                   address,
+                   virtual_interface_id,
+                   network_id,
+                   instance_id,
+                   allocated,
+                   leased,
+                   reserved,
+                   created_at,
+                   updated_at,
+                   deleted_at,
+                   deleted
+            FROM fixed_ips_backup;
+
+    DROP TABLE fixed_ips_backup;
+
+    CREATE TEMPORARY TABLE networks_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        injected BOOLEAN,
+        cidr VARCHAR(255),
+        netmask VARCHAR(255),
+        bridge VARCHAR(255),
+        gateway VARCHAR(255),
+        broadcast VARCHAR(255),
+        dns VARCHAR(255),
+        vlan INTEGER,
+        vpn_public_address VARCHAR(255),
+        vpn_public_port INTEGER,
+        vpn_private_address VARCHAR(255),
+        dhcp_start VARCHAR(255),
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        cidr_v6 VARCHAR(255),
+        gateway_v6 VARCHAR(255),
+        label VARCHAR(255),
+        netmask_v6 VARCHAR(255),
+        bridge_interface VARCHAR(255),
+        multi_host BOOLEAN,
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        CHECK (injected IN (0, 1)),
+        CHECK (multi_host IN (0, 1))
+    );
+
+    INSERT INTO networks_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               injected,
+               cidr,
+               netmask,
+               bridge,
+               gateway,
+               broadcast,
+               dns,
+               vlan,
+               vpn_public_address,
+               vpn_public_port,
+               vpn_private_address,
+               dhcp_start,
+               project_id,
+               host,
+               cidr_v6,
+               gateway_v6,
+               label,
+               netmask_v6,
+               bridge_interface,
+               multi_host
+        FROM networks;
+
+    DROP TABLE networks;
+
+    CREATE TABLE networks(
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        injected BOOLEAN,
+        cidr VARCHAR(255),
+        netmask VARCHAR(255),
+        bridge VARCHAR(255),
+        gateway VARCHAR(255),
+        broadcast VARCHAR(255),
+        dns VARCHAR(255),
+        vlan INTEGER,
+        vpn_public_address VARCHAR(255),
+        vpn_public_port INTEGER,
+        vpn_private_address VARCHAR(255),
+        dhcp_start VARCHAR(255),
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        cidr_v6 VARCHAR(255),
+        gateway_v6 VARCHAR(255),
+        label VARCHAR(255),
+        netmask_v6 VARCHAR(255),
+        bridge_interface VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        CHECK (injected IN (0, 1))
+    );
+
+    INSERT INTO networks
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               injected,
+               cidr,
+               netmask,
+               bridge,
+               gateway,
+               broadcast,
+               dns,
+               vlan,
+               vpn_public_address,
+               vpn_public_port,
+               vpn_private_address,
+               dhcp_start,
+               project_id,
+               host,
+               cidr_v6,
+               gateway_v6,
+               label,
+               netmask_v6,
+               bridge_interface
+        FROM networks_backup;
+
+    DROP TABLE networks_backup;
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/034_change_instance_id_in_migrations.py b/cinder/db/sqlalchemy/migrate_repo/versions/034_change_instance_id_in_migrations.py
new file mode 100644
index 000000000..9cf004301
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/034_change_instance_id_in_migrations.py
@@ -0,0 +1,46 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, String, MetaData, Table
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    migrations = Table('migrations', meta, autoload=True)
+    instance_uuid = Column('instance_uuid', String(255))
+    migrations.create_column(instance_uuid)
+
+    if migrate_engine.name == "mysql":
+        try:
+            migrate_engine.execute("ALTER TABLE migrations DROP FOREIGN KEY "
+                                   "`migrations_ibfk_1`;")
+        except Exception:  # Don't care, just fail silently.
+            pass
+
+    migrations.c.instance_id.drop()
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    migrations = Table('migrations', meta, autoload=True)
+    migrations.c.instance_uuid.drop()
+    instance_id = Column('instance_id', Integer())
+    migrations.create_column(instance_id)
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/035_secondary_dns.py b/cinder/db/sqlalchemy/migrate_repo/versions/035_secondary_dns.py
new file mode 100644
index 000000000..c03e5be66
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/035_secondary_dns.py
@@ -0,0 +1,39 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 OpenStack, LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Table, MetaData, String
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    networks = Table('networks', meta, autoload=True)
+
+    networks.c.dns.alter(name='dns1')
+    dns2 = Column('dns2', String(255))
+    networks.create_column(dns2)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    networks = Table('networks', meta, autoload=True)
+
+    networks.c.dns1.alter(name='dns')
+    networks.drop_column('dns2')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/036_change_flavor_id_in_migrations.py b/cinder/db/sqlalchemy/migrate_repo/versions/036_change_flavor_id_in_migrations.py
new file mode 100644
index 000000000..38f83fc01
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/036_change_flavor_id_in_migrations.py
@@ -0,0 +1,79 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, Table
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instance_types = Table('instance_types', meta, autoload=True)
+    migrations = Table('migrations', meta, autoload=True)
+
+    old_instance_type_id = Column('old_instance_type_id', Integer())
+    new_instance_type_id = Column('new_instance_type_id', Integer())
+    migrations.create_column(old_instance_type_id)
+    migrations.create_column(new_instance_type_id)
+
+    # Convert flavor_id to instance_type_id
+    itypes = {}
+    for instance_type in migrate_engine.execute(instance_types.select()):
+        itypes[instance_type.id] = instance_type.flavorid
+
+    for instance_type_id in itypes.keys():
+        migrate_engine.execute(migrations.update()\
+                .where(migrations.c.old_flavor_id == itypes[instance_type_id])\
+                .values(old_instance_type_id=instance_type_id))
+        migrate_engine.execute(migrations.update()\
+                .where(migrations.c.new_flavor_id == itypes[instance_type_id])\
+                .values(new_instance_type_id=instance_type_id))
+
+    migrations.c.old_flavor_id.drop()
+    migrations.c.new_flavor_id.drop()
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instance_types = Table('instance_types', meta, autoload=True)
+    migrations = Table('migrations', meta, autoload=True)
+
+    old_flavor_id = Column('old_flavor_id', Integer())
+    new_flavor_id = Column('new_flavor_id', Integer())
+
+    migrations.create_column(old_flavor_id)
+    migrations.create_column(new_flavor_id)
+
+    # Convert instance_type_id to flavor_id
+    itypes = {}
+    for instance_type in migrate_engine.execute(instance_types.select()):
+        itypes[instance_type.flavorid] = instance_type.id
+
+    for instance_type_flavorid in itypes.keys():
+        migrate_engine.execute(migrations.update()\
+                .where(migrations.c.old_instance_type_id ==
+                    itypes[instance_type_flavorid])\
+                .values(old_flavor_id=instance_type_flavorid))
+        migrate_engine.execute(migrations.update()\
+                .where(migrations.c.new_instance_type_id ==
+                    itypes[instance_type_flavorid])\
+                .values(new_flavor_id=instance_type_flavorid))
+
+    migrations.c.old_instance_type_id.drop()
+    migrations.c.new_instance_type_id.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/037_instances_drop_admin_pass.py b/cinder/db/sqlalchemy/migrate_repo/versions/037_instances_drop_admin_pass.py
new file mode 100644
index 000000000..c8a1a1927
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/037_instances_drop_admin_pass.py
@@ -0,0 +1,42 @@
+# Copyright 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, MetaData, Table, String
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    instances.drop_column('admin_pass')
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    #
+    # New Columns
+    #
+    admin_pass = Column(
+        'admin_pass',
+        String(length=255, convert_unicode=False, assert_unicode=None,
+               unicode_error=None, _warn_on_bytestring=False),
+        nullable=True)
+
+    instances.create_column(admin_pass)
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/038_add_uuid_to_virtual_interfaces.py b/cinder/db/sqlalchemy/migrate_repo/versions/038_add_uuid_to_virtual_interfaces.py
new file mode 100644
index 000000000..fbd1c4570
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/038_add_uuid_to_virtual_interfaces.py
@@ -0,0 +1,45 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (C) 2011 Midokura KK
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, String, Table
+
+from cinder import utils
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    virtual_interfaces = Table('virtual_interfaces', meta, autoload=True)
+
+    uuid_column = Column('uuid', String(36))
+    virtual_interfaces.create_column(uuid_column)
+
+    rows = migrate_engine.execute(virtual_interfaces.select())
+    for row in rows:
+        vif_uuid = str(utils.gen_uuid())
+        migrate_engine.execute(virtual_interfaces.update()\
+                .where(virtual_interfaces.c.id == row[0])\
+                .values(uuid=vif_uuid))
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    virtual_interfaces = Table('virtual_interfaces', meta, autoload=True)
+
+    virtual_interfaces.drop_column('uuid')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/038_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/038_sqlite_downgrade.sql
new file mode 100644
index 000000000..0ac66e7e0
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/038_sqlite_downgrade.sql
@@ -0,0 +1,63 @@
+BEGIN TRANSACTION;
+
+    CREATE TEMPORARY TABLE virtual_interfaces_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        network_id INTEGER,
+        instance_id INTEGER NOT NULL,
+        uuid VARCHAR(36),
+        PRIMARY KEY (id),
+        FOREIGN KEY(network_id) REFERENCES networks (id),
+        FOREIGN KEY(instance_id) REFERENCES instances (id),
+        UNIQUE (address),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO virtual_interfaces_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               address,
+               network_id,
+               instance_id,
+               uuid
+        FROM virtual_interfaces;
+
+    DROP TABLE virtual_interfaces;
+
+    CREATE TABLE virtual_interfaces (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        network_id INTEGER,
+        instance_id INTEGER NOT NULL,
+        PRIMARY KEY (id),
+        FOREIGN KEY(network_id) REFERENCES networks (id),
+        FOREIGN KEY(instance_id) REFERENCES instances (id),
+        UNIQUE (address),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO virtual_interfaces
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               address,
+               network_id,
+               instance_id
+        FROM virtual_interfaces_backup;
+
+    DROP TABLE virtual_interfaces_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/039_add_instances_accessip.py b/cinder/db/sqlalchemy/migrate_repo/versions/039_add_instances_accessip.py
new file mode 100644
index 000000000..8c8961cd3
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/039_add_instances_accessip.py
@@ -0,0 +1,49 @@
+# Copyright 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, Table, String
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    accessIPv4 = Column(
+        'access_ip_v4',
+        String(length=255, convert_unicode=False, assert_unicode=None,
+               unicode_error=None, _warn_on_bytestring=False),
+        nullable=True)
+
+    accessIPv6 = Column(
+        'access_ip_v6',
+        String(length=255, convert_unicode=False, assert_unicode=None,
+               unicode_error=None, _warn_on_bytestring=False),
+    nullable=True)
+    instances.create_column(accessIPv4)
+    instances.create_column(accessIPv6)
+
+
+def downgrade(migrate_engine):
+    # Operations to reverse the above upgrade go here.
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    instances.drop_column('access_ip_v4')
+    instances.drop_column('access_ip_v6')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/040_add_uuid_to_networks.py b/cinder/db/sqlalchemy/migrate_repo/versions/040_add_uuid_to_networks.py
new file mode 100644
index 000000000..7125911d3
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/040_add_uuid_to_networks.py
@@ -0,0 +1,45 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, String, Table
+
+from cinder import utils
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    networks = Table('networks', meta, autoload=True)
+
+    uuid_column = Column("uuid", String(36))
+    networks.create_column(uuid_column)
+
+    rows = migrate_engine.execute(networks.select())
+    for row in rows:
+        networks_uuid = str(utils.gen_uuid())
+        migrate_engine.execute(networks.update()\
+                .where(networks.c.id == row[0])\
+                .values(uuid=networks_uuid))
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    networks = Table('networks', meta, autoload=True)
+
+    networks.drop_column('uuid')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/041_add_config_drive_to_instances.py b/cinder/db/sqlalchemy/migrate_repo/versions/041_add_config_drive_to_instances.py
new file mode 100644
index 000000000..f85c4a0d7
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/041_add_config_drive_to_instances.py
@@ -0,0 +1,36 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+#
+# Copyright 2011 Piston Cloud Computing, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, String, Table
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table("instances", meta, autoload=True)
+
+    config_drive_column = Column("config_drive", String(255), nullable=True)
+    instances.create_column(config_drive_column)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table("instances", meta, autoload=True)
+
+    instances.drop_column('config_drive')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/042_add_volume_types_and_extradata.py b/cinder/db/sqlalchemy/migrate_repo/versions/042_add_volume_types_and_extradata.py
new file mode 100644
index 000000000..2434bb0ab
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/042_add_volume_types_and_extradata.py
@@ -0,0 +1,122 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 Zadara Storage Inc.
+# Copyright (c) 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, DateTime, Integer, MetaData, String, Table
+from sqlalchemy import Boolean, ForeignKey
+
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    volumes = Table('volumes', meta, autoload=True)
+
+    #
+    # New Tables
+    #
+    volume_types = Table('volume_types', meta,
+           Column('created_at', DateTime(timezone=False)),
+           Column('updated_at', DateTime(timezone=False)),
+           Column('deleted_at', DateTime(timezone=False)),
+           Column('deleted', Boolean(create_constraint=True, name=None)),
+           Column('id', Integer(), primary_key=True, nullable=False),
+           Column('name',
+                  String(length=255, convert_unicode=False,
+                         assert_unicode=None,
+                         unicode_error=None, _warn_on_bytestring=False),
+                  unique=True))
+
+    volume_type_extra_specs_table = Table('volume_type_extra_specs', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('volume_type_id',
+                   Integer(),
+                   ForeignKey('volume_types.id'),
+                   nullable=False),
+            Column('key',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('value',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)))
+
+    volume_metadata_table = Table('volume_metadata', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('volume_id',
+                   Integer(),
+                   ForeignKey('volumes.id'),
+                   nullable=False),
+            Column('key',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('value',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)))
+
+    new_tables = (volume_types,
+                  volume_type_extra_specs_table,
+                  volume_metadata_table)
+
+    for table in new_tables:
+        try:
+            table.create()
+        except Exception:
+            LOG.info(repr(table))
+            LOG.exception('Exception while creating table')
+            raise
+
+    #
+    # New Columns
+    #
+    volume_type_id = Column('volume_type_id', Integer(), nullable=True)
+    volumes.create_column(volume_type_id)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    volumes = Table('volumes', meta, autoload=True)
+
+    volumes.drop_column('volume_type_id')
+
+    volume_types = Table('volume_types', meta, autoload=True)
+    volume_type_extra_specs_table = Table('volume_type_extra_specs',
+                                          meta,
+                                          autoload=True)
+    volume_metadata_table = Table('volume_metadata', meta, autoload=True)
+
+    # table order matters, don't change
+    for table in (volume_type_extra_specs_table,
+                  volume_types,
+                  volume_metadata_table):
+        table.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/042_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/042_sqlite_downgrade.sql
new file mode 100644
index 000000000..8fa39663a
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/042_sqlite_downgrade.sql
@@ -0,0 +1,129 @@
+BEGIN TRANSACTION;
+
+    CREATE TEMPORARY TABLE volumes_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        ec2_id VARCHAR(255),
+        user_id VARCHAR(255),
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        size INTEGER,
+        availability_zone VARCHAR(255),
+        instance_id INTEGER,
+        mountpoint VARCHAR(255),
+        attach_time VARCHAR(255),
+        status VARCHAR(255),
+        attach_status VARCHAR(255),
+        scheduled_at DATETIME,
+        launched_at DATETIME,
+        terminated_at DATETIME,
+        display_name VARCHAR(255),
+        display_description VARCHAR(255),
+        provider_location VARCHAR(256),
+        provider_auth VARCHAR(256),
+        snapshot_id INTEGER,
+        volume_type_id INTEGER,
+        PRIMARY KEY (id),
+        FOREIGN KEY(instance_id) REFERENCES instances (id),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO volumes_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               ec2_id,
+               user_id,
+               project_id,
+               host,
+               size,
+               availability_zone,
+               instance_id,
+               mountpoint,
+               attach_time,
+               status,
+               attach_status,
+               scheduled_at,
+               launched_at,
+               terminated_at,
+               display_name,
+               display_description,
+               provider_location,
+               provider_auth,
+               snapshot_id,
+               volume_type_id
+        FROM volumes;
+
+    DROP TABLE volumes;
+
+    CREATE TABLE volumes (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        ec2_id VARCHAR(255),
+        user_id VARCHAR(255),
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        size INTEGER,
+        availability_zone VARCHAR(255),
+        instance_id INTEGER,
+        mountpoint VARCHAR(255),
+        attach_time VARCHAR(255),
+        status VARCHAR(255),
+        attach_status VARCHAR(255),
+        scheduled_at DATETIME,
+        launched_at DATETIME,
+        terminated_at DATETIME,
+        display_name VARCHAR(255),
+        display_description VARCHAR(255),
+        provider_location VARCHAR(256),
+        provider_auth VARCHAR(256),
+        snapshot_id INTEGER,
+        PRIMARY KEY (id),
+        FOREIGN KEY(instance_id) REFERENCES instances (id),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO volumes
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               ec2_id,
+               user_id,
+               project_id,
+               host,
+               size,
+               availability_zone,
+               instance_id,
+               mountpoint,
+               attach_time,
+               status,
+               attach_status,
+               scheduled_at,
+               launched_at,
+               terminated_at,
+               display_name,
+               display_description,
+               provider_location,
+               provider_auth,
+               snapshot_id
+        FROM volumes_backup;
+
+    DROP TABLE volumes_backup;
+
+    DROP TABLE volume_type_extra_specs;
+
+    DROP TABLE volume_types;
+
+    DROP TABLE volume_metadata;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/043_add_vsa_data.py b/cinder/db/sqlalchemy/migrate_repo/versions/043_add_vsa_data.py
new file mode 100644
index 000000000..1e22608fc
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/043_add_vsa_data.py
@@ -0,0 +1,84 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 Zadara Storage Inc.
+# Copyright (c) 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, DateTime, Integer, MetaData, String, Table
+from sqlalchemy import Boolean
+
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    #
+    # New Tables
+    #
+    virtual_storage_arrays = Table('virtual_storage_arrays', meta,
+           Column('created_at', DateTime(timezone=False)),
+           Column('updated_at', DateTime(timezone=False)),
+           Column('deleted_at', DateTime(timezone=False)),
+           Column('deleted', Boolean(create_constraint=True, name=None)),
+           Column('id', Integer(), primary_key=True, nullable=False),
+           Column('display_name',
+                  String(length=255, convert_unicode=False,
+                         assert_unicode=None,
+                         unicode_error=None, _warn_on_bytestring=False)),
+           Column('display_description',
+                  String(length=255, convert_unicode=False,
+                         assert_unicode=None,
+                         unicode_error=None, _warn_on_bytestring=False)),
+           Column('project_id',
+                  String(length=255, convert_unicode=False,
+                         assert_unicode=None,
+                         unicode_error=None, _warn_on_bytestring=False)),
+           Column('availability_zone',
+                  String(length=255, convert_unicode=False,
+                         assert_unicode=None,
+                         unicode_error=None, _warn_on_bytestring=False)),
+           Column('instance_type_id', Integer(), nullable=False),
+           Column('image_ref',
+               String(length=255, convert_unicode=False, assert_unicode=None,
+                      unicode_error=None, _warn_on_bytestring=False)),
+           Column('vc_count', Integer(), nullable=False),
+           Column('vol_count', Integer(), nullable=False),
+           Column('status',
+                  String(length=255, convert_unicode=False,
+                         assert_unicode=None,
+                         unicode_error=None, _warn_on_bytestring=False)),
+           )
+
+    try:
+        virtual_storage_arrays.create()
+    except Exception:
+        LOG.info(repr(virtual_storage_arrays))
+        LOG.exception('Exception while creating table')
+        raise
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    virtual_storage_arrays = Table('virtual_storage_arrays',
+                                   meta,
+                                   autoload=True)
+    virtual_storage_arrays.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/044_update_instance_states.py b/cinder/db/sqlalchemy/migrate_repo/versions/044_update_instance_states.py
new file mode 100644
index 000000000..95d3b7529
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/044_update_instance_states.py
@@ -0,0 +1,52 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import MetaData, Table, Column, String
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instance_table = Table('instances', meta, autoload=True)
+
+    c_state = instance_table.c.state
+    c_state.alter(name='power_state')
+
+    c_vm_state = instance_table.c.state_description
+    c_vm_state.alter(name='vm_state')
+
+    c_task_state = Column('task_state',
+                          String(length=255, convert_unicode=False,
+                                 assert_unicode=None, unicode_error=None,
+                                 _warn_on_bytestring=False),
+                          nullable=True)
+    instance_table.create_column(c_task_state)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instance_table = Table('instances', meta, autoload=True)
+
+    c_state = instance_table.c.power_state
+    c_state.alter(name='state')
+
+    c_vm_state = instance_table.c.vm_state
+    c_vm_state.alter(name='state_description')
+
+    instance_table.drop_column('task_state')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py b/cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py
new file mode 100644
index 000000000..3d75803dc
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py
@@ -0,0 +1,44 @@
+# Copyright 2011 Nicira, Inc.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, Table
+
+from cinder import log as logging
+
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    networks = Table('networks', meta, autoload=True)
+
+    priority = Column('priority', Integer())
+    try:
+        networks.create_column(priority)
+    except Exception:
+        LOG.error(_("priority column not added to networks table"))
+        raise
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    networks = Table('networks', meta, autoload=True)
+
+    networks.drop_column('priority')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/046_add_instance_swap.py b/cinder/db/sqlalchemy/migrate_repo/versions/046_add_instance_swap.py
new file mode 100644
index 000000000..3ee1c4e7e
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/046_add_instance_swap.py
@@ -0,0 +1,49 @@
+# Copyright 2011 Isaku Yamahata
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, Table, String
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    default_local_device = Column(
+        'default_local_device',
+        String(length=255, convert_unicode=False, assert_unicode=None,
+               unicode_error=None, _warn_on_bytestring=False),
+        nullable=True)
+
+    default_swap_device = Column(
+        'default_swap_device',
+        String(length=255, convert_unicode=False, assert_unicode=None,
+               unicode_error=None, _warn_on_bytestring=False),
+        nullable=True)
+    instances.create_column(default_local_device)
+    instances.create_column(default_swap_device)
+
+
+def downgrade(migrate_engine):
+    # Operations to reverse the above upgrade go here.
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    instances.drop_column('default_swap_device')
+    instances.drop_column('default_local_device')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py b/cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py
new file mode 100644
index 000000000..0b365df31
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py
@@ -0,0 +1,61 @@
+# Copyright 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import MetaData, Table
+from migrate import ForeignKeyConstraint
+
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+    dialect = migrate_engine.url.get_dialect().name
+    if dialect.startswith('sqlite'):
+        return
+
+    instances = Table('instances', meta, autoload=True)
+    vifs = Table('virtual_interfaces', meta, autoload=True)
+
+    try:
+        fkey_name = list(vifs.c.instance_id.foreign_keys)[0].constraint.name
+        ForeignKeyConstraint(columns=[vifs.c.instance_id],
+                             refcolumns=[instances.c.id],
+                             name=fkey_name).drop()
+    except Exception:
+        LOG.error(_("foreign key constraint couldn't be removed"))
+        raise
+
+
+def downgrade(migrate_engine):
+    # Operations to reverse the above upgrade go here.
+    meta = MetaData()
+    meta.bind = migrate_engine
+    dialect = migrate_engine.url.get_dialect().name
+    if dialect.startswith('sqlite'):
+        return
+
+    instances = Table('instances', meta, autoload=True)
+    vifs = Table('virtual_interfaces', meta, autoload=True)
+
+    try:
+        ForeignKeyConstraint(columns=[vifs.c.instance_id],
+                             refcolumns=[instances.c.id]).create()
+    except Exception:
+        LOG.error(_("foreign key constraint couldn't be added"))
+        raise
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/047_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/047_sqlite_downgrade.sql
new file mode 100644
index 000000000..9bc3ee8d4
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/047_sqlite_downgrade.sql
@@ -0,0 +1,46 @@
+BEGIN TRANSACTION;
+    CREATE TEMPORARY TABLE virtual_interfaces_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        network_id INTEGER,
+        instance_id INTEGER NOT NULL,
+        uuid VARCHAR(36),
+        PRIMARY KEY (id)
+    );
+
+    INSERT INTO virtual_interfaces_backup
+        SELECT created_at, updated_at, deleted_at, deleted, id, address,
+                network_id, instance_id, uuid
+        FROM virtual_interfaces;
+
+    DROP TABLE virtual_interfaces;
+
+    CREATE TABLE virtual_interfaces (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        network_id INTEGER,
+        instance_id INTEGER NOT NULL,
+        uuid VARCHAR(36),
+        PRIMARY KEY (id),
+        FOREIGN KEY(network_id) REFERENCES networks (id),
+        FOREIGN KEY(instance_id) REFERENCES instances (id),
+        UNIQUE (address),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO virtual_interfaces
+        SELECT created_at, updated_at, deleted_at, deleted, id, address,
+                network_id, instance_id, uuid
+        FROM virtual_interfaces_backup;
+
+    DROP TABLE virtual_interfaces_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/047_sqlite_upgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/047_sqlite_upgrade.sql
new file mode 100644
index 000000000..2c0919f1d
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/047_sqlite_upgrade.sql
@@ -0,0 +1,45 @@
+BEGIN TRANSACTION;
+    CREATE TEMPORARY TABLE virtual_interfaces_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        network_id INTEGER,
+        instance_id INTEGER NOT NULL,
+        uuid VARCHAR(36),
+        PRIMARY KEY (id)
+    );
+
+    INSERT INTO virtual_interfaces_backup
+        SELECT created_at, updated_at, deleted_at, deleted, id, address,
+                network_id, instance_id, uuid
+        FROM virtual_interfaces;
+
+    DROP TABLE virtual_interfaces;
+
+    CREATE TABLE virtual_interfaces (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        network_id INTEGER,
+        instance_id INTEGER NOT NULL,
+        uuid VARCHAR(36),
+        PRIMARY KEY (id),
+        FOREIGN KEY(network_id) REFERENCES networks (id),
+        UNIQUE (address),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO virtual_interfaces
+        SELECT created_at, updated_at, deleted_at, deleted, id, address,
+                network_id, instance_id, uuid
+        FROM virtual_interfaces_backup;
+
+    DROP TABLE virtual_interfaces_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/048_add_zone_name.py b/cinder/db/sqlalchemy/migrate_repo/versions/048_add_zone_name.py
new file mode 100644
index 000000000..e313fc7de
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/048_add_zone_name.py
@@ -0,0 +1,33 @@
+# Copyright 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, String, Table
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    zones = Table('zones', meta, autoload=True)
+    name = Column('name', String(255))
+    zones.create_column(name)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    zones = Table('zones', meta, autoload=True)
+
+    zones.drop_column('name')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py b/cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py
new file mode 100644
index 000000000..c19d89e64
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py
@@ -0,0 +1,44 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, Table
+
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    progress = Column('progress', Integer())
+    try:
+        instances.create_column(progress)
+    except Exception:
+        LOG.error(_("progress column not added to instances table"))
+        raise
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    instances.drop_column('progress')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/050_add_disk_config_to_instances.py b/cinder/db/sqlalchemy/migrate_repo/versions/050_add_disk_config_to_instances.py
new file mode 100644
index 000000000..d4a2fcc13
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/050_add_disk_config_to_instances.py
@@ -0,0 +1,37 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, Integer, MetaData, Table
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    managed_disk = Column("managed_disk", Boolean(create_constraint=False,
+                                              name=None))
+    instances.create_column(managed_disk)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instances = Table('instances', meta, autoload=True)
+
+    instances.drop_column('managed_disk')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/050_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/050_sqlite_downgrade.sql
new file mode 100644
index 000000000..8db7087bc
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/050_sqlite_downgrade.sql
@@ -0,0 +1,207 @@
+BEGIN TRANSACTION;
+
+    CREATE TEMPORARY TABLE instances_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        internal_id INTEGER,
+        user_id VARCHAR(255),
+        project_id VARCHAR(255),
+        image_ref VARCHAR(255),
+        kernel_id VARCHAR(255),
+        ramdisk_id VARCHAR(255),
+        server_name VARCHAR(255),
+        launch_index INTEGER,
+        key_name VARCHAR(255),
+        key_data TEXT,
+        power_state INTEGER,
+        vm_state VARCHAR(255),
+        memory_mb INTEGER,
+        vcpus INTEGER,
+        local_gb INTEGER,
+        hostname VARCHAR(255),
+        host VARCHAR(255),
+        user_data TEXT,
+        reservation_id VARCHAR(255),
+        scheduled_at DATETIME,
+        launched_at DATETIME,
+        terminated_at DATETIME,
+        display_name VARCHAR(255),
+        display_description VARCHAR(255),
+        availability_zone VARCHAR(255),
+        locked BOOLEAN,
+        os_type VARCHAR(255),
+        launched_on TEXT,
+        instance_type_id INTEGER,
+        vm_mode VARCHAR(255),
+        uuid VARCHAR(36),
+        architecture VARCHAR(255),
+        root_device_name VARCHAR(255),
+        access_ip_v4 VARCHAR(255),
+        access_ip_v6 VARCHAR(255),
+        config_drive VARCHAR(255),
+        task_state VARCHAR(255),
+        default_local_device VARCHAR(255),
+        default_swap_device VARCHAR(255),
+        progress INTEGER,
+        managed_disk BOOLEAN,
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        CHECK (locked IN (0, 1)),
+        CHECK (managed_disk IN (0, 1))
+    );
+
+    INSERT INTO instances_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               internal_id,
+               user_id,
+               project_id,
+               image_ref,
+               kernel_id,
+               ramdisk_id,
+               server_name,
+               launch_index,
+               key_name,
+               key_data,
+               power_state,
+               vm_state,
+               memory_mb,
+               vcpus,
+               local_gb,
+               hostname,
+               host,
+               user_data,
+               reservation_id,
+               scheduled_at,
+               launched_at,
+               terminated_at,
+               display_name,
+               display_description,
+               availability_zone,
+               locked,
+               os_type,
+               launched_on,
+               instance_type_id,
+               vm_mode,
+               uuid,
+               architecture,
+               root_device_name,
+               access_ip_v4,
+               access_ip_v6,
+               config_drive,
+               task_state,
+               default_local_device,
+               default_swap_device,
+               progress,
+               managed_disk
+        FROM instances;
+
+    DROP TABLE instances;
+
+    CREATE TABLE instances (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        internal_id INTEGER,
+        user_id VARCHAR(255),
+        project_id VARCHAR(255),
+        image_ref VARCHAR(255),
+        kernel_id VARCHAR(255),
+        ramdisk_id VARCHAR(255),
+        server_name VARCHAR(255),
+        launch_index INTEGER,
+        key_name VARCHAR(255),
+        key_data TEXT,
+        power_state INTEGER,
+        vm_state VARCHAR(255),
+        memory_mb INTEGER,
+        vcpus INTEGER,
+        local_gb INTEGER,
+        hostname VARCHAR(255),
+        host VARCHAR(255),
+        user_data TEXT,
+        reservation_id VARCHAR(255),
+        scheduled_at DATETIME,
+        launched_at DATETIME,
+        terminated_at DATETIME,
+        display_name VARCHAR(255),
+        display_description VARCHAR(255),
+        availability_zone VARCHAR(255),
+        locked BOOLEAN,
+        os_type VARCHAR(255),
+        launched_on TEXT,
+        instance_type_id INTEGER,
+        vm_mode VARCHAR(255),
+        uuid VARCHAR(36),
+        architecture VARCHAR(255),
+        root_device_name VARCHAR(255),
+        access_ip_v4 VARCHAR(255),
+        access_ip_v6 VARCHAR(255),
+        config_drive VARCHAR(255),
+        task_state VARCHAR(255),
+        default_local_device VARCHAR(255),
+        default_swap_device VARCHAR(255),
+        progress INTEGER,
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        CHECK (locked IN (0, 1))
+    );
+
+    INSERT INTO instances
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               internal_id,
+               user_id,
+               project_id,
+               image_ref,
+               kernel_id,
+               ramdisk_id,
+               server_name,
+               launch_index,
+               key_name,
+               key_data,
+               power_state,
+               vm_state,
+               memory_mb,
+               vcpus,
+               local_gb,
+               hostname,
+               host,
+               user_data,
+               reservation_id,
+               scheduled_at,
+               launched_at,
+               terminated_at,
+               display_name,
+               display_description,
+               availability_zone,
+               locked,
+               os_type,
+               launched_on,
+               instance_type_id,
+               vm_mode,
+               uuid,
+               architecture,
+               root_device_name,
+               access_ip_v4,
+               access_ip_v6,
+               config_drive,
+               task_state,
+               default_local_device,
+               default_swap_device,
+               progress
+        FROM instances_backup;
+
+        DROP TABLE instances_backup;
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/051_add_vcpu_weight_to_instance_types.py b/cinder/db/sqlalchemy/migrate_repo/versions/051_add_vcpu_weight_to_instance_types.py
new file mode 100644
index 000000000..a33831993
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/051_add_vcpu_weight_to_instance_types.py
@@ -0,0 +1,34 @@
+# Copyright 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, Table
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instance_types = Table('instance_types', meta, autoload=True)
+
+    vcpu_weight = Column("vcpu_weight", Integer())
+    instance_types.create_column(vcpu_weight)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instance_types = Table('instance_types', meta, autoload=True)
+
+    instance_types.drop_column('vcpu_weight')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/052_kill_export_devices.py b/cinder/db/sqlalchemy/migrate_repo/versions/052_kill_export_devices.py
new file mode 100644
index 000000000..c71b4eeef
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/052_kill_export_devices.py
@@ -0,0 +1,65 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 University of Southern California
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, DateTime, ForeignKey, Integer
+from sqlalchemy import MetaData, Table
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # load tables for fk
+    volumes = Table('volumes', meta, autoload=True)
+
+    #
+    # New Tables
+    #
+    export_devices = Table('export_devices', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('shelf_id', Integer()),
+            Column('blade_id', Integer()),
+            Column('volume_id',
+                   Integer(),
+                   ForeignKey('volumes.id'),
+                   nullable=True),
+            )
+
+    try:
+        export_devices.create()
+    except Exception:
+        LOG.info(repr(export_devices))
+        LOG.exception('Exception while creating table')
+        raise
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # load tables for fk
+    volumes = Table('volumes', meta, autoload=True)
+
+    export_devices = Table('export_devices', meta, autoload=True)
+
+    export_devices.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/053_add_connection_info_to_block_device_mapping.py b/cinder/db/sqlalchemy/migrate_repo/versions/053_add_connection_info_to_block_device_mapping.py
new file mode 100644
index 000000000..8fe139918
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/053_add_connection_info_to_block_device_mapping.py
@@ -0,0 +1,38 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, MetaData, Table, Text
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    table = Table('block_device_mapping', meta, autoload=True)
+
+    new_column = Column('connection_info', Text())
+
+    table.create_column(new_column)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    table = Table('block_device_mapping', meta, autoload=True)
+
+    table.c.connection_info.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/053_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/053_sqlite_downgrade.sql
new file mode 100644
index 000000000..844399763
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/053_sqlite_downgrade.sql
@@ -0,0 +1,87 @@
+BEGIN TRANSACTION;
+
+    CREATE TEMPORARY TABLE block_device_mapping_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        instance_id INTEGER NOT NULL,
+        device_name VARCHAR(255) NOT NULL,
+        delete_on_termination BOOLEAN,
+        virtual_name VARCHAR(255),
+        snapshot_id INTEGER,
+        volume_id INTEGER,
+        volume_size INTEGER,
+        no_device BOOLEAN,
+        connection_info TEXT,
+        PRIMARY KEY (id),
+        FOREIGN KEY(snapshot_id) REFERENCES snapshots (id),
+        CHECK (deleted IN (0, 1)),
+        CHECK (delete_on_termination IN (0, 1)),
+        CHECK (no_device IN (0, 1)),
+        FOREIGN KEY(volume_id) REFERENCES volumes (id),
+        FOREIGN KEY(instance_id) REFERENCES instances (id)
+    );
+
+    INSERT INTO block_device_mapping_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               instance_id,
+               device_name,
+               delete_on_termination,
+               virtual_name,
+               snapshot_id,
+               volume_id,
+               volume_size,
+               no_device,
+               connection_info
+        FROM block_device_mapping;
+
+    DROP TABLE block_device_mapping;
+
+    CREATE TABLE block_device_mapping (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        instance_id INTEGER NOT NULL,
+        device_name VARCHAR(255) NOT NULL,
+        delete_on_termination BOOLEAN,
+        virtual_name VARCHAR(255),
+        snapshot_id INTEGER,
+        volume_id INTEGER,
+        volume_size INTEGER,
+        no_device BOOLEAN,
+        PRIMARY KEY (id),
+        FOREIGN KEY(snapshot_id) REFERENCES snapshots (id),
+        CHECK (deleted IN (0, 1)),
+        CHECK (delete_on_termination IN (0, 1)),
+        CHECK (no_device IN (0, 1)),
+        FOREIGN KEY(volume_id) REFERENCES volumes (id),
+        FOREIGN KEY(instance_id) REFERENCES instances (id)
+    );
+
+    INSERT INTO block_device_mapping
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               instance_id,
+               device_name,
+               delete_on_termination,
+               virtual_name,
+               snapshot_id,
+               volume_id,
+               volume_size,
+               no_device
+        FROM block_device_mapping_backup;
+
+    DROP TABLE block_device_mapping_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/054_add_bw_usage_data_cache.py b/cinder/db/sqlalchemy/migrate_repo/versions/054_add_bw_usage_data_cache.py
new file mode 100644
index 000000000..765f9cfc1
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/054_add_bw_usage_data_cache.py
@@ -0,0 +1,64 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 MORITA Kazutaka.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Table, MetaData
+from sqlalchemy import Integer, BigInteger, DateTime, Boolean, String
+
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    #
+    # New Tables
+    #
+    bw_cache = Table('bw_usage_cache', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('instance_id', Integer(), nullable=False),
+            Column('network_label',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('start_period', DateTime(timezone=False), nullable=False),
+            Column('last_refreshed', DateTime(timezone=False)),
+            Column('bw_in', BigInteger()),
+            Column('bw_out', BigInteger()))
+    try:
+        bw_cache.create()
+    except Exception:
+        LOG.info(repr(bw_cache))
+        LOG.exception('Exception while creating table')
+        meta.drop_all(tables=[bw_cache])
+        raise
+
+
+def downgrade(migrate_engine):
+    # Operations to reverse the above upgrade go here.
+    meta = MetaData()
+    meta.bind = migrate_engine
+    bw_cache = Table('bw_usage_cache', meta, autoload=True)
+    bw_cache.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py b/cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py
new file mode 100644
index 000000000..b110b6f20
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py
@@ -0,0 +1,112 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import migrate
+import migrate.changeset
+from sqlalchemy import Column, Integer, String, MetaData, Table
+
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instance_types = Table('instance_types', meta, autoload=True)
+
+    string_column = Column('flavorid_str', String(255))
+
+    string_column.create(instance_types)
+
+    try:
+        # NOTE(bcwaldon): This catches a bug with python-migrate
+        # failing to add the unique constraint
+        try:
+            migrate.UniqueConstraint(string_column).create()
+        except migrate.changeset.NotSupportedError:
+            LOG.error("Failed to add unique constraint on flavorid")
+            pass
+
+        # NOTE(bcwaldon): this is a hack to preserve uniqueness constraint
+        # on existing 'name' column
+        try:
+            migrate.UniqueConstraint(instance_types.c.name).create()
+        except Exception:
+            pass
+
+        integer_column = instance_types.c.flavorid
+
+        instance_type_rows = list(instance_types.select().execute())
+        for instance_type in instance_type_rows:
+            flavorid_int = instance_type.flavorid
+            instance_types.update()\
+                          .where(integer_column == flavorid_int)\
+                          .values(flavorid_str=str(flavorid_int))\
+                          .execute()
+    except Exception:
+        string_column.drop()
+        raise
+
+    integer_column.alter(name='flavorid_int')
+    string_column.alter(name='flavorid')
+    integer_column.drop()
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instance_types = Table('instance_types', meta, autoload=True)
+
+    integer_column = Column('flavorid_int', Integer())
+
+    integer_column.create(instance_types)
+
+    try:
+        # NOTE(bcwaldon): This catches a bug with python-migrate
+        # failing to add the unique constraint
+        try:
+            migrate.UniqueConstraint(integer_column).create()
+        except migrate.changeset.NotSupportedError:
+            LOG.info("Failed to add unique constraint on flavorid")
+            pass
+
+        string_column = instance_types.c.flavorid
+
+        instance_types_rows = list(instance_types.select().execute())
+        for instance_type in instance_types_rows:
+            flavorid_str = instance_type.flavorid
+            try:
+                flavorid_int = int(instance_type.flavorid)
+            except ValueError:
+                msg = _('Could not cast flavorid to integer: %s. '
+                        'Set flavorid to an integer-like string to downgrade.')
+                LOG.error(msg % instance_type.flavorid)
+                raise
+
+            instance_types.update()\
+                          .where(string_column == flavorid_str)\
+                          .values(flavorid_int=flavorid_int)\
+                          .execute()
+    except Exception:
+        integer_column.drop()
+        raise
+
+    string_column.alter(name='flavorid_str')
+    integer_column.alter(name='flavorid')
+    string_column.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/056_add_s3_images.py b/cinder/db/sqlalchemy/migrate_repo/versions/056_add_s3_images.py
new file mode 100644
index 000000000..aed52488a
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/056_add_s3_images.py
@@ -0,0 +1,60 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, DateTime, Integer
+from sqlalchemy import MetaData, String, Table
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    #
+    # New Tables
+    #
+    s3_images = Table('s3_images', meta,
+                    Column('created_at',
+                                      DateTime(timezone=False)),
+                    Column('updated_at',
+                                      DateTime(timezone=False)),
+                    Column('deleted_at',
+                                      DateTime(timezone=False)),
+                    Column('deleted',
+                           Boolean(create_constraint=True, name=None)),
+                    Column('id', Integer(),
+                                      primary_key=True,
+                                      nullable=False,
+                                      autoincrement=True),
+                    Column('uuid', String(36),
+                                      nullable=False))
+    try:
+        s3_images.create()
+    except Exception:
+        LOG.exception("Exception while creating table 's3_images'")
+        meta.drop_all(tables=[s3_images])
+        raise
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    s3_images = Table('s3_images', meta, autoload=True)
+    s3_images.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/057_add_sm_driver_tables.py b/cinder/db/sqlalchemy/migrate_repo/versions/057_add_sm_driver_tables.py
new file mode 100644
index 000000000..ea01fc80c
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/057_add_sm_driver_tables.py
@@ -0,0 +1,113 @@
+# Copyright (c) 2011 Citrix Systems, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, DateTime, ForeignKey
+from sqlalchemy import Integer, MetaData, String
+from sqlalchemy import Table
+
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # load tables for fk
+    volumes = Table('volumes', meta, autoload=True)
+
+    #
+    # New Tables
+    #
+    flavors = Table('sm_flavors', meta,
+              Column('created_at', DateTime(timezone=False)),
+              Column('updated_at', DateTime(timezone=False)),
+              Column('deleted_at', DateTime(timezone=False)),
+              Column('deleted', Boolean(create_constraint=True, name=None)),
+              Column('id', Integer(), primary_key=True, nullable=False),
+              Column('label',
+                     String(length=255, convert_unicode=False,
+                            assert_unicode=None,
+                            unicode_error=None, _warn_on_bytestring=False)),
+              Column('description',
+                     String(length=255, convert_unicode=False,
+                            assert_unicode=None,
+                            unicode_error=None, _warn_on_bytestring=False)),
+              )
+
+    backend = Table('sm_backend_config', meta,
+              Column('created_at', DateTime(timezone=False)),
+              Column('updated_at', DateTime(timezone=False)),
+              Column('deleted_at', DateTime(timezone=False)),
+              Column('deleted', Boolean(create_constraint=True, name=None)),
+              Column('id', Integer(), primary_key=True, nullable=False),
+              Column('flavor_id', Integer(), ForeignKey('sm_flavors.id'),
+                     nullable=False),
+              Column('sr_uuid',
+                     String(length=255, convert_unicode=False,
+                            assert_unicode=None,
+                            unicode_error=None, _warn_on_bytestring=False)),
+              Column('sr_type',
+                     String(length=255, convert_unicode=False,
+                            assert_unicode=None,
+                            unicode_error=None, _warn_on_bytestring=False)),
+              Column('config_params',
+                     String(length=2047,
+                            convert_unicode=False,
+                            assert_unicode=None,
+                            unicode_error=None,
+                            _warn_on_bytestring=False)),
+              )
+
+    sm_vol = Table('sm_volume', meta,
+             Column('created_at', DateTime(timezone=False)),
+             Column('updated_at', DateTime(timezone=False)),
+             Column('deleted_at', DateTime(timezone=False)),
+             Column('deleted', Boolean(create_constraint=True, name=None)),
+             Column('id', Integer(), ForeignKey('volumes.id'),
+                    primary_key=True, nullable=False),
+             Column('backend_id', Integer(),
+                    ForeignKey('sm_backend_config.id'),
+                    nullable=False),
+             Column('vdi_uuid',
+                    String(length=255, convert_unicode=False,
+                           assert_unicode=None,
+                           unicode_error=None, _warn_on_bytestring=False)),
+             )
+    for table in (flavors, backend, sm_vol):
+        try:
+            table.create()
+        except Exception:
+            LOG.info(repr(table))
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # load tables for fk
+    volumes = Table('volumes', meta, autoload=True)
+
+    flavors = Table('sm_flavors', meta, autoload=True)
+    backend = Table('sm_backend_config', meta, autoload=True)
+    sm_vol = Table('sm_volume', meta, autoload=True)
+
+    for table in (flavors, backend, sm_vol):
+        try:
+            table.drop()
+        except Exception:
+            LOG.info(repr(table))
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/058_rename_managed_disk.py b/cinder/db/sqlalchemy/migrate_repo/versions/058_rename_managed_disk.py
new file mode 100644
index 000000000..e12cabddd
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/058_rename_managed_disk.py
@@ -0,0 +1,37 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import MetaData, Table
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instances = Table('instances', meta, autoload=True)
+
+    managed_disk = instances.c.managed_disk
+    managed_disk.alter(name='auto_disk_config')
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instances = Table('instances', meta, autoload=True)
+
+    image_ref_column = instances.c.auto_disk_config
+    image_ref_column.alter(name='managed_disk')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/059_split_rxtx_quota_into_network.py b/cinder/db/sqlalchemy/migrate_repo/versions/059_split_rxtx_quota_into_network.py
new file mode 100644
index 000000000..58f6d69e0
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/059_split_rxtx_quota_into_network.py
@@ -0,0 +1,61 @@
+# Copyright 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, Float, MetaData, Table
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instance_types = Table('instance_types', meta, autoload=True)
+    networks = Table('networks', meta, autoload=True)
+
+    rxtx_base = Column('rxtx_base', Integer)
+    rxtx_factor = Column('rxtx_factor', Float, default=1)
+    instance_types.create_column(rxtx_factor)
+    networks.create_column(rxtx_base)
+
+    base = migrate_engine.execute("select min(rxtx_cap) as min_rxtx from "
+                                  "instance_types where rxtx_cap > 0").scalar()
+    base = base if base > 1 else 1
+    update_i_type_sql = ("update instance_types set rxtx_factor = rxtx_cap"
+                         "/%s where rxtx_cap > 0" % base)
+    migrate_engine.execute(update_i_type_sql)
+    migrate_engine.execute("update networks set rxtx_base = %s" % base)
+
+    instance_types.c.rxtx_quota.drop()
+    instance_types.c.rxtx_cap.drop()
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instance_types = Table('instance_types', meta, autoload=True)
+    networks = Table('networks', meta, autoload=True)
+
+    rxtx_quota = Column('rxtx_quota', Integer)
+    rxtx_cap = Column('rxtx_cap', Integer)
+    instance_types.create_column(rxtx_quota)
+    instance_types.create_column(rxtx_cap)
+
+    base = migrate_engine.execute("select min(rxtx_base) from networks "
+                                  "where rxtx_base > 0").scalar()
+    base = base if base > 1 else 1
+
+    update_i_type_sql = ("update instance_types set rxtx_cap = "
+                         "rxtx_factor * %s" % base)
+    migrate_engine.execute(update_i_type_sql)
+
+    instance_types.c.rxtx_factor.drop()
+    networks.c.rxtx_base.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/059_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/059_sqlite_downgrade.sql
new file mode 100644
index 000000000..ecf45c599
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/059_sqlite_downgrade.sql
@@ -0,0 +1,137 @@
+BEGIN TRANSACTION;
+
+    CREATE TEMPORARY TABLE instance_types_backup (
+                           created_at DATETIME,
+                           updated_at DATETIME,
+                           deleted_at DATETIME,
+                           deleted BOOLEAN,
+                           name VARCHAR(255),
+                           id INTEGER NOT NULL,
+                           memory_mb INTEGER NOT NULL,
+                           vcpus INTEGER NOT NULL,
+                           local_gb INTEGER NOT NULL,
+                           swap INTEGER NOT NULL,
+                           rxtx_quota INTEGER NOT NULL,
+                           rxtx_cap INTEGER NOT NULL,
+                           vcpu_weight INTEGER,
+                           flavorid VARCHAR(255),
+                           PRIMARY KEY (id),
+                           CHECK (deleted IN (0, 1)),
+                           UNIQUE (flavorid),
+                           UNIQUE (name)
+    );
+
+    INSERT INTO instance_types_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               name,
+               id,
+               memory_mb,
+               vcpus,
+               local_gb,
+               swap,
+               0 as rxtx_quota,
+               COALESCE(rxtx_factor, 1) * COALESCE ((SELECT  MIN(rxtx_base)
+                                            FROM networks
+                                            WHERE rxtx_base > 0), 1)
+                                            as rxtx_cap,
+               vcpu_weight,
+               flavorid FROM instance_types;
+
+    DROP TABLE instance_types;
+
+    CREATE TABLE instance_types (
+                created_at DATETIME,
+                updated_at DATETIME,
+                deleted_at DATETIME,
+                deleted BOOLEAN,
+                name VARCHAR(255),
+                id INTEGER NOT NULL,
+                memory_mb INTEGER NOT NULL,
+                vcpus INTEGER NOT NULL,
+                local_gb INTEGER NOT NULL,
+                swap INTEGER NOT NULL,
+                rxtx_quota INTEGER NOT NULL,
+                rxtx_cap INTEGER NOT NULL,
+                vcpu_weight INTEGER,
+                flavorid VARCHAR(255),
+                PRIMARY KEY (id),
+                UNIQUE (flavorid),
+                CHECK (deleted IN (0, 1)),
+                UNIQUE (name)
+    );
+
+    INSERT INTO instance_types SELECT * FROM instance_types_backup;
+    DROP TABLE instance_types_backup;
+
+    CREATE TABLE networks_backup (
+                created_at DATETIME,
+                updated_at DATETIME,
+                deleted_at DATETIME,
+                deleted BOOLEAN,
+                id INTEGER NOT NULL,
+                injected BOOLEAN,
+                cidr VARCHAR(255),
+                netmask VARCHAR(255),
+                bridge VARCHAR(255),
+                gateway VARCHAR(255),
+                broadcast VARCHAR(255),
+                dns1 VARCHAR(255),
+                vlan INTEGER,
+                vpn_public_address VARCHAR(255),
+                vpn_public_port INTEGER,
+                vpn_private_address VARCHAR(255),
+                dhcp_start VARCHAR(255),
+                project_id VARCHAR(255),
+                host VARCHAR(255),
+                cidr_v6 VARCHAR(255),
+                gateway_v6 VARCHAR(255),
+                label VARCHAR(255),
+                netmask_v6 VARCHAR(255),
+                bridge_interface VARCHAR(255),
+                multi_host BOOLEAN,
+                dns2 VARCHAR(255),
+                uuid VARCHAR(36),
+                priority INTEGER,
+                PRIMARY KEY (id),
+                CHECK (deleted IN (0, 1)),
+                CHECK (injected IN (0, 1)),
+                CHECK (multi_host IN (0, 1))
+    );
+
+    INSERT INTO networks_backup
+       SELECT   created_at,
+                updated_at,
+                deleted_at,
+                deleted,
+                id,
+                injected,
+                cidr,
+                netmask,
+                bridge,
+                gateway,
+                broadcast,
+                dns1,
+                vlan,
+                vpn_public_address,
+                vpn_public_port,
+                vpn_private_address,
+                dhcp_start,
+                project_id,
+                host,
+                cidr_v6,
+                gateway_v6,
+                label,
+                netmask_v6,
+                bridge_interface,
+                multi_host,
+                dns2,
+                uuid,
+                priority
+       FROM networks;
+
+   DROP TABLE networks;
+   ALTER TABLE networks_backup RENAME TO networks;
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/059_sqlite_upgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/059_sqlite_upgrade.sql
new file mode 100644
index 000000000..ba7729aed
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/059_sqlite_upgrade.sql
@@ -0,0 +1,87 @@
+BEGIN TRANSACTION;
+
+    CREATE TEMPORARY TABLE instance_types_backup (
+                created_at DATETIME,
+                updated_at DATETIME,
+                deleted_at DATETIME,
+                deleted BOOLEAN,
+                name VARCHAR(255),
+                id INTEGER NOT NULL,
+                memory_mb INTEGER NOT NULL,
+                vcpus INTEGER NOT NULL,
+                local_gb INTEGER NOT NULL,
+                swap INTEGER NOT NULL,
+                rxtx_factor FLOAT,
+                vcpu_weight INTEGER,
+                flavorid VARCHAR(255),
+                PRIMARY KEY (id),
+                UNIQUE (flavorid),
+                CHECK (deleted IN (0, 1)),
+                UNIQUE (name)
+    );
+
+    INSERT INTO instance_types_backup
+        SELECT created_at,
+                updated_at,
+                deleted_at,
+                deleted,
+                name,
+                id,
+                memory_mb,
+                vcpus,
+                local_gb,
+                swap,
+                COALESCE(rxtx_cap, 1) / COALESCE ((SELECT  MIN(rxtx_cap)
+                                             FROM instance_types
+                                             WHERE rxtx_cap > 0), 1) as rxtx_cap,
+                vcpu_weight,
+                flavorid
+        FROM instance_types;
+
+    ALTER TABLE networks ADD COLUMN rxtx_base INTEGER DEFAULT 1;
+
+    UPDATE networks SET rxtx_base = COALESCE((SELECT MIN(rxtx_cap)
+                                            FROM instance_types
+                                            WHERE rxtx_cap>0), 1);
+
+    DROP TABLE instance_types;
+
+    CREATE TABLE instance_types (
+            created_at DATETIME,
+            updated_at DATETIME,
+            deleted_at DATETIME,
+            deleted BOOLEAN,
+            name VARCHAR(255),
+            id INTEGER NOT NULL,
+            memory_mb INTEGER NOT NULL,
+            vcpus INTEGER NOT NULL,
+            local_gb INTEGER NOT NULL,
+            swap INTEGER NOT NULL,
+            rxtx_factor FLOAT,
+            vcpu_weight INTEGER,
+            flavorid VARCHAR(255),
+            PRIMARY KEY (id),
+            UNIQUE (flavorid),
+            CHECK (deleted IN (0, 1)),
+            UNIQUE (name)
+    );
+
+    INSERT INTO instance_types
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               name,
+               id,
+               memory_mb,
+               vcpus,
+               local_gb,
+               swap,
+               rxtx_factor,
+               vcpu_weight,
+               flavorid
+        FROM instance_types_backup;
+
+    DROP TABLE instance_types_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py b/cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py
new file mode 100644
index 000000000..83ed1cf6b
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py
@@ -0,0 +1,62 @@
+# Copyright 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import MetaData, Table
+from migrate import ForeignKeyConstraint
+
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+    dialect = migrate_engine.url.get_dialect().name
+    if dialect.startswith('sqlite'):
+        return
+
+    networks = Table('networks', meta, autoload=True)
+    vifs = Table('virtual_interfaces', meta, autoload=True)
+
+    try:
+        fkey_name = list(vifs.c.network_id.foreign_keys)[0].constraint.name
+        ForeignKeyConstraint(columns=[vifs.c.network_id],
+                             refcolumns=[networks.c.id],
+                             name=fkey_name).drop()
+
+    except Exception:
+        LOG.error(_("foreign key constraint couldn't be removed"))
+        raise
+
+
+def downgrade(migrate_engine):
+    # Operations to reverse the above upgrade go here.
+    meta = MetaData()
+    meta.bind = migrate_engine
+    dialect = migrate_engine.url.get_dialect().name
+    if dialect.startswith('sqlite'):
+        return
+
+    networks = Table('networks', meta, autoload=True)
+    vifs = Table('virtual_interfaces', meta, autoload=True)
+
+    try:
+        ForeignKeyConstraint(columns=[vifs.c.network_id],
+                             refcolumns=[networks.c.id]).create()
+    except Exception:
+        LOG.error(_("foreign key constraint couldn't be added"))
+        raise
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/060_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/060_sqlite_downgrade.sql
new file mode 100644
index 000000000..2c0919f1d
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/060_sqlite_downgrade.sql
@@ -0,0 +1,45 @@
+BEGIN TRANSACTION;
+    CREATE TEMPORARY TABLE virtual_interfaces_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        network_id INTEGER,
+        instance_id INTEGER NOT NULL,
+        uuid VARCHAR(36),
+        PRIMARY KEY (id)
+    );
+
+    INSERT INTO virtual_interfaces_backup
+        SELECT created_at, updated_at, deleted_at, deleted, id, address,
+                network_id, instance_id, uuid
+        FROM virtual_interfaces;
+
+    DROP TABLE virtual_interfaces;
+
+    CREATE TABLE virtual_interfaces (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        network_id INTEGER,
+        instance_id INTEGER NOT NULL,
+        uuid VARCHAR(36),
+        PRIMARY KEY (id),
+        FOREIGN KEY(network_id) REFERENCES networks (id),
+        UNIQUE (address),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO virtual_interfaces
+        SELECT created_at, updated_at, deleted_at, deleted, id, address,
+                network_id, instance_id, uuid
+        FROM virtual_interfaces_backup;
+
+    DROP TABLE virtual_interfaces_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/060_sqlite_upgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/060_sqlite_upgrade.sql
new file mode 100644
index 000000000..fd49ea4f5
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/060_sqlite_upgrade.sql
@@ -0,0 +1,44 @@
+BEGIN TRANSACTION;
+    CREATE TEMPORARY TABLE virtual_interfaces_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        network_id INTEGER,
+        instance_id INTEGER NOT NULL,
+        uuid VARCHAR(36),
+        PRIMARY KEY (id)
+    );
+
+    INSERT INTO virtual_interfaces_backup
+        SELECT created_at, updated_at, deleted_at, deleted, id, address,
+                network_id, instance_id, uuid
+        FROM virtual_interfaces;
+
+    DROP TABLE virtual_interfaces;
+
+    CREATE TABLE virtual_interfaces (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        network_id INTEGER,
+        instance_id INTEGER NOT NULL,
+        uuid VARCHAR(36),
+        PRIMARY KEY (id),
+        UNIQUE (address),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO virtual_interfaces
+        SELECT created_at, updated_at, deleted_at, deleted, id, address,
+                network_id, instance_id, uuid
+        FROM virtual_interfaces_backup;
+
+    DROP TABLE virtual_interfaces_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/061_add_index_to_instance_uuid.py b/cinder/db/sqlalchemy/migrate_repo/versions/061_add_index_to_instance_uuid.py
new file mode 100644
index 000000000..1a369bffe
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/061_add_index_to_instance_uuid.py
@@ -0,0 +1,29 @@
+# Copyright 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Index, MetaData, Table
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instances = Table('instances', meta, autoload=True)
+    Index('uuid', instances.c.uuid, unique=True).create(migrate_engine)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instances = Table('instances', meta, autoload=True)
+    Index('uuid', instances.c.uuid, unique=True).drop(migrate_engine)
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py b/cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py
new file mode 100644
index 000000000..f2b0e8a74
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py
@@ -0,0 +1,70 @@
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, DateTime, ForeignKey
+from sqlalchemy import Integer, MetaData, String
+from sqlalchemy import Table, Text
+
+from cinder import log as logging
+from cinder import utils
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # load tables for fk
+    instances = Table('instances', meta, autoload=True)
+
+    #
+    # New Tables
+    #
+    instance_info_caches = Table('instance_info_caches', meta,
+            Column('created_at', DateTime(timezone=False),
+                   default=utils.utcnow()),
+            Column('updated_at', DateTime(timezone=False),
+                   onupdate=utils.utcnow()),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True),
+            Column('network_info', Text()),
+            Column('instance_id', String(36),
+                   ForeignKey('instances.uuid'),
+                   nullable=False,
+                   unique=True),
+            mysql_engine='InnoDB')
+    # create instance_info_caches table
+    try:
+        instance_info_caches.create()
+    except Exception:
+        LOG.error(_("Table |%s| not created!"), repr(instance_info_caches))
+        raise
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # load tables for fk
+    instances = Table('instances', meta, autoload=True)
+
+    instance_info_caches = Table('instance_info_caches', meta, autoload=True)
+    try:
+        instance_info_caches.drop()
+    except Exception:
+        LOG.error(_("instance_info_caches tables not dropped"))
+        raise
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/063_add_instance_faults_table.py b/cinder/db/sqlalchemy/migrate_repo/versions/063_add_instance_faults_table.py
new file mode 100644
index 000000000..be4561791
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/063_add_instance_faults_table.py
@@ -0,0 +1,60 @@
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, DateTime, Integer, ForeignKey
+from sqlalchemy import MetaData, String, Table, Text
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+    #
+    # New Tables
+    #
+    instance_faults = Table('instance_faults', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None),
+                    default=False),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('instance_uuid', String(36, ForeignKey('instances.uuid'))),
+            Column('code', Integer(), nullable=False),
+            Column('message',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('details',
+                   Text(length=None, convert_unicode=False,
+                        assert_unicode=None,
+                        unicode_error=None, _warn_on_bytestring=False)),
+            )
+    try:
+        instance_faults.create()
+    except Exception:
+        LOG.info(repr(instance_faults))
+
+
+def downgrade(migrate_engine):
+    # Operations to reverse the above upgrade go here.
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instance_faults = Table('instance_faults', meta, autoload=True)
+    instance_faults.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py b/cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py
new file mode 100644
index 000000000..bed915166
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py
@@ -0,0 +1,80 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import select, Column, ForeignKey, Integer
+from sqlalchemy import MetaData, String, Table
+from migrate import ForeignKeyConstraint
+
+from cinder import log as logging
+
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    dialect = migrate_engine.url.get_dialect().name
+    instance_actions = Table('instance_actions', meta, autoload=True)
+    instances = Table('instances', meta, autoload=True)
+    uuid_column = Column('instance_uuid', String(36))
+    uuid_column.create(instance_actions)
+
+    try:
+        instance_actions.update().values(
+            instance_uuid=select(
+                [instances.c.uuid],
+                instances.c.id == instance_actions.c.instance_id)
+        ).execute()
+    except Exception:
+        uuid_column.drop()
+        raise
+
+    if not dialect.startswith('sqlite'):
+        fkeys = list(instance_actions.c.instance_id.foreign_keys)
+        if fkeys:
+            try:
+                fkey_name = fkeys[0].constraint.name
+                ForeignKeyConstraint(columns=[instance_actions.c.instance_id],
+                                     refcolumns=[instances.c.id],
+                                     name=fkey_name).drop()
+            except Exception:
+                LOG.error(_("foreign key constraint couldn't be removed"))
+                raise
+
+    instance_actions.c.instance_id.drop()
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instance_actions = Table('instance_actions', meta, autoload=True)
+    instances = Table('instances', meta, autoload=True)
+    id_column = Column('instance_id', Integer, ForeignKey('instances.id'))
+    id_column.create(instance_actions)
+
+    try:
+        instance_actions.update().values(
+            instance_id=select(
+                [instances.c.id],
+                instances.c.uuid == instance_actions.c.instance_uuid)
+        ).execute()
+    except Exception:
+        id_column.drop()
+        raise
+
+    instance_actions.c.instance_uuid.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/065_add_index_to_instance_project_id.py b/cinder/db/sqlalchemy/migrate_repo/versions/065_add_index_to_instance_project_id.py
new file mode 100644
index 000000000..9b27f39dc
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/065_add_index_to_instance_project_id.py
@@ -0,0 +1,31 @@
+# Copyright 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Index, MetaData, Table
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instances = Table('instances', meta, autoload=True)
+    index = Index('project_id', instances.c.project_id)
+    index.create(migrate_engine)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instances = Table('instances', meta, autoload=True)
+    index = Index('project_id', instances.c.project_id)
+    index.drop(migrate_engine)
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/066_preload_instance_info_cache_table.py b/cinder/db/sqlalchemy/migrate_repo/versions/066_preload_instance_info_cache_table.py
new file mode 100644
index 000000000..b2df1bbe2
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/066_preload_instance_info_cache_table.py
@@ -0,0 +1,31 @@
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import json
+
+from sqlalchemy import select, MetaData, Table
+
+from cinder import log as logging
+from cinder import utils
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    pass
+
+
+def downgrade(migrate_engine):
+    pass
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/067_add_pool_and_interface_to_floating_ip.py b/cinder/db/sqlalchemy/migrate_repo/versions/067_add_pool_and_interface_to_floating_ip.py
new file mode 100644
index 000000000..61adb8fa4
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/067_add_pool_and_interface_to_floating_ip.py
@@ -0,0 +1,41 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 X.commerce, a business unit of eBay Inc.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, MetaData, String, Table
+
+from cinder import flags
+
+FLAGS = flags.FLAGS
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    table = Table('floating_ips', meta, autoload=True)
+
+    pool_column = Column('pool', String(255))
+    interface_column = Column('interface', String(255))
+    table.create_column(pool_column)
+    table.create_column(interface_column)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    table = Table('floating_ips', meta, autoload=True)
+    table.c.pool.drop()
+    table.c.interface.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/067_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/067_sqlite_downgrade.sql
new file mode 100644
index 000000000..3cd12cbdc
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/067_sqlite_downgrade.sql
@@ -0,0 +1,69 @@
+BEGIN TRANSACTION;
+
+    CREATE TEMPORARY TABLE floating_ips_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        fixed_ip_id INTEGER,
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        auto_assigned BOOLEAN,
+        pool VARCHAR(255),
+        interface VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        FOREIGN KEY(fixed_ip_id) REFERENCES fixed_ips (id)
+    );
+
+    INSERT INTO floating_ips_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               address,
+               fixed_ip_id,
+               project_id,
+               host,
+               auto_assigned,
+               pool,
+               interface
+        FROM floating_ips;
+
+    DROP TABLE floating_ips;
+
+    CREATE TABLE floating_ips (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        fixed_ip_id INTEGER,
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        auto_assigned BOOLEAN,
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        FOREIGN KEY(fixed_ip_id) REFERENCES fixed_ips (id)
+    );
+
+    INSERT INTO floating_ips
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               address,
+               fixed_ip_id,
+               project_id,
+               host,
+               auto_assigned
+        FROM floating_ips_backup;
+
+    DROP TABLE floating_ips_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/068_add_instance_attribute.py b/cinder/db/sqlalchemy/migrate_repo/versions/068_add_instance_attribute.py
new file mode 100644
index 000000000..a65aff8b4
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/068_add_instance_attribute.py
@@ -0,0 +1,36 @@
+# Copyright 2011 Isaku Yamahata
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean
+from sqlalchemy import Column, MetaData, Table
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instances = Table('instances', meta, autoload=True)
+    shutdown_terminate = Column(
+        'shutdown_terminate', Boolean(), default=True)
+    disable_terminate = Column(
+        'disable_terminate', Boolean(), default=False)
+    instances.create_column(shutdown_terminate)
+    instances.create_column(disable_terminate)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instances = Table('instances', meta, autoload=True)
+    instances.drop_column('shutdown_terminate')
+    instances.drop_column('disable_terminate')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/068_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/068_sqlite_downgrade.sql
new file mode 100644
index 000000000..a7700f6fa
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/068_sqlite_downgrade.sql
@@ -0,0 +1,219 @@
+BEGIN TRANSACTION;
+
+    CREATE TEMPORARY TABLE instances_backup (
+                created_at DATETIME,
+                updated_at DATETIME,
+                deleted_at DATETIME,
+                deleted BOOLEAN,
+                id INTEGER NOT NULL,
+                internal_id INTEGER,
+                user_id VARCHAR(255),
+                project_id VARCHAR(255),
+                image_ref VARCHAR(255),
+                kernel_id VARCHAR(255),
+                ramdisk_id VARCHAR(255),
+                server_name VARCHAR(255),
+                launch_index INTEGER,
+                key_name VARCHAR(255),
+                key_data TEXT,
+                power_state INTEGER,
+                vm_state VARCHAR(255),
+                memory_mb INTEGER,
+                vcpus INTEGER,
+                local_gb INTEGER,
+                hostname VARCHAR(255),
+                host VARCHAR(255),
+                user_data TEXT,
+                reservation_id VARCHAR(255),
+                scheduled_at DATETIME,
+                launched_at DATETIME,
+                terminated_at DATETIME,
+                display_name VARCHAR(255),
+                display_description VARCHAR(255),
+                availability_zone VARCHAR(255),
+                locked BOOLEAN,
+                os_type VARCHAR(255),
+                launched_on TEXT,
+                instance_type_id INTEGER,
+                vm_mode VARCHAR(255),
+                uuid VARCHAR(36),
+                architecture VARCHAR(255),
+                root_device_name VARCHAR(255),
+                access_ip_v4 VARCHAR(255),
+                access_ip_v6 VARCHAR(255),
+                config_drive VARCHAR(255),
+                task_state VARCHAR(255),
+                default_local_device VARCHAR(255),
+                default_swap_device VARCHAR(255),
+                progress INTEGER,
+                auto_disk_config BOOLEAN,
+                shutdown_terminate BOOLEAN,
+                disable_terminate BOOLEAN,
+                PRIMARY KEY (id),
+                CHECK (deleted IN (0, 1)),
+                CHECK (locked IN (0, 1)),
+                CHECK (auto_disk_config IN (0, 1)),
+                CHECK (shutdown_terminate IN (0, 1)),
+                CHECK (disable_terminate IN (0, 1))
+    );
+
+    INSERT INTO instances_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               internal_id,
+               user_id,
+               project_id,
+               image_ref,
+               kernel_id,
+               ramdisk_id,
+               server_name,
+               launch_index,
+               key_name,
+               key_data,
+               power_state,
+               vm_state,
+               memory_mb,
+               vcpus,
+               local_gb,
+               hostname,
+               host,
+               user_data,
+               reservation_id,
+               scheduled_at,
+               launched_at,
+               terminated_at,
+               display_name,
+               display_description,
+               availability_zone,
+               locked,
+               os_type,
+               launched_on,
+               instance_type_id,
+               vm_mode,
+               uuid,
+               architecture,
+               root_device_name,
+               access_ip_v4,
+               access_ip_v6,
+               config_drive,
+               task_state,
+               default_local_device,
+               default_swap_device,
+               progress,
+               auto_disk_config,
+               shutdown_terminate,
+               disable_terminate
+       FROM instances;
+
+    DROP TABLE instances;
+
+    CREATE TABLE instances(
+                created_at DATETIME,
+                updated_at DATETIME,
+                deleted_at DATETIME,
+                deleted BOOLEAN,
+                id INTEGER NOT NULL,
+                internal_id INTEGER,
+                user_id VARCHAR(255),
+                project_id VARCHAR(255),
+                image_ref VARCHAR(255),
+                kernel_id VARCHAR(255),
+                ramdisk_id VARCHAR(255),
+                server_name VARCHAR(255),
+                launch_index INTEGER,
+                key_name VARCHAR(255),
+                key_data TEXT,
+                power_state INTEGER,
+                vm_state VARCHAR(255),
+                memory_mb INTEGER,
+                vcpus INTEGER,
+                local_gb INTEGER,
+                hostname VARCHAR(255),
+                host VARCHAR(255),
+                user_data TEXT,
+                reservation_id VARCHAR(255),
+                scheduled_at DATETIME,
+                launched_at DATETIME,
+                terminated_at DATETIME,
+                display_name VARCHAR(255),
+                display_description VARCHAR(255),
+                availability_zone VARCHAR(255),
+                locked BOOLEAN,
+                os_type VARCHAR(255),
+                launched_on TEXT,
+                instance_type_id INTEGER,
+                vm_mode VARCHAR(255),
+                uuid VARCHAR(36),
+                architecture VARCHAR(255),
+                root_device_name VARCHAR(255),
+                access_ip_v4 VARCHAR(255),
+                access_ip_v6 VARCHAR(255),
+                config_drive VARCHAR(255),
+                task_state VARCHAR(255),
+                default_local_device VARCHAR(255),
+                default_swap_device VARCHAR(255),
+                progress INTEGER,
+                auto_disk_config BOOLEAN,
+                PRIMARY KEY (id),
+                CHECK (deleted IN (0, 1)),
+                CHECK (locked IN (0, 1)),
+                CHECK (auto_disk_config IN (0, 1))
+    );
+
+    CREATE INDEX project_id ON instances (project_id);
+    CREATE UNIQUE INDEX uuid ON instances (uuid);
+
+    INSERT INTO instances
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               internal_id,
+               user_id,
+               project_id,
+               image_ref,
+               kernel_id,
+               ramdisk_id,
+               server_name,
+               launch_index,
+               key_name,
+               key_data,
+               power_state,
+               vm_state,
+               memory_mb,
+               vcpus,
+               local_gb,
+               hostname,
+               host,
+               user_data,
+               reservation_id,
+               scheduled_at,
+               launched_at,
+               terminated_at,
+               display_name,
+               display_description,
+               availability_zone,
+               locked,
+               os_type,
+               launched_on,
+               instance_type_id,
+               vm_mode,
+               uuid,
+               architecture,
+               root_device_name,
+               access_ip_v4,
+               access_ip_v6,
+               config_drive,
+               task_state,
+               default_local_device,
+               default_swap_device,
+               progress,
+               auto_disk_config
+       FROM instances_backup;
+
+    DROP TABLE instances_backup;
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py b/cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py
new file mode 100644
index 000000000..e9984be28
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py
@@ -0,0 +1,50 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, Table
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    disk_available_least = Column('disk_available_least', Integer(), default=0)
+    compute_nodes = Table('compute_nodes', meta, autoload=True)
+    # Add disk_available_least column to compute_nodes table.
+    # Thinking about qcow2 image support, both compressed and virtual disk size
+    # has to be considered.
+    # disk_available stores "total disk size - used disk(compressed disk size)"
+    # while disk_available_least stores
+    # "total disk size - used disk(virtual disk size)".
+    # virtual disk size is used for kvm block migration.
+    try:
+        compute_nodes.create_column(disk_available_least)
+    except Exception:
+        LOG.error(_("progress column not added to compute_nodes table"))
+        raise
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    compute_nodes = Table('compute_nodes', meta, autoload=True)
+    compute_nodes.drop_column('disk_available_least')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/070_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/070_sqlite_downgrade.sql
new file mode 100644
index 000000000..5837603c8
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/070_sqlite_downgrade.sql
@@ -0,0 +1,103 @@
+BEGIN TRANSACTION;
+    CREATE TABLE fixed_ips_backup (
+            created_at DATETIME NOT NULL,
+            updated_at DATETIME,
+            deleted_at DATETIME,
+            deleted BOOLEAN NOT NULL,
+            id INTEGER NOT NULL,
+            address VARCHAR(255),
+            virtual_interface_id INTEGER,
+            network_id INTEGER,
+            instance_id INTEGER,
+            allocated BOOLEAN default FALSE,
+            leased BOOLEAN default FALSE,
+            reserved BOOLEAN default FALSE,
+            host VARCHAR(255),
+            PRIMARY KEY (id)
+        );
+
+    CREATE TABLE floating_ips_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        fixed_ip_id INTEGER,
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        auto_assigned BOOLEAN,
+        pool VARCHAR(255),
+        interface VARCHAR(255),
+        PRIMARY KEY (id)
+    );
+
+    INSERT INTO fixed_ips_backup
+        SELECT created_at, updated_at, deleted_at, deleted, id, address,
+                virtual_interface_id, network_id, instance_id, allocated,
+                leased, reserved, host
+        FROM fixed_ips;
+
+    INSERT INTO floating_ips_backup
+        SELECT created_at, updated_at, deleted_at, deleted, id, address,
+                fixed_ip_id, project_id, host, auto_assigned, pool,
+                interface
+        FROM floating_ips;
+
+    DROP TABLE fixed_ips;
+    DROP TABLE floating_ips;
+
+    CREATE TABLE fixed_ips (
+        created_at DATETIME NOT NULL,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN NOT NULL,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        virtual_interface_id INTEGER,
+        network_id INTEGER,
+        instance_id INTEGER,
+        allocated BOOLEAN default FALSE,
+        leased BOOLEAN default FALSE,
+        reserved BOOLEAN default FALSE,
+        host VARCHAR(255),
+        PRIMARY KEY (id),
+        FOREIGN KEY(virtual_interface_id) REFERENCES virtual_interfaces (id),
+        FOREIGN KEY(network_id) REFERENCES networks (id),
+        FOREIGN KEY(instance_id) REFERENCES instances (id)
+    );
+
+    CREATE TABLE floating_ips (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        fixed_ip_id INTEGER,
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        auto_assigned BOOLEAN,
+        pool VARCHAR(255),
+        interface VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        FOREIGN KEY(fixed_ip_id) REFERENCES fixed_ips (id)
+    );
+
+    INSERT INTO fixed_ips
+        SELECT created_at, updated_at, deleted_at, deleted, id, address,
+                virtual_interface_id, network_id, instance_id, allocated,
+                leased, reserved, host
+        FROM fixed_ips_backup;
+
+    INSERT INTO floating_ips
+        SELECT created_at, updated_at, deleted_at, deleted, id, address,
+                fixed_ip_id, project_id, host, auto_assigned, pool,
+                interface
+        FROM floating_ips_backup;
+
+    DROP TABLE fixed_ips_backup;
+    DROP TABLE floating_ips_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/070_sqlite_upgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/070_sqlite_upgrade.sql
new file mode 100644
index 000000000..2b6f7c39a
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/070_sqlite_upgrade.sql
@@ -0,0 +1,99 @@
+BEGIN TRANSACTION;
+    CREATE TABLE fixed_ips_backup (
+            created_at DATETIME NOT NULL,
+            updated_at DATETIME,
+            deleted_at DATETIME,
+            deleted BOOLEAN NOT NULL,
+            id INTEGER NOT NULL,
+            address VARCHAR(255),
+            virtual_interface_id INTEGER,
+            network_id INTEGER,
+            instance_id INTEGER,
+            allocated BOOLEAN default FALSE,
+            leased BOOLEAN default FALSE,
+            reserved BOOLEAN default FALSE,
+            host VARCHAR(255),
+            PRIMARY KEY (id)
+        );
+
+    CREATE TABLE floating_ips_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        fixed_ip_id INTEGER,
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        auto_assigned BOOLEAN,
+        pool VARCHAR(255),
+        interface VARCHAR(255),
+        PRIMARY KEY (id)
+    );
+
+    INSERT INTO fixed_ips_backup
+        SELECT created_at, updated_at, deleted_at, deleted, id, address,
+                virtual_interface_id, network_id, instance_id, allocated,
+                leased, reserved, host
+        FROM fixed_ips;
+
+    INSERT INTO floating_ips_backup
+        SELECT created_at, updated_at, deleted_at, deleted, id, address,
+                fixed_ip_id, project_id, host, auto_assigned, pool,
+                interface
+        FROM floating_ips;
+
+    DROP TABLE fixed_ips;
+    DROP TABLE floating_ips;
+
+    CREATE TABLE fixed_ips (
+            created_at DATETIME NOT NULL,
+            updated_at DATETIME,
+            deleted_at DATETIME,
+            deleted BOOLEAN NOT NULL,
+            id INTEGER NOT NULL,
+            address VARCHAR(255),
+            virtual_interface_id INTEGER,
+            network_id INTEGER,
+            instance_id INTEGER,
+            allocated BOOLEAN default FALSE,
+            leased BOOLEAN default FALSE,
+            reserved BOOLEAN default FALSE,
+            host VARCHAR(255),
+            PRIMARY KEY (id)
+        );
+
+    CREATE TABLE floating_ips (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        address VARCHAR(255),
+        fixed_ip_id INTEGER,
+        project_id VARCHAR(255),
+        host VARCHAR(255),
+        auto_assigned BOOLEAN,
+        pool VARCHAR(255),
+        interface VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO fixed_ips
+        SELECT created_at, updated_at, deleted_at, deleted, id, address,
+                virtual_interface_id, network_id, instance_id, allocated,
+                leased, reserved, host
+        FROM fixed_ips_backup;
+
+    INSERT INTO floating_ips
+        SELECT created_at, updated_at, deleted_at, deleted, id, address,
+                fixed_ip_id, project_id, host, auto_assigned, pool,
+                interface
+        FROM floating_ips_backup;
+
+    DROP TABLE fixed_ips_backup;
+    DROP TABLE floating_ips_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/070_untie_nova_network_models.py b/cinder/db/sqlalchemy/migrate_repo/versions/070_untie_nova_network_models.py
new file mode 100644
index 000000000..0316194b3
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/070_untie_nova_network_models.py
@@ -0,0 +1,100 @@
+# Copyright 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import MetaData, Table
+from migrate import ForeignKeyConstraint
+
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+    dialect = migrate_engine.url.get_dialect().name
+    if dialect.startswith('sqlite'):
+        return
+
+    instances = Table('instances', meta, autoload=True)
+    networks = Table('networks', meta, autoload=True)
+    vifs = Table('virtual_interfaces', meta, autoload=True)
+    fixed_ips = Table('fixed_ips', meta, autoload=True)
+    floating_ips = Table('floating_ips', meta, autoload=True)
+
+    try:
+        fkeys = list(fixed_ips.c.network_id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[fixed_ips.c.network_id],
+                                 refcolumns=[networks.c.id],
+                                 name=fkey_name).drop()
+
+        fkeys = list(fixed_ips.c.virtual_interface_id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[fixed_ips.c.virtual_interface_id],
+                                 refcolumns=[vifs.c.id],
+                                 name=fkey_name).drop()
+
+        fkeys = list(fixed_ips.c.instance_id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[fixed_ips.c.instance_id],
+                                 refcolumns=[instances.c.id],
+                                 name=fkey_name).drop()
+
+        fkeys = list(floating_ips.c.fixed_ip_id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[floating_ips.c.fixed_ip_id],
+                                 refcolumns=[fixed_ips.c.id],
+                                 name=fkey_name).drop()
+
+    except Exception:
+        LOG.error(_("foreign key constraint couldn't be removed"))
+        raise
+
+
+def downgrade(migrate_engine):
+    # Operations to reverse the above upgrade go here.
+    meta = MetaData()
+    meta.bind = migrate_engine
+    dialect = migrate_engine.url.get_dialect().name
+    if dialect.startswith('sqlite'):
+        return
+
+    instances = Table('instances', meta, autoload=True)
+    networks = Table('networks', meta, autoload=True)
+    vifs = Table('virtual_interfaces', meta, autoload=True)
+    fixed_ips = Table('fixed_ips', meta, autoload=True)
+    floating_ips = Table('floating_ips', meta, autoload=True)
+
+    try:
+        ForeignKeyConstraint(columns=[fixed_ips.c.network_id],
+                             refcolumns=[networks.c.id]).create()
+
+        ForeignKeyConstraint(columns=[fixed_ips.c.virtual_interface_id],
+                             refcolumns=[vifs.c.id]).create()
+
+        ForeignKeyConstraint(columns=[fixed_ips.c.instance_id],
+                             refcolumns=[instances.c.id]).create()
+
+        ForeignKeyConstraint(columns=[floating_ips.c.fixed_ip_id],
+                             refcolumns=[fixed_ips.c.id]).create()
+    except Exception:
+        LOG.error(_("foreign key constraint couldn't be added"))
+        raise
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/071_add_host_aggregate_tables.py b/cinder/db/sqlalchemy/migrate_repo/versions/071_add_host_aggregate_tables.py
new file mode 100644
index 000000000..d85c3bad0
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/071_add_host_aggregate_tables.py
@@ -0,0 +1,108 @@
+# Copyright (c) 2011 Citrix Systems, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, String, DateTime, Integer
+from sqlalchemy import MetaData, Column, ForeignKey, Table
+
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    #
+    # New Tables
+    #
+    aggregates = Table('aggregates', meta,
+              Column('created_at', DateTime(timezone=False)),
+              Column('updated_at', DateTime(timezone=False)),
+              Column('deleted_at', DateTime(timezone=False)),
+              Column('deleted', Boolean(create_constraint=True, name=None)),
+              Column('id', Integer(),
+                     primary_key=True, nullable=False, autoincrement=True),
+              Column('name',
+                     String(length=255, convert_unicode=False,
+                            assert_unicode=None,
+                            unicode_error=None, _warn_on_bytestring=False),
+                     unique=True),
+              Column('operational_state',
+                     String(length=255, convert_unicode=False,
+                            assert_unicode=None,
+                            unicode_error=None, _warn_on_bytestring=False),
+                     nullable=False),
+              Column('availability_zone',
+                     String(length=255, convert_unicode=False,
+                            assert_unicode=None,
+                            unicode_error=None, _warn_on_bytestring=False),
+                     nullable=False),
+              )
+
+    hosts = Table('aggregate_hosts', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('host',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False),
+                   unique=True),
+            Column('aggregate_id', Integer(), ForeignKey('aggregates.id'),
+                   nullable=False),
+            )
+
+    metadata = Table('aggregate_metadata', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True, nullable=False),
+            Column('aggregate_id',
+                   Integer(),
+                   ForeignKey('aggregates.id'),
+                   nullable=False),
+            Column('key',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False),
+                   nullable=False),
+            Column('value',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False),
+                   nullable=False))
+    tables = (aggregates, hosts, metadata)
+    for table in tables:
+        try:
+            table.create()
+        except Exception:
+            LOG.exception(repr(table))
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    aggregates = Table('aggregates', meta, autoload=True)
+    hosts = Table('aggregate_hosts', meta, autoload=True)
+    metadata = Table('aggregate_metadata', meta, autoload=True)
+    # table order matters, don't change
+    for table in (hosts, metadata, aggregates):
+        try:
+            table.drop()
+        except Exception:
+            LOG.exception(repr(table))
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py b/cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py
new file mode 100644
index 000000000..5c1644d57
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py
@@ -0,0 +1,77 @@
+# Copyright 2012 Andrew Bogott for The Wikimedia Foundation
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, DateTime, ForeignKey
+from sqlalchemy import MetaData, String, Table
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # load tables for fk
+    projects = Table('projects', meta, autoload=True)
+
+    #
+    # New Tables
+    #
+    dns_domains = Table('dns_domains', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('domain',
+                   String(length=512, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False),
+                   primary_key=True, nullable=False),
+            Column('scope',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('availability_zone',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False)),
+            Column('project_id',
+                   String(length=255, convert_unicode=False,
+                          assert_unicode=None,
+                          unicode_error=None, _warn_on_bytestring=False),
+                   ForeignKey('projects.id'))
+            )
+    # create dns_domains table
+    try:
+        dns_domains.create()
+    except Exception:
+        LOG.error(_("Table |%s| not created!"), repr(dns_domains))
+        raise
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # load tables for fk
+    projects = Table('projects', meta, autoload=True)
+
+    dns_domains = Table('dns_domains', meta, autoload=True)
+    try:
+        dns_domains.drop()
+    except Exception:
+        LOG.error(_("dns_domains table not dropped"))
+        raise
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/072_mysql_upgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/072_mysql_upgrade.sql
new file mode 100644
index 000000000..d11e82147
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/072_mysql_upgrade.sql
@@ -0,0 +1,13 @@
+CREATE TABLE dns_domains (
+    created_at DATETIME,
+    updated_at DATETIME,
+    deleted_at DATETIME,
+    deleted BOOLEAN,
+    domain VARCHAR(512) CHARACTER SET latin1 NOT NULL,
+    scope VARCHAR(255),
+    availability_zone VARCHAR(255),
+    project_id VARCHAR(255),
+    PRIMARY KEY (domain),
+    CHECK (deleted IN (0, 1)),
+    FOREIGN KEY(project_id) REFERENCES projects (id)
+);
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/073_add_capacity.py b/cinder/db/sqlalchemy/migrate_repo/versions/073_add_capacity.py
new file mode 100644
index 000000000..31ed41581
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/073_add_capacity.py
@@ -0,0 +1,49 @@
+# Copyright 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, Integer, MetaData, Table
+
+from cinder import log as logging
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+    meta = MetaData()
+    meta.bind = migrate_engine
+    compute_nodes = Table('compute_nodes', meta, autoload=True)
+
+    #
+    # New Columns
+    #
+    new_columns = [
+        Column('free_ram_mb', Integer()),
+        Column('free_disk_gb', Integer()),
+        Column('current_workload', Integer()),
+        Column('running_vms', Integer()),
+        ]
+    for column in new_columns:
+        compute_nodes.create_column(column)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    compute_nodes = Table('compute_nodes', meta, autoload=True)
+
+    for column in ('free_ram_mb',
+                   'free_disk_gb',
+                   'current_workload',
+                   'running_vms'):
+        compute_nodes.drop_column(column)
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/074_change_flavor_local_gb.py b/cinder/db/sqlalchemy/migrate_repo/versions/074_change_flavor_local_gb.py
new file mode 100644
index 000000000..a371aa696
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/074_change_flavor_local_gb.py
@@ -0,0 +1,130 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import select, Column, Integer, MetaData, Table
+
+from cinder import exception
+from cinder import flags
+
+FLAGS = flags.FLAGS
+
+
+def upgrade_libvirt(instances, instance_types):
+    # Update instance_types first
+    tiny = None
+    for inst_type in instance_types.select().execute():
+        if inst_type['name'] == 'm1.tiny':
+            tiny = inst_type['id']
+            root_gb = 0
+        else:
+            root_gb = 10
+
+        instance_types.update()\
+                      .values(root_gb=root_gb,
+                              ephemeral_gb=inst_type['local_gb'])\
+                      .where(instance_types.c.id == inst_type['id'])\
+                      .execute()
+
+    # then update instances following same pattern
+    instances.update()\
+             .values(root_gb=10,
+                     ephemeral_gb=instances.c.local_gb)\
+             .execute()
+
+    if tiny is not None:
+        instances.update()\
+                 .values(root_gb=0,
+                         ephemeral_gb=instances.c.local_gb)\
+                 .where(instances.c.instance_type_id == tiny)\
+                 .execute()
+
+
+def upgrade_other(instances, instance_types):
+    for table in (instances, instance_types):
+        table.update().values(root_gb=table.c.local_gb,
+                              ephemeral_gb=0).execute()
+
+
+def check_instance_presence(migrate_engine, instances_table):
+    result = migrate_engine.execute(instances_table.select().limit(1))
+    return result.fetchone() is not None
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instances = Table('instances', meta, autoload=True)
+
+    data_present = check_instance_presence(migrate_engine, instances)
+
+    if data_present and not FLAGS.connection_type:
+        msg = ("Found instance records in database. You must specify "
+               "connection_type to run migration migration")
+        raise exception.Error(msg)
+
+    instance_types = Table('instance_types', meta, autoload=True)
+
+    for table in (instances, instance_types):
+        root_gb = Column('root_gb', Integer)
+        root_gb.create(table)
+        ephemeral_gb = Column('ephemeral_gb', Integer)
+        ephemeral_gb.create(table)
+
+    # Since this migration is part of the work to get all drivers
+    # working the same way, we need to treat the new root_gb and
+    # ephemeral_gb columns differently depending on what the
+    # driver implementation used to behave like.
+    if FLAGS.connection_type == 'libvirt':
+        upgrade_libvirt(instances, instance_types)
+    else:
+        upgrade_other(instances, instance_types)
+
+    default_local_device = instances.c.default_local_device
+    default_local_device.alter(name='default_ephemeral_device')
+
+    for table in (instances, instance_types):
+        table.drop_column('local_gb')
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instances = Table('instances', meta, autoload=True)
+    instance_types = Table('instance_types', meta, autoload=True)
+
+    for table in (instances, instance_types):
+        local_gb = Column('local_gb', Integer)
+        local_gb.create(table)
+
+    try:
+        for table in (instances, instance_types):
+            if FLAGS.connection_type == 'libvirt':
+                column = table.c.ephemeral_gb
+            else:
+                column = table.c.root_gb
+            table.update().values(local_gb=column).execute()
+    except Exception:
+        for table in (instances, instance_types):
+            table.drop_column('local_gb')
+        raise
+
+    default_ephemeral_device = instances.c.default_ephemeral_device
+    default_ephemeral_device.alter(name='default_local_device')
+
+    for table in (instances, instance_types):
+        table.drop_column('root_gb')
+        table.drop_column('ephemeral_gb')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/074_sqlite_upgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/074_sqlite_upgrade.sql
new file mode 100644
index 000000000..e2708111b
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/074_sqlite_upgrade.sql
@@ -0,0 +1,313 @@
+-- sqlalchemy-migrate is surprisingly broken when it comes to migrations
+-- for sqlite. As a result, we have to do much of the work manually here
+
+BEGIN TRANSACTION;
+    -- make backup of instance_types
+    CREATE TEMPORARY TABLE instance_types_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        name VARCHAR(255),
+        id INTEGER NOT NULL,
+        memory_mb INTEGER NOT NULL,
+        vcpus INTEGER NOT NULL,
+        local_gb INTEGER NOT NULL,
+        swap INTEGER NOT NULL,
+        rxtx_factor FLOAT,
+        vcpu_weight INTEGER,
+        flavorid VARCHAR(255),
+        PRIMARY KEY (id),
+        UNIQUE (flavorid),
+        CHECK (deleted IN (0, 1)),
+        UNIQUE (name)
+    );
+
+    INSERT INTO instance_types_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               name,
+               id,
+               memory_mb,
+               vcpus,
+               local_gb,
+               swap,
+               rxtx_factor,
+               vcpu_weight,
+               flavorid
+        FROM instance_types;
+
+    DROP TABLE instance_types;
+
+    CREATE TABLE instance_types (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        name VARCHAR(255),
+        id INTEGER NOT NULL,
+        memory_mb INTEGER NOT NULL,
+        vcpus INTEGER NOT NULL,
+        root_gb INTEGER NOT NULL,
+        ephemeral_gb INTEGER NOT NULL,
+        swap INTEGER NOT NULL,
+        rxtx_factor FLOAT,
+        vcpu_weight INTEGER,
+        flavorid VARCHAR(255),
+        PRIMARY KEY (id),
+        UNIQUE (flavorid),
+        CHECK (deleted IN (0, 1)),
+        UNIQUE (name)
+    );
+
+    -- copy from backup to new table with root_gb set to local_gb and
+    -- ephmeral_gb set to 0
+    INSERT INTO instance_types
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               name,
+               id,
+               memory_mb,
+               vcpus,
+               local_gb,
+               0,
+               swap,
+               rxtx_factor,
+               vcpu_weight,
+               flavorid
+        FROM instance_types_backup;
+
+    DROP TABLE instance_types_backup;
+
+    -- make backup of instances
+    CREATE TEMPORARY TABLE instances_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        internal_id INTEGER,
+        user_id VARCHAR(255),
+        project_id VARCHAR(255),
+        image_ref VARCHAR(255),
+        kernel_id VARCHAR(255),
+        ramdisk_id VARCHAR(255),
+        server_name VARCHAR(255),
+        launch_index INTEGER,
+        key_name VARCHAR(255),
+        key_data TEXT,
+        power_state INTEGER,
+        vm_state VARCHAR(255),
+        memory_mb INTEGER,
+        vcpus INTEGER,
+        local_gb INTEGER,
+        hostname VARCHAR(255),
+        host VARCHAR(255),
+        user_data TEXT,
+        reservation_id VARCHAR(255),
+        scheduled_at DATETIME,
+        launched_at DATETIME,
+        terminated_at DATETIME,
+        display_name VARCHAR(255),
+        display_description VARCHAR(255),
+        availability_zone VARCHAR(255),
+        locked BOOLEAN,
+        os_type VARCHAR(255),
+        launched_on TEXT,
+        instance_type_id INTEGER,
+        vm_mode VARCHAR(255),
+        uuid VARCHAR(36),
+        architecture VARCHAR(255),
+        root_device_name VARCHAR(255),
+        access_ip_v4 VARCHAR(255),
+        access_ip_v6 VARCHAR(255),
+        config_drive VARCHAR(255),
+        task_state VARCHAR(255),
+        default_local_device VARCHAR(255),
+        default_swap_device VARCHAR(255),
+        progress INTEGER,
+        auto_disk_config BOOLEAN,
+        shutdown_terminate BOOLEAN,
+        disable_terminate BOOLEAN,
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        CHECK (locked IN (0, 1)),
+        CHECK (auto_disk_config IN (0, 1)),
+        CHECK (shutdown_terminate IN (0, 1)),
+        CHECK (disable_terminate IN (0, 1))
+    );
+
+    INSERT INTO instances_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               internal_id,
+               user_id,
+               project_id,
+               image_ref,
+               kernel_id,
+               ramdisk_id,
+               server_name,
+               launch_index,
+               key_name,
+               key_data,
+               power_state,
+               vm_state,
+               memory_mb,
+               vcpus,
+               local_gb,
+               hostname,
+               host,
+               user_data,
+               reservation_id,
+               scheduled_at,
+               launched_at,
+               terminated_at,
+               display_name,
+               display_description,
+               availability_zone,
+               locked,
+               os_type,
+               launched_on,
+               instance_type_id,
+               vm_mode,
+               uuid,
+               architecture,
+               root_device_name,
+               access_ip_v4,
+               access_ip_v6,
+               config_drive,
+               task_state,
+               default_local_device,
+               default_swap_device,
+               progress,
+               auto_disk_config,
+               shutdown_terminate,
+               disable_terminate
+        FROM instances;
+
+    DROP TABLE instances;
+
+    CREATE TABLE instances (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        internal_id INTEGER,
+        user_id VARCHAR(255),
+        project_id VARCHAR(255),
+        image_ref VARCHAR(255),
+        kernel_id VARCHAR(255),
+        ramdisk_id VARCHAR(255),
+        server_name VARCHAR(255),
+        launch_index INTEGER,
+        key_name VARCHAR(255),
+        key_data TEXT,
+        power_state INTEGER,
+        vm_state VARCHAR(255),
+        memory_mb INTEGER,
+        vcpus INTEGER,
+        root_gb INTEGER,
+        ephemeral_gb INTEGER,
+        hostname VARCHAR(255),
+        host VARCHAR(255),
+        user_data TEXT,
+        reservation_id VARCHAR(255),
+        scheduled_at DATETIME,
+        launched_at DATETIME,
+        terminated_at DATETIME,
+        display_name VARCHAR(255),
+        display_description VARCHAR(255),
+        availability_zone VARCHAR(255),
+        locked BOOLEAN,
+        os_type VARCHAR(255),
+        launched_on TEXT,
+        instance_type_id INTEGER,
+        vm_mode VARCHAR(255),
+        uuid VARCHAR(36),
+        architecture VARCHAR(255),
+        root_device_name VARCHAR(255),
+        access_ip_v4 VARCHAR(255),
+        access_ip_v6 VARCHAR(255),
+        config_drive VARCHAR(255),
+        task_state VARCHAR(255),
+        default_ephemeral_device VARCHAR(255),
+        default_swap_device VARCHAR(255),
+        progress INTEGER,
+        auto_disk_config BOOLEAN,
+        shutdown_terminate BOOLEAN,
+        disable_terminate BOOLEAN,
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1)),
+        CHECK (locked IN (0, 1)),
+        CHECK (auto_disk_config IN (0, 1)),
+        CHECK (shutdown_terminate IN (0, 1)),
+        CHECK (disable_terminate IN (0, 1))
+    );
+
+    CREATE INDEX project_id ON instances (project_id);
+    CREATE UNIQUE INDEX uuid ON instances (uuid);
+
+    -- copy from backup to new table with root_gb set to local_gb and
+    -- ephmeral_gb set to 0
+    INSERT INTO instances
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               internal_id,
+               user_id,
+               project_id,
+               image_ref,
+               kernel_id,
+               ramdisk_id,
+               server_name,
+               launch_index,
+               key_name,
+               key_data,
+               power_state,
+               vm_state,
+               memory_mb,
+               vcpus,
+               local_gb,
+               0,
+               hostname,
+               host,
+               user_data,
+               reservation_id,
+               scheduled_at,
+               launched_at,
+               terminated_at,
+               display_name,
+               display_description,
+               availability_zone,
+               locked,
+               os_type,
+               launched_on,
+               instance_type_id,
+               vm_mode,
+               uuid,
+               architecture,
+               root_device_name,
+               access_ip_v4,
+               access_ip_v6,
+               config_drive,
+               task_state,
+               default_local_device,
+               default_swap_device,
+               progress,
+               auto_disk_config,
+               shutdown_terminate,
+               disable_terminate
+        FROM instances_backup;
+
+    DROP TABLE instances_backup;
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/075_convert_bw_usage_to_store_network_id.py b/cinder/db/sqlalchemy/migrate_repo/versions/075_convert_bw_usage_to_store_network_id.py
new file mode 100644
index 000000000..3d26204f0
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/075_convert_bw_usage_to_store_network_id.py
@@ -0,0 +1,97 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import and_, select
+from sqlalchemy import BigInteger, Boolean, Column, DateTime
+from sqlalchemy import Integer, MetaData, String
+from sqlalchemy import Table
+
+from cinder import utils
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    vifs = Table('virtual_interfaces', meta, autoload=True)
+    networks = Table('networks', meta, autoload=True)
+
+    bw_usage_cache = Table('bw_usage_cache', meta,
+                Column('created_at', DateTime(timezone=False)),
+                Column('updated_at', DateTime(timezone=False)),
+                Column('deleted_at', DateTime(timezone=False)),
+                Column('deleted', Boolean(create_constraint=True, name=None)),
+                Column('id', Integer(), primary_key=True, nullable=False),
+                Column('instance_id', Integer(), nullable=False),
+                Column('network_label',
+                       String(length=255, convert_unicode=False,
+                              assert_unicode=None,
+                              unicode_error=None, _warn_on_bytestring=False)),
+                Column('start_period', DateTime(timezone=False),
+                       nullable=False),
+                Column('last_refreshed', DateTime(timezone=False)),
+                Column('bw_in', BigInteger()),
+                Column('bw_out', BigInteger()),
+                useexisting=True)
+    mac_column = Column('mac', String(255))
+    bw_usage_cache.create_column(mac_column)
+
+    bw_usage_cache.update()\
+        .values(mac=select([vifs.c.address])\
+            .where(and_(
+                    networks.c.label == bw_usage_cache.c.network_label,
+                    networks.c.id == vifs.c.network_id,
+                    bw_usage_cache.c.instance_id == vifs.c.instance_id))\
+            .as_scalar()).execute()
+
+    bw_usage_cache.c.network_label.drop()
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    vifs = Table('virtual_interfaces', meta, autoload=True)
+    network = Table('networks', meta, autoload=True)
+
+    bw_usage_cache = Table('bw_usage_cache', meta,
+                Column('created_at', DateTime(timezone=False)),
+                Column('updated_at', DateTime(timezone=False)),
+                Column('deleted_at', DateTime(timezone=False)),
+                Column('deleted', Boolean(create_constraint=True, name=None)),
+                Column('id', Integer(), primary_key=True, nullable=False),
+                Column('instance_id', Integer(), nullable=False),
+                Column('mac', String(255)),
+                Column('start_period', DateTime(timezone=False),
+                       nullable=False),
+                Column('last_refreshed', DateTime(timezone=False)),
+                Column('bw_in', BigInteger()),
+                Column('bw_out', BigInteger()),
+                useexisting=True)
+
+    network_label_column = Column('network_label', String(255))
+    bw_usage_cache.create_column(network_label_column)
+
+    bw_usage_cache.update()\
+        .values(network_label=select([network.c.label])\
+            .where(and_(
+                network.c.id == vifs.c.network_id,
+               vifs.c.address == bw_usage_cache.c.mac,
+               bw_usage_cache.c.instance_id == vifs.c.instance_id))\
+            .as_scalar()).execute()
+
+    bw_usage_cache.c.mac.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/076_remove_unique_constraints.py b/cinder/db/sqlalchemy/migrate_repo/versions/076_remove_unique_constraints.py
new file mode 100644
index 000000000..971bfbecc
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/076_remove_unique_constraints.py
@@ -0,0 +1,84 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) OpenStack, LLC
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.from sqlalchemy import *
+
+from sqlalchemy import MetaData, Table
+from migrate.changeset.constraint import UniqueConstraint
+
+
+def _get_constraint_names(engine_name):
+
+    # NOTE(vish): These constraint names may be dependent on the backend, but
+    #             there doesn't seem to be we a way to determine the proper
+    #             name for existing constraints. These names are correct for
+    #             mysql and postgres.
+    if engine_name == "mysql":
+        return {
+            "instance_types_name": ("name", "instance_types_name_key"),
+            "instance_types_flavorid": "instance_types_flavorid_str_key",
+            "volume_types_name": "name",
+        }
+    else:
+        return {
+            "instance_types_name": ("instance_types_name_key",),
+            "instance_types_flavorid": "instance_types_flavorid_str_key",
+            "volume_types_name": "volume_types_name_key",
+        }
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    c_names = _get_constraint_names(migrate_engine.name)
+
+    table = Table('instance_types', meta, autoload=True)
+    for constraint_name in c_names['instance_types_name']:
+        cons = UniqueConstraint('name',
+                                name=constraint_name,
+                                table=table)
+        cons.drop()
+    cons = UniqueConstraint('flavorid',
+                            name=c_names['instance_types_flavorid'],
+                            table=table)
+    cons.drop()
+    table = Table('volume_types', meta, autoload=True)
+    cons = UniqueConstraint('name',
+                            name=c_names['volume_types_name'],
+                            table=table)
+    cons.drop()
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    c_names = _get_constraint_names(migrate_engine.name)
+
+    table = Table('instance_types', meta, autoload=True)
+    for constraint_name in c_names['instance_types_name']:
+        cons = UniqueConstraint('name',
+                                name=constraint_name,
+                                table=table)
+        cons.create()
+    table = Table('instance_types', meta, autoload=True)
+    cons = UniqueConstraint('flavorid',
+                            name=c_names['instance_types_flavorid'],
+                            table=table)
+    cons.create()
+    table = Table('volume_types', meta, autoload=True)
+    cons = UniqueConstraint('name',
+                            name=c_names['volume_types_name'],
+                            table=table)
+    cons.create()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/076_sqlite_upgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/076_sqlite_upgrade.sql
new file mode 100644
index 000000000..6053c1ed7
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/076_sqlite_upgrade.sql
@@ -0,0 +1,61 @@
+-- sqlalchemy-migrate is surprisingly broken when it comes to migrations
+-- for sqlite. As a result, we have to do much of the work manually here
+
+BEGIN TRANSACTION;
+    CREATE TABLE instance_types_temp (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        name VARCHAR(255),
+        id INTEGER NOT NULL,
+        memory_mb INTEGER NOT NULL,
+        vcpus INTEGER NOT NULL,
+        root_gb INTEGER NOT NULL,
+        ephemeral_gb INTEGER NOT NULL,
+        swap INTEGER NOT NULL,
+        rxtx_factor FLOAT,
+        vcpu_weight INTEGER,
+        flavorid VARCHAR(255),
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1))
+    );
+    INSERT INTO instance_types_temp SELECT
+        created_at,
+        updated_at,
+        deleted_at,
+        deleted,
+        name,
+        id,
+        memory_mb,
+        vcpus,
+        root_gb,
+        ephemeral_gb,
+        swap,
+        rxtx_factor,
+        vcpu_weight,
+        flavorid
+    FROM instance_types;
+    DROP TABLE instance_types;
+    ALTER TABLE instance_types_temp RENAME TO instance_types;
+    CREATE TABLE volume_types_temp (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        name VARCHAR(255),
+        id INTEGER NOT NULL,
+        PRIMARY KEY (id),
+        CHECK (deleted IN (0, 1))
+    );
+    INSERT INTO volume_types_temp SELECT
+        created_at,
+        updated_at,
+        deleted_at,
+        deleted,
+        name,
+        id
+    FROM volume_types;
+    DROP TABLE volume_types;
+    ALTER TABLE volume_types_temp RENAME TO volume_types;
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/077_convert_to_utf8.py b/cinder/db/sqlalchemy/migrate_repo/versions/077_convert_to_utf8.py
new file mode 100644
index 000000000..4c08e2f0d
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/077_convert_to_utf8.py
@@ -0,0 +1,61 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import MetaData
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # NOTE (ironcamel): The only table we are not converting to utf8 here is
+    # dns_domains. This table has a primary key that is 512 characters wide.
+    # When the mysql engine attempts to convert it to utf8, it complains about
+    # not supporting key columns larger than 1000.
+
+    if migrate_engine.name == "mysql":
+        tables = [
+            # tables that are FK parents, must be converted early
+            "aggregates", "console_pools", "instance_types", "instances",
+            "projects", "security_groups", "sm_backend_config", "sm_flavors",
+            "snapshots", "user_project_association", "users", "volume_types",
+            "volumes",
+            # those that are children and others later
+            "agent_builds", "aggregate_hosts", "aggregate_metadata",
+            "auth_tokens", "block_device_mapping", "bw_usage_cache",
+            "certificates", "compute_nodes", "consoles", "fixed_ips",
+            "floating_ips", "instance_actions", "instance_faults",
+            "instance_info_caches", "instance_metadata",
+            "instance_type_extra_specs", "iscsi_targets", "key_pairs",
+            "migrate_version", "migrations", "networks", "provider_fw_rules",
+            "quotas", "s3_images", "security_group_instance_association",
+            "security_group_rules", "services", "sm_volume",
+            "user_project_role_association", "user_role_association",
+            "virtual_interfaces", "virtual_storage_arrays", "volume_metadata",
+            "volume_type_extra_specs", "zones"]
+        sql = "SET foreign_key_checks = 0;"
+        for table in tables:
+            sql += "ALTER TABLE %s CONVERT TO CHARACTER SET utf8;" % table
+        sql += "SET foreign_key_checks = 1;"
+        sql += "ALTER DATABASE %s DEFAULT CHARACTER SET utf8;" \
+            % migrate_engine.url.database
+        migrate_engine.execute(sql)
+
+
+def downgrade(migrate_engine):
+    # utf8 tables should be backwards compatible, so lets leave it alone
+    pass
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/078_add_rpc_info_to_zones.py b/cinder/db/sqlalchemy/migrate_repo/versions/078_add_rpc_info_to_zones.py
new file mode 100644
index 000000000..e4043f84d
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/078_add_rpc_info_to_zones.py
@@ -0,0 +1,46 @@
+# Copyright 2012 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column
+from sqlalchemy import Integer, MetaData, String
+from sqlalchemy import Table
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    zones = Table('zones', meta, autoload=True)
+
+    is_parent = Column('is_parent', Boolean(), default=False)
+    rpc_host = Column('rpc_host', String(255))
+    rpc_port = Column('rpc_port', Integer())
+    rpc_virtual_host = Column('rpc_virtual_host', String(255))
+
+    zones.create_column(is_parent)
+    zones.create_column(rpc_host)
+    zones.create_column(rpc_port)
+    zones.create_column(rpc_virtual_host)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    zones = Table('zones', meta, autoload=True)
+
+    zones.drop_column('rpc_virtual_host')
+    zones.drop_column('rpc_port')
+    zones.drop_column('rpc_host')
+    zones.drop_column('is_parent')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/078_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/078_sqlite_downgrade.sql
new file mode 100644
index 000000000..80061af78
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/078_sqlite_downgrade.sql
@@ -0,0 +1,35 @@
+BEGIN TRANSACTION;
+
+    CREATE TEMPORARY TABLE zones_temp (
+                           created_at DATETIME,
+                           updated_at DATETIME,
+                           deleted_at DATETIME,
+                           deleted BOOLEAN,
+                           id INTEGER NOT NULL,
+                           name VARCHAR(255),
+                           api_url VARCHAR(255),
+                           username VARCHAR(255),
+                           password VARCHAR(255),
+                           weight_offset FLOAT,
+                           weight_scale FLOAT,
+                           PRIMARY KEY (id),
+                           CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO zones_temp
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               name,
+               api_url,
+               username,
+               password,
+               weight_offset,
+               weight_scale FROM zones;
+
+    DROP TABLE zones;
+
+    ALTER TABLE zones_temp RENAME TO zones;
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/079_add_zone_name_to_instances.py b/cinder/db/sqlalchemy/migrate_repo/versions/079_add_zone_name_to_instances.py
new file mode 100644
index 000000000..2b22b94a0
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/079_add_zone_name_to_instances.py
@@ -0,0 +1,30 @@
+# Copyright 2012 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Column, MetaData, String, Table
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instances = Table('instances', meta, autoload=True)
+    zone_name = Column('zone_name', String(255))
+    instances.create_column(zone_name)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instances = Table('instances', meta, autoload=True)
+    instances.drop_column('zone_name')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/080_add_hypervisor_hostname_to_compute_nodes.py b/cinder/db/sqlalchemy/migrate_repo/versions/080_add_hypervisor_hostname_to_compute_nodes.py
new file mode 100644
index 000000000..28a3ce48f
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/080_add_hypervisor_hostname_to_compute_nodes.py
@@ -0,0 +1,30 @@
+#   Copyright 2012 OpenStack, LLC
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+
+from sqlalchemy import Column, MetaData, String, Table
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    compute_nodes = Table("compute_nodes", meta, autoload=True)
+    hypervisor_hostname = Column("hypervisor_hostname", String(255))
+    compute_nodes.create_column(hypervisor_hostname)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    compute_nodes = Table("compute_nodes", meta, autoload=True)
+    compute_nodes.drop_column('hypervisor_hostname')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/081_drop_instance_id_bw_cache.py b/cinder/db/sqlalchemy/migrate_repo/versions/081_drop_instance_id_bw_cache.py
new file mode 100644
index 000000000..c6687ac80
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/081_drop_instance_id_bw_cache.py
@@ -0,0 +1,69 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 OpenStack, LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+import json
+
+from sqlalchemy import Column, Table, MetaData, Integer, Boolean, String
+from sqlalchemy import DateTime, BigInteger
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    bw_usage_cache = Table('bw_usage_cache', meta,
+        Column('created_at', DateTime(timezone=False)),
+        Column('updated_at', DateTime(timezone=False)),
+        Column('deleted_at', DateTime(timezone=False)),
+        Column('deleted', Boolean(create_constraint=True, name=None)),
+        Column('id', Integer(), primary_key=True, nullable=False),
+        Column('instance_id', Integer(), nullable=False),
+        Column('mac', String(255)),
+        Column('start_period', DateTime(timezone=False),
+        nullable=False),
+        Column('last_refreshed', DateTime(timezone=False)),
+        Column('bw_in', BigInteger()),
+        Column('bw_out', BigInteger()),
+        useexisting=True)
+
+    bw_usage_cache.drop_column('instance_id')
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    instance_info_caches = Table('instance_info_caches', meta, autoload=True)
+    bw_usage_cache = Table('bw_usage_cache', meta, autoload=True)
+
+    instance_id = Column('instance_id', Integer)
+    bw_usage_cache.create_column(instance_id)
+
+    cache = {}
+    for row in migrate_engine.execute(instance_info_caches.select()):
+        instance_id = row['instance']['id']
+        if not row['network_info']:
+            continue
+
+        nw_info = json.loads(row['network_info'])
+        for vif in nw_info:
+            cache[vif['address']] = instance_id
+
+    for row in migrate_engine.execute(bw_usage_cache.select()):
+        instance_id = cache[row['mac']]
+        migrate_engine.execute(bw_usage_cache.update()\
+                    .where(bw_usage_cache.c.id == row['id'])\
+                    .values(instance_id=instance_id))
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/082_zone_to_cell.py b/cinder/db/sqlalchemy/migrate_repo/versions/082_zone_to_cell.py
new file mode 100644
index 000000000..79e99503a
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/082_zone_to_cell.py
@@ -0,0 +1,35 @@
+# Copyright 2012 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import MetaData, Table
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instances = Table('instances', meta, autoload=True)
+    zone_name = instances.c.zone_name
+    zone_name.alter(name='cell_name')
+    zones = Table('zones', meta, autoload=True)
+    zones.rename('cells')
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instances = Table('instances', meta, autoload=True)
+    cell_name = instances.c.cell_name
+    cell_name.alter(name='zone_name')
+    cells = Table('cells', meta, autoload=True)
+    cells.rename('zones')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py b/cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py
new file mode 100644
index 000000000..3869c6ab5
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py
@@ -0,0 +1,61 @@
+# Copyright 2012 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, DateTime
+from sqlalchemy import MetaData, Integer, String, Table
+
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # New table
+    quota_classes = Table('quota_classes', meta,
+            Column('created_at', DateTime(timezone=False)),
+            Column('updated_at', DateTime(timezone=False)),
+            Column('deleted_at', DateTime(timezone=False)),
+            Column('deleted', Boolean(create_constraint=True, name=None)),
+            Column('id', Integer(), primary_key=True),
+            Column('class_name',
+                   String(length=255, convert_unicode=True,
+                          assert_unicode=None, unicode_error=None,
+                          _warn_on_bytestring=False), index=True),
+            Column('resource',
+                   String(length=255, convert_unicode=True,
+                          assert_unicode=None, unicode_error=None,
+                          _warn_on_bytestring=False)),
+            Column('hard_limit', Integer(), nullable=True),
+            )
+
+    try:
+        quota_classes.create()
+    except Exception:
+        LOG.error(_("Table |%s| not created!"), repr(quota_classes))
+        raise
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    quota_classes = Table('quota_classes', meta, autoload=True)
+    try:
+        quota_classes.drop()
+    except Exception:
+        LOG.error(_("quota_classes table not dropped"))
+        raise
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/084_quotas_unlimited.py b/cinder/db/sqlalchemy/migrate_repo/versions/084_quotas_unlimited.py
new file mode 100644
index 000000000..bcbc2db90
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/084_quotas_unlimited.py
@@ -0,0 +1,43 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 Red Hat, Inc
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import migrate
+import sqlalchemy
+
+
+def upgrade(migrate_engine):
+    """Map quotas hard_limit from NULL to -1"""
+    _migrate_unlimited(migrate_engine, None, -1)
+
+
+def downgrade(migrate_engine):
+    """Map quotas hard_limit from -1 to NULL"""
+    _migrate_unlimited(migrate_engine, -1, None)
+
+
+def _migrate_unlimited(migrate_engine, old_limit, new_limit):
+    meta = sqlalchemy.MetaData()
+    meta.bind = migrate_engine
+
+    def _migrate(table_name):
+        table = sqlalchemy.Table(table_name, meta, autoload=True)
+        table.update().\
+            where(table.c.hard_limit == old_limit).\
+            values(hard_limit=new_limit).execute()
+
+    _migrate('quotas')
+    _migrate('quota_classes')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/085_add_index_to_fixed_ips_by_address.py b/cinder/db/sqlalchemy/migrate_repo/versions/085_add_index_to_fixed_ips_by_address.py
new file mode 100644
index 000000000..8c4f0d5c3
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/085_add_index_to_fixed_ips_by_address.py
@@ -0,0 +1,31 @@
+# Copyright 2012 IBM
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Index, MetaData, Table
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instances = Table('fixed_ips', meta, autoload=True)
+    index = Index('address', instances.c.address)
+    index.create(migrate_engine)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    instances = Table('fixed_ips', meta, autoload=True)
+    index = Index('address', instances.c.address)
+    index.drop(migrate_engine)
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/086_set_engine_mysql_innodb.py b/cinder/db/sqlalchemy/migrate_repo/versions/086_set_engine_mysql_innodb.py
new file mode 100644
index 000000000..da985b956
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/086_set_engine_mysql_innodb.py
@@ -0,0 +1,44 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import MetaData
+
+
+def upgrade(migrate_engine):
+    # Upgrade operations go here. Don't create your own engine;
+    # bind migrate_engine to your metadata
+
+    tables = ["agent_builds", "aggregate_hosts", "aggregate_metadata",
+              "aggregates", "block_device_mapping", "bw_usage_cache",
+              "dns_domains", "instance_faults", "instance_type_extra_specs",
+              "provider_fw_rules", "quota_classes", "s3_images",
+              "sm_backend_config", "sm_flavors", "sm_volume",
+              "virtual_storage_arrays", "volume_metadata",
+              "volume_type_extra_specs", "volume_types"]
+
+    meta = MetaData()
+    meta.bind = migrate_engine
+    if migrate_engine.name == "mysql":
+        d = migrate_engine.execute("SHOW TABLE STATUS WHERE Engine!='InnoDB';")
+        for row in d.fetchall():
+            table_name = row[0]
+            if table_name in tables:
+                migrate_engine.execute("ALTER TABLE %s Engine=InnoDB" %
+                                       table_name)
+
+
+def downgrade(migrate_engine):
+    pass
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/087_add_uuid_to_bw_usage_cache.py b/cinder/db/sqlalchemy/migrate_repo/versions/087_add_uuid_to_bw_usage_cache.py
new file mode 100644
index 000000000..e66004b12
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/087_add_uuid_to_bw_usage_cache.py
@@ -0,0 +1,56 @@
+# Copyright 2012 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, DateTime, BigInteger
+from sqlalchemy import MetaData, Integer, String, Table
+
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # add column:
+    bw_usage_cache = Table('bw_usage_cache', meta, autoload=True)
+    uuid = Column('uuid', String(36))
+
+    # clear the cache to get rid of entries with no uuid
+    migrate_engine.execute(bw_usage_cache.delete())
+
+    bw_usage_cache.create_column(uuid)
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    # drop column:
+    bw_usage_cache = Table('bw_usage_cache', meta,
+        Column('created_at', DateTime(timezone=False)),
+        Column('updated_at', DateTime(timezone=False)),
+        Column('deleted_at', DateTime(timezone=False)),
+        Column('deleted', Boolean(create_constraint=True, name=None)),
+        Column('id', Integer(), primary_key=True, nullable=False),
+        Column('mac', String(255)),
+        Column('uuid', String(36)),
+        Column('start_period', DateTime(timezone=False), nullable=False),
+        Column('last_refreshed', DateTime(timezone=False)),
+        Column('bw_in', BigInteger()),
+        Column('bw_out', BigInteger()),
+        useexisting=True)
+
+    bw_usage_cache.drop_column('uuid')
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/088_change_instance_id_to_uuid_in_block_device_mapping.py b/cinder/db/sqlalchemy/migrate_repo/versions/088_change_instance_id_to_uuid_in_block_device_mapping.py
new file mode 100644
index 000000000..4962b2b05
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/088_change_instance_id_to_uuid_in_block_device_mapping.py
@@ -0,0 +1,81 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# Copyright 2012 Michael Still and Canonical Inc
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import select, Column, ForeignKey, Integer
+from sqlalchemy import MetaData, String, Table
+from migrate import ForeignKeyConstraint
+
+from cinder import log as logging
+
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    dialect = migrate_engine.url.get_dialect().name
+    block_device_mapping = Table('block_device_mapping', meta, autoload=True)
+    instances = Table('instances', meta, autoload=True)
+    uuid_column = Column('instance_uuid', String(36))
+    uuid_column.create(block_device_mapping)
+
+    try:
+        block_device_mapping.update().values(
+            instance_uuid=select(
+                [instances.c.uuid],
+                instances.c.id == block_device_mapping.c.instance_id)
+        ).execute()
+    except Exception:
+        uuid_column.drop()
+        raise
+
+    fkeys = list(block_device_mapping.c.instance_id.foreign_keys)
+    if fkeys:
+        try:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(
+                columns=[block_device_mapping.c.instance_id],
+                refcolumns=[instances.c.id],
+                name=fkey_name).drop()
+        except Exception:
+            LOG.error(_("foreign key constraint couldn't be removed"))
+            raise
+
+    block_device_mapping.c.instance_id.drop()
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    block_device_mapping = Table('block_device_mapping', meta, autoload=True)
+    instances = Table('instances', meta, autoload=True)
+    id_column = Column('instance_id', Integer, ForeignKey('instances.id'))
+    id_column.create(block_device_mapping)
+
+    try:
+        block_device_mapping.update().values(
+            instance_id=select(
+                [instances.c.id],
+                instances.c.uuid == block_device_mapping.c.instance_uuid)
+        ).execute()
+    except Exception:
+        id_column.drop()
+        raise
+
+    block_device_mapping.c.instance_uuid.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/088_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/088_sqlite_downgrade.sql
new file mode 100644
index 000000000..3699ce9ab
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/088_sqlite_downgrade.sql
@@ -0,0 +1,97 @@
+BEGIN TRANSACTION;
+    CREATE TEMPORARY TABLE block_device_mapping_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        instance_id INTEGER NOT NULL,
+        device_name VARCHAR(255) NOT NULL,
+        delete_on_termination BOOLEAN,
+        virtual_name VARCHAR(255),
+        snapshot_id INTEGER,
+        volume_id INTEGER,
+        volume_size INTEGER,
+        no_device BOOLEAN,
+        connection_info TEXT,
+        instance_uuid VARCHAR(36),
+        PRIMARY KEY (id),
+        FOREIGN KEY(snapshot_id) REFERENCES snapshots (id),
+        CHECK (deleted IN (0, 1)),
+        CHECK (delete_on_termination IN (0, 1)),
+        CHECK (no_device IN (0, 1)),
+        FOREIGN KEY(volume_id) REFERENCES volumes (id),
+        FOREIGN KEY(instance_id) REFERENCES instances (id)
+    );
+
+    INSERT INTO block_device_mapping_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               NULL,
+               device_name,
+               delete_on_termination,
+               virtual_name,
+               snapshot_id,
+               volume_id,
+               volume_size,
+               no_device,
+               connection_info,
+               instance_uuid
+        FROM block_device_mapping;
+
+    UPDATE block_device_mapping_backup
+        SET instance_id=
+            (SELECT id
+                 FROM instances
+                 WHERE block_device_mapping_backup.instance_uuid = instances.uuid
+    );
+
+    DROP TABLE block_device_mapping;
+
+    CREATE TABLE block_device_mapping (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        instance_id INTEGER NOT NULL,
+        device_name VARCHAR(255) NOT NULL,
+        delete_on_termination BOOLEAN,
+        virtual_name VARCHAR(255),
+        snapshot_id INTEGER,
+        volume_id INTEGER,
+        volume_size INTEGER,
+        no_device BOOLEAN,
+        connection_info TEXT,
+        PRIMARY KEY (id),
+        FOREIGN KEY(snapshot_id) REFERENCES snapshots (id),
+        CHECK (deleted IN (0, 1)),
+        CHECK (delete_on_termination IN (0, 1)),
+        CHECK (no_device IN (0, 1)),
+        FOREIGN KEY(volume_id) REFERENCES volumes (id),
+        FOREIGN KEY(instance_id) REFERENCES instances (id)
+    );
+
+    INSERT INTO block_device_mapping
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               instance_id,
+               device_name,
+               delete_on_termination,
+               virtual_name,
+               snapshot_id,
+               volume_id,
+               volume_size,
+               no_device,
+               connection_info
+        FROM block_device_mapping_backup;
+
+    DROP TABLE block_device_mapping_backup;
+
+COMMIT;
\ No newline at end of file
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/088_sqlite_upgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/088_sqlite_upgrade.sql
new file mode 100644
index 000000000..d75d2ffa2
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/088_sqlite_upgrade.sql
@@ -0,0 +1,97 @@
+BEGIN TRANSACTION;
+    CREATE TEMPORARY TABLE block_device_mapping_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        instance_id INTEGER NOT NULL,
+        device_name VARCHAR(255) NOT NULL,
+        delete_on_termination BOOLEAN,
+        virtual_name VARCHAR(255),
+        snapshot_id INTEGER,
+        volume_id INTEGER,
+        volume_size INTEGER,
+        no_device BOOLEAN,
+        connection_info TEXT,
+        instance_uuid VARCHAR(36),
+        PRIMARY KEY (id),
+        FOREIGN KEY(snapshot_id) REFERENCES snapshots (id),
+        CHECK (deleted IN (0, 1)),
+        CHECK (delete_on_termination IN (0, 1)),
+        CHECK (no_device IN (0, 1)),
+        FOREIGN KEY(volume_id) REFERENCES volumes (id),
+        FOREIGN KEY(instance_id) REFERENCES instances (id)
+    );
+
+    INSERT INTO block_device_mapping_backup
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               instance_id,
+               device_name,
+               delete_on_termination,
+               virtual_name,
+               snapshot_id,
+               volume_id,
+               volume_size,
+               no_device,
+               connection_info,
+               NULL
+        FROM block_device_mapping;
+
+    UPDATE block_device_mapping_backup
+        SET instance_uuid=
+            (SELECT uuid
+                 FROM instances
+                 WHERE block_device_mapping_backup.instance_id = instances.id
+    );
+
+    DROP TABLE block_device_mapping;
+
+    CREATE TABLE block_device_mapping (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        device_name VARCHAR(255) NOT NULL,
+        delete_on_termination BOOLEAN,
+        virtual_name VARCHAR(255),
+        snapshot_id INTEGER,
+        volume_id INTEGER,
+        volume_size INTEGER,
+        no_device BOOLEAN,
+        connection_info TEXT,
+        instance_uuid VARCHAR(36),
+        PRIMARY KEY (id),
+        FOREIGN KEY(snapshot_id) REFERENCES snapshots (id),
+        CHECK (deleted IN (0, 1)),
+        CHECK (delete_on_termination IN (0, 1)),
+        CHECK (no_device IN (0, 1)),
+        FOREIGN KEY(volume_id) REFERENCES volumes (id),
+        FOREIGN KEY(instance_uuid) REFERENCES instances (uuid)
+    );
+
+    INSERT INTO block_device_mapping
+        SELECT created_at,
+               updated_at,
+               deleted_at,
+               deleted,
+               id,
+               device_name,
+               delete_on_termination,
+               virtual_name,
+               snapshot_id,
+               volume_id,
+               volume_size,
+               no_device,
+               connection_info,
+               instance_uuid
+        FROM block_device_mapping_backup;
+
+    DROP TABLE block_device_mapping_backup;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/089_add_volume_id_mappings.py b/cinder/db/sqlalchemy/migrate_repo/versions/089_add_volume_id_mappings.py
new file mode 100644
index 000000000..11bc25b01
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/089_add_volume_id_mappings.py
@@ -0,0 +1,116 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Boolean, Column, DateTime, Integer
+from sqlalchemy import MetaData, String, Table
+from cinder import log as logging
+from cinder import utils
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    """Build mapping tables for our volume uuid migration.
+
+    These mapping tables serve two purposes:
+    1. Provide a method for downgrade after UUID conversion
+    2. Provide a uuid to associate with existing volumes and snapshots
+       when we do the actual datatype migration from int to uuid
+
+    """
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    volume_id_mappings = Table('volume_id_mappings', meta,
+                    Column('created_at',
+                                      DateTime(timezone=False)),
+                    Column('updated_at',
+                                      DateTime(timezone=False)),
+                    Column('deleted_at',
+                                      DateTime(timezone=False)),
+                    Column('deleted',
+                           Boolean(create_constraint=True, name=None)),
+                    Column('id', Integer(),
+                                      primary_key=True,
+                                      nullable=False,
+                                      autoincrement=True),
+                    Column('uuid', String(36),
+                                      nullable=False))
+    try:
+        volume_id_mappings.create()
+    except Exception:
+        LOG.exception("Exception while creating table 'volume_id_mappings'")
+        meta.drop_all(tables=[volume_id_mappings])
+        raise
+
+    snapshot_id_mappings = Table('snapshot_id_mappings', meta,
+                    Column('created_at',
+                                      DateTime(timezone=False)),
+                    Column('updated_at',
+                                      DateTime(timezone=False)),
+                    Column('deleted_at',
+                                      DateTime(timezone=False)),
+                    Column('deleted',
+                           Boolean(create_constraint=True, name=None)),
+                    Column('id', Integer(),
+                                      primary_key=True,
+                                      nullable=False,
+                                      autoincrement=True),
+                    Column('uuid', String(36),
+                                      nullable=False))
+    try:
+        snapshot_id_mappings.create()
+    except Exception:
+        LOG.exception("Exception while creating table 'snapshot_id_mappings'")
+        meta.drop_all(tables=[snapshot_id_mappings])
+        raise
+
+    if migrate_engine.name == "mysql":
+        migrate_engine.execute("ALTER TABLE volume_id_mappings Engine=InnoDB")
+        migrate_engine.execute("ALTER TABLE snapshot_id_mappings "\
+                "Engine=InnoDB")
+
+    volumes = Table('volumes', meta, autoload=True)
+    snapshots = Table('snapshots', meta, autoload=True)
+    volume_id_mappings = Table('volume_id_mappings', meta, autoload=True)
+    snapshot_id_mappings = Table('snapshot_id_mappings', meta, autoload=True)
+
+    volume_list = list(volumes.select().execute())
+    for v in volume_list:
+        old_id = v['id']
+        new_id = utils.gen_uuid()
+        row = volume_id_mappings.insert()
+        row.execute({'id': old_id,
+              'uuid': str(new_id)})
+
+    snapshot_list = list(snapshots.select().execute())
+    for s in snapshot_list:
+        old_id = s['id']
+        new_id = utils.gen_uuid()
+        row = snapshot_id_mappings.insert()
+        row.execute({'id': old_id,
+              'uuid': str(new_id)})
+
+
+def downgrade(migrate_engine):
+    meta = MetaData()
+    meta.bind = migrate_engine
+    volume_id_mappings = Table('volume_id_mappings', meta, autoload=True)
+    volume_id_mappings.drop()
+
+    snapshot_id_mappings = Table('snapshot_id_mappings', meta, autoload=True)
+    snapshot_id_mappings.drop()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/090_modify_volume_id_datatype.py b/cinder/db/sqlalchemy/migrate_repo/versions/090_modify_volume_id_datatype.py
new file mode 100644
index 000000000..7887cd88e
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/090_modify_volume_id_datatype.py
@@ -0,0 +1,239 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import Integer
+from sqlalchemy import MetaData, String, Table
+from migrate import ForeignKeyConstraint
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    """Convert volume and snapshot id columns from int to varchar."""
+    meta = MetaData()
+    meta.bind = migrate_engine
+    dialect = migrate_engine.url.get_dialect().name
+
+    if dialect.startswith('sqlite'):
+        return
+
+    volumes = Table('volumes', meta, autoload=True)
+    snapshots = Table('snapshots', meta, autoload=True)
+    iscsi_targets = Table('iscsi_targets', meta, autoload=True)
+    volume_metadata = Table('volume_metadata', meta, autoload=True)
+    sm_volume = Table('sm_volume', meta, autoload=True)
+    block_device_mapping = Table('block_device_mapping', meta, autoload=True)
+
+    try:
+        fkeys = list(snapshots.c.volume_id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[snapshots.c.volume_id],
+                    refcolumns=[volumes.c.id],
+                    name=fkey_name).drop()
+
+        fkeys = list(iscsi_targets.c.volume_id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[iscsi_targets.c.volume_id],
+                                 refcolumns=[volumes.c.id],
+                                 name=fkey_name).drop()
+
+        fkeys = list(volume_metadata.c.volume_id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[volume_metadata.c.volume_id],
+                                 refcolumns=[volumes.c.id],
+                                 name=fkey_name).drop()
+
+        fkeys = list(sm_volume.c.id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[sm_volume.c.id],
+                                 refcolumns=[volumes.c.id],
+                                 name=fkey_name).drop()
+
+        fkeys = list(block_device_mapping.c.volume_id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[block_device_mapping.c.volume_id],
+                                 refcolumns=[volumes.c.id],
+                                 name=fkey_name).drop()
+
+        fkeys = list(block_device_mapping.c.snapshot_id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[block_device_mapping.c.snapshot_id],
+                                 refcolumns=[snapshots.c.id],
+                                 name=fkey_name).drop()
+
+    except Exception:
+        LOG.error(_("Foreign Key constraint couldn't be removed"))
+        raise
+
+    volumes.c.id.alter(String(36), primary_key=True)
+    volumes.c.snapshot_id.alter(String(36))
+    volume_metadata.c.volume_id.alter(String(36), nullable=False)
+    snapshots.c.id.alter(String(36), primary_key=True)
+    snapshots.c.volume_id.alter(String(36))
+    sm_volume.c.id.alter(String(36))
+    block_device_mapping.c.volume_id.alter(String(36))
+    block_device_mapping.c.snapshot_id.alter(String(36))
+    iscsi_targets.c.volume_id.alter(String(36), nullable=True)
+
+    try:
+        fkeys = list(snapshots.c.volume_id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[snapshots.c.volume_id],
+                    refcolumns=[volumes.c.id],
+                    name=fkey_name).create()
+
+        fkeys = list(iscsi_targets.c.volume_id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[iscsi_targets.c.volume_id],
+                                 refcolumns=[volumes.c.id],
+                                 name=fkey_name).create()
+
+        fkeys = list(volume_metadata.c.volume_id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[volume_metadata.c.volume_id],
+                                 refcolumns=[volumes.c.id],
+                                 name=fkey_name).create()
+
+        fkeys = list(sm_volume.c.id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[sm_volume.c.id],
+                                 refcolumns=[volumes.c.id],
+                                 name=fkey_name).create()
+        # NOTE(jdg) We're intentionally leaving off FK's on BDM
+
+    except Exception:
+        LOG.error(_("Foreign Key constraint couldn't be removed"))
+        raise
+
+
+def downgrade(migrate_engine):
+    """Convert volume and snapshot id columns back to int."""
+    meta = MetaData()
+    meta.bind = migrate_engine
+    dialect = migrate_engine.url.get_dialect().name
+
+    if dialect.startswith('sqlite'):
+        return
+
+    volumes = Table('volumes', meta, autoload=True)
+    snapshots = Table('snapshots', meta, autoload=True)
+    iscsi_targets = Table('iscsi_targets', meta, autoload=True)
+    volume_metadata = Table('volume_metadata', meta, autoload=True)
+    sm_volume = Table('sm_volume', meta, autoload=True)
+    block_device_mapping = Table('block_device_mapping', meta, autoload=True)
+
+    try:
+        fkeys = list(snapshots.c.volume_id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[snapshots.c.volume_id],
+                    refcolumns=[volumes.c.id],
+                    name=fkey_name).drop()
+
+        fkeys = list(iscsi_targets.c.volume_id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[iscsi_targets.c.volume_id],
+                                 refcolumns=[volumes.c.id],
+                                 name=fkey_name).drop()
+
+        fkeys = list(volume_metadata.c.volume_id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[volume_metadata.c.volume_id],
+                                 refcolumns=[volumes.c.id],
+                                 name=fkey_name).drop()
+
+        fkeys = list(sm_volume.c.id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[sm_volume.c.id],
+                                 refcolumns=[volumes.c.id],
+                                 name=fkey_name).drop()
+
+    except Exception:
+        LOG.error(_("Foreign Key constraint couldn't be removed"))
+        raise
+
+    volumes.c.id.alter(Integer, primary_key=True, autoincrement=True)
+    volumes.c.snapshot_id.alter(Integer)
+    volume_metadata.c.volume_id.alter(Integer, nullable=False)
+    snapshots.c.id.alter(Integer, primary_key=True, autoincrement=True)
+    snapshots.c.volume_id.alter(Integer)
+    sm_volume.c.id.alter(Integer)
+    block_device_mapping.c.volume_id.alter(Integer)
+    block_device_mapping.c.snapshot_id.alter(Integer)
+    iscsi_targets.c.volume_id.alter(Integer, nullable=True)
+
+    try:
+        fkeys = list(snapshots.c.volume_id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[snapshots.c.volume_id],
+                    refcolumns=[volumes.c.id],
+                    name=fkey_name).create()
+
+        fkeys = list(iscsi_targets.c.volume_id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[iscsi_targets.c.volume_id],
+                                 refcolumns=[volumes.c.id],
+                                 name=fkey_name).create()
+
+        fkeys = list(volume_metadata.c.volume_id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[volume_metadata.c.volume_id],
+                                 refcolumns=[volumes.c.id],
+                                 name=fkey_name).create()
+
+        fkeys = list(sm_volume.c.id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[sm_volume.c.id],
+                                 refcolumns=[volumes.c.id],
+                                 name=fkey_name).create()
+
+        # NOTE(jdg) Put the BDM foreign keys back in place
+        fkeys = list(block_device_mapping.c.volume_id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[block_device_mapping.c.volume_id],
+                                 refcolumns=[volumes.c.id],
+                                 name=fkey_name).drop()
+
+        fkeys = list(block_device_mapping.c.snapshot_id.foreign_keys)
+        if fkeys:
+            fkey_name = fkeys[0].constraint.name
+            ForeignKeyConstraint(columns=[block_device_mapping.c.snapshot_id],
+                                 refcolumns=[snapshots.c.id],
+                                 name=fkey_name).drop()
+
+    except Exception:
+        LOG.error(_("Foreign Key constraint couldn't be removed"))
+        raise
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/090_sqlite_downgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/090_sqlite_downgrade.sql
new file mode 100644
index 000000000..7d89da247
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/090_sqlite_downgrade.sql
@@ -0,0 +1,226 @@
+BEGIN TRANSACTION;
+
+    -- change id and snapshot_id datatypes in volumes table
+    CREATE TABLE volumes_backup(
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        ec2_id INTEGER,
+        user_id VARCHAR(255),
+        project_id VARCHAR(255),
+        snapshot_id VARCHAR(255),
+        host VARCHAR(255),
+        size INTEGER,
+        availability_zone VARCHAR(255),
+        instance_id INTEGER,
+        mountpoint VARCHAR(255),
+        attach_time VARCHAR(255),
+        status VARCHAR(255),
+        attach_status VARCHAR(255),
+        scheduled_at DATETIME,
+        launched_at DATETIME,
+        terminated_at DATETIME,
+        display_name VARCHAR(255),
+        display_description VARCHAR(255),
+        provider_location VARCHAR(255),
+        provider_auth VARCHAR(255),
+        volume_type_id INTEGER,
+        PRIMARY KEY (id),
+        FOREIGN KEY(instance_id) REFERENCES instances (id),
+        UNIQUE (id),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO volumes_backup SELECT
+        created_at,
+        updated_at,
+        deleted_at,
+        deleted,
+        id,
+        ec2_id,
+        user_id,
+        project_id,
+        snapshot_id,
+        host,
+        size,
+        availability_zone,
+        instance_id,
+        mountpoint,
+        attach_time,
+        status,
+        attach_status,
+        scheduled_at,
+        launched_at,
+        terminated_at,
+        display_name,
+        display_description,
+        provider_location,
+        provider_auth,
+        volume_type_id
+    FROM volumes;
+    DROP TABLE volumes;
+    ALTER TABLE volumes_backup RENAME TO volumes;
+
+    -- change id and volume_id datatypes in snapshots table
+    CREATE TABLE snapshots_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        user_id VARCHAR(255),
+        project_id VARCHAR(255),
+        volume_id INTEGER,
+        status VARCHAR(255),
+        progress VARCHAR(255),
+        volume_size INTEGER,
+        display_name VARCHAR(255),
+        display_description VARCHAR(255),
+        PRIMARY KEY (id),
+        UNIQUE (id),
+        CHECK (deleted IN (0, 1))
+    );
+    INSERT INTO snapshots_backup SELECT
+        created_at,
+        updated_at,
+        deleted_at,
+        deleted,
+        id,
+        user_id,
+        project_id,
+        volume_id,
+        status,
+        progress,
+        volume_size,
+        display_name,
+        display_description
+    FROM snapshots;
+    DROP TABLE snapshots;
+    ALTER TABLE snapshots_backup RENAME TO snapshots;
+
+    -- change id and volume_id datatypes in iscsi_targets table
+    CREATE TABLE iscsi_targets_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        target_num INTEGER,
+        host VARCHAR(255),
+        volume_id INTEGER,
+        PRIMARY KEY (id),
+        FOREIGN KEY(volume_id) REFERENCES volumes(id),
+        UNIQUE (id),
+        CHECK (deleted IN (0, 1))
+    );
+    INSERT INTO iscsi_targets_backup SELECT
+        created_at,
+        updated_at,
+        deleted_at,
+        deleted,
+        id,
+        target_num,
+        host,
+        volume_id
+    FROM iscsi_targets;
+    DROP TABLE iscsi_targets;
+    ALTER TABLE iscsi_targets_backup RENAME TO iscsi_targets;
+
+    CREATE TABLE volume_metadata_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        key VARCHAR(255),
+        value VARCHAR(255),
+        volume_id INTEGER,
+        PRIMARY KEY (id),
+        FOREIGN KEY(volume_id) REFERENCES volumes(id),
+        UNIQUE (id),
+        CHECK (deleted IN (0, 1))
+    );
+    INSERT INTO volume_metadata_backup SELECT
+        created_at,
+        updated_at,
+        deleted_at,
+        deleted,
+        id,
+        key,
+        value,
+        volume_id
+    FROM volume_metadata;
+    DROP TABLE volume_metadata;
+    ALTER TABLE volume_metadata_backup RENAME TO volume_metadata;
+
+    -- change volume_id and snapshot_id datatypes in bdm table
+    CREATE TABLE block_device_mapping_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        instance_uuid VARCHAR(36) NOT NULL,
+        device_name VARCHAR(255),
+        delete_on_termination BOOLEAN,
+        virtual_name VARCHAR(255),
+        snapshot_id INTEGER,
+        volume_id INTEGER,
+        volume_size INTEGER,
+        no_device BOOLEAN,
+        connection_info VARCHAR(255),
+        FOREIGN KEY(instance_uuid) REFERENCES instances(id),
+        FOREIGN KEY(volume_id) REFERENCES volumes(id),
+        FOREIGN KEY(snapshot_id) REFERENCES snapshots(id),
+        PRIMARY KEY (id),
+        UNIQUE (id),
+        CHECK (deleted IN (0, 1))
+    );
+    INSERT INTO block_device_mapping_backup SELECT
+        created_at,
+        updated_at,
+        deleted_at,
+        deleted,
+        id,
+        instance_uuid,
+        device_name,
+        delete_on_termination,
+        virtual_name,
+        snapshot_id,
+        volume_id,
+        volume_size,
+        no_device,
+        connection_info
+    FROM block_device_mapping;
+    DROP TABLE block_device_mapping;
+    ALTER TABLE block_device_mapping_backup RENAME TO block_device_mapping;
+
+    -- change volume_id and sm_volume_table
+    CREATE TABLE sm_volume_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        backend_id INTEGER NOT NULL,
+        vdi_uuid VARCHAR(255),
+        PRIMARY KEY (id),
+        FOREIGN KEY(id) REFERENCES volumes(id),
+        UNIQUE (id),
+        CHECK (deleted IN (0,1))
+    );
+    INSERT INTO sm_volume_backup SELECT
+        created_at,
+        updated_at,
+        deleted_at,
+        deleted,
+        id,
+        backend_id,
+        vdi_uuid
+    FROM sm_volume;
+    DROP TABLE sm_volume;
+    ALTER TABLE sm_volume_backup RENAME TO sm_volume;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/090_sqlite_upgrade.sql b/cinder/db/sqlalchemy/migrate_repo/versions/090_sqlite_upgrade.sql
new file mode 100644
index 000000000..53fbc69f6
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/090_sqlite_upgrade.sql
@@ -0,0 +1,226 @@
+BEGIN TRANSACTION;
+
+    -- change id and snapshot_id datatypes in volumes table
+    CREATE TABLE volumes_backup(
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id VARCHAR(36) NOT NULL,
+        ec2_id INTEGER,
+        user_id VARCHAR(255),
+        project_id VARCHAR(255),
+        snapshot_id VARCHAR(36),
+        host VARCHAR(255),
+        size INTEGER,
+        availability_zone VARCHAR(255),
+        instance_id INTEGER,
+        mountpoint VARCHAR(255),
+        attach_time VARCHAR(255),
+        status VARCHAR(255),
+        attach_status VARCHAR(255),
+        scheduled_at DATETIME,
+        launched_at DATETIME,
+        terminated_at DATETIME,
+        display_name VARCHAR(255),
+        display_description VARCHAR(255),
+        provider_location VARCHAR(255),
+        provider_auth VARCHAR(255),
+        volume_type_id INTEGER,
+        PRIMARY KEY (id),
+        FOREIGN KEY(instance_id) REFERENCES instances (id),
+        UNIQUE (id),
+        CHECK (deleted IN (0, 1))
+    );
+
+    INSERT INTO volumes_backup SELECT
+        created_at,
+        updated_at,
+        deleted_at,
+        deleted,
+        id,
+        ec2_id,
+        user_id,
+        project_id,
+        snapshot_id,
+        host,
+        size,
+        availability_zone,
+        instance_id,
+        mountpoint,
+        attach_time,
+        status,
+        attach_status,
+        scheduled_at,
+        launched_at,
+        terminated_at,
+        display_name,
+        display_description,
+        provider_location,
+        provider_auth,
+        volume_type_id
+    FROM volumes;
+    DROP TABLE volumes;
+    ALTER TABLE volumes_backup RENAME TO volumes;
+
+    -- change id and volume_id datatypes in snapshots table
+    CREATE TABLE snapshots_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id VARCHAR(36) NOT NULL,
+        user_id VARCHAR(255),
+        project_id VARCHAR(255),
+        volume_id VARCHAR(36),
+        status VARCHAR(255),
+        progress VARCHAR(255),
+        volume_size INTEGER,
+        display_name VARCHAR(255),
+        display_description VARCHAR(255),
+        PRIMARY KEY (id),
+        UNIQUE (id),
+        CHECK (deleted IN (0, 1))
+    );
+    INSERT INTO snapshots_backup SELECT
+        created_at,
+        updated_at,
+        deleted_at,
+        deleted,
+        id,
+        user_id,
+        project_id,
+        volume_id,
+        status,
+        progress,
+        volume_size,
+        display_name,
+        display_description
+    FROM snapshots;
+    DROP TABLE snapshots;
+    ALTER TABLE snapshots_backup RENAME TO snapshots;
+
+    -- change id and volume_id datatypes in iscsi_targets table
+    CREATE TABLE iscsi_targets_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        target_num INTEGER,
+        host VARCHAR(255),
+        volume_id VARCHAR(36),
+        PRIMARY KEY (id),
+        FOREIGN KEY(volume_id) REFERENCES volumes(id),
+        UNIQUE (id),
+        CHECK (deleted IN (0, 1))
+    );
+    INSERT INTO iscsi_targets_backup SELECT
+        created_at,
+        updated_at,
+        deleted_at,
+        deleted,
+        id,
+        target_num,
+        host,
+        volume_id
+    FROM iscsi_targets;
+    DROP TABLE iscsi_targets;
+    ALTER TABLE iscsi_targets_backup RENAME TO iscsi_targets;
+
+    CREATE TABLE volume_metadata_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        key VARCHAR(255),
+        value VARCHAR(255),
+        volume_id VARCHAR(36),
+        PRIMARY KEY (id),
+        FOREIGN KEY(volume_id) REFERENCES volumes(id),
+        UNIQUE (id),
+        CHECK (deleted IN (0, 1))
+    );
+    INSERT INTO volume_metadata_backup SELECT
+        created_at,
+        updated_at,
+        deleted_at,
+        deleted,
+        id,
+        key,
+        value,
+        volume_id
+    FROM volume_metadata;
+    DROP TABLE volume_metadata;
+    ALTER TABLE volume_metadata_backup RENAME TO volume_metadata;
+
+    -- change volume_id and snapshot_id datatypes in bdm table
+    CREATE TABLE block_device_mapping_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id INTEGER NOT NULL,
+        instance_uuid VARCHAR(36) NOT NULL,
+        device_name VARCHAR(255),
+        delete_on_termination BOOLEAN,
+        virtual_name VARCHAR(255),
+        snapshot_id VARCHAR(36),
+        volume_id VARCHAR(36),
+        volume_size INTEGER,
+        no_device BOOLEAN,
+        connection_info VARCHAR(255),
+        FOREIGN KEY(instance_uuid) REFERENCES instances(id),
+        FOREIGN KEY(volume_id) REFERENCES volumes(id),
+        FOREIGN KEY(snapshot_id) REFERENCES snapshots(id),
+        PRIMARY KEY (id),
+        UNIQUE (id),
+        CHECK (deleted IN (0, 1))
+    );
+    INSERT INTO block_device_mapping_backup SELECT
+        created_at,
+        updated_at,
+        deleted_at,
+        deleted,
+        id,
+        instance_uuid,
+        device_name,
+        delete_on_termination,
+        virtual_name,
+        snapshot_id,
+        volume_id,
+        volume_size,
+        no_device,
+        connection_info
+    FROM block_device_mapping;
+    DROP TABLE block_device_mapping;
+    ALTER TABLE block_device_mapping_backup RENAME TO block_device_mapping;
+
+    -- change volume_id and sm_volume_table
+    CREATE TABLE sm_volume_backup (
+        created_at DATETIME,
+        updated_at DATETIME,
+        deleted_at DATETIME,
+        deleted BOOLEAN,
+        id VARCHAR(36) NOT NULL,
+        backend_id INTEGER NOT NULL,
+        vdi_uuid VARCHAR(255),
+        PRIMARY KEY (id),
+        FOREIGN KEY(id) REFERENCES volumes(id),
+        UNIQUE (id),
+        CHECK (deleted IN (0,1))
+    );
+    INSERT INTO sm_volume_backup SELECT
+        created_at,
+        updated_at,
+        deleted_at,
+        deleted,
+        id,
+        backend_id,
+        vdi_uuid
+    FROM sm_volume;
+    DROP TABLE sm_volume;
+    ALTER TABLE sm_volume_backup RENAME TO sm_volume;
+
+COMMIT;
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/091_convert_volume_ids_to_uuid.py b/cinder/db/sqlalchemy/migrate_repo/versions/091_convert_volume_ids_to_uuid.py
new file mode 100644
index 000000000..b9ec5c83e
--- /dev/null
+++ b/cinder/db/sqlalchemy/migrate_repo/versions/091_convert_volume_ids_to_uuid.py
@@ -0,0 +1,145 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from sqlalchemy import MetaData, select, Table
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+    """Convert volume and snapshot id columns from int to varchar."""
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    volumes = Table('volumes', meta, autoload=True)
+    snapshots = Table('snapshots', meta, autoload=True)
+    iscsi_targets = Table('iscsi_targets', meta, autoload=True)
+    volume_metadata = Table('volume_metadata', meta, autoload=True)
+    block_device_mapping = Table('block_device_mapping', meta, autoload=True)
+    sm_volumes = Table('sm_volume', meta, autoload=True)
+
+    volume_mappings = Table('volume_id_mappings', meta, autoload=True)
+    snapshot_mappings = Table('snapshot_id_mappings', meta, autoload=True)
+
+    volume_list = list(volumes.select().execute())
+    for v in volume_list:
+        new_id = select([volume_mappings.c.uuid],
+            volume_mappings.c.id == v['id'])
+
+        volumes.update().\
+            where(volumes.c.id == v['id']).\
+            values(id=new_id).execute()
+
+        sm_volumes.update().\
+            where(sm_volumes.c.id == v['id']).\
+            values(id=new_id).execute()
+
+        snapshots.update().\
+            where(snapshots.c.volume_id == v['id']).\
+            values(volume_id=new_id).execute()
+
+        iscsi_targets.update().\
+            where(iscsi_targets.c.volume_id == v['id']).\
+            values(volume_id=new_id).execute()
+
+        volume_metadata.update().\
+            where(volume_metadata.c.volume_id == v['id']).\
+            values(volume_id=new_id).execute()
+
+        block_device_mapping.update().\
+            where(block_device_mapping.c.volume_id == v['id']).\
+            values(volume_id=new_id).execute()
+
+    snapshot_list = list(snapshots.select().execute())
+    for s in snapshot_list:
+        new_id = select([snapshot_mappings.c.uuid],
+            volume_mappings.c.id == s['id'])
+
+        volumes.update().\
+            where(volumes.c.snapshot_id == s['id']).\
+            values(snapshot_id=new_id).execute()
+
+        snapshots.update().\
+            where(snapshots.c.id == s['id']).\
+            values(volume_id=new_id).execute()
+
+        block_device_mapping.update().\
+            where(block_device_mapping.c.snapshot_id == s['id']).\
+            values(snapshot_id=new_id).execute()
+
+
+def downgrade(migrate_engine):
+    """Convert volume and snapshot id columns back to int."""
+    meta = MetaData()
+    meta.bind = migrate_engine
+
+    volumes = Table('volumes', meta, autoload=True)
+    snapshots = Table('snapshots', meta, autoload=True)
+    iscsi_targets = Table('iscsi_targets', meta, autoload=True)
+    volume_metadata = Table('volume_metadata', meta, autoload=True)
+    block_device_mapping = Table('block_device_mapping', meta, autoload=True)
+    sm_volumes = Table('sm_volume', meta, autoload=True)
+
+    volume_mappings = Table('volume_id_mappings', meta, autoload=True)
+    snapshot_mappings = Table('snapshot_id_mappings', meta, autoload=True)
+
+    volume_list = list(volumes.select().execute())
+    for v in volume_list:
+        new_id = select([volume_mappings.c.id],
+            volume_mappings.c.uuid == v['id'])
+
+        volumes.update().\
+            where(volumes.c.id == v['id']).\
+            values(id=new_id).execute()
+
+        sm_volumes.update().\
+            where(sm_volumes.c.id == v['id']).\
+            values(id=new_id).execute()
+
+        snapshots.update().\
+            where(snapshots.c.volume_id == v['id']).\
+            values(volume_id=new_id).execute()
+
+        iscsi_targets.update().\
+            where(iscsi_targets.c.volume_id == v['id']).\
+            values(volume_id=new_id).execute()
+
+        volume_metadata.update().\
+            where(volume_metadata.c.volume_id == v['id']).\
+            values(volume_id=new_id).execute()
+
+        block_device_mapping.update().\
+            where(block_device_mapping.c.volume_id == v['id']).\
+            values(volume_id=new_id).execute()
+
+    snapshot_list = list(snapshots.select().execute())
+    for s in snapshot_list:
+        new_id = select([snapshot_mappings.c.id],
+            volume_mappings.c.uuid == s['id'])
+
+        volumes.update().\
+            where(volumes.c.snapshot_id == s['id']).\
+            values(snapshot_id=new_id).execute()
+
+        snapshots.update().\
+            where(snapshots.c.id == s['id']).\
+            values(volume_id=new_id).execute()
+
+        block_device_mapping.update().\
+            where(block_device_mapping.c.snapshot_id == s['id']).\
+            values(snapshot_id=new_id).execute()
diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/__init__.py b/cinder/db/sqlalchemy/migrate_repo/versions/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/cinder/db/sqlalchemy/migration.py b/cinder/db/sqlalchemy/migration.py
new file mode 100644
index 000000000..153be1a1f
--- /dev/null
+++ b/cinder/db/sqlalchemy/migration.py
@@ -0,0 +1,129 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import distutils.version as dist_version
+import os
+import sys
+
+from cinder.db.sqlalchemy.session import get_engine
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+
+
+import sqlalchemy
+import migrate
+from migrate.versioning import util as migrate_util
+
+
+LOG = logging.getLogger(__name__)
+
+
+@migrate_util.decorator
+def patched_with_engine(f, *a, **kw):
+    url = a[0]
+    engine = migrate_util.construct_engine(url, **kw)
+
+    try:
+        kw['engine'] = engine
+        return f(*a, **kw)
+    finally:
+        if isinstance(engine, migrate_util.Engine) and engine is not url:
+            migrate_util.log.debug('Disposing SQLAlchemy engine %s', engine)
+            engine.dispose()
+
+
+# TODO(jkoelker) When migrate 0.7.3 is released and cinder depends
+#                on that version or higher, this can be removed
+MIN_PKG_VERSION = dist_version.StrictVersion('0.7.3')
+if (not hasattr(migrate, '__version__') or
+    dist_version.StrictVersion(migrate.__version__) < MIN_PKG_VERSION):
+    migrate_util.with_engine = patched_with_engine
+
+
+# NOTE(jkoelker) Delay importing migrate until we are patched
+from migrate import exceptions as versioning_exceptions
+from migrate.versioning import api as versioning_api
+from migrate.versioning.repository import Repository
+
+FLAGS = flags.FLAGS
+
+_REPOSITORY = None
+
+
+def db_sync(version=None):
+    if version is not None:
+        try:
+            version = int(version)
+        except ValueError:
+            raise exception.Error(_("version should be an integer"))
+
+    current_version = db_version()
+    repository = _find_migrate_repo()
+    if version is None or version > current_version:
+        return versioning_api.upgrade(get_engine(), repository, version)
+    else:
+        return versioning_api.downgrade(get_engine(), repository,
+                                        version)
+
+
+def db_version():
+    repository = _find_migrate_repo()
+    try:
+        return versioning_api.db_version(get_engine(), repository)
+    except versioning_exceptions.DatabaseNotControlledError:
+        # If we aren't version controlled we may already have the database
+        # in the state from before we started version control, check for that
+        # and set up version_control appropriately
+        meta = sqlalchemy.MetaData()
+        engine = get_engine()
+        meta.reflect(bind=engine)
+        try:
+            for table in ('auth_tokens', 'zones', 'export_devices',
+                          'fixed_ips', 'floating_ips', 'instances',
+                          'key_pairs', 'networks', 'projects', 'quotas',
+                          'security_group_instance_association',
+                          'security_group_rules', 'security_groups',
+                          'services', 'migrations',
+                          'users', 'user_project_association',
+                          'user_project_role_association',
+                          'user_role_association',
+                          'virtual_storage_arrays',
+                          'volumes', 'volume_metadata',
+                          'volume_types', 'volume_type_extra_specs'):
+                assert table in meta.tables
+            return db_version_control(1)
+        except AssertionError:
+            return db_version_control(0)
+
+
+def db_version_control(version=None):
+    repository = _find_migrate_repo()
+    versioning_api.version_control(get_engine(), repository, version)
+    return version
+
+
+def _find_migrate_repo():
+    """Get the path for the migrate repository."""
+    global _REPOSITORY
+    path = os.path.join(os.path.abspath(os.path.dirname(__file__)),
+                        'migrate_repo')
+    assert os.path.exists(path)
+    if _REPOSITORY is None:
+        _REPOSITORY = Repository(path)
+    return _REPOSITORY
diff --git a/cinder/db/sqlalchemy/models.py b/cinder/db/sqlalchemy/models.py
new file mode 100644
index 000000000..732e6832f
--- /dev/null
+++ b/cinder/db/sqlalchemy/models.py
@@ -0,0 +1,1063 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 X.commerce, a business unit of eBay Inc.
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# Copyright 2011 Piston Cloud Computing, Inc.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+SQLAlchemy models for cinder data.
+"""
+
+from sqlalchemy.orm import relationship, backref, object_mapper
+from sqlalchemy import Column, Integer, BigInteger, String, schema
+from sqlalchemy import ForeignKey, DateTime, Boolean, Text, Float
+from sqlalchemy.exc import IntegrityError
+from sqlalchemy.ext.declarative import declarative_base
+from sqlalchemy.schema import ForeignKeyConstraint
+
+from cinder.db.sqlalchemy.session import get_session
+
+from cinder import exception
+from cinder import flags
+from cinder import utils
+
+
+FLAGS = flags.FLAGS
+BASE = declarative_base()
+
+
+class CinderBase(object):
+    """Base class for Cinder Models."""
+    __table_args__ = {'mysql_engine': 'InnoDB'}
+    __table_initialized__ = False
+    created_at = Column(DateTime, default=utils.utcnow)
+    updated_at = Column(DateTime, onupdate=utils.utcnow)
+    deleted_at = Column(DateTime)
+    deleted = Column(Boolean, default=False)
+    metadata = None
+
+    def save(self, session=None):
+        """Save this object."""
+        if not session:
+            session = get_session()
+        session.add(self)
+        try:
+            session.flush()
+        except IntegrityError, e:
+            if str(e).endswith('is not unique'):
+                raise exception.Duplicate(str(e))
+            else:
+                raise
+
+    def delete(self, session=None):
+        """Delete this object."""
+        self.deleted = True
+        self.deleted_at = utils.utcnow()
+        self.save(session=session)
+
+    def __setitem__(self, key, value):
+        setattr(self, key, value)
+
+    def __getitem__(self, key):
+        return getattr(self, key)
+
+    def get(self, key, default=None):
+        return getattr(self, key, default)
+
+    def __iter__(self):
+        self._i = iter(object_mapper(self).columns)
+        return self
+
+    def next(self):
+        n = self._i.next().name
+        return n, getattr(self, n)
+
+    def update(self, values):
+        """Make the model object behave like a dict"""
+        for k, v in values.iteritems():
+            setattr(self, k, v)
+
+    def iteritems(self):
+        """Make the model object behave like a dict.
+
+        Includes attributes from joins."""
+        local = dict(self)
+        joined = dict([(k, v) for k, v in self.__dict__.iteritems()
+                      if not k[0] == '_'])
+        local.update(joined)
+        return local.iteritems()
+
+
+class Service(BASE, CinderBase):
+    """Represents a running service on a host."""
+
+    __tablename__ = 'services'
+    id = Column(Integer, primary_key=True)
+    host = Column(String(255))  # , ForeignKey('hosts.id'))
+    binary = Column(String(255))
+    topic = Column(String(255))
+    report_count = Column(Integer, nullable=False, default=0)
+    disabled = Column(Boolean, default=False)
+    availability_zone = Column(String(255), default='cinder')
+
+
+class ComputeNode(BASE, CinderBase):
+    """Represents a running compute service on a host."""
+
+    __tablename__ = 'compute_nodes'
+    id = Column(Integer, primary_key=True)
+    service_id = Column(Integer, ForeignKey('services.id'), nullable=True)
+    service = relationship(Service,
+                           backref=backref('compute_node'),
+                           foreign_keys=service_id,
+                           primaryjoin='and_('
+                                'ComputeNode.service_id == Service.id,'
+                                'ComputeNode.deleted == False)')
+
+    vcpus = Column(Integer)
+    memory_mb = Column(Integer)
+    local_gb = Column(Integer)
+    vcpus_used = Column(Integer)
+    memory_mb_used = Column(Integer)
+    local_gb_used = Column(Integer)
+    hypervisor_type = Column(Text)
+    hypervisor_version = Column(Integer)
+    hypervisor_hostname = Column(String(255))
+
+    # Free Ram, amount of activity (resize, migration, boot, etc) and
+    # the number of running VM's are a good starting point for what's
+    # important when making scheduling decisions.
+    #
+    # NOTE(sandy): We'll need to make this extensible for other schedulers.
+    free_ram_mb = Column(Integer)
+    free_disk_gb = Column(Integer)
+    current_workload = Column(Integer)
+    running_vms = Column(Integer)
+
+    # Note(masumotok): Expected Strings example:
+    #
+    # '{"arch":"x86_64",
+    #   "model":"Nehalem",
+    #   "topology":{"sockets":1, "threads":2, "cores":3},
+    #   "features":["tdtscp", "xtpr"]}'
+    #
+    # Points are "json translatable" and it must have all dictionary keys
+    # above, since it is copied from <cpu> tag of getCapabilities()
+    # (See libvirt.virtConnection).
+    cpu_info = Column(Text, nullable=True)
+    disk_available_least = Column(Integer)
+
+
+class Certificate(BASE, CinderBase):
+    """Represents a an x509 certificate"""
+    __tablename__ = 'certificates'
+    id = Column(Integer, primary_key=True)
+
+    user_id = Column(String(255))
+    project_id = Column(String(255))
+    file_name = Column(String(255))
+
+
+class Instance(BASE, CinderBase):
+    """Represents a guest vm."""
+    __tablename__ = 'instances'
+    injected_files = []
+
+    id = Column(Integer, primary_key=True, autoincrement=True)
+
+    @property
+    def name(self):
+        try:
+            base_name = FLAGS.instance_name_template % self.id
+        except TypeError:
+            # Support templates like "uuid-%(uuid)s", etc.
+            info = {}
+            for key, value in self.iteritems():
+                # prevent recursion if someone specifies %(name)s
+                # %(name)s will not be valid.
+                if key == 'name':
+                    continue
+                info[key] = value
+            try:
+                base_name = FLAGS.instance_name_template % info
+            except KeyError:
+                base_name = self.uuid
+        if getattr(self, '_rescue', False):
+            base_name += "-rescue"
+        return base_name
+
+    user_id = Column(String(255))
+    project_id = Column(String(255))
+
+    image_ref = Column(String(255))
+    kernel_id = Column(String(255))
+    ramdisk_id = Column(String(255))
+    server_name = Column(String(255))
+
+#    image_ref = Column(Integer, ForeignKey('images.id'), nullable=True)
+#    kernel_id = Column(Integer, ForeignKey('images.id'), nullable=True)
+#    ramdisk_id = Column(Integer, ForeignKey('images.id'), nullable=True)
+#    ramdisk = relationship(Ramdisk, backref=backref('instances', order_by=id))
+#    kernel = relationship(Kernel, backref=backref('instances', order_by=id))
+#    project = relationship(Project, backref=backref('instances', order_by=id))
+
+    launch_index = Column(Integer)
+    key_name = Column(String(255))
+    key_data = Column(Text)
+
+    power_state = Column(Integer)
+    vm_state = Column(String(255))
+    task_state = Column(String(255))
+
+    memory_mb = Column(Integer)
+    vcpus = Column(Integer)
+    root_gb = Column(Integer)
+    ephemeral_gb = Column(Integer)
+
+    hostname = Column(String(255))
+    host = Column(String(255))  # , ForeignKey('hosts.id'))
+
+    # *not* flavor_id
+    instance_type_id = Column(Integer)
+
+    user_data = Column(Text)
+
+    reservation_id = Column(String(255))
+
+    scheduled_at = Column(DateTime)
+    launched_at = Column(DateTime)
+    terminated_at = Column(DateTime)
+
+    availability_zone = Column(String(255))
+
+    # User editable field for display in user-facing UIs
+    display_name = Column(String(255))
+    display_description = Column(String(255))
+
+    # To remember on which host a instance booted.
+    # An instance may have moved to another host by live migraiton.
+    launched_on = Column(Text)
+    locked = Column(Boolean)
+
+    os_type = Column(String(255))
+    architecture = Column(String(255))
+    vm_mode = Column(String(255))
+    uuid = Column(String(36))
+
+    root_device_name = Column(String(255))
+    default_ephemeral_device = Column(String(255), nullable=True)
+    default_swap_device = Column(String(255), nullable=True)
+    config_drive = Column(String(255))
+
+    # User editable field meant to represent what ip should be used
+    # to connect to the instance
+    access_ip_v4 = Column(String(255))
+    access_ip_v6 = Column(String(255))
+
+    auto_disk_config = Column(Boolean())
+    progress = Column(Integer)
+
+    # EC2 instance_initiated_shutdown_teminate
+    # True: -> 'terminate'
+    # False: -> 'stop'
+    shutdown_terminate = Column(Boolean(), default=True, nullable=False)
+
+    # EC2 disable_api_termination
+    disable_terminate = Column(Boolean(), default=False, nullable=False)
+
+    # OpenStack compute cell name
+    cell_name = Column(String(255))
+
+
+class InstanceInfoCache(BASE, CinderBase):
+    """
+    Represents a cache of information about an instance
+    """
+    __tablename__ = 'instance_info_caches'
+    id = Column(Integer, primary_key=True, autoincrement=True)
+
+    # text column used for storing a json object of network data for api
+    network_info = Column(Text)
+
+    instance_id = Column(String(36), ForeignKey('instances.uuid'),
+                                     nullable=False, unique=True)
+    instance = relationship(Instance,
+                            backref=backref('info_cache', uselist=False),
+                            foreign_keys=instance_id,
+                            primaryjoin=instance_id == Instance.uuid)
+
+
+class InstanceActions(BASE, CinderBase):
+    """Represents a guest VM's actions and results"""
+    __tablename__ = "instance_actions"
+    id = Column(Integer, primary_key=True)
+    instance_uuid = Column(String(36), ForeignKey('instances.uuid'))
+    action = Column(String(255))
+    error = Column(Text)
+
+
+class InstanceTypes(BASE, CinderBase):
+    """Represent possible instance_types or flavor of VM offered"""
+    __tablename__ = "instance_types"
+    id = Column(Integer, primary_key=True)
+    name = Column(String(255))
+    memory_mb = Column(Integer)
+    vcpus = Column(Integer)
+    root_gb = Column(Integer)
+    ephemeral_gb = Column(Integer)
+    flavorid = Column(String(255))
+    swap = Column(Integer, nullable=False, default=0)
+    rxtx_factor = Column(Float, nullable=False, default=1)
+    vcpu_weight = Column(Integer, nullable=True)
+
+    instances = relationship(Instance,
+                           backref=backref('instance_type', uselist=False),
+                           foreign_keys=id,
+                           primaryjoin='and_('
+                               'Instance.instance_type_id == '
+                               'InstanceTypes.id, '
+                               'InstanceTypes.deleted == False)')
+
+
+class Volume(BASE, CinderBase):
+    """Represents a block storage device that can be attached to a vm."""
+    __tablename__ = 'volumes'
+    id = Column(String(36), primary_key=True)
+
+    @property
+    def name(self):
+        return FLAGS.volume_name_template % self.id
+
+    ec2_id = Column(Integer)
+    user_id = Column(String(255))
+    project_id = Column(String(255))
+
+    snapshot_id = Column(String(36))
+
+    host = Column(String(255))  # , ForeignKey('hosts.id'))
+    size = Column(Integer)
+    availability_zone = Column(String(255))  # TODO(vish): foreign key?
+    instance_id = Column(Integer, ForeignKey('instances.id'), nullable=True)
+    instance = relationship(Instance,
+                            backref=backref('volumes'),
+                            foreign_keys=instance_id,
+                            primaryjoin='and_(Volume.instance_id==Instance.id,'
+                                             'Volume.deleted==False)')
+    mountpoint = Column(String(255))
+    attach_time = Column(String(255))  # TODO(vish): datetime
+    status = Column(String(255))  # TODO(vish): enum?
+    attach_status = Column(String(255))  # TODO(vish): enum
+
+    scheduled_at = Column(DateTime)
+    launched_at = Column(DateTime)
+    terminated_at = Column(DateTime)
+
+    display_name = Column(String(255))
+    display_description = Column(String(255))
+
+    provider_location = Column(String(255))
+    provider_auth = Column(String(255))
+
+    volume_type_id = Column(Integer)
+
+
+class VolumeMetadata(BASE, CinderBase):
+    """Represents a metadata key/value pair for a volume"""
+    __tablename__ = 'volume_metadata'
+    id = Column(Integer, primary_key=True)
+    key = Column(String(255))
+    value = Column(String(255))
+    volume_id = Column(String(36), ForeignKey('volumes.id'), nullable=False)
+    volume = relationship(Volume, backref="volume_metadata",
+                            foreign_keys=volume_id,
+                            primaryjoin='and_('
+                                'VolumeMetadata.volume_id == Volume.id,'
+                                'VolumeMetadata.deleted == False)')
+
+
+class VolumeTypes(BASE, CinderBase):
+    """Represent possible volume_types of volumes offered"""
+    __tablename__ = "volume_types"
+    id = Column(Integer, primary_key=True)
+    name = Column(String(255))
+
+    volumes = relationship(Volume,
+                           backref=backref('volume_type', uselist=False),
+                           foreign_keys=id,
+                           primaryjoin='and_('
+                               'Volume.volume_type_id == VolumeTypes.id, '
+                               'VolumeTypes.deleted == False)')
+
+
+class VolumeTypeExtraSpecs(BASE, CinderBase):
+    """Represents additional specs as key/value pairs for a volume_type"""
+    __tablename__ = 'volume_type_extra_specs'
+    id = Column(Integer, primary_key=True)
+    key = Column(String(255))
+    value = Column(String(255))
+    volume_type_id = Column(Integer, ForeignKey('volume_types.id'),
+                              nullable=False)
+    volume_type = relationship(VolumeTypes, backref="extra_specs",
+                 foreign_keys=volume_type_id,
+                 primaryjoin='and_('
+                 'VolumeTypeExtraSpecs.volume_type_id == VolumeTypes.id,'
+                 'VolumeTypeExtraSpecs.deleted == False)')
+
+
+class Quota(BASE, CinderBase):
+    """Represents a single quota override for a project.
+
+    If there is no row for a given project id and resource, then the
+    default for the quota class is used.  If there is no row for a
+    given quota class and resource, then the default for the
+    deployment is used. If the row is present but the hard limit is
+    Null, then the resource is unlimited.
+    """
+
+    __tablename__ = 'quotas'
+    id = Column(Integer, primary_key=True)
+
+    project_id = Column(String(255), index=True)
+
+    resource = Column(String(255))
+    hard_limit = Column(Integer, nullable=True)
+
+
+class QuotaClass(BASE, CinderBase):
+    """Represents a single quota override for a quota class.
+
+    If there is no row for a given quota class and resource, then the
+    default for the deployment is used.  If the row is present but the
+    hard limit is Null, then the resource is unlimited.
+    """
+
+    __tablename__ = 'quota_classes'
+    id = Column(Integer, primary_key=True)
+
+    class_name = Column(String(255), index=True)
+
+    resource = Column(String(255))
+    hard_limit = Column(Integer, nullable=True)
+
+
+class Snapshot(BASE, CinderBase):
+    """Represents a block storage device that can be attached to a vm."""
+    __tablename__ = 'snapshots'
+    id = Column(String(36), primary_key=True)
+
+    @property
+    def name(self):
+        return FLAGS.snapshot_name_template % self.id
+
+    @property
+    def volume_name(self):
+        return FLAGS.volume_name_template % self.volume_id
+
+    user_id = Column(String(255))
+    project_id = Column(String(255))
+
+    volume_id = Column(String(36))
+    status = Column(String(255))
+    progress = Column(String(255))
+    volume_size = Column(Integer)
+
+    display_name = Column(String(255))
+    display_description = Column(String(255))
+
+
+class BlockDeviceMapping(BASE, CinderBase):
+    """Represents block device mapping that is defined by EC2"""
+    __tablename__ = "block_device_mapping"
+    id = Column(Integer, primary_key=True, autoincrement=True)
+
+    instance_uuid = Column(Integer, ForeignKey('instances.uuid'),
+                           nullable=False)
+    instance = relationship(Instance,
+                            backref=backref('balock_device_mapping'),
+                            foreign_keys=instance_uuid,
+                            primaryjoin='and_(BlockDeviceMapping.'
+                                              'instance_uuid=='
+                                              'Instance.uuid,'
+                                              'BlockDeviceMapping.deleted=='
+                                              'False)')
+    device_name = Column(String(255), nullable=False)
+
+    # default=False for compatibility of the existing code.
+    # With EC2 API,
+    # default True for ami specified device.
+    # default False for created with other timing.
+    delete_on_termination = Column(Boolean, default=False)
+
+    # for ephemeral device
+    virtual_name = Column(String(255), nullable=True)
+
+    # for snapshot or volume
+    snapshot_id = Column(String(36), ForeignKey('snapshots.id'))
+    # outer join
+    snapshot = relationship(Snapshot,
+                            foreign_keys=snapshot_id)
+
+    volume_id = Column(String(36), ForeignKey('volumes.id'), nullable=True)
+    volume = relationship(Volume,
+                          foreign_keys=volume_id)
+    volume_size = Column(Integer, nullable=True)
+
+    # for no device to suppress devices.
+    no_device = Column(Boolean, nullable=True)
+
+    connection_info = Column(Text, nullable=True)
+
+
+class IscsiTarget(BASE, CinderBase):
+    """Represates an iscsi target for a given host"""
+    __tablename__ = 'iscsi_targets'
+    __table_args__ = (schema.UniqueConstraint("target_num", "host"),
+                      {'mysql_engine': 'InnoDB'})
+    id = Column(Integer, primary_key=True)
+    target_num = Column(Integer)
+    host = Column(String(255))
+    volume_id = Column(String(36), ForeignKey('volumes.id'), nullable=True)
+    volume = relationship(Volume,
+                          backref=backref('iscsi_target', uselist=False),
+                          foreign_keys=volume_id,
+                          primaryjoin='and_(IscsiTarget.volume_id==Volume.id,'
+                                           'IscsiTarget.deleted==False)')
+
+
+class SecurityGroupInstanceAssociation(BASE, CinderBase):
+    __tablename__ = 'security_group_instance_association'
+    id = Column(Integer, primary_key=True)
+    security_group_id = Column(Integer, ForeignKey('security_groups.id'))
+    instance_id = Column(Integer, ForeignKey('instances.id'))
+
+
+class SecurityGroup(BASE, CinderBase):
+    """Represents a security group."""
+    __tablename__ = 'security_groups'
+    id = Column(Integer, primary_key=True)
+
+    name = Column(String(255))
+    description = Column(String(255))
+    user_id = Column(String(255))
+    project_id = Column(String(255))
+
+    instances = relationship(Instance,
+                             secondary="security_group_instance_association",
+                             primaryjoin='and_('
+        'SecurityGroup.id == '
+        'SecurityGroupInstanceAssociation.security_group_id,'
+        'SecurityGroupInstanceAssociation.deleted == False,'
+        'SecurityGroup.deleted == False)',
+                             secondaryjoin='and_('
+        'SecurityGroupInstanceAssociation.instance_id == Instance.id,'
+        # (anthony) the condition below shouldn't be necessary now that the
+        # association is being marked as deleted.  However, removing this
+        # may cause existing deployments to choke, so I'm leaving it
+        'Instance.deleted == False)',
+                             backref='security_groups')
+
+
+class SecurityGroupIngressRule(BASE, CinderBase):
+    """Represents a rule in a security group."""
+    __tablename__ = 'security_group_rules'
+    id = Column(Integer, primary_key=True)
+
+    parent_group_id = Column(Integer, ForeignKey('security_groups.id'))
+    parent_group = relationship("SecurityGroup", backref="rules",
+                                foreign_keys=parent_group_id,
+                                primaryjoin='and_('
+        'SecurityGroupIngressRule.parent_group_id == SecurityGroup.id,'
+        'SecurityGroupIngressRule.deleted == False)')
+
+    protocol = Column(String(5))  # "tcp", "udp", or "icmp"
+    from_port = Column(Integer)
+    to_port = Column(Integer)
+    cidr = Column(String(255))
+
+    # Note: This is not the parent SecurityGroup. It's SecurityGroup we're
+    # granting access for.
+    group_id = Column(Integer, ForeignKey('security_groups.id'))
+    grantee_group = relationship("SecurityGroup",
+                                 foreign_keys=group_id,
+                                 primaryjoin='and_('
+        'SecurityGroupIngressRule.group_id == SecurityGroup.id,'
+        'SecurityGroupIngressRule.deleted == False)')
+
+
+class ProviderFirewallRule(BASE, CinderBase):
+    """Represents a rule in a security group."""
+    __tablename__ = 'provider_fw_rules'
+    id = Column(Integer, primary_key=True)
+
+    protocol = Column(String(5))  # "tcp", "udp", or "icmp"
+    from_port = Column(Integer)
+    to_port = Column(Integer)
+    cidr = Column(String(255))
+
+
+class KeyPair(BASE, CinderBase):
+    """Represents a public key pair for ssh."""
+    __tablename__ = 'key_pairs'
+    id = Column(Integer, primary_key=True)
+
+    name = Column(String(255))
+
+    user_id = Column(String(255))
+
+    fingerprint = Column(String(255))
+    public_key = Column(Text)
+
+
+class Migration(BASE, CinderBase):
+    """Represents a running host-to-host migration."""
+    __tablename__ = 'migrations'
+    id = Column(Integer, primary_key=True, nullable=False)
+    # NOTE(tr3buchet): the ____compute variables are instance['host']
+    source_compute = Column(String(255))
+    dest_compute = Column(String(255))
+    # NOTE(tr3buchet): dest_host, btw, is an ip address
+    dest_host = Column(String(255))
+    old_instance_type_id = Column(Integer())
+    new_instance_type_id = Column(Integer())
+    instance_uuid = Column(String(255), ForeignKey('instances.uuid'),
+            nullable=True)
+    #TODO(_cerberus_): enum
+    status = Column(String(255))
+
+
+class Network(BASE, CinderBase):
+    """Represents a network."""
+    __tablename__ = 'networks'
+    __table_args__ = (schema.UniqueConstraint("vpn_public_address",
+                                              "vpn_public_port"),
+                      {'mysql_engine': 'InnoDB'})
+    id = Column(Integer, primary_key=True)
+    label = Column(String(255))
+
+    injected = Column(Boolean, default=False)
+    cidr = Column(String(255), unique=True)
+    cidr_v6 = Column(String(255), unique=True)
+    multi_host = Column(Boolean, default=False)
+
+    gateway_v6 = Column(String(255))
+    netmask_v6 = Column(String(255))
+    netmask = Column(String(255))
+    bridge = Column(String(255))
+    bridge_interface = Column(String(255))
+    gateway = Column(String(255))
+    broadcast = Column(String(255))
+    dns1 = Column(String(255))
+    dns2 = Column(String(255))
+
+    vlan = Column(Integer)
+    vpn_public_address = Column(String(255))
+    vpn_public_port = Column(Integer)
+    vpn_private_address = Column(String(255))
+    dhcp_start = Column(String(255))
+
+    rxtx_base = Column(Integer)
+
+    project_id = Column(String(255))
+    priority = Column(Integer)
+    host = Column(String(255))  # , ForeignKey('hosts.id'))
+    uuid = Column(String(36))
+
+
+class VirtualInterface(BASE, CinderBase):
+    """Represents a virtual interface on an instance."""
+    __tablename__ = 'virtual_interfaces'
+    id = Column(Integer, primary_key=True)
+    address = Column(String(255), unique=True)
+    network_id = Column(Integer, nullable=False)
+    instance_id = Column(Integer, nullable=False)
+    uuid = Column(String(36))
+
+
+# TODO(vish): can these both come from the same baseclass?
+class FixedIp(BASE, CinderBase):
+    """Represents a fixed ip for an instance."""
+    __tablename__ = 'fixed_ips'
+    id = Column(Integer, primary_key=True)
+    address = Column(String(255))
+    network_id = Column(Integer, nullable=True)
+    virtual_interface_id = Column(Integer, nullable=True)
+    instance_id = Column(Integer, nullable=True)
+    # associated means that a fixed_ip has its instance_id column set
+    # allocated means that a fixed_ip has a its virtual_interface_id column set
+    allocated = Column(Boolean, default=False)
+    # leased means dhcp bridge has leased the ip
+    leased = Column(Boolean, default=False)
+    reserved = Column(Boolean, default=False)
+    host = Column(String(255))
+
+
+class FloatingIp(BASE, CinderBase):
+    """Represents a floating ip that dynamically forwards to a fixed ip."""
+    __tablename__ = 'floating_ips'
+    id = Column(Integer, primary_key=True)
+    address = Column(String(255))
+    fixed_ip_id = Column(Integer, nullable=True)
+    project_id = Column(String(255))
+    host = Column(String(255))  # , ForeignKey('hosts.id'))
+    auto_assigned = Column(Boolean, default=False, nullable=False)
+    pool = Column(String(255))
+    interface = Column(String(255))
+
+
+class AuthToken(BASE, CinderBase):
+    """Represents an authorization token for all API transactions.
+
+    Fields are a string representing the actual token and a user id for
+    mapping to the actual user
+
+    """
+    __tablename__ = 'auth_tokens'
+    token_hash = Column(String(255), primary_key=True)
+    user_id = Column(String(255))
+    server_management_url = Column(String(255))
+    storage_url = Column(String(255))
+    cdn_management_url = Column(String(255))
+
+
+class User(BASE, CinderBase):
+    """Represents a user."""
+    __tablename__ = 'users'
+    id = Column(String(255), primary_key=True)
+
+    name = Column(String(255))
+    access_key = Column(String(255))
+    secret_key = Column(String(255))
+
+    is_admin = Column(Boolean)
+
+
+class Project(BASE, CinderBase):
+    """Represents a project."""
+    __tablename__ = 'projects'
+    id = Column(String(255), primary_key=True)
+    name = Column(String(255))
+    description = Column(String(255))
+
+    project_manager = Column(String(255), ForeignKey(User.id))
+
+    members = relationship(User,
+                           secondary='user_project_association',
+                           backref='projects')
+
+
+class DNSDomain(BASE, CinderBase):
+    """Represents a DNS domain with availability zone or project info."""
+    __tablename__ = 'dns_domains'
+    domain = Column(String(512), primary_key=True)
+    scope = Column(String(255))
+    availability_zone = Column(String(255))
+    project_id = Column(String(255))
+    project = relationship(Project,
+                           primaryjoin=project_id == Project.id,
+                           foreign_keys=[Project.id],
+                           uselist=False)
+
+
+class UserProjectRoleAssociation(BASE, CinderBase):
+    __tablename__ = 'user_project_role_association'
+    user_id = Column(String(255), primary_key=True)
+    user = relationship(User,
+                        primaryjoin=user_id == User.id,
+                        foreign_keys=[User.id],
+                        uselist=False)
+
+    project_id = Column(String(255), primary_key=True)
+    project = relationship(Project,
+                           primaryjoin=project_id == Project.id,
+                           foreign_keys=[Project.id],
+                           uselist=False)
+
+    role = Column(String(255), primary_key=True)
+    ForeignKeyConstraint(['user_id',
+                          'project_id'],
+                         ['user_project_association.user_id',
+                          'user_project_association.project_id'])
+
+
+class UserRoleAssociation(BASE, CinderBase):
+    __tablename__ = 'user_role_association'
+    user_id = Column(String(255), ForeignKey('users.id'), primary_key=True)
+    user = relationship(User, backref='roles')
+    role = Column(String(255), primary_key=True)
+
+
+class UserProjectAssociation(BASE, CinderBase):
+    __tablename__ = 'user_project_association'
+    user_id = Column(String(255), ForeignKey(User.id), primary_key=True)
+    project_id = Column(String(255), ForeignKey(Project.id), primary_key=True)
+
+
+class ConsolePool(BASE, CinderBase):
+    """Represents pool of consoles on the same physical node."""
+    __tablename__ = 'console_pools'
+    id = Column(Integer, primary_key=True)
+    address = Column(String(255))
+    username = Column(String(255))
+    password = Column(String(255))
+    console_type = Column(String(255))
+    public_hostname = Column(String(255))
+    host = Column(String(255))
+    compute_host = Column(String(255))
+
+
+class Console(BASE, CinderBase):
+    """Represents a console session for an instance."""
+    __tablename__ = 'consoles'
+    id = Column(Integer, primary_key=True)
+    instance_name = Column(String(255))
+    instance_id = Column(Integer)
+    password = Column(String(255))
+    port = Column(Integer, nullable=True)
+    pool_id = Column(Integer, ForeignKey('console_pools.id'))
+    pool = relationship(ConsolePool, backref=backref('consoles'))
+
+
+class InstanceMetadata(BASE, CinderBase):
+    """Represents a metadata key/value pair for an instance"""
+    __tablename__ = 'instance_metadata'
+    id = Column(Integer, primary_key=True)
+    key = Column(String(255))
+    value = Column(String(255))
+    instance_id = Column(Integer, ForeignKey('instances.id'), nullable=False)
+    instance = relationship(Instance, backref="metadata",
+                            foreign_keys=instance_id,
+                            primaryjoin='and_('
+                                'InstanceMetadata.instance_id == Instance.id,'
+                                'InstanceMetadata.deleted == False)')
+
+
+class InstanceTypeExtraSpecs(BASE, CinderBase):
+    """Represents additional specs as key/value pairs for an instance_type"""
+    __tablename__ = 'instance_type_extra_specs'
+    id = Column(Integer, primary_key=True)
+    key = Column(String(255))
+    value = Column(String(255))
+    instance_type_id = Column(Integer, ForeignKey('instance_types.id'),
+                              nullable=False)
+    instance_type = relationship(InstanceTypes, backref="extra_specs",
+                 foreign_keys=instance_type_id,
+                 primaryjoin='and_('
+                 'InstanceTypeExtraSpecs.instance_type_id == InstanceTypes.id,'
+                 'InstanceTypeExtraSpecs.deleted == False)')
+
+
+class Cell(BASE, CinderBase):
+    """Represents parent and child cells of this cell."""
+    __tablename__ = 'cells'
+    id = Column(Integer, primary_key=True)
+    name = Column(String(255))
+    api_url = Column(String(255))
+    username = Column(String(255))
+    password = Column(String(255))
+    weight_offset = Column(Float(), default=0.0)
+    weight_scale = Column(Float(), default=1.0)
+    is_parent = Column(Boolean())
+    rpc_host = Column(String(255))
+    rpc_port = Column(Integer())
+    rpc_virtual_host = Column(String(255))
+
+
+class AggregateHost(BASE, CinderBase):
+    """Represents a host that is member of an aggregate."""
+    __tablename__ = 'aggregate_hosts'
+    id = Column(Integer, primary_key=True, autoincrement=True)
+    host = Column(String(255), unique=True)
+    aggregate_id = Column(Integer, ForeignKey('aggregates.id'), nullable=False)
+
+
+class AggregateMetadata(BASE, CinderBase):
+    """Represents a metadata key/value pair for an aggregate."""
+    __tablename__ = 'aggregate_metadata'
+    id = Column(Integer, primary_key=True)
+    key = Column(String(255), nullable=False)
+    value = Column(String(255), nullable=False)
+    aggregate_id = Column(Integer, ForeignKey('aggregates.id'), nullable=False)
+
+
+class Aggregate(BASE, CinderBase):
+    """Represents a cluster of hosts that exists in this zone."""
+    __tablename__ = 'aggregates'
+    id = Column(Integer, primary_key=True, autoincrement=True)
+    name = Column(String(255), unique=True)
+    operational_state = Column(String(255), nullable=False)
+    availability_zone = Column(String(255), nullable=False)
+    _hosts = relationship(AggregateHost,
+                          secondary="aggregate_hosts",
+                          primaryjoin='and_('
+                                 'Aggregate.id == AggregateHost.aggregate_id,'
+                                 'AggregateHost.deleted == False,'
+                                 'Aggregate.deleted == False)',
+                         secondaryjoin='and_('
+                                'AggregateHost.aggregate_id == Aggregate.id, '
+                                'AggregateHost.deleted == False,'
+                                'Aggregate.deleted == False)',
+                         backref='aggregates')
+
+    _metadata = relationship(AggregateMetadata,
+                         secondary="aggregate_metadata",
+                         primaryjoin='and_('
+                             'Aggregate.id == AggregateMetadata.aggregate_id,'
+                             'AggregateMetadata.deleted == False,'
+                             'Aggregate.deleted == False)',
+                         secondaryjoin='and_('
+                             'AggregateMetadata.aggregate_id == Aggregate.id, '
+                             'AggregateMetadata.deleted == False,'
+                             'Aggregate.deleted == False)',
+                         backref='aggregates')
+
+    @property
+    def hosts(self):
+        return [h.host for h in self._hosts]
+
+    @property
+    def metadetails(self):
+        return dict([(m.key, m.value) for m in self._metadata])
+
+
+class AgentBuild(BASE, CinderBase):
+    """Represents an agent build."""
+    __tablename__ = 'agent_builds'
+    id = Column(Integer, primary_key=True)
+    hypervisor = Column(String(255))
+    os = Column(String(255))
+    architecture = Column(String(255))
+    version = Column(String(255))
+    url = Column(String(255))
+    md5hash = Column(String(255))
+
+
+class BandwidthUsage(BASE, CinderBase):
+    """Cache for instance bandwidth usage data pulled from the hypervisor"""
+    __tablename__ = 'bw_usage_cache'
+    id = Column(Integer, primary_key=True, nullable=False)
+    uuid = Column(String(36), nullable=False)
+    mac = Column(String(255), nullable=False)
+    start_period = Column(DateTime, nullable=False)
+    last_refreshed = Column(DateTime)
+    bw_in = Column(BigInteger)
+    bw_out = Column(BigInteger)
+
+
+class S3Image(BASE, CinderBase):
+    """Compatibility layer for the S3 image service talking to Glance"""
+    __tablename__ = 's3_images'
+    id = Column(Integer, primary_key=True, nullable=False, autoincrement=True)
+    uuid = Column(String(36), nullable=False)
+
+
+class VolumeIdMapping(BASE, CinderBase):
+    """Compatability layer for the EC2 volume service"""
+    __tablename__ = 'volume_id_mappings'
+    id = Column(Integer, primary_key=True, nullable=False, autoincrement=True)
+    uuid = Column(String(36), nullable=False)
+
+
+class SnapshotIdMapping(BASE, CinderBase):
+    """Compatability layer for the EC2 snapshot service"""
+    __tablename__ = 'snapshot_id_mappings'
+    id = Column(Integer, primary_key=True, nullable=False, autoincrement=True)
+    uuid = Column(String(36), nullable=False)
+
+
+class SMFlavors(BASE, CinderBase):
+    """Represents a flavor for SM volumes."""
+    __tablename__ = 'sm_flavors'
+    id = Column(Integer(), primary_key=True)
+    label = Column(String(255))
+    description = Column(String(255))
+
+
+class SMBackendConf(BASE, CinderBase):
+    """Represents the connection to the backend for SM."""
+    __tablename__ = 'sm_backend_config'
+    id = Column(Integer(), primary_key=True)
+    flavor_id = Column(Integer, ForeignKey('sm_flavors.id'), nullable=False)
+    sr_uuid = Column(String(255))
+    sr_type = Column(String(255))
+    config_params = Column(String(2047))
+
+
+class SMVolume(BASE, CinderBase):
+    __tablename__ = 'sm_volume'
+    id = Column(String(36), ForeignKey(Volume.id), primary_key=True)
+    backend_id = Column(Integer, ForeignKey('sm_backend_config.id'),
+                        nullable=False)
+    vdi_uuid = Column(String(255))
+
+
+class InstanceFault(BASE, CinderBase):
+    __tablename__ = 'instance_faults'
+    id = Column(Integer(), primary_key=True, autoincrement=True)
+    instance_uuid = Column(String(36),
+                           ForeignKey('instances.uuid'),
+                           nullable=False)
+    code = Column(Integer(), nullable=False)
+    message = Column(String(255))
+    details = Column(Text)
+
+
+def register_models():
+    """Register Models and create metadata.
+
+    Called from cinder.db.sqlalchemy.__init__ as part of loading the driver,
+    it will never need to be called explicitly elsewhere unless the
+    connection is lost and needs to be reestablished.
+    """
+    from sqlalchemy import create_engine
+    models = (AgentBuild,
+              Aggregate,
+              AggregateHost,
+              AggregateMetadata,
+              AuthToken,
+              Certificate,
+              Cell,
+              Console,
+              ConsolePool,
+              FixedIp,
+              FloatingIp,
+              Instance,
+              InstanceActions,
+              InstanceFault,
+              InstanceMetadata,
+              InstanceTypeExtraSpecs,
+              InstanceTypes,
+              IscsiTarget,
+              Migration,
+              Network,
+              Project,
+              SecurityGroup,
+              SecurityGroupIngressRule,
+              SecurityGroupInstanceAssociation,
+              Service,
+              SMBackendConf,
+              SMFlavors,
+              SMVolume,
+              User,
+              Volume,
+              VolumeMetadata,
+              VolumeTypeExtraSpecs,
+              VolumeTypes,
+              VolumeIdMapping,
+              SnapshotIdMapping,
+              )
+    engine = create_engine(FLAGS.sql_connection, echo=False)
+    for model in models:
+        model.metadata.create_all(engine)
diff --git a/cinder/db/sqlalchemy/session.py b/cinder/db/sqlalchemy/session.py
new file mode 100644
index 000000000..fd6eef4ba
--- /dev/null
+++ b/cinder/db/sqlalchemy/session.py
@@ -0,0 +1,156 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Session Handling for SQLAlchemy backend."""
+
+import time
+
+import sqlalchemy.interfaces
+import sqlalchemy.orm
+from sqlalchemy.exc import DisconnectionError, OperationalError
+from sqlalchemy.pool import NullPool, StaticPool
+
+import cinder.exception
+import cinder.flags as flags
+import cinder.log as logging
+
+
+FLAGS = flags.FLAGS
+LOG = logging.getLogger(__name__)
+
+_ENGINE = None
+_MAKER = None
+
+
+def get_session(autocommit=True, expire_on_commit=False):
+    """Return a SQLAlchemy session."""
+    global _MAKER
+
+    if _MAKER is None:
+        engine = get_engine()
+        _MAKER = get_maker(engine, autocommit, expire_on_commit)
+
+    session = _MAKER()
+    session.query = cinder.exception.wrap_db_error(session.query)
+    session.flush = cinder.exception.wrap_db_error(session.flush)
+    return session
+
+
+class SynchronousSwitchListener(sqlalchemy.interfaces.PoolListener):
+
+    """Switch sqlite connections to non-synchronous mode"""
+
+    def connect(self, dbapi_con, con_record):
+        dbapi_con.execute("PRAGMA synchronous = OFF")
+
+
+class MySQLPingListener(object):
+
+    """
+    Ensures that MySQL connections checked out of the
+    pool are alive.
+
+    Borrowed from:
+    http://groups.google.com/group/sqlalchemy/msg/a4ce563d802c929f
+    """
+
+    def checkout(self, dbapi_con, con_record, con_proxy):
+        try:
+            dbapi_con.cursor().execute('select 1')
+        except dbapi_con.OperationalError, ex:
+            if ex.args[0] in (2006, 2013, 2014, 2045, 2055):
+                LOG.warn('Got mysql server has gone away: %s', ex)
+                raise DisconnectionError("Database server went away")
+            else:
+                raise
+
+
+def is_db_connection_error(args):
+    """Return True if error in connecting to db."""
+    # NOTE(adam_g): This is currently MySQL specific and needs to be extended
+    #               to support Postgres and others.
+    conn_err_codes = ('2002', '2003', '2006')
+    for err_code in conn_err_codes:
+        if args.find(err_code) != -1:
+            return True
+    return False
+
+
+def get_engine():
+    """Return a SQLAlchemy engine."""
+    global _ENGINE
+    if _ENGINE is None:
+        connection_dict = sqlalchemy.engine.url.make_url(FLAGS.sql_connection)
+
+        engine_args = {
+            "pool_recycle": FLAGS.sql_idle_timeout,
+            "echo": False,
+            'convert_unicode': True,
+        }
+
+        # Map our SQL debug level to SQLAlchemy's options
+        if FLAGS.sql_connection_debug >= 100:
+            engine_args['echo'] = 'debug'
+        elif FLAGS.sql_connection_debug >= 50:
+            engine_args['echo'] = True
+
+        if "sqlite" in connection_dict.drivername:
+            engine_args["poolclass"] = NullPool
+
+            if FLAGS.sql_connection == "sqlite://":
+                engine_args["poolclass"] = StaticPool
+                engine_args["connect_args"] = {'check_same_thread': False}
+
+            if not FLAGS.sqlite_synchronous:
+                engine_args["listeners"] = [SynchronousSwitchListener()]
+
+        if 'mysql' in connection_dict.drivername:
+            engine_args['listeners'] = [MySQLPingListener()]
+
+        _ENGINE = sqlalchemy.create_engine(FLAGS.sql_connection, **engine_args)
+
+        try:
+            _ENGINE.connect()
+        except OperationalError, e:
+            if not is_db_connection_error(e.args[0]):
+                raise
+
+            remaining = FLAGS.sql_max_retries
+            if remaining == -1:
+                remaining = 'infinite'
+            while True:
+                msg = _('SQL connection failed. %s attempts left.')
+                LOG.warn(msg % remaining)
+                if remaining != 'infinite':
+                    remaining -= 1
+                time.sleep(FLAGS.sql_retry_interval)
+                try:
+                    _ENGINE.connect()
+                    break
+                except OperationalError, e:
+                    if (remaining != 'infinite' and remaining == 0) or \
+                       not is_db_connection_error(e.args[0]):
+                        raise
+    return _ENGINE
+
+
+def get_maker(engine, autocommit=True, expire_on_commit=False):
+    """Return a SQLAlchemy sessionmaker using the given engine."""
+    return sqlalchemy.orm.sessionmaker(bind=engine,
+                                       autocommit=autocommit,
+                                       expire_on_commit=expire_on_commit)
diff --git a/cinder/exception.py b/cinder/exception.py
new file mode 100644
index 000000000..b57c1925e
--- /dev/null
+++ b/cinder/exception.py
@@ -0,0 +1,938 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Cinder base exception handling.
+
+Includes decorator for re-raising Cinder-type exceptions.
+
+SHOULD include dedicated exception logging.
+
+"""
+
+import functools
+import sys
+
+import webob.exc
+
+from cinder import log as logging
+
+LOG = logging.getLogger(__name__)
+
+
+class ConvertedException(webob.exc.WSGIHTTPException):
+    def __init__(self, code=0, title="", explanation=""):
+        self.code = code
+        self.title = title
+        self.explanation = explanation
+        super(ConvertedException, self).__init__()
+
+
+class ProcessExecutionError(IOError):
+    def __init__(self, stdout=None, stderr=None, exit_code=None, cmd=None,
+                 description=None):
+        self.exit_code = exit_code
+        self.stderr = stderr
+        self.stdout = stdout
+        self.cmd = cmd
+        self.description = description
+
+        if description is None:
+            description = _('Unexpected error while running command.')
+        if exit_code is None:
+            exit_code = '-'
+        message = _('%(description)s\nCommand: %(cmd)s\n'
+                    'Exit code: %(exit_code)s\nStdout: %(stdout)r\n'
+                    'Stderr: %(stderr)r') % locals()
+        IOError.__init__(self, message)
+
+
+class Error(Exception):
+    pass
+
+
+class DBError(Error):
+    """Wraps an implementation specific exception."""
+    def __init__(self, inner_exception=None):
+        self.inner_exception = inner_exception
+        super(DBError, self).__init__(str(inner_exception))
+
+
+def wrap_db_error(f):
+    def _wrap(*args, **kwargs):
+        try:
+            return f(*args, **kwargs)
+        except UnicodeEncodeError:
+            raise InvalidUnicodeParameter()
+        except Exception, e:
+            LOG.exception(_('DB exception wrapped.'))
+            raise DBError(e)
+    _wrap.func_name = f.func_name
+    return _wrap
+
+
+def wrap_exception(notifier=None, publisher_id=None, event_type=None,
+                   level=None):
+    """This decorator wraps a method to catch any exceptions that may
+    get thrown. It logs the exception as well as optionally sending
+    it to the notification system.
+    """
+    # TODO(sandy): Find a way to import cinder.notifier.api so we don't have
+    # to pass it in as a parameter. Otherwise we get a cyclic import of
+    # cinder.notifier.api -> cinder.utils -> cinder.exception :(
+    # TODO(johannes): Also, it would be nice to use
+    # utils.save_and_reraise_exception() without an import loop
+    def inner(f):
+        def wrapped(*args, **kw):
+            try:
+                return f(*args, **kw)
+            except Exception, e:
+                # Save exception since it can be clobbered during processing
+                # below before we can re-raise
+                exc_info = sys.exc_info()
+
+                if notifier:
+                    payload = dict(args=args, exception=e)
+                    payload.update(kw)
+
+                    # Use a temp vars so we don't shadow
+                    # our outer definitions.
+                    temp_level = level
+                    if not temp_level:
+                        temp_level = notifier.ERROR
+
+                    temp_type = event_type
+                    if not temp_type:
+                        # If f has multiple decorators, they must use
+                        # functools.wraps to ensure the name is
+                        # propagated.
+                        temp_type = f.__name__
+
+                    notifier.notify(publisher_id, temp_type, temp_level,
+                                    payload)
+
+                # re-raise original exception since it may have been clobbered
+                raise exc_info[0], exc_info[1], exc_info[2]
+
+        return functools.wraps(f)(wrapped)
+    return inner
+
+
+class CinderException(Exception):
+    """Base Cinder Exception
+
+    To correctly use this class, inherit from it and define
+    a 'message' property. That message will get printf'd
+    with the keyword arguments provided to the constructor.
+
+    """
+    message = _("An unknown exception occurred.")
+
+    def __init__(self, message=None, **kwargs):
+        self.kwargs = kwargs
+
+        if 'code' not in self.kwargs:
+            try:
+                self.kwargs['code'] = self.code
+            except AttributeError:
+                pass
+
+        if not message:
+            try:
+                message = self.message % kwargs
+
+            except Exception as e:
+                # kwargs doesn't match a variable in the message
+                # log the issue and the kwargs
+                LOG.exception(_('Exception in string format operation'))
+                for name, value in kwargs.iteritems():
+                    LOG.error("%s: %s" % (name, value))
+                # at least get the core message out if something happened
+                message = self.message
+
+        super(CinderException, self).__init__(message)
+
+
+class DecryptionFailure(CinderException):
+    message = _("Failed to decrypt text")
+
+
+class ImagePaginationFailed(CinderException):
+    message = _("Failed to paginate through images from image service")
+
+
+class VirtualInterfaceCreateException(CinderException):
+    message = _("Virtual Interface creation failed")
+
+
+class VirtualInterfaceMacAddressException(CinderException):
+    message = _("5 attempts to create virtual interface"
+                "with unique mac address failed")
+
+
+class GlanceConnectionFailed(CinderException):
+    message = _("Connection to glance failed") + ": %(reason)s"
+
+
+class MelangeConnectionFailed(CinderException):
+    message = _("Connection to melange failed") + ": %(reason)s"
+
+
+class NotAuthorized(CinderException):
+    message = _("Not authorized.")
+    code = 403
+
+
+class AdminRequired(NotAuthorized):
+    message = _("User does not have admin privileges")
+
+
+class PolicyNotAuthorized(NotAuthorized):
+    message = _("Policy doesn't allow %(action)s to be performed.")
+
+
+class ImageNotAuthorized(CinderException):
+    message = _("Not authorized for image %(image_id)s.")
+
+
+class Invalid(CinderException):
+    message = _("Unacceptable parameters.")
+    code = 400
+
+
+class InvalidSnapshot(Invalid):
+    message = _("Invalid snapshot") + ": %(reason)s"
+
+
+class VolumeUnattached(Invalid):
+    message = _("Volume %(volume_id)s is not attached to anything")
+
+
+class InvalidKeypair(Invalid):
+    message = _("Keypair data is invalid")
+
+
+class SfJsonEncodeFailure(CinderException):
+    message = _("Failed to load data into json format")
+
+
+class InvalidRequest(Invalid):
+    message = _("The request is invalid.")
+
+
+class InvalidSignature(Invalid):
+    message = _("Invalid signature %(signature)s for user %(user)s.")
+
+
+class InvalidInput(Invalid):
+    message = _("Invalid input received") + ": %(reason)s"
+
+
+class InvalidInstanceType(Invalid):
+    message = _("Invalid instance type %(instance_type)s.")
+
+
+class InvalidVolumeType(Invalid):
+    message = _("Invalid volume type") + ": %(reason)s"
+
+
+class InvalidVolume(Invalid):
+    message = _("Invalid volume") + ": %(reason)s"
+
+
+class InvalidPortRange(Invalid):
+    message = _("Invalid port range %(from_port)s:%(to_port)s. %(msg)s")
+
+
+class InvalidIpProtocol(Invalid):
+    message = _("Invalid IP protocol %(protocol)s.")
+
+
+class InvalidContentType(Invalid):
+    message = _("Invalid content type %(content_type)s.")
+
+
+class InvalidCidr(Invalid):
+    message = _("Invalid cidr %(cidr)s.")
+
+
+class InvalidRPCConnectionReuse(Invalid):
+    message = _("Invalid reuse of an RPC connection.")
+
+
+class InvalidUnicodeParameter(Invalid):
+    message = _("Invalid Parameter: "
+                "Unicode is not supported by the current database.")
+
+
+# Cannot be templated as the error syntax varies.
+# msg needs to be constructed when raised.
+class InvalidParameterValue(Invalid):
+    message = _("%(err)s")
+
+
+class InvalidAggregateAction(Invalid):
+    message = _("Cannot perform action '%(action)s' on aggregate "
+                "%(aggregate_id)s. Reason: %(reason)s.")
+
+
+class InvalidGroup(Invalid):
+    message = _("Group not valid. Reason: %(reason)s")
+
+
+class InstanceInvalidState(Invalid):
+    message = _("Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot "
+                "%(method)s while the instance is in this state.")
+
+
+class InstanceNotRunning(Invalid):
+    message = _("Instance %(instance_id)s is not running.")
+
+
+class InstanceNotSuspended(Invalid):
+    message = _("Instance %(instance_id)s is not suspended.")
+
+
+class InstanceNotInRescueMode(Invalid):
+    message = _("Instance %(instance_id)s is not in rescue mode")
+
+
+class InstanceSuspendFailure(Invalid):
+    message = _("Failed to suspend instance") + ": %(reason)s"
+
+
+class InstanceResumeFailure(Invalid):
+    message = _("Failed to resume server") + ": %(reason)s."
+
+
+class InstanceRebootFailure(Invalid):
+    message = _("Failed to reboot instance") + ": %(reason)s"
+
+
+class InstanceTerminationFailure(Invalid):
+    message = _("Failed to terminate instance") + ": %(reason)s"
+
+
+class ServiceUnavailable(Invalid):
+    message = _("Service is unavailable at this time.")
+
+
+class VolumeServiceUnavailable(ServiceUnavailable):
+    message = _("Volume service is unavailable at this time.")
+
+
+class UnableToMigrateToSelf(Invalid):
+    message = _("Unable to migrate instance (%(instance_id)s) "
+                "to current host (%(host)s).")
+
+
+class DestinationHostUnavailable(Invalid):
+    message = _("Destination compute host is unavailable at this time.")
+
+
+class SourceHostUnavailable(Invalid):
+    message = _("Original compute host is unavailable at this time.")
+
+
+class InvalidHypervisorType(Invalid):
+    message = _("The supplied hypervisor type of is invalid.")
+
+
+class DestinationHypervisorTooOld(Invalid):
+    message = _("The instance requires a newer hypervisor version than "
+                "has been provided.")
+
+
+class DestinationDiskExists(Invalid):
+    message = _("The supplied disk path (%(path)s) already exists, "
+                "it is expected not to exist.")
+
+
+class InvalidDevicePath(Invalid):
+    message = _("The supplied device path (%(path)s) is invalid.")
+
+
+class DeviceIsBusy(Invalid):
+    message = _("The supplied device (%(device)s) is busy.")
+
+
+class InvalidCPUInfo(Invalid):
+    message = _("Unacceptable CPU info") + ": %(reason)s"
+
+
+class InvalidIpAddressError(Invalid):
+    message = _("%(address)s is not a valid IP v4/6 address.")
+
+
+class InvalidVLANTag(Invalid):
+    message = _("VLAN tag is not appropriate for the port group "
+                "%(bridge)s. Expected VLAN tag is %(tag)s, "
+                "but the one associated with the port group is %(pgroup)s.")
+
+
+class InvalidVLANPortGroup(Invalid):
+    message = _("vSwitch which contains the port group %(bridge)s is "
+                "not associated with the desired physical adapter. "
+                "Expected vSwitch is %(expected)s, but the one associated "
+                "is %(actual)s.")
+
+
+class InvalidDiskFormat(Invalid):
+    message = _("Disk format %(disk_format)s is not acceptable")
+
+
+class ImageUnacceptable(Invalid):
+    message = _("Image %(image_id)s is unacceptable: %(reason)s")
+
+
+class InstanceUnacceptable(Invalid):
+    message = _("Instance %(instance_id)s is unacceptable: %(reason)s")
+
+
+class NotFound(CinderException):
+    message = _("Resource could not be found.")
+    code = 404
+
+
+class FlagNotSet(NotFound):
+    message = _("Required flag %(flag)s not set.")
+
+
+class VolumeNotFound(NotFound):
+    message = _("Volume %(volume_id)s could not be found.")
+
+
+class SfAccountNotFound(NotFound):
+    message = _("Unable to locate account %(account_name)s on "
+                "Solidfire device")
+
+
+class VolumeNotFoundForInstance(VolumeNotFound):
+    message = _("Volume not found for instance %(instance_id)s.")
+
+
+class VolumeMetadataNotFound(NotFound):
+    message = _("Volume %(volume_id)s has no metadata with "
+                "key %(metadata_key)s.")
+
+
+class NoVolumeTypesFound(NotFound):
+    message = _("Zero volume types found.")
+
+
+class VolumeTypeNotFound(NotFound):
+    message = _("Volume type %(volume_type_id)s could not be found.")
+
+
+class VolumeTypeNotFoundByName(VolumeTypeNotFound):
+    message = _("Volume type with name %(volume_type_name)s "
+                "could not be found.")
+
+
+class VolumeTypeExtraSpecsNotFound(NotFound):
+    message = _("Volume Type %(volume_type_id)s has no extra specs with "
+                "key %(extra_specs_key)s.")
+
+
+class SnapshotNotFound(NotFound):
+    message = _("Snapshot %(snapshot_id)s could not be found.")
+
+
+class VolumeIsBusy(CinderException):
+    message = _("deleting volume %(volume_name)s that has snapshot")
+
+
+class SnapshotIsBusy(CinderException):
+    message = _("deleting snapshot %(snapshot_name)s that has "
+                "dependent volumes")
+
+
+class ISCSITargetNotFoundForVolume(NotFound):
+    message = _("No target id found for volume %(volume_id)s.")
+
+
+class DiskNotFound(NotFound):
+    message = _("No disk at %(location)s")
+
+
+class VolumeDriverNotFound(NotFound):
+    message = _("Could not find a handler for %(driver_type)s volume.")
+
+
+class InvalidImageRef(Invalid):
+    message = _("Invalid image href %(image_href)s.")
+
+
+class ListingImageRefsNotSupported(Invalid):
+    message = _("Some images have been stored via hrefs."
+          " This version of the api does not support displaying image hrefs.")
+
+
+class ImageNotFound(NotFound):
+    message = _("Image %(image_id)s could not be found.")
+
+
+class KernelNotFoundForImage(ImageNotFound):
+    message = _("Kernel not found for image %(image_id)s.")
+
+
+class UserNotFound(NotFound):
+    message = _("User %(user_id)s could not be found.")
+
+
+class ProjectNotFound(NotFound):
+    message = _("Project %(project_id)s could not be found.")
+
+
+class ProjectMembershipNotFound(NotFound):
+    message = _("User %(user_id)s is not a member of project %(project_id)s.")
+
+
+class UserRoleNotFound(NotFound):
+    message = _("Role %(role_id)s could not be found.")
+
+
+class StorageRepositoryNotFound(NotFound):
+    message = _("Cannot find SR to read/write VDI.")
+
+
+class DatastoreNotFound(NotFound):
+    message = _("Could not find the datastore reference(s) which the VM uses.")
+
+
+class FixedIpNotFound(NotFound):
+    message = _("No fixed IP associated with id %(id)s.")
+
+
+class FixedIpNotFoundForAddress(FixedIpNotFound):
+    message = _("Fixed ip not found for address %(address)s.")
+
+
+class FixedIpNotFoundForInstance(FixedIpNotFound):
+    message = _("Instance %(instance_id)s has zero fixed ips.")
+
+
+class FixedIpNotFoundForNetworkHost(FixedIpNotFound):
+    message = _("Network host %(host)s has zero fixed ips "
+                "in network %(network_id)s.")
+
+
+class FixedIpNotFoundForSpecificInstance(FixedIpNotFound):
+    message = _("Instance %(instance_id)s doesn't have fixed ip '%(ip)s'.")
+
+
+class FixedIpNotFoundForHost(FixedIpNotFound):
+    message = _("Host %(host)s has zero fixed ips.")
+
+
+class FixedIpNotFoundForNetwork(FixedIpNotFound):
+    message = _("Fixed IP address (%(address)s) does not exist in "
+                "network (%(network_uuid)s).")
+
+
+class FixedIpAlreadyInUse(CinderException):
+    message = _("Fixed IP address %(address)s is already in use.")
+
+
+class FixedIpInvalid(Invalid):
+    message = _("Fixed IP address %(address)s is invalid.")
+
+
+class NoMoreFixedIps(CinderException):
+    message = _("Zero fixed ips available.")
+
+
+class NoFixedIpsDefined(NotFound):
+    message = _("Zero fixed ips could be found.")
+
+
+class FloatingIpNotFound(NotFound):
+    message = _("Floating ip not found for id %(id)s.")
+
+
+class FloatingIpDNSExists(Invalid):
+    message = _("The DNS entry %(name)s already exists in domain %(domain)s.")
+
+
+class FloatingIpNotFoundForAddress(FloatingIpNotFound):
+    message = _("Floating ip not found for address %(address)s.")
+
+
+class FloatingIpNotFoundForHost(FloatingIpNotFound):
+    message = _("Floating ip not found for host %(host)s.")
+
+
+class NoMoreFloatingIps(FloatingIpNotFound):
+    message = _("Zero floating ips available.")
+
+
+class FloatingIpAssociated(CinderException):
+    message = _("Floating ip %(address)s is associated.")
+
+
+class FloatingIpNotAssociated(CinderException):
+    message = _("Floating ip %(address)s is not associated.")
+
+
+class NoFloatingIpsDefined(NotFound):
+    message = _("Zero floating ips exist.")
+
+
+class NoFloatingIpInterface(NotFound):
+    message = _("Interface %(interface)s not found.")
+
+
+class KeypairNotFound(NotFound):
+    message = _("Keypair %(name)s not found for user %(user_id)s")
+
+
+class CertificateNotFound(NotFound):
+    message = _("Certificate %(certificate_id)s not found.")
+
+
+class ServiceNotFound(NotFound):
+    message = _("Service %(service_id)s could not be found.")
+
+
+class HostNotFound(NotFound):
+    message = _("Host %(host)s could not be found.")
+
+
+class HostBinaryNotFound(NotFound):
+    message = _("Could not find binary %(binary)s on host %(host)s.")
+
+
+class AuthTokenNotFound(NotFound):
+    message = _("Auth token %(token)s could not be found.")
+
+
+class AccessKeyNotFound(NotFound):
+    message = _("Access Key %(access_key)s could not be found.")
+
+
+class QuotaNotFound(NotFound):
+    message = _("Quota could not be found")
+
+
+class ProjectQuotaNotFound(QuotaNotFound):
+    message = _("Quota for project %(project_id)s could not be found.")
+
+
+class QuotaClassNotFound(QuotaNotFound):
+    message = _("Quota class %(class_name)s could not be found.")
+
+
+class SecurityGroupNotFound(NotFound):
+    message = _("Security group %(security_group_id)s not found.")
+
+
+class SecurityGroupNotFoundForProject(SecurityGroupNotFound):
+    message = _("Security group %(security_group_id)s not found "
+                "for project %(project_id)s.")
+
+
+class SecurityGroupNotFoundForRule(SecurityGroupNotFound):
+    message = _("Security group with rule %(rule_id)s not found.")
+
+
+class SecurityGroupExistsForInstance(Invalid):
+    message = _("Security group %(security_group_id)s is already associated"
+                " with the instance %(instance_id)s")
+
+
+class SecurityGroupNotExistsForInstance(Invalid):
+    message = _("Security group %(security_group_id)s is not associated with"
+                " the instance %(instance_id)s")
+
+
+class MigrationNotFound(NotFound):
+    message = _("Migration %(migration_id)s could not be found.")
+
+
+class MigrationNotFoundByStatus(MigrationNotFound):
+    message = _("Migration not found for instance %(instance_id)s "
+                "with status %(status)s.")
+
+
+class NoInstanceTypesFound(NotFound):
+    message = _("Zero instance types found.")
+
+
+class InstanceTypeNotFound(NotFound):
+    message = _("Instance type %(instance_type_id)s could not be found.")
+
+
+class InstanceTypeNotFoundByName(InstanceTypeNotFound):
+    message = _("Instance type with name %(instance_type_name)s "
+                "could not be found.")
+
+
+class FlavorNotFound(NotFound):
+    message = _("Flavor %(flavor_id)s could not be found.")
+
+
+class CellNotFound(NotFound):
+    message = _("Cell %(cell_id)s could not be found.")
+
+
+class SchedulerHostFilterNotFound(NotFound):
+    message = _("Scheduler Host Filter %(filter_name)s could not be found.")
+
+
+class SchedulerCostFunctionNotFound(NotFound):
+    message = _("Scheduler cost function %(cost_fn_str)s could"
+                " not be found.")
+
+
+class SchedulerWeightFlagNotFound(NotFound):
+    message = _("Scheduler weight flag not found: %(flag_name)s")
+
+
+class InstanceMetadataNotFound(NotFound):
+    message = _("Instance %(instance_id)s has no metadata with "
+                "key %(metadata_key)s.")
+
+
+class InstanceTypeExtraSpecsNotFound(NotFound):
+    message = _("Instance Type %(instance_type_id)s has no extra specs with "
+                "key %(extra_specs_key)s.")
+
+
+class LDAPObjectNotFound(NotFound):
+    message = _("LDAP object could not be found")
+
+
+class LDAPUserNotFound(LDAPObjectNotFound):
+    message = _("LDAP user %(user_id)s could not be found.")
+
+
+class LDAPGroupNotFound(LDAPObjectNotFound):
+    message = _("LDAP group %(group_id)s could not be found.")
+
+
+class LDAPGroupMembershipNotFound(NotFound):
+    message = _("LDAP user %(user_id)s is not a member of group %(group_id)s.")
+
+
+class FileNotFound(NotFound):
+    message = _("File %(file_path)s could not be found.")
+
+
+class NoFilesFound(NotFound):
+    message = _("Zero files could be found.")
+
+
+class SwitchNotFoundForNetworkAdapter(NotFound):
+    message = _("Virtual switch associated with the "
+                "network adapter %(adapter)s not found.")
+
+
+class NetworkAdapterNotFound(NotFound):
+    message = _("Network adapter %(adapter)s could not be found.")
+
+
+class ClassNotFound(NotFound):
+    message = _("Class %(class_name)s could not be found: %(exception)s")
+
+
+class NotAllowed(CinderException):
+    message = _("Action not allowed.")
+
+
+class GlobalRoleNotAllowed(NotAllowed):
+    message = _("Unable to use global role %(role_id)s")
+
+
+class ImageRotationNotAllowed(CinderException):
+    message = _("Rotation is not allowed for snapshots")
+
+
+class RotationRequiredForBackup(CinderException):
+    message = _("Rotation param is required for backup image_type")
+
+
+#TODO(bcwaldon): EOL this exception!
+class Duplicate(CinderException):
+    pass
+
+
+class KeyPairExists(Duplicate):
+    message = _("Key pair %(key_name)s already exists.")
+
+
+class UserExists(Duplicate):
+    message = _("User %(user)s already exists.")
+
+
+class LDAPUserExists(UserExists):
+    message = _("LDAP user %(user)s already exists.")
+
+
+class LDAPGroupExists(Duplicate):
+    message = _("LDAP group %(group)s already exists.")
+
+
+class LDAPMembershipExists(Duplicate):
+    message = _("User %(uid)s is already a member of "
+                "the group %(group_dn)s")
+
+
+class ProjectExists(Duplicate):
+    message = _("Project %(project)s already exists.")
+
+
+class InstanceExists(Duplicate):
+    message = _("Instance %(name)s already exists.")
+
+
+class InstanceTypeExists(Duplicate):
+    message = _("Instance Type %(name)s already exists.")
+
+
+class VolumeTypeExists(Duplicate):
+    message = _("Volume Type %(name)s already exists.")
+
+
+class InvalidSharedStorage(CinderException):
+    message = _("%(path)s is on shared storage: %(reason)s")
+
+
+class MigrationError(CinderException):
+    message = _("Migration error") + ": %(reason)s"
+
+
+class MalformedRequestBody(CinderException):
+    message = _("Malformed message body: %(reason)s")
+
+
+class ConfigNotFound(NotFound):
+    message = _("Could not find config at %(path)s")
+
+
+class PasteAppNotFound(NotFound):
+    message = _("Could not load paste app '%(name)s' from %(path)s")
+
+
+class CannotResizeToSameSize(CinderException):
+    message = _("When resizing, instances must change size!")
+
+
+class ImageTooLarge(CinderException):
+    message = _("Image is larger than instance type allows")
+
+
+class ZoneRequestError(CinderException):
+    message = _("1 or more Zones could not complete the request")
+
+
+class InstanceTypeMemoryTooSmall(CinderException):
+    message = _("Instance type's memory is too small for requested image.")
+
+
+class InstanceTypeDiskTooSmall(CinderException):
+    message = _("Instance type's disk is too small for requested image.")
+
+
+class InsufficientFreeMemory(CinderException):
+    message = _("Insufficient free memory on compute node to start %(uuid)s.")
+
+
+class CouldNotFetchMetrics(CinderException):
+    message = _("Could not fetch bandwidth/cpu/disk metrics for this host.")
+
+
+class NoValidHost(CinderException):
+    message = _("No valid host was found. %(reason)s")
+
+
+class WillNotSchedule(CinderException):
+    message = _("Host %(host)s is not up or doesn't exist.")
+
+
+class QuotaError(CinderException):
+    message = _("Quota exceeded") + ": code=%(code)s"
+
+
+class AggregateError(CinderException):
+    message = _("Aggregate %(aggregate_id)s: action '%(action)s' "
+                "caused an error: %(reason)s.")
+
+
+class AggregateNotFound(NotFound):
+    message = _("Aggregate %(aggregate_id)s could not be found.")
+
+
+class AggregateNameExists(Duplicate):
+    message = _("Aggregate %(aggregate_name)s already exists.")
+
+
+class AggregateHostNotFound(NotFound):
+    message = _("Aggregate %(aggregate_id)s has no host %(host)s.")
+
+
+class AggregateMetadataNotFound(NotFound):
+    message = _("Aggregate %(aggregate_id)s has no metadata with "
+                "key %(metadata_key)s.")
+
+
+class AggregateHostConflict(Duplicate):
+    message = _("Host %(host)s already member of another aggregate.")
+
+
+class AggregateHostExists(Duplicate):
+    message = _("Aggregate %(aggregate_id)s already has host %(host)s.")
+
+
+class DuplicateSfVolumeNames(Duplicate):
+    message = _("Detected more than one volume with name %(vol_name)s")
+
+
+class VolumeTypeCreateFailed(CinderException):
+    message = _("Cannot create volume_type with "
+                "name %(name)s and specs %(extra_specs)s")
+
+
+class InstanceTypeCreateFailed(CinderException):
+    message = _("Unable to create instance type")
+
+
+class SolidFireAPIException(CinderException):
+    message = _("Bad response from SolidFire API")
+
+
+class SolidFireAPIStatusException(SolidFireAPIException):
+    message = _("Error in SolidFire API response: status=%(status)s")
+
+
+class SolidFireAPIDataException(SolidFireAPIException):
+    message = _("Error in SolidFire API response: data=%(data)s")
+
+
+class DuplicateVlan(Duplicate):
+    message = _("Detected existing vlan with id %(vlan)d")
+
+
+class InstanceNotFound(NotFound):
+    message = _("Instance %(instance_id)s could not be found.")
+
+
+class InvalidInstanceIDMalformed(Invalid):
+    message = _("Invalid id: %(val)s (expecting \"i-...\").")
+
+
+class CouldNotFetchImage(CinderException):
+    message = _("Could not fetch image %(image)s")
diff --git a/cinder/flags.py b/cinder/flags.py
new file mode 100644
index 000000000..3f1d9f5d8
--- /dev/null
+++ b/cinder/flags.py
@@ -0,0 +1,356 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+# Copyright 2012 Red Hat, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Command-line flag library.
+
+Emulates gflags by wrapping cfg.ConfigOpts.
+
+The idea is to move fully to cfg eventually, and this wrapper is a
+stepping stone.
+
+"""
+
+import os
+import socket
+import sys
+
+from cinder.compat import flagfile
+from cinder.openstack.common import cfg
+
+
+class CinderConfigOpts(cfg.CommonConfigOpts):
+
+    def __init__(self, *args, **kwargs):
+        super(CinderConfigOpts, self).__init__(*args, **kwargs)
+        self.disable_interspersed_args()
+
+    def __call__(self, argv):
+        with flagfile.handle_flagfiles_managed(argv[1:]) as args:
+            return argv[:1] + super(CinderConfigOpts, self).__call__(args)
+
+
+FLAGS = CinderConfigOpts()
+
+
+class UnrecognizedFlag(Exception):
+    pass
+
+
+def DECLARE(name, module_string, flag_values=FLAGS):
+    if module_string not in sys.modules:
+        __import__(module_string, globals(), locals())
+    if name not in flag_values:
+        raise UnrecognizedFlag('%s not defined by %s' % (name, module_string))
+
+
+def _get_my_ip():
+    """
+    Returns the actual ip of the local machine.
+
+    This code figures out what source address would be used if some traffic
+    were to be sent out to some well known address on the Internet. In this
+    case, a Google DNS server is used, but the specific address does not
+    matter much.  No traffic is actually sent.
+    """
+    try:
+        csock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+        csock.connect(('8.8.8.8', 80))
+        (addr, port) = csock.getsockname()
+        csock.close()
+        return addr
+    except socket.error:
+        return "127.0.0.1"
+
+
+log_opts = [
+    cfg.StrOpt('logdir',
+               default=None,
+               help='Log output to a per-service log file in named directory'),
+    cfg.StrOpt('logfile',
+               default=None,
+               help='Log output to a named file'),
+    cfg.BoolOpt('use_stderr',
+                default=True,
+                help='Log output to standard error'),
+    ]
+
+core_opts = [
+    cfg.StrOpt('connection_type',
+               default=None,
+               help='Virtualization api connection type : libvirt, xenapi, '
+                    'or fake'),
+    cfg.StrOpt('sql_connection',
+               default='sqlite:///$state_path/$sqlite_db',
+               help='The SQLAlchemy connection string used to connect to the '
+                    'database'),
+    cfg.IntOpt('sql_connection_debug',
+               default=0,
+               help='Verbosity of SQL debugging information. 0=None, '
+                    '100=Everything'),
+    cfg.StrOpt('api_paste_config',
+               default="api-paste.ini",
+               help='File name for the paste.deploy config for cinder-api'),
+    cfg.StrOpt('pybasedir',
+               default=os.path.abspath(os.path.join(os.path.dirname(__file__),
+                                                    '../')),
+               help='Directory where the cinder python module is installed'),
+    cfg.StrOpt('bindir',
+               default='$pybasedir/bin',
+               help='Directory where cinder binaries are installed'),
+    cfg.StrOpt('state_path',
+               default='$pybasedir',
+               help="Top-level directory for maintaining cinder's state"),
+    cfg.StrOpt('lock_path',
+               default='$pybasedir',
+               help='Directory to use for lock files'),
+    ]
+
+debug_opts = [
+    cfg.BoolOpt('fake_rabbit',
+                default=False,
+                help='If passed, use a fake RabbitMQ provider'),
+]
+
+FLAGS.register_cli_opts(log_opts)
+FLAGS.register_cli_opts(core_opts)
+FLAGS.register_cli_opts(debug_opts)
+
+global_opts = [
+    cfg.StrOpt('my_ip',
+               default=_get_my_ip(),
+               help='ip address of this host'),
+    cfg.ListOpt('region_list',
+                default=[],
+                help='list of region=fqdn pairs separated by commas'),
+    cfg.StrOpt('aws_access_key_id',
+               default='admin',
+               help='AWS Access ID'),
+    cfg.StrOpt('aws_secret_access_key',
+               default='admin',
+               help='AWS Access Key'),
+    cfg.StrOpt('glance_host',
+               default='$my_ip',
+               help='default glance hostname or ip'),
+    cfg.IntOpt('glance_port',
+               default=9292,
+               help='default glance port'),
+    cfg.ListOpt('glance_api_servers',
+                default=['$glance_host:$glance_port'],
+                help='A list of the glance api servers available to cinder '
+                     '([hostname|ip]:port)'),
+    cfg.StrOpt('scheduler_topic',
+               default='scheduler',
+               help='the topic scheduler nodes listen on'),
+    cfg.StrOpt('volume_topic',
+               default='volume',
+               help='the topic volume nodes listen on'),
+    cfg.StrOpt('rabbit_host',
+               default='localhost',
+               help='the RabbitMQ host'),
+    cfg.IntOpt('rabbit_port',
+               default=5672,
+               help='the RabbitMQ port'),
+    cfg.BoolOpt('rabbit_use_ssl',
+                default=False,
+                help='connect over SSL for RabbitMQ'),
+    cfg.StrOpt('rabbit_userid',
+               default='guest',
+               help='the RabbitMQ userid'),
+    cfg.StrOpt('rabbit_password',
+               default='guest',
+               help='the RabbitMQ password'),
+    cfg.StrOpt('rabbit_virtual_host',
+               default='/',
+               help='the RabbitMQ virtual host'),
+    cfg.IntOpt('rabbit_retry_interval',
+               default=1,
+               help='how frequently to retry connecting with RabbitMQ'),
+    cfg.IntOpt('rabbit_retry_backoff',
+               default=2,
+               help='how long to backoff for between retries when connecting '
+                    'to RabbitMQ'),
+    cfg.IntOpt('rabbit_max_retries',
+               default=0,
+               help='maximum retries with trying to connect to RabbitMQ '
+                    '(the default of 0 implies an infinite retry count)'),
+    cfg.StrOpt('control_exchange',
+               default='cinder',
+               help='the main RabbitMQ exchange to connect to'),
+    cfg.BoolOpt('rabbit_durable_queues',
+                default=False,
+                help='use durable queues in RabbitMQ'),
+    cfg.BoolOpt('api_rate_limit',
+                default=True,
+                help='whether to rate limit the api'),
+    cfg.ListOpt('enabled_apis',
+                default=['osapi_volume'],
+                help='a list of APIs to enable by default'),
+    cfg.ListOpt('osapi_volume_ext_list',
+                default=[],
+                help='Specify list of extensions to load when using osapi_'
+                     'volume_extension option with cinder.api.openstack.'
+                     'volume.contrib.select_extensions'),
+    cfg.MultiStrOpt('osapi_volume_extension',
+                    default=[
+                      'cinder.api.openstack.volume.contrib.standard_extensions'
+                      ],
+                    help='osapi volume extension to load'),
+    cfg.StrOpt('osapi_scheme',
+               default='http',
+               help='the protocol to use when connecting to the openstack api '
+                    'server (http, https)'),
+    cfg.StrOpt('osapi_path',
+               default='/v1.1/',
+               help='the path prefix used to call the openstack api server'),
+    cfg.StrOpt('osapi_compute_link_prefix',
+               default=None,
+               help='Base URL that will be presented to users in links '
+                    'to the OpenStack Compute API'),
+    cfg.IntOpt('osapi_max_limit',
+               default=1000,
+               help='the maximum number of items returned in a single '
+                    'response from a collection resource'),
+    cfg.StrOpt('metadata_host',
+               default='$my_ip',
+               help='the ip for the metadata api server'),
+    cfg.IntOpt('metadata_port',
+               default=8775,
+               help='the port for the metadata api port'),
+    cfg.StrOpt('default_project',
+               default='openstack',
+               help='the default project to use for openstack'),
+    cfg.StrOpt('default_image',
+               default='ami-11111',
+               help='default image to use, testing only'),
+    cfg.StrOpt('default_instance_type',
+               default='m1.small',
+               help='default instance type to use, testing only'),
+    cfg.StrOpt('null_kernel',
+               default='nokernel',
+               help='kernel image that indicates not to use a kernel, but to '
+                    'use a raw disk image instead'),
+    cfg.StrOpt('vpn_image_id',
+               default='0',
+               help='image id used when starting up a cloudpipe vpn server'),
+    cfg.StrOpt('vpn_key_suffix',
+               default='-vpn',
+               help='Suffix to add to project name for vpn key and secgroups'),
+    cfg.IntOpt('auth_token_ttl',
+               default=3600,
+               help='Seconds for auth tokens to linger'),
+    cfg.StrOpt('logfile_mode',
+               default='0644',
+               help='Default file mode used when creating log files'),
+    cfg.StrOpt('sqlite_db',
+               default='cinder.sqlite',
+               help='the filename to use with sqlite'),
+    cfg.BoolOpt('sqlite_synchronous',
+                default=True,
+                help='If passed, use synchronous mode for sqlite'),
+    cfg.IntOpt('sql_idle_timeout',
+               default=3600,
+               help='timeout before idle sql connections are reaped'),
+    cfg.IntOpt('sql_max_retries',
+               default=10,
+               help='maximum db connection retries during startup. '
+                    '(setting -1 implies an infinite retry count)'),
+    cfg.IntOpt('sql_retry_interval',
+               default=10,
+               help='interval between retries of opening a sql connection'),
+    cfg.StrOpt('volume_manager',
+               default='cinder.volume.manager.VolumeManager',
+               help='full class name for the Manager for volume'),
+    cfg.StrOpt('scheduler_manager',
+               default='cinder.scheduler.manager.SchedulerManager',
+               help='full class name for the Manager for scheduler'),
+    cfg.StrOpt('host',
+               default=socket.gethostname(),
+               help='Name of this node.  This can be an opaque identifier.  '
+                    'It is not necessarily a hostname, FQDN, or IP address.'),
+    cfg.StrOpt('node_availability_zone',
+               default='cinder',
+               help='availability zone of this node'),
+    cfg.StrOpt('notification_driver',
+               default='cinder.notifier.no_op_notifier',
+               help='Default driver for sending notifications'),
+    cfg.ListOpt('memcached_servers',
+                default=None,
+                help='Memcached servers or None for in process cache.'),
+    cfg.StrOpt('instance_usage_audit_period',
+               default='month',
+               help='time period to generate instance usages for.  '
+                    'Time period must be hour, day, month or year'),
+    cfg.IntOpt('bandwith_poll_interval',
+               default=600,
+               help='interval to pull bandwidth usage info'),
+    cfg.BoolOpt('start_guests_on_host_boot',
+                default=False,
+                help='Whether to restart guests when the host reboots'),
+    cfg.BoolOpt('resume_guests_state_on_host_boot',
+                default=False,
+                help='Whether to start guests that were running before the '
+                     'host rebooted'),
+    cfg.StrOpt('default_ephemeral_format',
+               default=None,
+               help='The default format a ephemeral_volume will be '
+                    'formatted with on creation.'),
+    cfg.StrOpt('root_helper',
+               default='sudo',
+               help='Command prefix to use for running commands as root'),
+    cfg.BoolOpt('use_ipv6',
+                default=False,
+                help='use ipv6'),
+    cfg.BoolOpt('monkey_patch',
+                default=False,
+                help='Whether to log monkey patching'),
+    cfg.ListOpt('monkey_patch_modules',
+                default=[],
+                help='List of modules/decorators to monkey patch'),
+    cfg.BoolOpt('allow_resize_to_same_host',
+                default=False,
+                help='Allow destination machine to match source for resize. '
+                     'Useful when testing in single-host environments.'),
+    cfg.IntOpt('reclaim_instance_interval',
+               default=0,
+               help='Interval in seconds for reclaiming deleted instances'),
+    cfg.IntOpt('zombie_instance_updated_at_window',
+               default=172800,
+               help='Number of seconds zombie instances are cleaned up.'),
+    cfg.IntOpt('service_down_time',
+               default=60,
+               help='maximum time since last check-in for up service'),
+    cfg.StrOpt('default_schedule_zone',
+               default=None,
+               help='availability zone to use when user doesn\'t specify one'),
+    cfg.ListOpt('isolated_images',
+                default=[],
+                help='Images to run on isolated host'),
+    cfg.ListOpt('isolated_hosts',
+                default=[],
+                help='Host reserved for specific images'),
+    cfg.StrOpt('volume_api_class',
+                default='cinder.volume.api.API',
+                help='The full class name of the volume API class to use'),
+    cfg.StrOpt('auth_strategy',
+               default='noauth',
+               help='The strategy to use for auth. Supports noauth, keystone, '
+                    'and deprecated.'),
+]
+
+FLAGS.register_opts(global_opts)
diff --git a/cinder/locale/bs/LC_MESSAGES/nova.po b/cinder/locale/bs/LC_MESSAGES/nova.po
new file mode 100644
index 000000000..f2171c73d
--- /dev/null
+++ b/cinder/locale/bs/LC_MESSAGES/nova.po
@@ -0,0 +1,8201 @@
+# Bosnian translation for cinder
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the cinder package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version:  cinder\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-04-08 23:04+0000\n"
+"PO-Revision-Date: 2012-01-19 20:22+0000\n"
+"Last-Translator: yazar  <zrncescientiae@gmail.com>\n"
+"Language-Team: Bosnian <bs@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: cinder/context.py:59
+#, python-format
+msgid "Arguments dropped when creating context: %s"
+msgstr ""
+
+#: cinder/context.py:90
+#, python-format
+msgid "read_deleted can only be one of 'no', 'yes' or 'only', not %r"
+msgstr ""
+
+#: cinder/crypto.py:48
+msgid "Filename of root CA"
+msgstr ""
+
+#: cinder/crypto.py:51
+msgid "Filename of private key"
+msgstr ""
+
+#: cinder/crypto.py:54
+msgid "Filename of root Certificate Revocation List"
+msgstr ""
+
+#: cinder/crypto.py:57
+msgid "Where we keep our keys"
+msgstr ""
+
+#: cinder/crypto.py:60
+msgid "Where we keep our root CA"
+msgstr ""
+
+#: cinder/crypto.py:63
+msgid "Should we use a CA for each project?"
+msgstr ""
+
+#: cinder/crypto.py:67
+#, python-format
+msgid "Subject for certificate for users, %s for project, user, timestamp"
+msgstr ""
+
+#: cinder/crypto.py:72
+#, python-format
+msgid "Subject for certificate for projects, %s for project, timestamp"
+msgstr ""
+
+#: cinder/crypto.py:292
+#, python-format
+msgid "Flags path: %s"
+msgstr ""
+
+#: cinder/exception.py:56
+msgid "Unexpected error while running command."
+msgstr "Neočekivana greška prilikom pokretanja komande."
+
+#: cinder/exception.py:59
+#, python-format
+msgid ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+msgstr ""
+
+#: cinder/exception.py:94
+msgid "DB exception wrapped."
+msgstr ""
+
+#: cinder/exception.py:155
+msgid "An unknown exception occurred."
+msgstr ""
+
+#: cinder/exception.py:178
+msgid "Failed to decrypt text"
+msgstr ""
+
+#: cinder/exception.py:182
+msgid "Failed to paginate through images from image service"
+msgstr ""
+
+#: cinder/exception.py:186
+msgid "Virtual Interface creation failed"
+msgstr ""
+
+#: cinder/exception.py:190
+msgid "5 attempts to create virtual interfacewith unique mac address failed"
+msgstr ""
+
+#: cinder/exception.py:195
+msgid "Connection to glance failed"
+msgstr ""
+
+#: cinder/exception.py:199
+msgid "Connection to melange failed"
+msgstr ""
+
+#: cinder/exception.py:203
+msgid "Not authorized."
+msgstr ""
+
+#: cinder/exception.py:208
+msgid "User does not have admin privileges"
+msgstr ""
+
+#: cinder/exception.py:212
+#, python-format
+msgid "Policy doesn't allow %(action)s to be performed."
+msgstr ""
+
+#: cinder/exception.py:216
+#, python-format
+msgid "Not authorized for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:220
+msgid "Unacceptable parameters."
+msgstr ""
+
+#: cinder/exception.py:225
+msgid "Invalid snapshot"
+msgstr ""
+
+#: cinder/exception.py:229
+#, python-format
+msgid "Volume %(volume_id)s is not attached to anything"
+msgstr ""
+
+#: cinder/exception.py:233 cinder/api/openstack/compute/contrib/keypairs.py:113
+msgid "Keypair data is invalid"
+msgstr ""
+
+#: cinder/exception.py:237
+msgid "Failed to load data into json format"
+msgstr ""
+
+#: cinder/exception.py:241
+msgid "The request is invalid."
+msgstr ""
+
+#: cinder/exception.py:245
+#, python-format
+msgid "Invalid signature %(signature)s for user %(user)s."
+msgstr ""
+
+#: cinder/exception.py:249
+msgid "Invalid input received"
+msgstr ""
+
+#: cinder/exception.py:253
+#, python-format
+msgid "Invalid instance type %(instance_type)s."
+msgstr ""
+
+#: cinder/exception.py:257
+msgid "Invalid volume type"
+msgstr ""
+
+#: cinder/exception.py:261
+msgid "Invalid volume"
+msgstr ""
+
+#: cinder/exception.py:265
+#, python-format
+msgid "Invalid port range %(from_port)s:%(to_port)s. %(msg)s"
+msgstr ""
+
+#: cinder/exception.py:269
+#, python-format
+msgid "Invalid IP protocol %(protocol)s."
+msgstr ""
+
+#: cinder/exception.py:273
+#, python-format
+msgid "Invalid content type %(content_type)s."
+msgstr ""
+
+#: cinder/exception.py:277
+#, python-format
+msgid "Invalid cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:281
+msgid "Invalid reuse of an RPC connection."
+msgstr ""
+
+#: cinder/exception.py:285
+msgid "Invalid Parameter: Unicode is not supported by the current database."
+msgstr ""
+
+#: cinder/exception.py:292
+#, python-format
+msgid "%(err)s"
+msgstr ""
+
+#: cinder/exception.py:296
+#, python-format
+msgid ""
+"Cannot perform action '%(action)s' on aggregate %(aggregate_id)s. Reason:"
+" %(reason)s."
+msgstr ""
+
+#: cinder/exception.py:301
+#, python-format
+msgid "Group not valid. Reason: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:305
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot %(method)s while"
+" the instance is in this state."
+msgstr ""
+
+#: cinder/exception.py:310
+#, python-format
+msgid "Instance %(instance_id)s is not running."
+msgstr ""
+
+#: cinder/exception.py:314
+#, python-format
+msgid "Instance %(instance_id)s is not suspended."
+msgstr ""
+
+#: cinder/exception.py:318
+#, python-format
+msgid "Instance %(instance_id)s is not in rescue mode"
+msgstr ""
+
+#: cinder/exception.py:322
+msgid "Failed to suspend instance"
+msgstr ""
+
+#: cinder/exception.py:326
+msgid "Failed to resume server"
+msgstr ""
+
+#: cinder/exception.py:330
+msgid "Failed to reboot instance"
+msgstr ""
+
+#: cinder/exception.py:334
+msgid "Failed to terminate instance"
+msgstr ""
+
+#: cinder/exception.py:338
+msgid "Service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:342
+msgid "Volume service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:346
+msgid "Compute service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:350
+#, python-format
+msgid "Unable to migrate instance (%(instance_id)s) to current host (%(host)s)."
+msgstr ""
+
+#: cinder/exception.py:355
+msgid "Destination compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:359
+msgid "Original compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:363
+msgid "The supplied hypervisor type of is invalid."
+msgstr ""
+
+#: cinder/exception.py:367
+msgid "The instance requires a newer hypervisor version than has been provided."
+msgstr ""
+
+#: cinder/exception.py:372
+#, python-format
+msgid ""
+"The supplied disk path (%(path)s) already exists, it is expected not to "
+"exist."
+msgstr ""
+
+#: cinder/exception.py:377
+#, python-format
+msgid "The supplied device path (%(path)s) is invalid."
+msgstr ""
+
+#: cinder/exception.py:381
+#, python-format
+msgid "The supplied device (%(device)s) is busy."
+msgstr ""
+
+#: cinder/exception.py:385
+msgid "Unacceptable CPU info"
+msgstr ""
+
+#: cinder/exception.py:389
+#, python-format
+msgid "%(address)s is not a valid IP v4/6 address."
+msgstr ""
+
+#: cinder/exception.py:393
+#, python-format
+msgid ""
+"VLAN tag is not appropriate for the port group %(bridge)s. Expected VLAN "
+"tag is %(tag)s, but the one associated with the port group is %(pgroup)s."
+msgstr ""
+
+#: cinder/exception.py:399
+#, python-format
+msgid ""
+"vSwitch which contains the port group %(bridge)s is not associated with "
+"the desired physical adapter. Expected vSwitch is %(expected)s, but the "
+"one associated is %(actual)s."
+msgstr ""
+
+#: cinder/exception.py:406
+#, python-format
+msgid "Disk format %(disk_format)s is not acceptable"
+msgstr ""
+
+#: cinder/exception.py:410
+#, python-format
+msgid "Image %(image_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:414
+#, python-format
+msgid "Instance %(instance_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:418
+#, python-format
+msgid "Ec2 id %(ec2_id)s is unacceptable."
+msgstr ""
+
+#: cinder/exception.py:422
+msgid "Resource could not be found."
+msgstr ""
+
+#: cinder/exception.py:427
+#, python-format
+msgid "Required flag %(flag)s not set."
+msgstr ""
+
+#: cinder/exception.py:431
+#, python-format
+msgid "Volume %(volume_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:435
+#, python-format
+msgid "Unable to locate account %(account_name)s on Solidfire device"
+msgstr ""
+
+#: cinder/exception.py:440
+#, python-format
+msgid "Volume not found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:444
+#, python-format
+msgid "Volume %(volume_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:449
+msgid "Zero volume types found."
+msgstr ""
+
+#: cinder/exception.py:453
+#, python-format
+msgid "Volume type %(volume_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:457
+#, python-format
+msgid "Volume type with name %(volume_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:462
+#, python-format
+msgid ""
+"Volume Type %(volume_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:467
+#, python-format
+msgid "Snapshot %(snapshot_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:471
+#, python-format
+msgid "deleting volume %(volume_name)s that has snapshot"
+msgstr ""
+
+#: cinder/exception.py:475
+#, python-format
+msgid "deleting snapshot %(snapshot_name)s that has dependent volumes"
+msgstr ""
+
+#: cinder/exception.py:480
+#, python-format
+msgid "No target id found for volume %(volume_id)s."
+msgstr ""
+
+#: cinder/exception.py:484
+#, python-format
+msgid "No disk at %(location)s"
+msgstr ""
+
+#: cinder/exception.py:488
+#, python-format
+msgid "Could not find a handler for %(driver_type)s volume."
+msgstr ""
+
+#: cinder/exception.py:492
+#, python-format
+msgid "Invalid image href %(image_href)s."
+msgstr ""
+
+#: cinder/exception.py:496
+msgid ""
+"Some images have been stored via hrefs. This version of the api does not "
+"support displaying image hrefs."
+msgstr ""
+
+#: cinder/exception.py:501
+#, python-format
+msgid "Image %(image_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:505
+#, python-format
+msgid "Kernel not found for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:509
+#, python-format
+msgid "User %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:513
+#, python-format
+msgid "Project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:517
+#, python-format
+msgid "User %(user_id)s is not a member of project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:521
+#, python-format
+msgid "Role %(role_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:525
+msgid "Cannot find SR to read/write VDI."
+msgstr ""
+
+#: cinder/exception.py:529
+#, python-format
+msgid "%(req)s is required to create a network."
+msgstr ""
+
+#: cinder/exception.py:533
+#, python-format
+msgid "Network %(network_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:537
+#, python-format
+msgid "Network could not be found for bridge %(bridge)s"
+msgstr ""
+
+#: cinder/exception.py:541
+#, python-format
+msgid "Network could not be found for uuid %(uuid)s"
+msgstr ""
+
+#: cinder/exception.py:545
+#, python-format
+msgid "Network could not be found with cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:549
+#, python-format
+msgid "Network could not be found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:553
+msgid "No networks defined."
+msgstr ""
+
+#: cinder/exception.py:557
+#, python-format
+msgid ""
+"Either Network uuid %(network_uuid)s is not present or is not assigned to"
+" the project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:562
+#, python-format
+msgid "Host is not set to the network (%(network_id)s)."
+msgstr ""
+
+#: cinder/exception.py:566
+#, python-format
+msgid "Network %(network)s has active ports, cannot delete."
+msgstr ""
+
+#: cinder/exception.py:570
+msgid "Could not find the datastore reference(s) which the VM uses."
+msgstr ""
+
+#: cinder/exception.py:574
+#, python-format
+msgid "No fixed IP associated with id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:578
+#, python-format
+msgid "Fixed ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:582
+#, python-format
+msgid "Instance %(instance_id)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:586
+#, python-format
+msgid "Network host %(host)s has zero fixed ips in network %(network_id)s."
+msgstr ""
+
+#: cinder/exception.py:591
+#, python-format
+msgid "Instance %(instance_id)s doesn't have fixed ip '%(ip)s'."
+msgstr ""
+
+#: cinder/exception.py:595
+#, python-format
+msgid "Host %(host)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:599
+#, python-format
+msgid ""
+"Fixed IP address (%(address)s) does not exist in network "
+"(%(network_uuid)s)."
+msgstr ""
+
+#: cinder/exception.py:604
+#, python-format
+msgid "Fixed IP address %(address)s is already in use."
+msgstr ""
+
+#: cinder/exception.py:608
+#, python-format
+msgid "Fixed IP address %(address)s is invalid."
+msgstr ""
+
+#: cinder/exception.py:612
+msgid "Zero fixed ips available."
+msgstr ""
+
+#: cinder/exception.py:616
+msgid "Zero fixed ips could be found."
+msgstr ""
+
+#: cinder/exception.py:620
+#, python-format
+msgid "Floating ip not found for id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:624
+#, python-format
+msgid "The DNS entry %(name)s already exists in domain %(domain)s."
+msgstr ""
+
+#: cinder/exception.py:628
+#, python-format
+msgid "Floating ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:632
+#, python-format
+msgid "Floating ip not found for host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:636
+msgid "Zero floating ips available."
+msgstr ""
+
+#: cinder/exception.py:640
+#, python-format
+msgid "Floating ip %(address)s is associated."
+msgstr ""
+
+#: cinder/exception.py:644
+#, python-format
+msgid "Floating ip %(address)s is not associated."
+msgstr ""
+
+#: cinder/exception.py:648
+msgid "Zero floating ips exist."
+msgstr ""
+
+#: cinder/exception.py:652
+#, python-format
+msgid "Interface %(interface)s not found."
+msgstr ""
+
+#: cinder/exception.py:656
+#, python-format
+msgid "Keypair %(name)s not found for user %(user_id)s"
+msgstr ""
+
+#: cinder/exception.py:660
+#, python-format
+msgid "Certificate %(certificate_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:664
+#, python-format
+msgid "Service %(service_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:668
+#, python-format
+msgid "Host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:672
+#, python-format
+msgid "Compute host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:676
+#, python-format
+msgid "Could not find binary %(binary)s on host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:680
+#, python-format
+msgid "Auth token %(token)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:684
+#, python-format
+msgid "Access Key %(access_key)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:688
+msgid "Quota could not be found"
+msgstr ""
+
+#: cinder/exception.py:692
+#, python-format
+msgid "Quota for project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:696
+#, python-format
+msgid "Quota class %(class_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:700
+#, python-format
+msgid "Security group %(security_group_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:704
+#, python-format
+msgid "Security group %(security_group_id)s not found for project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:709
+#, python-format
+msgid "Security group with rule %(rule_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:713
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is already associated with the "
+"instance %(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:718
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is not associated with the instance "
+"%(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:723
+#, python-format
+msgid "Migration %(migration_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:727
+#, python-format
+msgid "Migration not found for instance %(instance_id)s with status %(status)s."
+msgstr ""
+
+#: cinder/exception.py:732
+#, python-format
+msgid "Console pool %(pool_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:736
+#, python-format
+msgid ""
+"Console pool of type %(console_type)s for compute host %(compute_host)s "
+"on proxy host %(host)s not found."
+msgstr ""
+
+#: cinder/exception.py:742
+#, python-format
+msgid "Console %(console_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:746
+#, python-format
+msgid "Console for instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:750
+#, python-format
+msgid ""
+"Console for instance %(instance_id)s in pool %(pool_id)s could not be "
+"found."
+msgstr ""
+
+#: cinder/exception.py:755
+#, python-format
+msgid "Invalid console type %(console_type)s "
+msgstr ""
+
+#: cinder/exception.py:759
+msgid "Zero instance types found."
+msgstr ""
+
+#: cinder/exception.py:763
+#, python-format
+msgid "Instance type %(instance_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:767
+#, python-format
+msgid "Instance type with name %(instance_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:772
+#, python-format
+msgid "Flavor %(flavor_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:776
+#, python-format
+msgid "Cell %(cell_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:780
+#, python-format
+msgid "Scheduler Host Filter %(filter_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:784
+#, python-format
+msgid "Scheduler cost function %(cost_fn_str)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:789
+#, python-format
+msgid "Scheduler weight flag not found: %(flag_name)s"
+msgstr ""
+
+#: cinder/exception.py:793
+#, python-format
+msgid "Instance %(instance_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:798
+#, python-format
+msgid ""
+"Instance Type %(instance_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:803
+msgid "LDAP object could not be found"
+msgstr ""
+
+#: cinder/exception.py:807
+#, python-format
+msgid "LDAP user %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:811
+#, python-format
+msgid "LDAP group %(group_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:815
+#, python-format
+msgid "LDAP user %(user_id)s is not a member of group %(group_id)s."
+msgstr ""
+
+#: cinder/exception.py:819
+#, python-format
+msgid "File %(file_path)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:823
+msgid "Zero files could be found."
+msgstr ""
+
+#: cinder/exception.py:827
+#, python-format
+msgid "Virtual switch associated with the network adapter %(adapter)s not found."
+msgstr ""
+
+#: cinder/exception.py:832
+#, python-format
+msgid "Network adapter %(adapter)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:836
+#, python-format
+msgid "Class %(class_name)s could not be found: %(exception)s"
+msgstr ""
+
+#: cinder/exception.py:840
+msgid "Action not allowed."
+msgstr ""
+
+#: cinder/exception.py:844
+#, python-format
+msgid "Unable to use global role %(role_id)s"
+msgstr ""
+
+#: cinder/exception.py:848
+msgid "Rotation is not allowed for snapshots"
+msgstr ""
+
+#: cinder/exception.py:852
+msgid "Rotation param is required for backup image_type"
+msgstr ""
+
+#: cinder/exception.py:861
+#, python-format
+msgid "Key pair %(key_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:865
+#, python-format
+msgid "User %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:869
+#, python-format
+msgid "LDAP user %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:873
+#, python-format
+msgid "LDAP group %(group)s already exists."
+msgstr ""
+
+#: cinder/exception.py:877
+#, python-format
+msgid "User %(uid)s is already a member of the group %(group_dn)s"
+msgstr ""
+
+#: cinder/exception.py:882
+#, python-format
+msgid "Project %(project)s already exists."
+msgstr ""
+
+#: cinder/exception.py:886
+#, python-format
+msgid "Instance %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:890
+#, python-format
+msgid "Instance Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:894
+#, python-format
+msgid "Volume Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:898
+#, python-format
+msgid "%(path)s is on shared storage: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:902
+msgid "Migration error"
+msgstr ""
+
+#: cinder/exception.py:906
+#, python-format
+msgid "Malformed message body: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:910
+#, python-format
+msgid "Could not find config at %(path)s"
+msgstr ""
+
+#: cinder/exception.py:914
+#, python-format
+msgid "Could not load paste app '%(name)s' from %(path)s"
+msgstr ""
+
+#: cinder/exception.py:918
+msgid "When resizing, instances must change size!"
+msgstr ""
+
+#: cinder/exception.py:922
+msgid "Image is larger than instance type allows"
+msgstr ""
+
+#: cinder/exception.py:926
+msgid "1 or more Zones could not complete the request"
+msgstr ""
+
+#: cinder/exception.py:930
+msgid "Instance type's memory is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:934
+msgid "Instance type's disk is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:938
+#, python-format
+msgid "Insufficient free memory on compute node to start %(uuid)s."
+msgstr ""
+
+#: cinder/exception.py:942
+msgid "Could not fetch bandwidth/cpu/disk metrics for this host."
+msgstr ""
+
+#: cinder/exception.py:946
+#, python-format
+msgid "No valid host was found. %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:950
+#, python-format
+msgid "Host %(host)s is not up or doesn't exist."
+msgstr ""
+
+#: cinder/exception.py:954
+msgid "Quota exceeded"
+msgstr ""
+
+#: cinder/exception.py:958
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: action '%(action)s' caused an error: "
+"%(reason)s."
+msgstr ""
+
+#: cinder/exception.py:963
+#, python-format
+msgid "Aggregate %(aggregate_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:967
+#, python-format
+msgid "Aggregate %(aggregate_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:971
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:975
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:980
+#, python-format
+msgid "Host %(host)s already member of another aggregate."
+msgstr ""
+
+#: cinder/exception.py:984
+#, python-format
+msgid "Aggregate %(aggregate_id)s already has host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:988
+#, python-format
+msgid "Detected more than one volume with name %(vol_name)s"
+msgstr ""
+
+#: cinder/exception.py:992
+#, python-format
+msgid "Cannot create volume_type with name %(name)s and specs %(extra_specs)s"
+msgstr ""
+
+#: cinder/exception.py:997
+msgid "Unable to create instance type"
+msgstr ""
+
+#: cinder/exception.py:1001
+msgid "Bad response from SolidFire API"
+msgstr ""
+
+#: cinder/exception.py:1005
+#, python-format
+msgid "Error in SolidFire API response: status=%(status)s"
+msgstr ""
+
+#: cinder/exception.py:1009
+#, python-format
+msgid "Error in SolidFire API response: data=%(data)s"
+msgstr ""
+
+#: cinder/exception.py:1013
+#, python-format
+msgid "Detected existing vlan with id %(vlan)d"
+msgstr ""
+
+#: cinder/exception.py:1017
+#, python-format
+msgid "Instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:1021
+#, python-format
+msgid "Invalid id: %(val)s (expecting \"i-...\")."
+msgstr ""
+
+#: cinder/exception.py:1025
+#, python-format
+msgid "Could not fetch image %(image)s"
+msgstr ""
+
+#: cinder/log.py:315
+#, python-format
+msgid "syslog facility must be one of: %s"
+msgstr ""
+
+#: cinder/manager.py:146
+#, python-format
+msgid "Skipping %(full_task_name)s, %(ticks_to_skip)s ticks left until next run"
+msgstr ""
+
+#: cinder/manager.py:152
+#, python-format
+msgid "Running periodic task %(full_task_name)s"
+msgstr ""
+
+#: cinder/manager.py:159
+#, python-format
+msgid "Error during %(full_task_name)s: %(e)s"
+msgstr ""
+
+#: cinder/manager.py:203
+msgid "Notifying Schedulers of capabilities ..."
+msgstr ""
+
+#: cinder/policy.py:30
+msgid "JSON file representing policy"
+msgstr ""
+
+#: cinder/policy.py:33
+msgid "Rule checked when requested rule is not found"
+msgstr ""
+
+#: cinder/service.py:137
+msgid "SIGTERM received"
+msgstr ""
+
+#: cinder/service.py:177
+#, python-format
+msgid "Starting %(topic)s node (version %(vcs_string)s)"
+msgstr ""
+
+#: cinder/service.py:195
+#, python-format
+msgid "Creating Consumer connection for Service %s"
+msgstr ""
+
+#: cinder/service.py:282
+msgid "Service killed that has no database entry"
+msgstr ""
+
+#: cinder/service.py:319
+msgid "The service database object disappeared, Recreating it."
+msgstr ""
+
+#: cinder/service.py:334
+msgid "Recovered model server connection!"
+msgstr ""
+
+#: cinder/service.py:340
+msgid "model server went away"
+msgstr ""
+
+#: cinder/service.py:433
+msgid "Full set of FLAGS:"
+msgstr ""
+
+#: cinder/service.py:440
+#, python-format
+msgid "%(flag)s : FLAG SET "
+msgstr ""
+
+#: cinder/utils.py:79
+#, python-format
+msgid "Inner Exception: %s"
+msgstr ""
+
+#: cinder/utils.py:165
+#, python-format
+msgid "Fetching %s"
+msgstr ""
+
+#: cinder/utils.py:210
+#, python-format
+msgid "Got unknown keyword args to utils.execute: %r"
+msgstr ""
+
+#: cinder/utils.py:220
+#, python-format
+msgid "Running cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/utils.py:236 cinder/utils.py:315
+#, python-format
+msgid "Result was %s"
+msgstr ""
+
+#: cinder/utils.py:249
+#, python-format
+msgid "%r failed. Retrying."
+msgstr ""
+
+#: cinder/utils.py:291
+#, python-format
+msgid "Running cmd (SSH): %s"
+msgstr ""
+
+#: cinder/utils.py:293
+msgid "Environment not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:297
+msgid "process_input not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:352
+#, python-format
+msgid "debug in callback: %s"
+msgstr ""
+
+#: cinder/utils.py:534
+#, python-format
+msgid "Link Local address is not found.:%s"
+msgstr ""
+
+#: cinder/utils.py:537
+#, python-format
+msgid "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+msgstr ""
+
+#: cinder/utils.py:648
+#, python-format
+msgid "Invalid backend: %s"
+msgstr ""
+
+#: cinder/utils.py:659
+#, python-format
+msgid "backend %s"
+msgstr ""
+
+#: cinder/utils.py:709
+msgid "in looping call"
+msgstr ""
+
+#: cinder/utils.py:927
+#, python-format
+msgid "Attempting to grab semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:931
+#, python-format
+msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:935
+#, python-format
+msgid "Attempting to grab file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:942
+#, python-format
+msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:1001
+#, python-format
+msgid "Found sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1008
+#, python-format
+msgid "Cleaned sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1023
+#, python-format
+msgid "Found lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1028
+#, python-format
+msgid "Cleaned lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1138
+#, python-format
+msgid "Expected object of type: %s"
+msgstr ""
+
+#: cinder/utils.py:1169
+#, python-format
+msgid "Invalid server_string: %s"
+msgstr ""
+
+#: cinder/utils.py:1298
+#, python-format
+msgid "timefunc: '%(name)s' took %(total_time).2f secs"
+msgstr ""
+
+#: cinder/utils.py:1330
+msgid "Original exception being dropped"
+msgstr ""
+
+#: cinder/utils.py:1461
+#, python-format
+msgid "Class %(fullname)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1463
+#, python-format
+msgid "Class %(fullname)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1495
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1497
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1681
+#, python-format
+msgid "Could not remove tmpdir: %s"
+msgstr ""
+
+#: cinder/wsgi.py:97
+#, python-format
+msgid "Started %(name)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:108
+msgid "Stopping WSGI server."
+msgstr ""
+
+#: cinder/wsgi.py:111
+msgid "Stopping raw TCP server."
+msgstr ""
+
+#: cinder/wsgi.py:117
+#, python-format
+msgid "Starting TCP server %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:133
+msgid "WSGI server has stopped."
+msgstr ""
+
+#: cinder/wsgi.py:211
+msgid "You must implement __call__"
+msgstr ""
+
+#: cinder/api/direct.py:218
+msgid "not available"
+msgstr ""
+
+#: cinder/api/direct.py:299
+#, python-format
+msgid "Returned non-serializeable type: %s"
+msgstr ""
+
+#: cinder/api/sizelimit.py:51
+msgid "Request is too large."
+msgstr ""
+
+#: cinder/api/validator.py:142
+#, python-format
+msgid "%(key)s with value %(value)s failed validator  %(validator)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:73
+#, python-format
+msgid "%(code)s: %(message)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:95
+#, python-format
+msgid "FaultWrapper: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:170
+msgid "Too many failed authentications."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:180
+#, python-format
+msgid ""
+"Access key %(access_key)s has had %(failures)d failed authentications and"
+" will be locked out for %(lock_mins)d minutes."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:267
+msgid "Signature not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:271
+msgid "Access key not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:306 cinder/api/ec2/__init__.py:319
+msgid "Failure communicating with keystone"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:388
+#, python-format
+msgid "Authentication Failure: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:404
+#, python-format
+msgid "Authenticated Request For %(uname)s:%(pname)s)"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:435
+#, python-format
+msgid "action: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:437
+#, python-format
+msgid "arg: %(key)s\t\tval: %(value)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:512
+#, python-format
+msgid "Unauthorized request for controller=%(controller)s and action=%(action)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:584
+#, python-format
+msgid "InstanceNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:590
+#, python-format
+msgid "VolumeNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:596
+#, python-format
+msgid "SnapshotNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:602
+#, python-format
+msgid "NotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:605
+#, python-format
+msgid "EC2APIError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:613
+#, python-format
+msgid "KeyPairExists raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:617
+#, python-format
+msgid "InvalidParameterValue raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:621
+#, python-format
+msgid "InvalidPortRange raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:625
+#, python-format
+msgid "NotAuthorized raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:629
+#, python-format
+msgid "InvalidRequest raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:633
+#, python-format
+msgid "QuotaError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:637
+#, python-format
+msgid "Invalid id: bogus (expecting \"i-...\"): %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:646
+#, python-format
+msgid "Unexpected error raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:647
+#, python-format
+msgid "Environment: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:649 cinder/api/metadata/handler.py:248
+msgid "An unknown error has occurred. Please try your request again."
+msgstr ""
+
+#: cinder/api/ec2/apirequest.py:64
+#, python-format
+msgid "Unsupported API request: controller = %(controller)s, action = %(action)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:336
+#, python-format
+msgid "Create snapshot of volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:372
+#, python-format
+msgid ""
+"Value (%s) for KeyName is invalid. Content limited to Alphanumeric "
+"character, spaces, dashes, and underscore."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:378
+#, python-format
+msgid "Value (%s) for Keyname is invalid. Length exceeds maximum of 255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:382
+#, python-format
+msgid "Create key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:391
+#, python-format
+msgid "Import key %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:409
+#, python-format
+msgid "Delete key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:551
+msgid "Invalid CIDR"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:639 cinder/api/ec2/cloud.py:693
+#: cinder/api/ec2/cloud.py:800
+msgid "Not enough parameters, need group_name or group_id"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:654
+#: cinder/api/openstack/compute/contrib/security_groups.py:517
+#, python-format
+msgid "Revoke security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:666 cinder/api/ec2/cloud.py:719
+#, python-format
+msgid "%s Not enough parameters to build a valid rule"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:684 cinder/api/ec2/cloud.py:744
+msgid "No rule for the specified parameters."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:708
+#: cinder/api/openstack/compute/contrib/security_groups.py:354
+#, python-format
+msgid "Authorize security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:725
+#, python-format
+msgid "%s - This rule already exists in group"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:769
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Content limited to "
+"Alphanumeric characters, spaces, dashes, and underscores."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:776
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Length exceeds maximum of "
+"255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:780
+#: cinder/api/openstack/compute/contrib/security_groups.py:292
+#, python-format
+msgid "Create Security Group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:783
+#, python-format
+msgid "group %s already exists"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:815
+#: cinder/api/openstack/compute/contrib/security_groups.py:245
+#, python-format
+msgid "Delete security group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:823 cinder/compute/manager.py:1630
+#, python-format
+msgid "Get console output for instance %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:894
+#, python-format
+msgid "Create volume from snapshot %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:898 cinder/api/openstack/compute/contrib/volumes.py:186
+#: cinder/api/openstack/volume/volumes.py:222
+#, python-format
+msgid "Create volume of %s GB"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:921
+msgid "Delete Failed"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:931
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(instance_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:939
+msgid "Attach Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:952 cinder/api/openstack/compute/contrib/volumes.py:366
+#, python-format
+msgid "Detach volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:959
+msgid "Detach Volume Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:984 cinder/api/ec2/cloud.py:1041
+#: cinder/api/ec2/cloud.py:1518 cinder/api/ec2/cloud.py:1533
+#, python-format
+msgid "attribute not supported: %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1107
+#, python-format
+msgid "vol = %s\n"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1255
+msgid "Allocate address"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1267
+#, python-format
+msgid "Release address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1272
+#, python-format
+msgid "Associate address %(public_ip)s to instance %(instance_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1282
+#, python-format
+msgid "Disassociate address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1308
+msgid "Image must be available"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1329
+msgid "Going to start terminating instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1343
+#, python-format
+msgid "Reboot instance %r"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1354
+msgid "Going to stop instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1365
+msgid "Going to start instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1455
+#, python-format
+msgid "De-registering image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1471
+msgid "imageLocation is required"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1490
+#, python-format
+msgid "Registered image %(image_location)s with id %(image_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1536
+msgid "user or group not specified"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1538
+msgid "only group \"all\" is supported"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1540
+msgid "operation_type must be add or remove"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1542
+#, python-format
+msgid "Updating image %s publicity"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1555
+#, python-format
+msgid "Not allowed to modify attributes for image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1603
+#, python-format
+msgid "Couldn't stop instance with in %d sec"
+msgstr ""
+
+#: cinder/api/metadata/handler.py:246 cinder/api/metadata/handler.py:253
+#, python-format
+msgid "Failed to get metadata for ip: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:43
+#, python-format
+msgid "Caught error: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:45 cinder/api/openstack/wsgi.py:886
+#, python-format
+msgid "%(url)s returned with HTTP %(status)d"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:94
+msgid "Must specify an ExtensionManager class"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:105
+#, python-format
+msgid "Extended resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:130
+#, python-format
+msgid ""
+"Extension %(ext_name)s: Cannot extend resource %(collection)s: No such "
+"resource"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:135
+#, python-format
+msgid "Extension %(ext_name)s extending resource: %(collection)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:90
+#, python-format
+msgid "%(user_id)s could not be found with token '%(token)s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:134
+#, python-format
+msgid "%(user_id)s must be an admin or a member of %(project_id)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:152
+msgid "Authentication requests must be made against a version root (e.g. /v2)."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:167
+#, python-format
+msgid "Could not find %s in request."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:191
+#, python-format
+msgid "Successfully authenticated '%s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:241
+msgid "User not found with provided API key."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:258
+#, python-format
+msgid "Provided API key is valid, but not for user '%(username)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:133 cinder/api/openstack/common.py:167
+msgid "limit param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:136 cinder/api/openstack/common.py:171
+msgid "limit param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:161
+msgid "offset param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:175
+msgid "offset param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:203
+#, python-format
+msgid "marker [%s] not found"
+msgstr ""
+
+#: cinder/api/openstack/common.py:243
+#, python-format
+msgid "href %s does not contain version"
+msgstr ""
+
+#: cinder/api/openstack/common.py:278
+msgid "Image metadata limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/common.py:295
+#, python-format
+msgid "Converting nw_info: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:305
+#, python-format
+msgid "Converted networks: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:338
+#, python-format
+msgid "Cannot '%(action)s' while instance is in %(attr)s %(state)s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:341
+#, python-format
+msgid "Instance is in an invalid state for '%(action)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:421
+msgid "Rejecting snapshot request, snapshots currently disabled"
+msgstr ""
+
+#: cinder/api/openstack/common.py:423
+msgid "Instance snapshots are not permitted at this time."
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:188
+#, python-format
+msgid "Loaded extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:225
+#, python-format
+msgid "Ext name: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:226
+#, python-format
+msgid "Ext alias: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:227
+#, python-format
+msgid "Ext description: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:229
+#, python-format
+msgid "Ext namespace: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:230
+#, python-format
+msgid "Ext updated: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:232
+#, python-format
+msgid "Exception loading extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:246
+#, python-format
+msgid "Loading extension %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:252
+#, python-format
+msgid "Calling extension factory %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:264
+#, python-format
+msgid "Failed to load extension %(ext_factory)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:344
+#, python-format
+msgid "Failed to load extension %(classpath)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:368
+#, python-format
+msgid "Failed to load extension %(ext_name)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:135 cinder/api/openstack/wsgi.py:538
+msgid "cannot understand JSON"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:159
+#: cinder/api/openstack/compute/contrib/hosts.py:86
+msgid "cannot understand XML"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:543
+msgid "too many body keys"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:582
+#, python-format
+msgid "Exception handling resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:586
+#, python-format
+msgid "Fault thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:589
+#, python-format
+msgid "HTTP exception thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:697
+msgid "Unrecognized Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:701
+msgid "No Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:705
+msgid "Empty body provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:816
+#, python-format
+msgid "There is no such action: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:819 cinder/api/openstack/wsgi.py:832
+#: cinder/api/openstack/compute/server_metadata.py:58
+#: cinder/api/openstack/compute/server_metadata.py:76
+#: cinder/api/openstack/compute/server_metadata.py:101
+#: cinder/api/openstack/compute/server_metadata.py:126
+#: cinder/api/openstack/compute/contrib/admin_actions.py:211
+#: cinder/api/openstack/compute/contrib/console_output.py:52
+msgid "Malformed request body"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:829
+msgid "Unsupported Content-Type"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:841
+msgid "Malformed request url"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:889
+#, python-format
+msgid "%(url)s returned a fault: %(e)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:265
+msgid "element is not a child"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:414
+msgid "root element selecting a list"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:739
+#, python-format
+msgid "Template tree mismatch; adding slave %(slavetag)s to master %(mastertag)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:858
+msgid "subclasses must implement construct()!"
+msgstr ""
+
+#: cinder/api/openstack/compute/extensions.py:29
+#: cinder/api/openstack/volume/extensions.py:29
+msgid "Initializing extension manager."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:40
+#: cinder/api/openstack/compute/images.py:146
+#: cinder/api/openstack/compute/images.py:161
+msgid "Image not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:79
+msgid "Incorrect request body format"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:83
+#: cinder/api/openstack/compute/server_metadata.py:80
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:79
+#: cinder/api/openstack/compute/contrib/volumetypes.py:188
+msgid "Request body and URI mismatch"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:86
+#: cinder/api/openstack/compute/server_metadata.py:84
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:82
+#: cinder/api/openstack/compute/contrib/volumetypes.py:191
+msgid "Request body contains too many items"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:111
+msgid "Invalid metadata key"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:74
+msgid "Instance does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:97
+msgid "Instance is not a member of specified network"
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:140
+#, python-format
+msgid ""
+"Only %(value)s %(verb)s request(s) can be made to %(uri)s every "
+"%(unit_string)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:266
+msgid "This request was rate-limited."
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:38
+#: cinder/api/openstack/compute/server_metadata.py:122
+#: cinder/api/openstack/compute/server_metadata.py:159
+msgid "Server does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:141
+#: cinder/api/openstack/compute/server_metadata.py:152
+msgid "Metadata item was not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:425
+#, python-format
+msgid "Invalid server status: %(status)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:433
+msgid "Invalid changes-since value"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:483
+msgid "Personality file limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:485
+msgid "Personality file path too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:487
+msgid "Personality file content too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:501
+msgid "Server name is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:505
+msgid "Server name is an empty string"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:509
+msgid "Server name must be less than 256 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:527
+#, python-format
+msgid "Bad personality format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:530
+msgid "Bad personality format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:535
+#, python-format
+msgid "Personality content for %s cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:550
+#, python-format
+msgid "Bad networks format: network uuid is not in proper format (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:559
+#, python-format
+msgid "Invalid fixed IP address (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:566
+#, python-format
+msgid "Duplicate networks (%s) are not allowed"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:572
+#, python-format
+msgid "Bad network format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:575
+msgid "Bad networks format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:587
+msgid "Userdata content cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:594
+msgid "accessIPv4 is not proper IPv4 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:601
+msgid "accessIPv6 is not proper IPv6 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:633
+msgid "Server name is not defined"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:675
+#: cinder/api/openstack/compute/servers.py:740
+msgid "Invalid flavorRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:737
+msgid "Can not find requested image"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:743
+msgid "Invalid key_name provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:829
+#: cinder/api/openstack/compute/servers.py:849
+msgid "Instance has not been resized."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:835
+#, python-format
+msgid "Error in confirm-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:855
+#, python-format
+msgid "Error in revert-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:868
+msgid "Argument 'type' for reboot is not HARD or SOFT"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:872
+msgid "Missing argument 'type' for reboot"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:885
+#, python-format
+msgid "Error in reboot %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:897
+msgid "Unable to locate requested flavor."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:900
+msgid "Resize requires a change in size."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:924
+msgid "Malformed server entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:931
+msgid "Missing imageRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:940
+msgid "Invalid imageRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:949
+msgid "Missing flavorRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:962
+msgid "No adminPass was specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:966
+#: cinder/api/openstack/compute/servers.py:1144
+msgid "Invalid adminPass"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:980
+msgid "Unable to parse metadata key/value pairs."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:993
+msgid "Resize request has invalid 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:996
+msgid "Resize requests require 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1014
+#: cinder/api/openstack/compute/contrib/aggregates.py:142
+#: cinder/api/openstack/compute/contrib/networks.py:65
+msgid "Invalid request body"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1019
+msgid "Could not parse imageRef from request."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1071
+msgid "Instance could not be found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1074
+msgid "Cannot find image for rebuild"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1103
+msgid "createImage entity requires name attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1112
+#: cinder/api/openstack/compute/contrib/admin_actions.py:238
+msgid "Invalid metadata"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1167
+#, python-format
+msgid "Removing options '%(unk_opt_str)s' from query"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:60
+#, python-format
+msgid "Compute.api::pause %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:77
+#, python-format
+msgid "Compute.api::unpause %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:94
+#, python-format
+msgid "compute.api::suspend %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:111
+#, python-format
+msgid "compute.api::resume %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:127
+#, python-format
+msgid "Error in migrate %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:141
+#, python-format
+msgid "Compute.api::reset_network %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:154
+#: cinder/api/openstack/compute/contrib/admin_actions.py:170
+#: cinder/api/openstack/compute/contrib/admin_actions.py:186
+#: cinder/api/openstack/compute/contrib/multinic.py:41
+#: cinder/api/openstack/compute/contrib/rescue.py:44
+msgid "Server not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:157
+#, python-format
+msgid "Compute.api::inject_network_info %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:173
+#, python-format
+msgid "Compute.api::lock %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:189
+#, python-format
+msgid "Compute.api::unlock %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:219
+#, python-format
+msgid "createBackup entity requires %s attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:223
+msgid "Malformed createBackup entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:229
+msgid "createBackup attribute 'rotation' must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:244
+#: cinder/api/openstack/compute/contrib/console_output.py:47
+#: cinder/api/openstack/compute/contrib/console_output.py:59
+#: cinder/api/openstack/compute/contrib/consoles.py:49
+#: cinder/api/openstack/compute/contrib/consoles.py:60
+#: cinder/api/openstack/compute/contrib/server_action_list.py:49
+#: cinder/api/openstack/compute/contrib/server_diagnostics.py:47
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:38
+msgid "Instance not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:272
+msgid "host and block_migration must be specified."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:284
+#, python-format
+msgid "Live migration of instance %(id)s to host %(host)s failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:76
+#, python-format
+msgid ""
+"Cannot create aggregate with name %(name)s and availability zone "
+"%(avail_zone)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:88
+#, python-format
+msgid "Cannot show aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:114
+#, python-format
+msgid "Cannot update aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:126
+#, python-format
+msgid "Cannot delete aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:139
+#, python-format
+msgid "Aggregates does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:152
+#: cinder/api/openstack/compute/contrib/aggregates.py:158
+#, python-format
+msgid "Cannot add host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:171
+#: cinder/api/openstack/compute/contrib/aggregates.py:175
+#, python-format
+msgid "Cannot remove host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:195
+#, python-format
+msgid "Cannot set metadata %(metadata)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/certificates.py:75
+msgid "Only root certificate can be retrieved."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/cloudpipe.py:146
+msgid ""
+"Unable to claim IP for VPN instances, ensure it isn't running, and try "
+"again in a few minutes"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:44
+msgid "Missing type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:56
+msgid "Invalid type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/disk_config.py:44
+#, python-format
+msgid "%s must be either 'MANUAL' or 'AUTO'."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/extended_server_attributes.py:77
+#: cinder/api/openstack/compute/contrib/extended_status.py:61
+msgid "Server not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:61
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:91
+msgid "Flavor not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:49
+#: cinder/api/openstack/compute/contrib/volumetypes.py:158
+msgid "No Request Body"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:159
+#, python-format
+msgid "No more floating ips in pool %s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:161
+msgid "No more floating ips available."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:201
+#: cinder/api/openstack/compute/contrib/floating_ips.py:230
+#: cinder/api/openstack/compute/contrib/security_groups.py:571
+#: cinder/api/openstack/compute/contrib/security_groups.py:604
+msgid "Missing parameter dict"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:204
+#: cinder/api/openstack/compute/contrib/floating_ips.py:233
+msgid "Address not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:213
+msgid "No fixed ips associated to instance"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:216
+msgid "Associate floating ip failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:144
+#, python-format
+msgid "Invalid status: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:148
+#, python-format
+msgid "Invalid mode: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:152
+#, python-format
+msgid "Invalid update setting: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:170
+#, python-format
+msgid "Putting host %(host)s in maintenance mode %(mode)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:181
+#, python-format
+msgid "Setting host %(host)s to %(state)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:230
+msgid "Describe-resource is admin only functionality"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:238
+msgid "Host not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:70
+msgid "Keypair name contains unsafe characters"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:95
+msgid "Keypair name must be between 1 and 255 characters long"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:100
+#, python-format
+msgid "Key pair '%s' already exists."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:52
+msgid "Missing 'networkId' argument for addFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:68
+msgid "Missing 'address' argument for removeFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:77
+#, python-format
+msgid "Unable to find address %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:62
+#, python-format
+msgid "Network does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:70
+#, python-format
+msgid "Disassociating network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:74
+#: cinder/api/openstack/compute/contrib/networks.py:91
+#: cinder/api/openstack/compute/contrib/networks.py:101
+msgid "Network not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:87
+#, python-format
+msgid "Showing network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:97
+#, python-format
+msgid "Deleting network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/scheduler_hints.py:41
+msgid "Malformed scheduler_hints attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:222
+msgid "Security group id should be integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:243
+msgid "Security group is still in use"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:295
+#, python-format
+msgid "Security group %s already exists"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:315
+#, python-format
+msgid "Security group %s is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:318
+#, python-format
+msgid "Security group %s cannot be empty."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:321
+#, python-format
+msgid "Security group %s should not be greater than 255 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:348
+msgid "Parent group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:351
+#, python-format
+msgid "Security group (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:369
+msgid "Not enough parameters to build a valid rule."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:376
+#, python-format
+msgid "This rule already exists in group %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:414
+msgid "Parent or group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:507
+msgid "Rule id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:510
+#, python-format
+msgid "Rule (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:574
+#: cinder/api/openstack/compute/contrib/security_groups.py:607
+msgid "Security group not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:578
+#: cinder/api/openstack/compute/contrib/security_groups.py:611
+msgid "Security group name cannot be empty"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:45
+#, python-format
+msgid "start instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:54
+#, python-format
+msgid "stop instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:73
+#: cinder/api/openstack/volume/volumes.py:106
+#, python-format
+msgid "vol=%s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:146
+#: cinder/api/openstack/volume/volumes.py:184
+#, python-format
+msgid "Delete volume with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:329
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(server_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:481
+#: cinder/api/openstack/volume/snapshots.py:110
+#, python-format
+msgid "Delete snapshot with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:524
+#: cinder/api/openstack/volume/snapshots.py:150
+#, python-format
+msgid "Create snapshot from volume %s"
+msgstr ""
+
+#: cinder/auth/fakeldap.py:33
+msgid "Attempted to instantiate singleton"
+msgstr ""
+
+#: cinder/auth/ldapdriver.py:650
+#, python-format
+msgid ""
+"Attempted to remove the last member of a group. Deleting the group at %s "
+"instead."
+msgstr ""
+
+#: cinder/auth/manager.py:298
+#, python-format
+msgid "Looking up user: %r"
+msgstr ""
+
+#: cinder/auth/manager.py:302
+#, python-format
+msgid "Failed authorization for access key %s"
+msgstr ""
+
+#: cinder/auth/manager.py:308
+#, python-format
+msgid "Using project name = user name (%s)"
+msgstr ""
+
+#: cinder/auth/manager.py:315
+#, python-format
+msgid "failed authorization: no project named %(pjid)s (user=%(uname)s)"
+msgstr ""
+
+#: cinder/auth/manager.py:324
+#, python-format
+msgid ""
+"Failed authorization: user %(uname)s not admin and not member of project "
+"%(pjname)s"
+msgstr ""
+
+#: cinder/auth/manager.py:331 cinder/auth/manager.py:343
+#, python-format
+msgid "user.secret: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:332 cinder/auth/manager.py:344
+#, python-format
+msgid "expected_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:333 cinder/auth/manager.py:345
+#, python-format
+msgid "signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:335 cinder/auth/manager.py:357
+#, python-format
+msgid "Invalid signature for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:353
+#, python-format
+msgid "host_only_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:449
+msgid "Must specify project"
+msgstr ""
+
+#: cinder/auth/manager.py:490
+#, python-format
+msgid "Adding role %(role)s to user %(uid)s in project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:493
+#, python-format
+msgid "Adding sitewide role %(role)s to user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:519
+#, python-format
+msgid "Removing role %(role)s from user %(uid)s on project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:522
+#, python-format
+msgid "Removing sitewide role %(role)s from user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:595
+#, python-format
+msgid "Created project %(name)s with manager %(manager_user)s"
+msgstr ""
+
+#: cinder/auth/manager.py:613
+#, python-format
+msgid "modifying project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:625
+#, python-format
+msgid "Adding user %(uid)s to project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:646
+#, python-format
+msgid "Remove user %(uid)s from project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:676
+#, python-format
+msgid "Deleting project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:734
+#, python-format
+msgid "Created user %(rvname)s (admin: %(rvadmin)r)"
+msgstr ""
+
+#: cinder/auth/manager.py:743
+#, python-format
+msgid "Deleting user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:753
+#, python-format
+msgid "Access Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:755
+#, python-format
+msgid "Secret Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:757
+#, python-format
+msgid "Admin status set to %(admin)r for user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:802
+#, python-format
+msgid "No vpn data for project %s"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:46
+msgid "Instance type for vpn instances"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:49
+msgid "Template for cloudpipe instance boot script"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:52
+msgid "Network to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:55
+msgid "Netmask to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:107
+#, python-format
+msgid "Launching VPN for %s"
+msgstr ""
+
+#: cinder/compute/api.py:141
+msgid "No compute host specified"
+msgstr ""
+
+#: cinder/compute/api.py:144
+#, python-format
+msgid "Unable to find host for Instance %s"
+msgstr ""
+
+#: cinder/compute/api.py:192
+#, python-format
+msgid ""
+"Quota exceeded for %(pid)s, tried to set %(num_metadata)s metadata "
+"properties"
+msgstr ""
+
+#: cinder/compute/api.py:203
+#, python-format
+msgid "Quota exceeded for %(pid)s, metadata property key or value too long"
+msgstr ""
+
+#: cinder/compute/api.py:257
+msgid "Cannot run any more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:259
+#, python-format
+msgid "Can only run %s more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:261
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances. "
+msgstr ""
+
+#: cinder/compute/api.py:310
+msgid "Creating a raw instance"
+msgstr ""
+
+#: cinder/compute/api.py:312
+#, python-format
+msgid "Using Kernel=%(kernel_id)s, Ramdisk=%(ramdisk_id)s"
+msgstr ""
+
+#: cinder/compute/api.py:383
+#, python-format
+msgid "Going to run %s instances..."
+msgstr ""
+
+#: cinder/compute/api.py:447
+#, python-format
+msgid "bdm %s"
+msgstr ""
+
+#: cinder/compute/api.py:474
+#, python-format
+msgid "block_device_mapping %s"
+msgstr ""
+
+#: cinder/compute/api.py:591
+#, python-format
+msgid "Sending create to scheduler for %(pid)s/%(uid)s's"
+msgstr ""
+
+#: cinder/compute/api.py:871
+msgid "Going to try to soft delete instance"
+msgstr ""
+
+#: cinder/compute/api.py:891
+msgid "No host for instance, deleting immediately"
+msgstr ""
+
+#: cinder/compute/api.py:939
+msgid "Going to try to terminate instance"
+msgstr ""
+
+#: cinder/compute/api.py:977
+msgid "Going to try to stop instance"
+msgstr ""
+
+#: cinder/compute/api.py:996
+msgid "Going to try to start instance"
+msgstr ""
+
+#: cinder/compute/api.py:1000
+#, python-format
+msgid "Instance %(instance_uuid)s is not stopped. (%(vm_state)s"
+msgstr ""
+
+#: cinder/compute/api.py:1071 cinder/volume/api.py:173
+#: cinder/volume/volume_types.py:64
+#, python-format
+msgid "Searching by: %s"
+msgstr ""
+
+#: cinder/compute/api.py:1201
+#, python-format
+msgid "Image type not recognized %s"
+msgstr ""
+
+#: cinder/compute/api.py:1369
+msgid "flavor_id is None. Assuming migration."
+msgstr ""
+
+#: cinder/compute/api.py:1377
+#, python-format
+msgid ""
+"Old instance type %(current_instance_type_name)s,  new instance type "
+"%(new_instance_type_name)s"
+msgstr ""
+
+#: cinder/compute/api.py:1644
+#, python-format
+msgid "multiple fixedips exist, using the first: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:57 cinder/compute/instance_types.py:65
+msgid "create arguments must be positive integers"
+msgstr ""
+
+#: cinder/compute/instance_types.py:76 cinder/volume/volume_types.py:41
+#, python-format
+msgid "DB error: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:86
+#, python-format
+msgid "Instance type %s not found for deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:138
+#, python-format
+msgid "check_instance_lock: decorating: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:140
+#, python-format
+msgid ""
+"check_instance_lock: arguments: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+msgstr ""
+
+#: cinder/compute/manager.py:144
+#, python-format
+msgid "check_instance_lock: locked: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:146
+#, python-format
+msgid "check_instance_lock: admin: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:151
+#, python-format
+msgid "check_instance_lock: executing: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:155
+#, python-format
+msgid "check_instance_lock: not executing |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:201
+#, python-format
+msgid "Unable to load the virtualization driver: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:223
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s has been destroyed from under us while trying "
+"to set it to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:240
+#, python-format
+msgid "Current state is %(drv_state)s, state in DB is %(db_state)s."
+msgstr ""
+
+#: cinder/compute/manager.py:245
+msgid "Rebooting instance after cinder-compute restart."
+msgstr ""
+
+#: cinder/compute/manager.py:255
+msgid "Hypervisor driver does not support firewall rules"
+msgstr ""
+
+#: cinder/compute/manager.py:260
+msgid "Checking state"
+msgstr ""
+
+#: cinder/compute/manager.py:329
+#, python-format
+msgid "Setting up bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:400
+#, python-format
+msgid "Instance %s already deleted from database. Attempting forceful vm deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:406
+#, python-format
+msgid "Exception encountered while terminating the instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:444
+#, python-format
+msgid "Instance %s not found."
+msgstr ""
+
+#: cinder/compute/manager.py:480
+msgid "Instance has already been created"
+msgstr ""
+
+#: cinder/compute/manager.py:523
+#, python-format
+msgid ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:528
+#, python-format
+msgid ""
+"Image '%(image_id)s' size %(size_bytes)d exceeded instance_type allowed "
+"size %(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:538
+msgid "Starting instance..."
+msgstr ""
+
+#: cinder/compute/manager.py:548
+msgid "Skipping network allocation for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:561
+msgid "Instance failed network setup"
+msgstr ""
+
+#: cinder/compute/manager.py:565
+#, python-format
+msgid "Instance network_info: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:578
+msgid "Instance failed block device setup"
+msgstr ""
+
+#: cinder/compute/manager.py:594
+msgid "Instance failed to spawn"
+msgstr ""
+
+#: cinder/compute/manager.py:615
+msgid "Deallocating network for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:672
+#, python-format
+msgid "%(action_str)s instance"
+msgstr ""
+
+#: cinder/compute/manager.py:699
+#, python-format
+msgid "Ignoring DiskNotFound: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:708
+#, python-format
+msgid "terminating bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:742 cinder/compute/manager.py:1328
+#: cinder/compute/manager.py:1416 cinder/compute/manager.py:2501
+#, python-format
+msgid "%s. Setting instance vm_state to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:811
+#, python-format
+msgid ""
+"Cannot rebuild instance [%(instance_uuid)s], because the given image does"
+" not exist."
+msgstr ""
+
+#: cinder/compute/manager.py:816
+#, python-format
+msgid "Cannot rebuild instance [%(instance_uuid)s]: %(exc)s"
+msgstr ""
+
+#: cinder/compute/manager.py:823
+#, python-format
+msgid "Rebuilding instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:876
+#, python-format
+msgid "Rebooting instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:891
+#, python-format
+msgid ""
+"trying to reboot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:933
+#, python-format
+msgid "instance %s: snapshotting"
+msgstr ""
+
+#: cinder/compute/manager.py:939
+#, python-format
+msgid ""
+"trying to snapshot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:995
+#, python-format
+msgid "Found %(num_images)d images (rotation: %(rotation)d)"
+msgstr ""
+
+#: cinder/compute/manager.py:1001
+#, python-format
+msgid "Rotating out %d backups"
+msgstr ""
+
+#: cinder/compute/manager.py:1005
+#, python-format
+msgid "Deleting image %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1035
+#, python-format
+msgid "Failed to set admin password. Instance %s is not running"
+msgstr ""
+
+#: cinder/compute/manager.py:1041
+#, python-format
+msgid "Instance %s: Root password set"
+msgstr ""
+
+#: cinder/compute/manager.py:1050
+msgid "set_admin_password is not implemented by this driver."
+msgstr ""
+
+#: cinder/compute/manager.py:1064
+msgid "Error setting admin password"
+msgstr ""
+
+#: cinder/compute/manager.py:1079
+#, python-format
+msgid ""
+"trying to inject a file into a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1084
+#, python-format
+msgid "instance %(instance_uuid)s: injecting file to %(path)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1098
+#, python-format
+msgid ""
+"trying to update agent on a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1103
+#, python-format
+msgid "instance %(instance_uuid)s: updating agent to %(url)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1116
+#, python-format
+msgid "instance %s: rescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1141
+#, python-format
+msgid "instance %s: unrescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1270
+msgid "destination same as source!"
+msgstr ""
+
+#: cinder/compute/manager.py:1287
+#, python-format
+msgid "instance %s: migrating"
+msgstr ""
+
+#: cinder/compute/manager.py:1471
+#, python-format
+msgid "instance %s: pausing"
+msgstr ""
+
+#: cinder/compute/manager.py:1489
+#, python-format
+msgid "instance %s: unpausing"
+msgstr ""
+
+#: cinder/compute/manager.py:1525
+#, python-format
+msgid "instance %s: retrieving diagnostics"
+msgstr ""
+
+#: cinder/compute/manager.py:1534
+#, python-format
+msgid "instance %s: suspending"
+msgstr ""
+
+#: cinder/compute/manager.py:1556
+#, python-format
+msgid "instance %s: resuming"
+msgstr ""
+
+#: cinder/compute/manager.py:1579
+#, python-format
+msgid "instance %s: locking"
+msgstr ""
+
+#: cinder/compute/manager.py:1588
+#, python-format
+msgid "instance %s: unlocking"
+msgstr ""
+
+#: cinder/compute/manager.py:1596
+#, python-format
+msgid "instance %s: getting locked state"
+msgstr ""
+
+#: cinder/compute/manager.py:1606
+#, python-format
+msgid "instance %s: reset network"
+msgstr ""
+
+#: cinder/compute/manager.py:1614
+#, python-format
+msgid "instance %s: inject network info"
+msgstr ""
+
+#: cinder/compute/manager.py:1618
+#, python-format
+msgid "network_info to inject: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:1655
+#, python-format
+msgid "instance %s: getting vnc console"
+msgstr ""
+
+#: cinder/compute/manager.py:1685
+#, python-format
+msgid "Booting with volume %(volume_id)s at %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1703
+#, python-format
+msgid ""
+"instance %(instance_uuid)s: attaching volume %(volume_id)s to "
+"%(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1705
+#, python-format
+msgid "Attaching volume %(volume_id)s to %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1714
+#, python-format
+msgid "instance %(instance_uuid)s: attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1724
+#, python-format
+msgid "Attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1752
+#, python-format
+msgid "Detach volume %(volume_id)s from mountpoint %(mp)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1756
+#, python-format
+msgid "Detaching volume from unknown instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1822
+#, python-format
+msgid ""
+"Creating tmpfile %s to notify to other compute nodes that they should "
+"mount the same storage."
+msgstr ""
+
+#: cinder/compute/manager.py:1884
+msgid "Instance has no volume."
+msgstr ""
+
+#: cinder/compute/manager.py:1916
+#, python-format
+msgid "plug_vifs() failed %(cnt)d.Retry up to %(max_retry)d for %(hostname)s."
+msgstr ""
+
+#: cinder/compute/manager.py:1973
+#, python-format
+msgid "Pre live migration failed at  %(dest)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2000
+msgid "post_live_migration() is started.."
+msgstr ""
+
+#: cinder/compute/manager.py:2030
+msgid "No floating_ip found"
+msgstr ""
+
+#: cinder/compute/manager.py:2038
+msgid "No floating_ip found."
+msgstr ""
+
+#: cinder/compute/manager.py:2040
+#, python-format
+msgid ""
+"Live migration: Unexpected error: cannot inherit floating ip.\n"
+"%(e)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2073
+#, python-format
+msgid "Migrating instance to %(dest)s finished successfully."
+msgstr ""
+
+#: cinder/compute/manager.py:2075
+msgid ""
+"You may see the error \"libvirt: QEMU error: Domain not found: no domain "
+"with matching name.\" This error can be safely ignored."
+msgstr ""
+
+#: cinder/compute/manager.py:2090
+msgid "Post operation of migraton started"
+msgstr ""
+
+#: cinder/compute/manager.py:2226
+#, python-format
+msgid "Updated the info_cache for instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:2255
+msgid "Updating bandwidth usage cache"
+msgstr ""
+
+#: cinder/compute/manager.py:2277
+msgid "Updating host status"
+msgstr ""
+
+#: cinder/compute/manager.py:2305
+#, python-format
+msgid ""
+"Found %(num_db_instances)s in the database and %(num_vm_instances)s on "
+"the hypervisor."
+msgstr ""
+
+#: cinder/compute/manager.py:2331
+#, python-format
+msgid ""
+"During the sync_power process the instance %(uuid)s has moved from host "
+"%(src)s to host %(dst)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2344
+#, python-format
+msgid ""
+"Instance %s is in the process of migrating to this host. Wait next "
+"sync_power cycle before setting power state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2350
+msgid ""
+"Instance found in database but not known by hypervisor. Setting power "
+"state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2380
+msgid "FLAGS.reclaim_instance_interval <= 0, skipping..."
+msgstr ""
+
+#: cinder/compute/manager.py:2392
+msgid "Reclaiming deleted instance"
+msgstr ""
+
+#: cinder/compute/manager.py:2458
+#, python-format
+msgid ""
+"Detected instance with name label '%(name)s' which is marked as DELETED "
+"but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2465
+#, python-format
+msgid ""
+"Destroying instance with name label '%(name)s' which is marked as DELETED"
+" but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2472
+#, python-format
+msgid "Unrecognized value '%(action)s' for FLAGS.running_deleted_instance_action"
+msgstr ""
+
+#: cinder/compute/manager.py:2542
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: unrecoverable state during operation on "
+"%(host)s"
+msgstr ""
+
+#: cinder/compute/utils.py:142
+msgid "v4 subnets are required for legacy nw_info"
+msgstr ""
+
+#: cinder/console/manager.py:77 cinder/console/vmrc_manager.py:70
+msgid "Adding console"
+msgstr ""
+
+#: cinder/console/manager.py:97
+#, python-format
+msgid "Tried to remove non-existant console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:122
+#, python-format
+msgid "Tried to remove non-existent console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:125
+#, python-format
+msgid "Removing console %(console_id)s."
+msgstr ""
+
+#: cinder/console/xvp.py:98
+msgid "Rebuilding xvp conf"
+msgstr ""
+
+#: cinder/console/xvp.py:116
+#, python-format
+msgid "Re-wrote %s"
+msgstr ""
+
+#: cinder/console/xvp.py:121
+msgid "Stopping xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:134
+msgid "Starting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:141
+#, python-format
+msgid "Error starting xvp: %s"
+msgstr ""
+
+#: cinder/console/xvp.py:144
+msgid "Restarting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:146
+msgid "xvp not running..."
+msgstr ""
+
+#: cinder/consoleauth/manager.py:63
+#, python-format
+msgid "Deleting Expired Token: (%s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:75
+#, python-format
+msgid "Received Token: %(token)s, %(token_dict)s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:79
+#, python-format
+msgid "Checking Token: %(token)s, %(token_valid)s)"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:57
+msgid "Use of empty request context is deprecated"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:198
+#, python-format
+msgid "Unrecognized read_deleted value '%s'"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:516 cinder/db/sqlalchemy/api.py:551
+#, python-format
+msgid "No ComputeNode for %(host)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4019 cinder/db/sqlalchemy/api.py:4045
+#, python-format
+msgid "No backend config with id %(sm_backend_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4103
+#, python-format
+msgid "No sm_flavor called %(sm_flavor)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4147
+#, python-format
+msgid "No sm_volume with id %(volume_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:66
+msgid "python-migrate is not installed. Exiting."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:78
+msgid "version should be an integer"
+msgstr ""
+
+#: cinder/db/sqlalchemy/session.py:137
+#, python-format
+msgid "SQL connection failed. %s attempts left."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:48
+msgid "interface column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:80
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:54
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:48
+#, python-format
+msgid "Table |%s| not created!"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:87
+msgid "VIF column not added to fixed_ips table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:97
+#, python-format
+msgid "join list for moving mac_addresses |%s|"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:39
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:60
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:99
+msgid "foreign key constraint couldn't be added"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:58
+msgid "foreign key constraint couldn't be dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py:34
+msgid "priority column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:41
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:42
+#: cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py:56
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:68
+msgid "foreign key constraint couldn't be removed"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py:34
+msgid "progress column not added to instances table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py:97
+#, python-format
+msgid ""
+"Could not cast flavorid to integer: %s. Set flavorid to an integer-like "
+"string to downgrade."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:69
+msgid "instance_info_caches tables not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py:41
+msgid "progress column not added to compute_nodes table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:76
+msgid "dns_domains table not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:60
+msgid "quota_classes table not dropped"
+msgstr ""
+
+#: cinder/image/glance.py:147
+msgid "Connection error contacting glance server, retrying"
+msgstr ""
+
+#: cinder/image/glance.py:153 cinder/network/quantum/melange_connection.py:104
+msgid "Maximum attempts reached"
+msgstr ""
+
+#: cinder/image/glance.py:278
+#, python-format
+msgid "Creating image in Glance. Metadata passed in %s"
+msgstr ""
+
+#: cinder/image/glance.py:281
+#, python-format
+msgid "Metadata after formatting for Glance %s"
+msgstr ""
+
+#: cinder/image/glance.py:289
+#, python-format
+msgid "Metadata returned from Glance formatted for Base %s"
+msgstr ""
+
+#: cinder/image/glance.py:331 cinder/image/glance.py:335
+msgid "Not the image owner"
+msgstr ""
+
+#: cinder/image/glance.py:410
+#, python-format
+msgid "%(timestamp)s does not follow any of the signatures: %(iso_formats)s"
+msgstr ""
+
+#: cinder/image/s3.py:309
+#, python-format
+msgid "Failed to download %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:328
+#, python-format
+msgid "Failed to decrypt %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:340
+#, python-format
+msgid "Failed to untar %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:353
+#, python-format
+msgid "Failed to upload %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:379
+#, python-format
+msgid "Failed to decrypt private key: %s"
+msgstr ""
+
+#: cinder/image/s3.py:387
+#, python-format
+msgid "Failed to decrypt initialization vector: %s"
+msgstr ""
+
+#: cinder/image/s3.py:398
+#, python-format
+msgid "Failed to decrypt image file %(image_file)s: %(err)s"
+msgstr ""
+
+#: cinder/image/s3.py:410
+msgid "Unsafe filenames in image"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:38 cinder/ipv6/rfc2462.py:34
+#, python-format
+msgid "Bad mac for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:40 cinder/ipv6/rfc2462.py:36
+#, python-format
+msgid "Bad prefix for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:42
+#, python-format
+msgid "Bad project_id for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/network/ldapdns.py:321
+msgid "This driver only supports type 'a' entries."
+msgstr ""
+
+#: cinder/network/linux_net.py:166
+#, python-format
+msgid "Attempted to remove chain %s which does not exist"
+msgstr ""
+
+#: cinder/network/linux_net.py:192
+#, python-format
+msgid "Unknown chain: %r"
+msgstr ""
+
+#: cinder/network/linux_net.py:215
+#, python-format
+msgid ""
+"Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r "
+"%(top)r"
+msgstr ""
+
+#: cinder/network/linux_net.py:335
+msgid "IPTablesManager.apply completed with success"
+msgstr ""
+
+#: cinder/network/linux_net.py:694
+#, python-format
+msgid "Hupping dnsmasq threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:696
+#, python-format
+msgid "Pid %d is stale, relaunching dnsmasq"
+msgstr ""
+
+#: cinder/network/linux_net.py:756
+#, python-format
+msgid "killing radvd threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:758
+#, python-format
+msgid "Pid %d is stale, relaunching radvd"
+msgstr ""
+
+#: cinder/network/linux_net.py:967
+#, python-format
+msgid "Starting VLAN inteface %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:999
+#, python-format
+msgid "Starting Bridge interface for %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1142
+#, python-format
+msgid "Starting bridge %s "
+msgstr ""
+
+#: cinder/network/linux_net.py:1149
+#, python-format
+msgid "Done starting bridge %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1167
+#, python-format
+msgid "Failed unplugging gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/linux_net.py:1170
+#, python-format
+msgid "Unplugged gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/manager.py:291
+#, python-format
+msgid "Fixed ip %(fixed_ip_id)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:300 cinder/network/manager.py:496
+#, python-format
+msgid "Interface %(interface)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:315
+#, python-format
+msgid "floating IP allocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:353
+#, python-format
+msgid "floating IP deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:386
+#, python-format
+msgid "Address |%(address)s| is not allocated"
+msgstr ""
+
+#: cinder/network/manager.py:390
+#, python-format
+msgid "Address |%(address)s| is not allocated to your project |%(project)s|"
+msgstr ""
+
+#: cinder/network/manager.py:402
+#, python-format
+msgid "Quota exceeded for %s, tried to allocate address"
+msgstr ""
+
+#: cinder/network/manager.py:614
+#, python-format
+msgid ""
+"Database inconsistency: DNS domain |%s| is registered in the Cinder db but "
+"not visible to either the floating or instance DNS driver. It will be "
+"ignored."
+msgstr ""
+
+#: cinder/network/manager.py:660
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing zone to |%(av_zone)s|."
+msgstr ""
+
+#: cinder/network/manager.py:670
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing project to |%(project)s|."
+msgstr ""
+
+#: cinder/network/manager.py:778
+#, python-format
+msgid "Disassociated %s stale fixed ip(s)"
+msgstr ""
+
+#: cinder/network/manager.py:782
+msgid "setting network host"
+msgstr ""
+
+#: cinder/network/manager.py:896
+#, python-format
+msgid "network allocations for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:901
+#, python-format
+msgid "networks retrieved for instance |%(instance_id)s|: |%(networks)s|"
+msgstr ""
+
+#: cinder/network/manager.py:930
+#, python-format
+msgid "network deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:1152
+#, python-format
+msgid ""
+"instance-dns-zone is |%(domain)s|, which is in availability zone "
+"|%(zone)s|. Instance |%(instance)s| is in zone |%(zone2)s|. No DNS record"
+" will be created."
+msgstr ""
+
+#: cinder/network/manager.py:1227
+#, python-format
+msgid "Unable to release %s because vif doesn't exist."
+msgstr ""
+
+#: cinder/network/manager.py:1244
+#, python-format
+msgid "Leased IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1248
+#, python-format
+msgid "IP %s leased that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1256
+#, python-format
+msgid "IP |%s| leased that isn't allocated"
+msgstr ""
+
+#: cinder/network/manager.py:1261
+#, python-format
+msgid "Released IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1265
+#, python-format
+msgid "IP %s released that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1268
+#, python-format
+msgid "IP %s released that was not leased"
+msgstr ""
+
+#: cinder/network/manager.py:1331
+msgid "cidr already in use"
+msgstr ""
+
+#: cinder/network/manager.py:1334
+#, python-format
+msgid "requested cidr (%(cidr)s) conflicts with existing supernet (%(super)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1345
+#, python-format
+msgid ""
+"requested cidr (%(cidr)s) conflicts with existing smaller cidr "
+"(%(smaller)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1404
+msgid "Network already exists!"
+msgstr ""
+
+#: cinder/network/manager.py:1423
+#, python-format
+msgid "Network must be disassociated from project %s before delete"
+msgstr ""
+
+#: cinder/network/manager.py:1832
+msgid ""
+"The sum between the number of networks and the vlan start cannot be "
+"greater than 4094"
+msgstr ""
+
+#: cinder/network/manager.py:1839
+#, python-format
+msgid ""
+"The network range is not big enough to fit %(num_networks)s. Network size"
+" is %(network_size)s"
+msgstr ""
+
+#: cinder/network/minidns.py:65
+msgid "This driver only supports type 'a'"
+msgstr ""
+
+#: cinder/network/quantum/client.py:154
+msgid "Tenant ID not set"
+msgstr ""
+
+#: cinder/network/quantum/client.py:180
+#, python-format
+msgid "Quantum Client Request: %(method)s %(action)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:196
+#, python-format
+msgid "Quantum entity not found: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:206
+#, python-format
+msgid "Server %(status_code)s error: %(data)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:210
+#, python-format
+msgid "Unable to connect to server. Got error: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:228
+#, python-format
+msgid "unable to deserialize object of type = '%s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:162
+msgid "QuantumManager does not use 'multi_host' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:166
+msgid "QuantumManager requires that only one network is created per call"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:176
+msgid "QuantumManager does not use 'vlan_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:182
+msgid "QuantumManager does not use 'vpn_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:186
+msgid "QuantumManager does not use 'bridge' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:190
+msgid "QuantumManager does not use 'bridge_interface' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:195
+msgid "QuantumManager requires a valid (.1) gateway address."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:204
+#, python-format
+msgid ""
+"Unable to find existing quantum network for tenant '%(q_tenant_id)s' with"
+" net-id '%(quantum_net_id)s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:301
+#, python-format
+msgid "network allocations for instance %s"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:588
+#, python-format
+msgid ""
+"port deallocation failed for instance: |%(instance_id)s|, port_id: "
+"|%(port_id)s|"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:606
+#, python-format
+msgid ""
+"ipam deallocation failed for instance: |%(instance_id)s|, vif_uuid: "
+"|%(vif_uuid)s|"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:96
+#, python-format
+msgid "Server returned error: %s"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:98
+msgid "Connection error contacting melange service, retrying"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:108
+#, python-format
+msgid ""
+"allocate IP on network |%(network_id)s| belonging to "
+"|%(network_tenant_id)s| to this vif |%(vif_id)s| with mac "
+"|%(mac_address)s| belonging to |%(project_id)s| "
+msgstr ""
+
+#: cinder/network/quantum/melange_ipam_lib.py:133
+msgid "get_project_and_global_net_ids must be called with a non-null project_id"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:75
+msgid "Error creating network entry"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:90
+#, python-format
+msgid "No network with net_id = %s"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:221
+#, python-format
+msgid "No fixed IPs to deallocate for vif %s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:99
+#, python-format
+msgid "Connecting interface %(interface_id)s to net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:113
+#, python-format
+msgid "Deleting port %(port_id)s on net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/notifier/api.py:115
+#, python-format
+msgid "%s not in valid priorities"
+msgstr ""
+
+#: cinder/notifier/api.py:130
+#, python-format
+msgid ""
+"Problem '%(e)s' attempting to send to notification system. "
+"Payload=%(payload)s"
+msgstr ""
+
+#: cinder/notifier/list_notifier.py:65
+#, python-format
+msgid "Problem '%(e)s' attempting to send to notification driver %(driver)s."
+msgstr ""
+
+#: cinder/notifier/rabbit_notifier.py:46
+#, python-format
+msgid "Could not send notification to %(topic)s. Payload=%(message)s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:146
+#, python-format
+msgid "Returning exception %s to caller"
+msgstr ""
+
+#: cinder/rpc/amqp.py:188
+#, python-format
+msgid "unpacked context: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:231
+#, python-format
+msgid "received %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:236
+#, python-format
+msgid "no method for message: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:237
+#, python-format
+msgid "No method for message: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:321
+#, python-format
+msgid "Making asynchronous call on %s ..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:324
+#, python-format
+msgid "MSG_ID is %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:346
+#, python-format
+msgid "Making asynchronous cast on %s..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:354
+msgid "Making asynchronous fanout cast..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:379
+#, python-format
+msgid "Sending notification on %s..."
+msgstr ""
+
+#: cinder/rpc/common.py:54
+#, python-format
+msgid ""
+"Remote error: %(exc_type)s %(value)s\n"
+"%(traceback)s."
+msgstr ""
+
+#: cinder/rpc/common.py:71
+msgid "Timeout while waiting on RPC response."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:111
+msgid "Failed to process message... skipping it."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:407
+#, python-format
+msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:430
+#, python-format
+msgid "Connected to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:466
+#, python-format
+msgid ""
+"Unable to connect to AMQP server on %(hostname)s:%(port)d after "
+"%(max_retries)d tries: %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:482
+#, python-format
+msgid ""
+"AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying "
+"again in %(sleep_time)d seconds."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:533 cinder/rpc/impl_qpid.py:385
+#, python-format
+msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:551 cinder/rpc/impl_qpid.py:400
+#, python-format
+msgid "Timed out waiting for RPC response: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:555 cinder/rpc/impl_qpid.py:404
+#, python-format
+msgid "Failed to consume message from queue: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:589 cinder/rpc/impl_qpid.py:434
+#, python-format
+msgid "Failed to publish message to topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:341
+#, python-format
+msgid "Unable to connect to AMQP server: %s "
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:346
+#, python-format
+msgid "Connected to AMQP server on %s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:354
+msgid "Re-established AMQP queues"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:412
+msgid "Error processing message.  Skipping it."
+msgstr ""
+
+#: cinder/scheduler/chance.py:47 cinder/scheduler/simple.py:91
+#: cinder/scheduler/simple.py:143
+msgid "Is the appropriate service running?"
+msgstr ""
+
+#: cinder/scheduler/chance.py:52
+msgid "Could not find another compute"
+msgstr ""
+
+#: cinder/scheduler/driver.py:63
+#, python-format
+msgid "Casted '%(method)s' to volume '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:80
+#, python-format
+msgid "Casted '%(method)s' to compute '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:89
+#, python-format
+msgid "Casted '%(method)s' to network '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:107
+#, python-format
+msgid "Casted '%(method)s' to %(topic)s '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:181
+msgid "Must implement a fallback schedule"
+msgstr ""
+
+#: cinder/scheduler/driver.py:185
+msgid "Driver must implement schedule_prep_resize"
+msgstr ""
+
+#: cinder/scheduler/driver.py:190
+msgid "Driver must implement schedule_run_instance"
+msgstr ""
+
+#: cinder/scheduler/driver.py:325
+msgid "Block migration can not be used with shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:330
+msgid "Live migration can not be used without shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:367 cinder/scheduler/driver.py:457
+#, python-format
+msgid "host %(dest)s is not compatible with original host %(src)s."
+msgstr ""
+
+#: cinder/scheduler/driver.py:416
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"memory(host:%(avail)s <= instance:%(mem_inst)s)"
+msgstr ""
+
+#: cinder/scheduler/driver.py:472
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"disk(host:%(available)s <= instance:%(necessary)s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:51
+#, python-format
+msgid "No host selection for %s defined."
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:64
+#, python-format
+msgid "Attempting to build %(num_instances)d instance(s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:157
+msgid "Scheduler only understands Compute nodes (for now)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:199
+#, python-format
+msgid "Filtered %(hosts)s"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:209
+#, python-format
+msgid "Weighted %(weighted_host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:144
+#, python-format
+msgid "Host filter fails for ignored host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:151
+#, python-format
+msgid "Host filter fails for non-forced host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:157
+#, python-format
+msgid "Host filter function %(func)s failed for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:163
+#, python-format
+msgid "Host filter passes for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:272
+#, python-format
+msgid "Received %(service_name)s service update from %(host)s."
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:313
+msgid "host_manager only implemented for 'compute'"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:323
+#, python-format
+msgid "No service for compute ID %s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:85
+#, python-format
+msgid ""
+"Driver Method %(driver_method_name)s missing: %(e)s. Reverting to "
+"schedule()"
+msgstr ""
+
+#: cinder/scheduler/manager.py:150
+#, python-format
+msgid "Failed to schedule_%(method)s: %(ex)s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:159
+#, python-format
+msgid "Setting instance %(instance_uuid)s to %(state)s state."
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:66
+#, python-format
+msgid "Could not stat scheduler options file %(filename)s: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:75
+#, python-format
+msgid "Could not decode scheduler options: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/simple.py:87
+msgid "Not enough allocatable CPU cores remaining"
+msgstr ""
+
+#: cinder/scheduler/simple.py:137
+msgid "Not enough allocatable volume gigabytes remaining"
+msgstr ""
+
+#: cinder/scheduler/filters/core_filter.py:45
+msgid "VCPUs not set; assuming CPU collection broken"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:72
+#, python-format
+msgid "Faking execution of cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:80
+#, python-format
+msgid "Faked command matched %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:96
+#, python-format
+msgid "Faked command raised an exception %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:101
+#, python-format
+msgid "Reply to faked command is stdout='%(stdout)s' stderr='%(stderr)s'"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:784
+msgid "Please extend mock libvirt module to support flags"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:790
+msgid "Please extend fake libvirt module to support this auth method"
+msgstr ""
+
+#: cinder/tests/test_compute.py:365 cinder/tests/test_compute.py:1419
+#, python-format
+msgid "Running instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:371
+#, python-format
+msgid "After terminating instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:589
+msgid "Internal error"
+msgstr ""
+
+#: cinder/tests/test_compute.py:1430
+#, python-format
+msgid "After force-killing instances: %s"
+msgstr ""
+
+#: cinder/tests/test_misc.py:92
+#, python-format
+msgid ""
+"The following migrations are missing a downgrade:\n"
+"\t%s"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:169
+msgid "id"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:170
+msgid "IPv4"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:171
+msgid "IPv6"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:172
+msgid "start address"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:173
+msgid "DNS1"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:174
+msgid "DNS2"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:175
+msgid "VlanID"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:176
+msgid "project"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:177
+msgid "uuid"
+msgstr ""
+
+#: cinder/tests/test_volume.py:216
+#, python-format
+msgid "Target %s allocated"
+msgstr ""
+
+#: cinder/tests/test_volume.py:468
+#, python-format
+msgid "Cannot confirm exported volume id:%s."
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:58
+#, python-format
+msgid "Given data: %s"
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:59
+#, python-format
+msgid "Result data: %s"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:626
+#, python-format
+msgid "Creating files in %s to simulate guest agent"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:637
+#, python-format
+msgid "Removing simulated guest agent files in %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/test_servers.py:2144
+#, python-format
+msgid "Quota exceeded: code=%(code)s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:57
+#, python-format
+msgid "_create: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:66
+#, python-format
+msgid "_delete: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:75
+#, python-format
+msgid "_get: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:85
+#, python-format
+msgid "_get_all: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:125
+#, python-format
+msgid "test_snapshot_create: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:134
+#, python-format
+msgid "test_snapshot_create: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:156
+#, python-format
+msgid "test_snapshot_create_force: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:165
+#, python-format
+msgid "test_snapshot_create_force: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:205
+#, python-format
+msgid "test_snapshot_show: resp=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:231
+#, python-format
+msgid "test_snapshot_detail: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/integrated/test_login.py:31
+#, python-format
+msgid "flavor: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:38
+#, python-format
+msgid ""
+"%(message)s\n"
+"Status Code: %(_status)s\n"
+"Body: %(_body)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:47
+msgid "Authentication error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:55
+msgid "Authorization error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:63
+msgid "Item not found"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:105
+#, python-format
+msgid "Doing %(method)s on %(relative_url)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:107
+#, python-format
+msgid "Body: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:125
+#, python-format
+msgid "%(auth_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:151
+#, python-format
+msgid "%(relative_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:161
+msgid "Unexpected status code"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:168
+#, python-format
+msgid "Decoding JSON: %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:133
+#, python-format
+msgid "Nested received %(queue)s, %(value)s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:142
+#, python-format
+msgid "Nested return %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:160
+msgid "RPC backend does not support timeouts"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:227 cinder/tests/rpc/common.py:233
+#, python-format
+msgid "Received %s"
+msgstr ""
+
+#: cinder/virt/connection.py:85
+msgid "Failed to open connection to the hypervisor"
+msgstr ""
+
+#: cinder/virt/fake.py:270 cinder/virt/xenapi_conn.py:396
+#: cinder/virt/baremetal/proxy.py:716 cinder/virt/libvirt/connection.py:2045
+#, python-format
+msgid "Compute_service record created for %s "
+msgstr ""
+
+#: cinder/virt/fake.py:273 cinder/virt/xenapi_conn.py:399
+#: cinder/virt/baremetal/proxy.py:720 cinder/virt/libvirt/connection.py:2048
+#, python-format
+msgid "Compute_service record updated for %s "
+msgstr ""
+
+#: cinder/virt/firewall.py:130
+#, python-format
+msgid "Attempted to unfilter instance %s which is not filtered"
+msgstr ""
+
+#: cinder/virt/firewall.py:137
+#, python-format
+msgid "Filters added to instance %s"
+msgstr ""
+
+#: cinder/virt/firewall.py:139
+msgid "Provider Firewall Rules refreshed"
+msgstr ""
+
+#: cinder/virt/firewall.py:291
+#, python-format
+msgid "Adding security group rule: %r"
+msgstr ""
+
+#: cinder/virt/firewall.py:403 cinder/virt/xenapi/firewall.py:87
+#, python-format
+msgid "Adding provider rule: %s"
+msgstr ""
+
+#: cinder/virt/images.py:86
+msgid "'qemu-img info' parsing failed."
+msgstr ""
+
+#: cinder/virt/images.py:92
+#, python-format
+msgid "fmt=%(fmt)s backed by: %(backing_file)s"
+msgstr ""
+
+#: cinder/virt/images.py:104
+#, python-format
+msgid "Converted to raw, but format is now %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:105
+msgid ""
+"Must specify vmwareapi_host_ip,vmwareapi_host_username and "
+"vmwareapi_host_password to useconnection_type=vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:276
+#, python-format
+msgid "In vmwareapi:_create_session, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:359
+#, python-format
+msgid "In vmwareapi:_call_method, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:398
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: success"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:404
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: error %(error_info)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:409
+#, python-format
+msgid "In vmwareapi:_poll_task, Got this error %s"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:140
+msgid ""
+"Must specify xenapi_connection_url, xenapi_connection_username "
+"(optionally), and xenapi_connection_password to use "
+"connection_type=xenapi"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:329 cinder/virt/libvirt/connection.py:472
+msgid "Could not determine iscsi initiator name"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:460
+msgid "Host startup on XenServer is not supported."
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:489
+msgid "Unable to log in to XenAPI (is the Dom0 disk full?)"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:527
+msgid "Host is member of a pool, but DB says otherwise"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:599 cinder/virt/xenapi_conn.py:612
+#, python-format
+msgid "Got exception: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:93
+msgid "No domains exist."
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:95
+#, python-format
+msgid "============= initial domains =========== : %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:99
+msgid "Building domain: to be removed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:103
+msgid "Not running domain: remove"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:111
+msgid "domain running on an unknown node: discarded"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:127
+#, python-format
+msgid "No such domain (%s)"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:134
+#, python-format
+msgid "Failed power down Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:143
+msgid "deactivate -> activate fails"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:153
+msgid "destroy_domain: no such domain"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:154
+#, python-format
+msgid "No such domain %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:161
+#, python-format
+msgid "Domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:163
+#, python-format
+msgid "Nodes: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:166
+#, python-format
+msgid "After storing domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:169
+msgid "deactivation/removing domain failed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:176
+msgid "===== Domain is being created ====="
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:179
+msgid "Same domain name already exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:181
+msgid "create_domain: before get_idle_node"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:198
+#, python-format
+msgid "Created new domain: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:213
+#, python-format
+msgid "Failed to boot Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:222
+msgid "No such domain exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:226
+#, python-format
+msgid "change_domain_state: to new state %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:233
+#, python-format
+msgid "Stored fake domains to the file: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:244
+msgid "domain does not exist"
+msgstr ""
+
+#: cinder/virt/baremetal/nodes.py:42
+#, python-format
+msgid "Unknown baremetal driver %(d)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:148
+#, python-format
+msgid "Error encountered when destroying instance '%(name)s': %(ex)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:162
+#, python-format
+msgid "instance %(instance_name)s: deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:189
+#, python-format
+msgid "instance %s: rebooted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:192
+msgid "_wait_for_reboot failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:222
+#, python-format
+msgid "instance %s: rescued"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:225
+msgid "_wait_for_rescue failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:242
+msgid "<============= spawn of baremetal =============>"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:255
+#, python-format
+msgid "instance %s: is building"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:260
+msgid "Key is injected but instance is not running yet"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:265
+#, python-format
+msgid "instance %s: booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:268
+#, python-format
+msgid "~~~~~~ current state = %s ~~~~~~"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:269
+#, python-format
+msgid "instance %s spawned successfully"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:272
+#, python-format
+msgid "instance %s:not booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:274
+msgid "Bremetal assignment is overcommitted."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:354
+#, python-format
+msgid "instance %s: Creating image"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:473
+#, python-format
+msgid "instance %(inst_name)s: injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:484
+#, python-format
+msgid ""
+"instance %(inst_name)s: ignoring error injecting data into image "
+"%(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:529
+#, python-format
+msgid "instance %s: starting toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:531
+#, python-format
+msgid "instance %s: finished toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:574 cinder/virt/libvirt/connection.py:1815
+msgid ""
+"Cannot get the number of cpu, because this function is not implemented "
+"for this platform. This error can be safely ignored for now."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:714
+#, python-format
+msgid "#### RLK: cpu_arch = %s "
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:746
+msgid "Updating!"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:773 cinder/virt/libvirt/connection.py:2609
+#: cinder/virt/xenapi/host.py:129
+msgid "Updating host stats"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:185
+msgid "free_node...."
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:216
+#, python-format
+msgid "deactivate_node is called for node_id = %(id)s node_ip = %(ip)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:221
+msgid "status of node is set to 0"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:232
+msgid "rootfs is already removed"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:264
+msgid "Before ping to the bare-metal node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:275
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is ready"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:279
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is not ready, out_msg=%(out_msg)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:292
+msgid "Noting to do for tilera nodes: vmlinux is in CF"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:316
+msgid "activate_node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:330
+msgid "Node is unknown error state."
+msgstr ""
+
+#: cinder/virt/disk/api.py:165
+msgid "no capable image handler configured"
+msgstr ""
+
+#: cinder/virt/disk/api.py:178
+#, python-format
+msgid "unknown disk image handler: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:189
+msgid "image already mounted"
+msgstr ""
+
+#: cinder/virt/disk/api.py:276 cinder/virt/disk/guestfs.py:64
+#: cinder/virt/disk/guestfs.py:78 cinder/virt/disk/mount.py:100
+#, python-format
+msgid "Failed to mount filesystem: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:291
+#, python-format
+msgid "Failed to remove container: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:441
+#, python-format
+msgid "User %(username)s not found in password file."
+msgstr ""
+
+#: cinder/virt/disk/api.py:457
+#, python-format
+msgid "User %(username)s not found in shadow file."
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:39
+#, python-format
+msgid "unsupported partition: %s"
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:77
+msgid "unknown guestmount error"
+msgstr ""
+
+#: cinder/virt/disk/loop.py:30
+#, python-format
+msgid "Could not attach image to loopback: %s"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:76
+msgid "no partitions found"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:77
+#, python-format
+msgid "Failed to map partitions: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:58
+msgid "nbd unavailable: module not loaded"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:63
+msgid "No free nbd devices"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:81
+#, python-format
+msgid "qemu-nbd error: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:93
+#, python-format
+msgid "nbd device %s did not show up"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:265
+#, python-format
+msgid "Connecting to libvirt: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:286
+msgid "Connection to libvirt broke"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:388
+#, python-format
+msgid "Error from libvirt during destroy. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:400
+#, python-format
+msgid ""
+"Error from libvirt during saved instance removal. Code=%(errcode)s "
+"Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:411
+#, python-format
+msgid "Error from libvirt during undefine. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:423
+msgid "Instance destroyed successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:435
+#, python-format
+msgid "Error from libvirt during unfilter. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:461
+#, python-format
+msgid "Deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:554
+msgid "attaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:567
+msgid "detaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:692
+msgid "Instance soft rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:696
+msgid "Failed to soft reboot instance."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:725
+msgid "Instance shutdown successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:761 cinder/virt/libvirt/connection.py:905
+msgid "During reboot, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:766
+msgid "Instance rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:867 cinder/virt/xenapi/vmops.py:1358
+#, python-format
+msgid ""
+"Found %(migration_count)d unconfirmed migrations older than "
+"%(confirm_window)d seconds"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:871
+#, python-format
+msgid "Automatically confirming migration %d"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:896
+msgid "Instance is running"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:910
+msgid "Instance spawned successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:926
+#, python-format
+msgid "data: %(data)r, fpath: %(fpath)r"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:978
+msgid "Guest does not have a console available"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1020
+#, python-format
+msgid "Path '%(path)s' supports direct I/O"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1024
+#, python-format
+msgid "Path '%(path)s' does not support direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1028 cinder/virt/libvirt/connection.py:1032
+#, python-format
+msgid "Error on '%(path)s' while checking direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1153
+msgid "Creating image"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1339
+#, python-format
+msgid "Injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1349
+#, python-format
+msgid "Ignoring error injecting data into image %(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1381
+#, python-format
+msgid "block_device_list %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1658
+msgid "Starting toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1662
+msgid "Finished toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1679
+#, python-format
+msgid ""
+"Error from libvirt while looking up %(instance_name)s: [Error Code "
+"%(error_code)s] %(ex)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1920
+msgid "libvirt version is too old (does not support getVersion)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1942
+#, python-format
+msgid "'<cpu>' must be 1, but %d\n"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1969
+#, python-format
+msgid "topology (%(topology)s) must have %(ks)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2067
+#, python-format
+msgid ""
+"Instance launched has CPU info:\n"
+"%s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2079
+#, python-format
+msgid ""
+"CPU doesn't have compatibility.\n"
+"\n"
+"%(ret)s\n"
+"\n"
+"Refer to %(u)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2136
+#, python-format
+msgid "Timeout migrating for %s. nwfilter not found."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2352
+#, python-format
+msgid "skipping %(path)s since it looks like volume"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2407
+#, python-format
+msgid "Getting disk size of %(i_name)s: %(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2458
+#, python-format
+msgid "Instance %s: Starting migrate_disk_and_power_off"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2513
+msgid "During wait running, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2518
+msgid "Instance running successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2525
+#, python-format
+msgid "Instance %s: Starting finish_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2565
+#, python-format
+msgid "Instance %s: Starting finish_revert_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:42
+msgid ""
+"Libvirt module could not be loaded. NWFilterFirewall will not work "
+"correctly."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:93
+msgid "Called setup_basic_filtering in nwfilter"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:101
+msgid "Ensuring static filters"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:171
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:217
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) for%(name)s is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:233
+msgid "iptables firewall: Setup Basic Filtering"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:252
+msgid "Attempted to unfilter instance which is not filtered"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:170
+#, python-format
+msgid "%s is a valid instance name"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:173
+#, python-format
+msgid "%s has a disk file"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:175
+#, python-format
+msgid "Instance %(instance)s is backed by %(backing)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:186
+#, python-format
+msgid ""
+"Instance %(instance)s is using a backing file %(backing)s which does not "
+"appear in the image service"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:237
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification failed"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:247
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification skipped, no hash stored"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:266
+#, python-format
+msgid "Cannot remove %(base_file)s, it does not exist"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:278
+#, python-format
+msgid "Base file too young to remove: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:281
+#, python-format
+msgid "Removing base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:288
+#, python-format
+msgid "Failed to remove %(base_file)s, error was %(error)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:299
+#, python-format
+msgid "%(id)s (%(base_file)s): checking"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:318
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): in use: on this node %(local)d local, %(remote)d "
+"on other nodes"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:330
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): warning -- an absent base file is in use! "
+"instances: %(instance_list)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:338
+#, python-format
+msgid "%(id)s (%(base_file)s): in use on (%(remote)d on other nodes)"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:348
+#, python-format
+msgid "%(id)s (%(base_file)s): image is not in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:354
+#, python-format
+msgid "%(id)s (%(base_file)s): image is in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:377
+#, python-format
+msgid "Skipping verification, no base directory at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:381
+msgid "Verify base images"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:388
+#, python-format
+msgid "Image id %(id)s yields fingerprint %(fingerprint)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:406
+#, python-format
+msgid "Unknown base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:411
+#, python-format
+msgid "Active base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:414
+#, python-format
+msgid "Corrupt base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:418
+#, python-format
+msgid "Removable base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:426
+msgid "Verification complete"
+msgstr ""
+
+#: cinder/virt/libvirt/utils.py:264
+msgid "Unable to find an open port"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:90
+#, python-format
+msgid "Ensuring vlan %(vlan)s and bridge %(bridge)s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:99
+#, python-format
+msgid "Ensuring bridge %s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:165 cinder/virt/libvirt/vif.py:220
+#, python-format
+msgid "Failed while unplugging vif of instance '%s'"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:163
+#, python-format
+msgid "iSCSI device not found at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:166
+#, python-format
+msgid ""
+"ISCSI volume not yet found at: %(mount_device)s. Will rescan & retry.  "
+"Try number: %(tries)s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:178
+#, python-format
+msgid "Found iSCSI node %(mount_device)s (after %(tries)s rescans)"
+msgstr ""
+
+#: cinder/virt/vmwareapi/error_util.py:93
+#, python-format
+msgid "Error(s) %s occurred in the call to RetrieveProperties"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:44 cinder/virt/xenapi/fake.py:77
+#, python-format
+msgid "%(text)s: _db_content => %(content)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:131
+#, python-format
+msgid "Property %(attr)s not set for the managed object %(objName)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:437
+msgid "There is no VM registered"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:439 cinder/virt/vmwareapi/fake.py:609
+#, python-format
+msgid "Virtual Machine with ref %s is not there"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:502
+#, python-format
+msgid "Logging out a session that is invalid or already logged out: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:517
+msgid "Session is faulty"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:520
+msgid "Session Invalid"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:606
+msgid " No Virtual Machine has been registered yet"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:99
+#, python-format
+msgid "Glance image %s is in killed state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:107
+#, python-format
+msgid "Glance image %(image_id)s is in unknown state - %(state)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:128
+msgid ""
+"ESX SOAP server returned an empty port group for the host system in its "
+"response"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:155
+#, python-format
+msgid "Creating Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:169
+#, python-format
+msgid "Created Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/read_write_util.py:150
+#, python-format
+msgid "Exception during HTTP connection close in VMWareHTTpWrite. Exception is %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:84
+msgid "Unable to import suds."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:90
+msgid "Must specify vmwareapi_wsdl_loc"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:145
+#, python-format
+msgid "No such SOAP method '%s' provided by VI SDK"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:150
+#, python-format
+msgid "httplib error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:157
+#, python-format
+msgid "Socket error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:162
+#, python-format
+msgid "Type error in  %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:166
+#, python-format
+msgid "Exception in %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:66
+msgid "Getting list of instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:82
+#, python-format
+msgid "Got total of %s instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:126
+msgid "Couldn't get a local Datastore reference"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:196
+#, python-format
+msgid "Creating VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:205
+#, python-format
+msgid "Created VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:234
+#, python-format
+msgid ""
+"Creating Virtual Disk of size  %(vmdk_file_size_in_kb)s KB and adapter "
+"type  %(adapter_type)s on the ESX host local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:251
+#, python-format
+msgid ""
+"Created Virtual Disk of size %(vmdk_file_size_in_kb)s KB on the ESX host "
+"local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:260
+#, python-format
+msgid ""
+"Deleting the file %(flat_uploaded_vmdk_path)s on the ESX host localstore "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:272
+#, python-format
+msgid ""
+"Deleted the file %(flat_uploaded_vmdk_path)s on the ESX host local store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:283
+#, python-format
+msgid ""
+"Downloading image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:298
+#, python-format
+msgid ""
+"Downloaded image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:315
+#, python-format
+msgid "Reconfiguring VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:322
+#, python-format
+msgid "Reconfigured VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:329
+#, python-format
+msgid "Powering on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:335
+#, python-format
+msgid "Powered on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:381
+#, python-format
+msgid "Creating Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:391
+#, python-format
+msgid "Created Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:434
+#, python-format
+msgid "Copying disk data before snapshot of the VM  instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:447
+#, python-format
+msgid "Copied disk data before snapshot of the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:456
+#, python-format
+msgid "Uploading image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:469
+#, python-format
+msgid "Uploaded image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:479
+#, python-format
+msgid "Deleting temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:488
+#, python-format
+msgid "Deleted temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:520
+msgid "instance is not powered on"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:527
+#, python-format
+msgid "Rebooting guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:530
+#, python-format
+msgid "Rebooted guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:532
+#, python-format
+msgid "Doing hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:536
+#, python-format
+msgid "Did hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:548
+#, python-format
+msgid "instance - %s not present"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:567
+#, python-format
+msgid "Powering off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:572
+#, python-format
+msgid "Powered off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:576
+#, python-format
+msgid "Unregistering the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:579
+#, python-format
+msgid "Unregistered the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:581
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while un-registering the "
+"VM: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:592
+#, python-format
+msgid "Deleting contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:602
+#, python-format
+msgid "Deleted contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:607
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while deleting the VM "
+"contents from the disk: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:615
+msgid "pause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:619
+msgid "unpause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:633
+#, python-format
+msgid "Suspending the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:637
+#, python-format
+msgid "Suspended the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:640
+msgid "instance is powered off and can not be suspended."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:643
+#, python-format
+msgid "VM %s was already in suspended state. So returning without doing anything"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:656
+#, python-format
+msgid "Resuming the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:661
+#, python-format
+msgid "Resumed the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:663
+msgid "instance is not in a suspended state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:699
+msgid "get_diagnostics not implemented for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:757
+#, python-format
+msgid ""
+"Reconfiguring VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:765
+#, python-format
+msgid ""
+"Reconfigured VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:802
+#, python-format
+msgid "Creating directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:806
+#, python-format
+msgid "Created directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:89
+#, python-format
+msgid "Downloading image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:103
+#, python-format
+msgid "Downloaded image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:108
+#, python-format
+msgid "Uploading image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:129
+#, python-format
+msgid "Uploaded image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:139
+#, python-format
+msgid "Getting image size for the image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:143
+#, python-format
+msgid "Got image size of %(size)s for the image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:553 cinder/virt/xenapi/fake.py:652
+#: cinder/virt/xenapi/fake.py:670 cinder/virt/xenapi/fake.py:732
+msgid "Raising NotImplemented"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:555
+#, python-format
+msgid "xenapi.fake does not have an implementation for %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:589
+#, python-format
+msgid "Calling %(localname)s %(impl)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:594
+#, python-format
+msgid "Calling getter %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:654
+#, python-format
+msgid ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:67
+#, python-format
+msgid ""
+"Instance %(name)s running on %(host)s could not be found in the database:"
+" assuming it is a worker VM and skipping migration to a new host"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:137
+#, python-format
+msgid "Unable to get SR for this host: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:169
+msgid "Unable to get updated status"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:172
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:37
+#, python-format
+msgid "Found non-unique network for name_label %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:55
+#, python-format
+msgid "Found non-unique network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:58
+#, python-format
+msgid "Found no network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:111
+#, python-format
+msgid "Unable to eject %(host)s from the pool; pool not empty"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:126
+#, python-format
+msgid "Unable to eject %(host)s from the pool; No master found"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:143
+#, python-format
+msgid "Pool-Join failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:146
+#, python-format
+msgid "Unable to join %(host)s in the pool"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:162
+#, python-format
+msgid "Pool-eject failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:174
+#, python-format
+msgid "Unable to set up pool: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:185
+#, python-format
+msgid "Pool-set_name_label failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:103
+#, python-format
+msgid "Found no PIF for device %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:122
+#, python-format
+msgid ""
+"PIF %(pif_rec['uuid'])s for network %(bridge)s has VLAN id %(pif_vlan)d. "
+"Expected %(vlan_num)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:218
+msgid "Created VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:245
+#, python-format
+msgid "VBD not found in instance %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:262
+#, python-format
+msgid "VBD %s already detached"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:265
+#, python-format
+msgid "VBD %(vbd_ref)s detach rejected, attempt %(num_attempt)d/%(max_attempts)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:270
+#, python-format
+msgid "Unable to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:275
+#, python-format
+msgid "Reached maximum number of retries trying to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:286
+#, python-format
+msgid "Unable to destroy VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:305
+#, python-format
+msgid "Creating %(vbd_type)s-type VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:308
+#, python-format
+msgid "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:319
+#, python-format
+msgid "Unable to destroy VDI %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:336
+#, python-format
+msgid ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:345
+#, python-format
+msgid "Copied VDI %(vdi_ref)s from VDI %(vdi_to_copy_ref)s on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:353
+#, python-format
+msgid "Cloned VDI %(vdi_ref)s from VDI %(vdi_to_clone_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:372
+#, python-format
+msgid "No primary VDI found for %(vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:379
+#, python-format
+msgid "Snapshotting with label '%(label)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:392
+#, python-format
+msgid "Created snapshot %(template_vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:431
+#, python-format
+msgid "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:583
+#, python-format
+msgid "Creating blank HD of size %(req_size)d gigs"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:634
+#, python-format
+msgid ""
+"Fast cloning is only supported on default local SR of type ext. SR on "
+"this system was found to be of type %(sr_type)s. Ignoring the cow flag."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:724
+#, python-format
+msgid ""
+"download_vhd %(image)s attempt %(attempt_num)d/%(max_attempts)d from "
+"%(glance_host)s:%(glance_port)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:734
+#, python-format
+msgid "download_vhd failed: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:750
+#, python-format
+msgid "Asking xapi to fetch vhd image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:760
+#, python-format
+msgid ""
+"xapi 'download_vhd' returned VDI of type '%(vdi_type)s' with UUID "
+"'%(vdi_uuid)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:789
+#, python-format
+msgid "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:805
+#, python-format
+msgid "image_size_bytes=%(size_bytes)d, allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:809
+#, python-format
+msgid ""
+"Image size %(size_bytes)d exceeded instance_type allowed size "
+"%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:831
+#, python-format
+msgid "Fetching image %(image)s, type %(image_type_str)"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:844
+#, python-format
+msgid "Size for image %(image)s: %(virtual_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:853
+#, python-format
+msgid ""
+"Kernel/Ramdisk image is too large: %(vdi_size)d bytes, max %(max_size)d "
+"bytes"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:870
+#, python-format
+msgid "Copying VDI %s to /boot/guest on dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:884
+#, python-format
+msgid "Kernel/Ramdisk VDI %s destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:895
+msgid "Failed to fetch glance image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:934
+#, python-format
+msgid "Detected %(image_type_str)s format for image %(image_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:955
+#, python-format
+msgid "Looking up vdi %s for PV kernel"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:973
+#, python-format
+msgid "Unknown image format %(disk_image_type)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1016
+#, python-format
+msgid "VDI %s is still available"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1059
+#, python-format
+msgid "(VM_UTILS) xenserver vm state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1061
+#, python-format
+msgid "(VM_UTILS) xenapi power_state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1088
+#, python-format
+msgid "Unable to parse rrd of %(vm_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1108
+#, python-format
+msgid "Re-scanning SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1136
+#, python-format
+msgid "Flag sr_matching_filter '%s' does not respect formatting convention"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1154
+msgid ""
+"XenAPI is unable to find a Storage Repository to install guest instances "
+"on. Please check your configuration and/or configure the flag "
+"'sr_matching_filter'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1167
+msgid "Cannot find SR of content-type ISO"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1175
+#, python-format
+msgid "ISO: looking at SR %(sr_rec)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1177
+msgid "ISO: not iso content"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1180
+msgid "ISO: iso content_type, no 'i18n-key' key"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1183
+msgid "ISO: iso content_type, i18n-key value not 'local-storage-iso'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1187
+msgid "ISO: SR MATCHing our criteria"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1189
+msgid "ISO: ISO, looking to see if it is host local"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1192
+#, python-format
+msgid "ISO: PBD %(pbd_ref)s disappeared"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1195
+#, python-format
+msgid "ISO: PBD matching, want %(pbd_rec)s, have %(host)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1198
+msgid "ISO: SR with local PBD"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1220
+#, python-format
+msgid ""
+"Unable to obtain RRD XML for VM %(vm_uuid)s with server details: "
+"%(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1236
+#, python-format
+msgid "Unable to obtain RRD XML updates with server details: %(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1290
+#, python-format
+msgid "Invalid statistics data from Xenserver: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1343
+#, python-format
+msgid "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1417
+#, python-format
+msgid ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1427
+#, python-format
+msgid "VHD coalesce attempts exceeded (%(max_attempts)d), giving up..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1462
+#, python-format
+msgid "Timeout waiting for device %s to be created"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1473
+#, python-format
+msgid "Plugging VBD %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1476
+#, python-format
+msgid "Plugging VBD %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1478
+#, python-format
+msgid "VBD %(vbd_ref)s plugged as %(orig_dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1481
+#, python-format
+msgid "VBD %(vbd_ref)s plugged into wrong dev, remapping to %(dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1490
+#, python-format
+msgid "Destroying VBD for VDI %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1498
+#, python-format
+msgid "Destroying VBD for VDI %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1511
+#, python-format
+msgid "Running pygrub against %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1518
+#, python-format
+msgid "Found Xen kernel %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1520
+msgid "No Xen kernel found.  Booting HVM."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1533
+msgid "Partitions:"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1539
+#, python-format
+msgid "  %(num)s: %(ptype)s %(size)d sectors"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1565
+#, python-format
+msgid ""
+"Writing partition table %(primary_first)d %(primary_last)d to "
+"%(dev_path)s..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1578
+#, python-format
+msgid "Writing partition table %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1632
+#, python-format
+msgid ""
+"Starting sparse_copy src=%(src_path)s dst=%(dst_path)s "
+"virtual_size=%(virtual_size)d block_size=%(block_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1664
+#, python-format
+msgid ""
+"Finished sparse_copy in %(duration).2f secs, %(compression_pct).2f%% "
+"reduction in size"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1714
+msgid ""
+"XenServer tools installed in this image are capable of network injection."
+"  Networking files will not bemanipulated"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1722
+msgid ""
+"XenServer tools are present in this image but are not capable of network "
+"injection"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1726
+msgid "XenServer tools are not installed in this image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1742
+msgid "Manipulating interface files directly"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1751
+#, python-format
+msgid "Failed to mount filesystem (expected for non-linux instances): %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:131 cinder/virt/xenapi/vmops.py:722
+#, python-format
+msgid "Updating progress to %(progress)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:231
+#, python-format
+msgid "Attempted to power on non-existent instance bad instance id %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:233
+msgid "Starting instance"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:303
+msgid "Removing kernel/ramdisk files from dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:358
+msgid "Failed to spawn, rolling back"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:443
+msgid "Detected ISO image type, creating blank VM for install"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:462
+msgid "Auto configuring disk, attempting to resize partition..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:515
+#, python-format
+msgid "Invalid value for injected_files: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:520
+#, python-format
+msgid "Injecting file path: '%s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:527
+msgid "Setting admin password"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:531
+msgid "Resetting network"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:538
+msgid "Setting VCPU weight"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:544
+msgid "Starting VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:551
+#, python-format
+msgid ""
+"Latest agent build for %(hypervisor)s/%(os)s/%(architecture)s is "
+"%(version)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:554
+#, python-format
+msgid "No agent build found for %(hypervisor)s/%(os)s/%(architecture)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:561
+msgid "Waiting for instance state to become running"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:573
+msgid "Querying agent version"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:576
+#, python-format
+msgid "Instance agent version: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:581
+#, python-format
+msgid "Updating Agent to %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:616
+#, python-format
+msgid "No opaque_ref could be determined for '%s'."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:670
+msgid "Finished snapshot and upload for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:677
+msgid "Starting snapshot for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:686
+#, python-format
+msgid "Unable to Snapshot instance: %(exc)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:702
+msgid "Failed to transfer vhd to new host"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:770
+#, python-format
+msgid "Resizing down VDI %(cow_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:893
+#, python-format
+msgid "Resizing up VDI %(vdi_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:901
+msgid "Resize complete"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:928
+#, python-format
+msgid "Failed to query agent version: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:949
+#, python-format
+msgid "domid changed from %(domid)s to %(newdomid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:962
+#, python-format
+msgid "Failed to update agent: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:983
+#, python-format
+msgid "Failed to exchange keys: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:998
+#, python-format
+msgid "Failed to update password: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1023
+#, python-format
+msgid "Failed to inject file: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1032
+msgid "VM already halted, skipping shutdown..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1036
+msgid "Shutting down VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1054
+msgid "Unable to find VBD for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1097
+msgid "Using RAW or VHD, skipping kernel and ramdisk deletion"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1104
+msgid "instance has a kernel or ramdisk but not both"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1111
+msgid "kernel/ramdisk files removed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1121
+msgid "VM destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1147
+msgid "Destroying VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1169
+msgid "VM is not present, skipping destroy..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1222
+#, python-format
+msgid "Instance is already in Rescue Mode: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1296
+#, python-format
+msgid "Found %(instance_count)d hung reboots older than %(timeout)d seconds"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1300
+msgid "Automatically hard rebooting"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1363
+#, python-format
+msgid "Setting migration %(migration_id)s to error: %(reason)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1374
+#, python-format
+msgid ""
+"Automatically confirming migration %(migration_id)s for instance "
+"%(instance_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1379
+#, python-format
+msgid "Instance %(instance_uuid)s not found"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1383
+msgid "In ERROR state"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1389
+#, python-format
+msgid "In %(task_state)s task_state, not RESIZE_VERIFY"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1396
+#, python-format
+msgid "Error auto-confirming resize: %(e)s. Will retry later."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1418
+msgid "Could not get bandwidth info."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1469
+msgid "Injecting network info to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1483
+msgid "Creating vifs"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1492
+#, python-format
+msgid "Creating VIF for network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1495
+#, python-format
+msgid "Created VIF %(vif_ref)s, network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1520
+msgid "Injecting hostname to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1545
+#, python-format
+msgid ""
+"The agent call to %(method)s returned an invalid response: %(ret)r. "
+"path=%(path)s; args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1566
+#, python-format
+msgid "TIMEOUT: The call to %(method)s timed out. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1570
+#, python-format
+msgid ""
+"NOT IMPLEMENTED: The call to %(method)s is not supported by the agent. "
+"args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1575
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1661
+#, python-format
+msgid "OpenSSL error: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:52
+msgid "creating sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:55 cinder/virt/xenapi/volume_utils.py:83
+#, python-format
+msgid "type is = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:58 cinder/virt/xenapi/volume_utils.py:86
+#, python-format
+msgid "name = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:71
+#, python-format
+msgid "Created %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:76 cinder/virt/xenapi/volume_utils.py:174
+msgid "Unable to create Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:80
+msgid "introducing sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:103 cinder/virt/xenapi/volume_utils.py:170
+#: cinder/virt/xenapi/volumeops.py:156
+#, python-format
+msgid "Introduced %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:106
+msgid "Creating pbd for SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:108
+msgid "Plugging SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:116 cinder/virt/xenapi/volumeops.py:160
+msgid "Unable to introduce Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:127 cinder/virt/xenapi/volumeops.py:50
+msgid "Unable to get SR using uuid"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:129
+#, python-format
+msgid "Forgetting SR %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:137
+msgid "Unable to forget Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:157
+#, python-format
+msgid "Introducing %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:186
+#, python-format
+msgid "Unable to find SR from VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:204
+#, python-format
+msgid "Ignoring exception %(exc)s when getting PBDs for %(sr_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:210
+#, python-format
+msgid "Ignoring exception %(exc)s when unplugging PBD %(pbd)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:234
+#, python-format
+msgid "Unable to introduce VDI on SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:242
+#, python-format
+msgid "Unable to get record of VDI %s on"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:264
+#, python-format
+msgid "Unable to introduce VDI for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:274
+#, python-format
+msgid "Error finding vdis in SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:281
+#, python-format
+msgid "Unable to find vbd for vdi %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:315
+#, python-format
+msgid "Unable to obtain target information %(data)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:341
+#, python-format
+msgid "Mountpoint cannot be translated: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:64
+msgid "Could not find VDI ref"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:69
+#, python-format
+msgid "Creating SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:73
+msgid "Could not create SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:76
+msgid "Could not retrieve SR record"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:81
+#, python-format
+msgid "Introducing SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:85
+msgid "SR found in xapi database. No need to introduce"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:90
+msgid "Could not introduce SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:94
+#, python-format
+msgid "Checking for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:106
+#, python-format
+msgid "SR %s not found in the xapi database"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:112
+msgid "Could not forget SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:121
+#, python-format
+msgid "Attach_volume: %(connection_info)s, %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:178
+#, python-format
+msgid "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:189
+#, python-format
+msgid "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:197
+#, python-format
+msgid "Unable to attach volume to instance %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:200
+#, python-format
+msgid "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:210
+#, python-format
+msgid "Detach_volume: %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:219
+#, python-format
+msgid "Unable to locate volume %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:227
+#, python-format
+msgid "Unable to detach volume %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:232
+#, python-format
+msgid "Unable to destroy vbd %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:239
+#, python-format
+msgid "Error purging SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:241
+#, python-format
+msgid "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:98 cinder/vnc/xvp_proxy.py:103
+#, python-format
+msgid "Error in handshake: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:119
+#, python-format
+msgid "Invalid request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:139
+#, python-format
+msgid "Request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:142
+#, python-format
+msgid "Request made with missing token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:153
+#, python-format
+msgid "Request made with invalid token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:160
+#, python-format
+msgid "Unexpected error: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:180
+#, python-format
+msgid "Starting cinder-xvpvncproxy node (version %s)"
+msgstr ""
+
+#: cinder/volume/api.py:74 cinder/volume/api.py:220
+msgid "status must be available"
+msgstr ""
+
+#: cinder/volume/api.py:85
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to create %(size)sG volume"
+msgstr ""
+
+#: cinder/volume/api.py:137
+#, fuzzy
+msgid "Volume status must be available or error"
+msgstr "Status volumena mora biti omogućen"
+
+#: cinder/volume/api.py:142
+#, python-format
+msgid "Volume still has %d dependent snapshots"
+msgstr ""
+
+#: cinder/volume/api.py:223
+msgid "already attached"
+msgstr ""
+
+#: cinder/volume/api.py:230
+msgid "already detached"
+msgstr ""
+
+#: cinder/volume/api.py:292
+msgid "must be available"
+msgstr ""
+
+#: cinder/volume/api.py:325
+#, fuzzy
+msgid "Volume Snapshot status must be available or error"
+msgstr "Status volumena mora biti omogućen"
+
+#: cinder/volume/driver.py:96
+#, python-format
+msgid "Recovering from a failed execute.  Try number %s"
+msgstr ""
+
+#: cinder/volume/driver.py:106
+#, python-format
+msgid "volume group %s doesn't exist"
+msgstr ""
+
+#: cinder/volume/driver.py:270
+#, python-format
+msgid "Skipping ensure_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:318
+#, python-format
+msgid "Skipping remove_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:327
+#, python-format
+msgid ""
+"Skipping remove_export. No iscsi_target is presently exported for volume:"
+" %d"
+msgstr ""
+
+#: cinder/volume/driver.py:337
+msgid "ISCSI provider_location not stored, using discovery"
+msgstr ""
+
+#: cinder/volume/driver.py:384
+#, python-format
+msgid "Could not find iSCSI export  for volume %s"
+msgstr ""
+
+#: cinder/volume/driver.py:388
+#, python-format
+msgid "ISCSI Discovery: Found %s"
+msgstr ""
+
+#: cinder/volume/driver.py:466
+#, python-format
+msgid "Cannot confirm exported volume id:%(volume_id)s."
+msgstr ""
+
+#: cinder/volume/driver.py:493
+#, python-format
+msgid "FAKE ISCSI: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:505
+#, python-format
+msgid "rbd has no pool %s"
+msgstr ""
+
+#: cinder/volume/driver.py:579
+#, python-format
+msgid "Sheepdog is not working: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:581
+msgid "Sheepdog is not working"
+msgstr ""
+
+#: cinder/volume/driver.py:680 cinder/volume/driver.py:685
+#, python-format
+msgid "LoggingVolumeDriver: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:96
+#, python-format
+msgid "Re-exporting %s volumes"
+msgstr ""
+
+#: cinder/volume/manager.py:101
+#, python-format
+msgid "volume %s: skipping export"
+msgstr ""
+
+#: cinder/volume/manager.py:107
+#, python-format
+msgid "volume %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:119
+#, python-format
+msgid "volume %(vol_name)s: creating lv of size %(vol_size)sG"
+msgstr ""
+
+#: cinder/volume/manager.py:131
+#, python-format
+msgid "volume %s: creating export"
+msgstr ""
+
+#: cinder/volume/manager.py:144
+#, python-format
+msgid "volume %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:153
+msgid "Volume is still attached"
+msgstr ""
+
+#: cinder/volume/manager.py:155
+msgid "Volume is not local to this node"
+msgstr ""
+
+#: cinder/volume/manager.py:159
+#, python-format
+msgid "volume %s: removing export"
+msgstr ""
+
+#: cinder/volume/manager.py:161
+#, python-format
+msgid "volume %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:164
+#, python-format
+msgid "volume %s: volume is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:176
+#, python-format
+msgid "volume %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:183
+#, python-format
+msgid "snapshot %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:187
+#, python-format
+msgid "snapshot %(snap_name)s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:202
+#, python-format
+msgid "snapshot %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:211
+#, python-format
+msgid "snapshot %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:214
+#, python-format
+msgid "snapshot %s: snapshot is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:226
+#, python-format
+msgid "snapshot %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:310
+msgid "Checking volume capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:314
+#, python-format
+msgid "New capabilities found: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:325
+msgid "Clear capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:329
+#, python-format
+msgid "Notification {%s} received"
+msgstr ""
+
+#: cinder/volume/netapp.py:79
+#, python-format
+msgid "API %(name)sfailed: %(reason)s"
+msgstr ""
+
+#: cinder/volume/netapp.py:109
+#, python-format
+msgid "%s is not set"
+msgstr ""
+
+#: cinder/volume/netapp.py:128
+msgid "Connected to DFM server"
+msgstr ""
+
+#: cinder/volume/netapp.py:159
+#, python-format
+msgid "Job failed: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:240
+msgid "Failed to provision dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:252
+msgid "No LUN was created by the provision job"
+msgstr ""
+
+#: cinder/volume/netapp.py:261 cinder/volume/netapp.py:433
+#, python-format
+msgid "Failed to find LUN ID for volume %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:280
+msgid "Failed to remove and delete dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:603 cinder/volume/netapp.py:657
+#, python-format
+msgid "No LUN ID for volume %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:607 cinder/volume/netapp.py:661
+#, python-format
+msgid "Failed to get LUN details for LUN ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:614
+#, python-format
+msgid "Failed to get host details for host ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:620
+#, python-format
+msgid "Failed to get target portal for filer: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:625
+#, python-format
+msgid "Failed to get target IQN for filer: %s"
+msgstr ""
+
+#: cinder/volume/san.py:113 cinder/volume/san.py:151
+msgid "Specify san_password or san_private_key"
+msgstr ""
+
+#: cinder/volume/san.py:156
+msgid "san_ip must be set"
+msgstr ""
+
+#: cinder/volume/san.py:320
+#, python-format
+msgid "LUID not found for %(zfs_poolname)s. Output=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:452
+#, python-format
+msgid "CLIQ command returned %s"
+msgstr ""
+
+#: cinder/volume/san.py:458
+#, python-format
+msgid "Malformed response to CLIQ command %(verb)s %(cliq_args)s. Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:466
+#, python-format
+msgid "Error running CLIQ command %(verb)s %(cliq_args)s.  Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:496
+#, python-format
+msgid ""
+"Unexpected number of virtual ips for cluster  %(cluster_name)s. "
+"Result=%(_xml)s"
+msgstr ""
+
+#: cinder/volume/san.py:549
+#, python-format
+msgid "Volume info: %(volume_name)s => %(volume_attributes)s"
+msgstr ""
+
+#: cinder/volume/san.py:594
+msgid "local_path not supported"
+msgstr ""
+
+#: cinder/volume/san.py:626
+#, python-format
+msgid "Could not determine project for volume %s, can't export"
+msgstr ""
+
+#: cinder/volume/san.py:696
+#, python-format
+msgid "Payload for SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:713
+#, python-format
+msgid "Call to json.loads() raised an exception: %s"
+msgstr ""
+
+#: cinder/volume/san.py:718
+#, python-format
+msgid "Results of SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:732
+#, python-format
+msgid "Found solidfire account: %s"
+msgstr ""
+
+#: cinder/volume/san.py:746
+#, python-format
+msgid "solidfire account: %s does not exist, create it..."
+msgstr ""
+
+#: cinder/volume/san.py:804
+msgid "Enter SolidFire create_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:846
+msgid "Leaving SolidFire create_volume"
+msgstr ""
+
+#: cinder/volume/san.py:861
+msgid "Enter SolidFire delete_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:880
+#, python-format
+msgid "Deleting volumeID: %s "
+msgstr ""
+
+#: cinder/volume/san.py:888
+msgid "Leaving SolidFire delete_volume"
+msgstr ""
+
+#: cinder/volume/san.py:891
+msgid "Executing SolidFire ensure_export..."
+msgstr ""
+
+#: cinder/volume/san.py:895
+msgid "Executing SolidFire create_export..."
+msgstr ""
+
+#: cinder/volume/volume_types.py:49 cinder/volume/volume_types.py:108
+msgid "name cannot be None"
+msgstr ""
+
+#: cinder/volume/volume_types.py:96
+msgid "id cannot be None"
+msgstr ""
+
+#: cinder/volume/xensm.py:55
+#, python-format
+msgid "SR name = %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:56
+#, python-format
+msgid "Params: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:60
+#, python-format
+msgid "Failed to create sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:62
+msgid "Create failed"
+msgstr ""
+
+#: cinder/volume/xensm.py:64
+#, python-format
+msgid "SR UUID of new SR is: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:71
+msgid "Failed to update db"
+msgstr ""
+
+#: cinder/volume/xensm.py:80
+#, python-format
+msgid "Failed to introduce sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:91
+#, python-format
+msgid "Failed to reach backend %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:100
+msgid "XenSMDriver requires xenapi connection"
+msgstr ""
+
+#: cinder/volume/xensm.py:110
+msgid "Failed to initiate session"
+msgstr ""
+
+#: cinder/volume/xensm.py:142
+#, python-format
+msgid "Volume will be created in backend - %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:154
+msgid "Failed to update volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:157
+msgid "Unable to create volume"
+msgstr ""
+
+#: cinder/volume/xensm.py:171
+msgid "Failed to delete vdi"
+msgstr ""
+
+#: cinder/volume/xensm.py:177
+msgid "Failed to delete volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:210
+msgid "Failed to find volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:221
+msgid "Failed to find backend in db"
+msgstr ""
+
+#: cinder/volume/nexenta/__init__.py:27
+msgid "Nexenta SA returned the error"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:64
+#, python-format
+msgid "Sending JSON data: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:69
+#, python-format
+msgid "Auto switching to HTTPS connection to %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:75
+msgid "No headers in server response"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:76
+msgid "Bad response from server"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:79
+#, python-format
+msgid "Got response: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:96
+#, python-format
+msgid "Volume %s does not exist in Nexenta SA"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:180
+msgid ""
+"Call to local_path should not happen. Verify that use_local_volumes flag "
+"is turned off."
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:202
+#, python-format
+msgid "Ignored target creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:210
+#, python-format
+msgid "Ignored target group creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:219
+#, python-format
+msgid "Ignored target group member addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:227
+#, python-format
+msgid "Ignored LU creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:237
+#, python-format
+msgid "Ignored LUN mapping entry addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:273
+#, python-format
+msgid ""
+"Got error trying to destroy target group %(target_group)s, assuming it is"
+" already gone: %(exc)s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:280
+#, python-format
+msgid ""
+"Got error trying to delete target %(target)s, assuming it is already "
+"gone: %(exc)s"
+msgstr ""
+
+#~ msgid "Unable to locate account %(account_name) on Solidfire device"
+#~ msgstr ""
+
+#~ msgid "Zone %(zone_id)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Cinder access parameters were not specified."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(id)d could not be found."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(name)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Detected more than one volume with name %(vol_name)"
+#~ msgstr ""
+
+#~ msgid "Detected existing vlan with id %(vlan)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab semaphore \"%(lock)s\" "
+#~ "for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab file lock "
+#~ "\"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Parent group id and group id cannot be same"
+#~ msgstr ""
+
+#~ msgid "No body provided"
+#~ msgstr ""
+
+#~ msgid "Create VSA %(display_name)s of type %(vc_type)s"
+#~ msgstr ""
+
+#~ msgid "Delete VSA with id: %s"
+#~ msgstr ""
+
+#~ msgid "Associate address %(ip)s to VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "Disassociate address from VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "%(obj)s with ID %(id)s not found"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(obj)s with ID %(id)s belongs to "
+#~ "VSA %(own_vsa_id)s and not to VSA "
+#~ "%(vsa_id)s."
+#~ msgstr ""
+
+#~ msgid "Index. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Detail. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Create. vsa_id=%(vsa_id)s, body=%(body)s"
+#~ msgstr ""
+
+#~ msgid "Create volume of %(size)s GB from VSA ID %(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Update %(obj)s with id: %(id)s, changes: %(changes)s"
+#~ msgstr ""
+
+#~ msgid "Delete. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Show. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Index instances for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You cannot run"
+#~ " any more instances of this type."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You can only"
+#~ " run %s more instances of this "
+#~ "type."
+#~ msgstr ""
+
+#~ msgid "Going to try to soft delete %s"
+#~ msgstr ""
+
+#~ msgid "No host for instance %s, deleting immediately"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to stop %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to start %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Going to force the deletion of the"
+#~ " vm %(instance_uuid)s, even if it is"
+#~ " deleted"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s did not exist "
+#~ "in the DB, but I will shut "
+#~ "it down anyway using a special "
+#~ "context"
+#~ msgstr ""
+
+#~ msgid "exception terminating the instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "trying to destroy already destroyed instance: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(name)s found in database but"
+#~ " not known by hypervisor. Setting "
+#~ "power state to NOSTATE"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Detected instance  with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Destroying instance with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid "SQL connection failed (%(connstring)s). %(attempts)d attempts left."
+#~ msgstr ""
+
+#~ msgid "Can't downgrade without losing data"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_id)s not found"
+#~ msgstr ""
+
+#~ msgid "Network %s has active ports, cannot delete"
+#~ msgstr ""
+
+#~ msgid "No fixed IPs to deallocate for vif %sid"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "AMQP server on %(fl_host)s:%(fl_port)d is "
+#~ "unreachable: %(e)s. Trying again in "
+#~ "%(fl_intv)d seconds."
+#~ msgstr ""
+
+#~ msgid "Unable to connect to AMQP server after %(tries)d tries. Shutting down."
+#~ msgstr ""
+
+#~ msgid "Reconnected to queue"
+#~ msgstr ""
+
+#~ msgid "Failed to fetch message from queue: %s"
+#~ msgstr ""
+
+#~ msgid "Initing the Adapter Consumer for %s"
+#~ msgstr ""
+
+#~ msgid "Created \"%(exchange)s\" fanout exchange with \"%(key)s\" routing key"
+#~ msgstr ""
+
+#~ msgid "Exception while processing consumer"
+#~ msgstr ""
+
+#~ msgid "Creating \"%(exchange)s\" fanout exchange"
+#~ msgstr ""
+
+#~ msgid "response %s"
+#~ msgstr ""
+
+#~ msgid "topic is %s"
+#~ msgstr ""
+
+#~ msgid "message %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Cannot confirm tmpfile at %(ipath)s is"
+#~ " on same shared storage between "
+#~ "%(src)s and %(dest)s."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of memory(host:%(avail)s <= "
+#~ "instance:%(mem_inst)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of disk(host:%(available)s <="
+#~ " instance:%(necessary)s)"
+#~ msgstr ""
+
+#~ msgid "Driver Method %(driver_method)s missing: %(e)s.Reverting to schedule()"
+#~ msgstr ""
+
+#~ msgid "Setting instance %(instance_uuid)s to ERROR state."
+#~ msgstr ""
+
+#~ msgid "_filter_hosts: %(request_spec)s"
+#~ msgstr ""
+
+#~ msgid "Filter hosts for drive type %s"
+#~ msgstr ""
+
+#~ msgid "Host %s has no free capacity. Skip"
+#~ msgstr ""
+
+#~ msgid "Filter hosts: %s"
+#~ msgstr ""
+
+#~ msgid "Must implement host selection mechanism"
+#~ msgstr ""
+
+#~ msgid "Maximum number of hosts selected (%d)"
+#~ msgstr ""
+
+#~ msgid "Selected excessive host %(host)s"
+#~ msgstr ""
+
+#~ msgid "Provision volume %(name)s of size %(size)s GB on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "volume_params %(volume_params)s"
+#~ msgstr ""
+
+#~ msgid "%(i)d: Volume %(name)s"
+#~ msgstr ""
+
+#~ msgid "Attempting to spawn %(num_volumes)d volume(s)"
+#~ msgstr ""
+
+#~ msgid "Error creating volumes"
+#~ msgstr ""
+
+#~ msgid "Non-VSA volume %d"
+#~ msgstr ""
+
+#~ msgid "Spawning volume %(volume_id)s with drive type %(drive_type)s"
+#~ msgstr ""
+
+#~ msgid "Error creating volume"
+#~ msgstr ""
+
+#~ msgid "No capability selected for volume of size %(size)s"
+#~ msgstr ""
+
+#~ msgid "Host %s:"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\tDrive %(qosgrp)-25s: total %(total)2s, "
+#~ "used %(used)2s, free %(free)2s. Available "
+#~ "capacity %(avail)-5s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t LeastUsedHost: Best host: %(best_host)s."
+#~ " (used capacity %(min_used)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t MostAvailCap: Best host: %(best_host)s. "
+#~ "(available %(max_avail)s %(type_str)s)"
+#~ msgstr ""
+
+#~ msgid "(%(nm)s) publish (key: %(routing_key)s) %(message)s"
+#~ msgstr ""
+
+#~ msgid "Publishing to route %s"
+#~ msgstr ""
+
+#~ msgid "Declaring queue %s"
+#~ msgstr ""
+
+#~ msgid "Declaring exchange %s"
+#~ msgstr ""
+
+#~ msgid "Binding %(queue)s to %(exchange)s with key %(routing_key)s"
+#~ msgstr ""
+
+#~ msgid "Getting from %(queue)s: %(message)s"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate wrong VSA name. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate DB error. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: user_data = %s"
+#~ msgstr ""
+
+#~ msgid "_create: param=%s"
+#~ msgstr ""
+
+#~ msgid "Host %s"
+#~ msgstr ""
+
+#~ msgid "Test: provision vol %(name)s on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "\t vol=%(vol)s"
+#~ msgstr ""
+
+#~ msgid "Test: VSA update request: vsa_id=%(vsa_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume create: %s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get request: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume update request: id=%(volume_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: success    %(result)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: %(status)s    %(error_info)s"
+#~ msgstr ""
+
+#~ msgid "Unable to get updated status: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "deactivate_node is called for                "
+#~ "node_id = %(id)s node_ip = %(ip)s"
+#~ msgstr ""
+
+#~ msgid "virsh said: %r"
+#~ msgstr ""
+
+#~ msgid "cool, it's a device"
+#~ msgstr ""
+
+#~ msgid "Unable to read LXC console"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "to xml...\n"
+#~ ":%s "
+#~ msgstr ""
+
+#~ msgid "During wait running, %s disappeared."
+#~ msgstr ""
+
+#~ msgid "Instance %s running successfully."
+#~ msgstr ""
+
+#~ msgid "The nwfilter(%(instance_secgroup_filter_name)s) is not found."
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image verification failed"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): image "
+#~ "verification skipped, no hash stored"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): checking"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in use:"
+#~ " on this node %(local)d local, "
+#~ "%(remote)d on other nodes"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): warning "
+#~ "-- an absent base file is in "
+#~ "use! instances: %(instance_list)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in: on"
+#~ " other nodes (%(remote)d on other "
+#~ "nodes)"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is not in use"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is in use"
+#~ msgstr ""
+
+#~ msgid "Created VM %s..."
+#~ msgstr ""
+
+#~ msgid "Created VM %(instance_name)s as %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Creating a CDROM-specific VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Created a CDROM-specific VBD %(vbd_ref)s"
+#~ "  for VM %(vm_ref)s, VDI %(vdi_ref)s."
+#~ msgstr ""
+
+#~ msgid "No primary VDI found for%(vm_ref)s"
+#~ msgstr ""
+
+#~ msgid "Snapshotting VM %(vm_ref)s with label '%(label)s'..."
+#~ msgstr ""
+
+#~ msgid "Created snapshot %(template_vm_ref)s from VM %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Fetching image %(image)s"
+#~ msgstr ""
+
+#~ msgid "Image Type: %s"
+#~ msgstr ""
+
+#~ msgid "ISO: Found sr possibly containing the ISO image"
+#~ msgstr ""
+
+#~ msgid "Size for image %(image)s:%(virtual_size)d"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to fetch glance image"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s ... "
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s done."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful first time."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug rejected: retrying..."
+#~ msgstr ""
+
+#~ msgid "Not sleeping anymore!"
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful eventually."
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure in VBD.unplug: %s"
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure %s"
+#~ msgstr ""
+
+#~ msgid "Starting instance %s"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn"
+#~ msgstr ""
+
+#~ msgid "Instance %s failed to spawn - performing clean-up"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn - Unable to create VM"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Auto configuring disk for instance "
+#~ "%(instance_uuid)s, attempting to resize "
+#~ "partition..."
+#~ msgstr ""
+
+#~ msgid "Invalid value for injected_files: '%s'"
+#~ msgstr ""
+
+#~ msgid "Starting VM %s..."
+#~ msgstr ""
+
+#~ msgid "Spawning VM %(instance_uuid)s created %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Instance %s: waiting for running"
+#~ msgstr ""
+
+#~ msgid "Instance %s: running"
+#~ msgstr ""
+
+#~ msgid "Resources to remove:%s"
+#~ msgstr ""
+
+#~ msgid "Removing VDI %(vdi_ref)s(uuid:%(vdi_to_remove)s)"
+#~ msgstr ""
+
+#~ msgid "Skipping VDI destroy for %s"
+#~ msgstr ""
+
+#~ msgid "Finished snapshot and upload for VM %s"
+#~ msgstr ""
+
+#~ msgid "Starting snapshot for VM %s"
+#~ msgstr ""
+
+#~ msgid "Unable to Snapshot instance %(instance_uuid)s: %(exc)s"
+#~ msgstr ""
+
+#~ msgid "Updating instance '%(instance_uuid)s' progress to %(progress)d"
+#~ msgstr ""
+
+#~ msgid "Resize instance %s complete"
+#~ msgstr ""
+
+#~ msgid "domid changed from %(olddomid)s to %(newdomid)s"
+#~ msgstr ""
+
+#~ msgid "VM %(instance_uuid)s already halted,skipping shutdown..."
+#~ msgstr ""
+
+#~ msgid "Shutting down VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Destroying VDIs for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s using RAW or "
+#~ "VHD, skipping kernel and ramdisk "
+#~ "deletion"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_uuid)s VM destroyed"
+#~ msgstr ""
+
+#~ msgid "Destroying VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Automatically hard rebooting %d"
+#~ msgstr ""
+
+#~ msgid "Instance for migration %d not found, skipping"
+#~ msgstr ""
+
+#~ msgid "injecting network info to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "creating vif(s) for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "Creating VIF for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr ""
+
+#~ msgid "Created VIF %(vif_ref)s for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr ""
+
+#~ msgid "injecting hostname to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The agent call to %(method)s returned"
+#~ " an invalid response: %(ret)r. VM "
+#~ "id=%(instance_uuid)s; path=%(path)s; args=%(addl_args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "TIMEOUT: The call to %(method)s timed"
+#~ " out. VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "NOT IMPLEMENTED: The call to %(method)s"
+#~ " is not supported by the agent. "
+#~ "VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The call to %(method)s returned an "
+#~ "error: %(e)s. VM id=%(instance_uuid)s; "
+#~ "args=%(args)r"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid "Error destroying VDI"
+#~ msgstr ""
+
+#~ msgid "\tVolume %s is NOT VSA volume"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s creation - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s succeeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s deletion - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s suceeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s local path call - call discover"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s ensure export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s create export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s remove export - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE remove_export for %s failed"
+#~ msgstr ""
+
+#~ msgid "Failed to retrieve QoS info"
+#~ msgstr ""
+
+#~ msgid "invalid drive data"
+#~ msgstr ""
+
+#~ msgid "drive_name not defined"
+#~ msgstr ""
+
+#~ msgid "invalid drive type name %s"
+#~ msgstr ""
+
+#~ msgid "*** Experimental VSA code ***"
+#~ msgstr ""
+
+#~ msgid "Requested number of VCs (%d) is too high. Setting to default"
+#~ msgstr ""
+
+#~ msgid "Creating VSA: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d %(vsa_name)s: Create "
+#~ "volume %(vol_name)s, %(vol_size)d GB, type "
+#~ "%(vol_type_id)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA status to %(status)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA call"
+#~ msgstr ""
+
+#~ msgid "Adding %(add_cnt)s VCs to VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "Deleting %(del_cnt)s VCs from VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Deleting %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Unable to delete volume %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Forced delete. %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate VSA ID %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Delete instance %(name)s"
+#~ msgstr ""
+
+#~ msgid "Create call received for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Failed to find VSA %(vsa_id)d"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Drive %(vol_id)s created. Status %(status)s"
+#~ msgstr ""
+
+#~ msgid "Drive %(vol_name)s (%(vol_disp_name)s) still in creating phase - wait"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Not all volumes "
+#~ "are created (%(cvol_real)d of %(cvol_exp)d)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Drive %(vol_name)s "
+#~ "(%(vol_disp_name)s) is in %(status)s state"
+#~ msgstr ""
+
+#~ msgid "Failed to update attach status for volume %(vol_name)s. %(ex)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Delete all BE volumes"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Start %(vc_count)d instances"
+#~ msgstr ""
+
diff --git a/cinder/locale/cs/LC_MESSAGES/nova.po b/cinder/locale/cs/LC_MESSAGES/nova.po
new file mode 100644
index 000000000..89cc85783
--- /dev/null
+++ b/cinder/locale/cs/LC_MESSAGES/nova.po
@@ -0,0 +1,8251 @@
+# Czech translation for cinder
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the cinder package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version:  cinder\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-04-08 23:04+0000\n"
+"PO-Revision-Date: 2012-04-04 20:28+0000\n"
+"Last-Translator: Zbyněk Schwarz <Unknown>\n"
+"Language-Team: Czech <cs@li.org>\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: cinder/context.py:59
+#, python-format
+msgid "Arguments dropped when creating context: %s"
+msgstr ""
+
+#: cinder/context.py:90
+#, python-format
+msgid "read_deleted can only be one of 'no', 'yes' or 'only', not %r"
+msgstr ""
+
+#: cinder/crypto.py:48
+msgid "Filename of root CA"
+msgstr "Jméno souboru kořenové CA"
+
+#: cinder/crypto.py:51
+msgid "Filename of private key"
+msgstr "Jméno souboru se soukromým klíčem"
+
+#: cinder/crypto.py:54
+msgid "Filename of root Certificate Revocation List"
+msgstr "Název souboru seznamu zrušení kořenového certifikátu"
+
+#: cinder/crypto.py:57
+msgid "Where we keep our keys"
+msgstr "Kde uchováváme naše klíče"
+
+#: cinder/crypto.py:60
+msgid "Where we keep our root CA"
+msgstr "Kde uchováváme naši kořenovou CA"
+
+#: cinder/crypto.py:63
+msgid "Should we use a CA for each project?"
+msgstr "Použijeme CA pro každý projekt?"
+
+#: cinder/crypto.py:67
+#, python-format
+msgid "Subject for certificate for users, %s for project, user, timestamp"
+msgstr ""
+"Předmět certifikátu pro uživatele, %s pro projekt, uživatel, časové "
+"razítko"
+
+#: cinder/crypto.py:72
+#, python-format
+msgid "Subject for certificate for projects, %s for project, timestamp"
+msgstr "Předmět certifikátu pro projekty, %s pro projekt, časové razítko"
+
+#: cinder/crypto.py:292
+#, python-format
+msgid "Flags path: %s"
+msgstr "Cesta příznaků: %s"
+
+#: cinder/exception.py:56
+msgid "Unexpected error while running command."
+msgstr "Při spuštění příkazu došlo k nečekané chybě."
+
+#: cinder/exception.py:59
+#, python-format
+msgid ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+msgstr ""
+"%(description)s\n"
+"Příkaz: %(cmd)s\n"
+"Kód ukončení: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+
+#: cinder/exception.py:94
+msgid "DB exception wrapped."
+msgstr "Vyjímka DB zabalena."
+
+#: cinder/exception.py:155
+msgid "An unknown exception occurred."
+msgstr "Vyskytla se neočekávaná výjimka."
+
+#: cinder/exception.py:178
+msgid "Failed to decrypt text"
+msgstr "Nelze dešifrovat text"
+
+#: cinder/exception.py:182
+msgid "Failed to paginate through images from image service"
+msgstr "Nelze stránkovat skrze obrázky ze služby obrázků"
+
+#: cinder/exception.py:186
+msgid "Virtual Interface creation failed"
+msgstr "Vytvoření virtuálního rozhraní selhalo"
+
+#: cinder/exception.py:190
+msgid "5 attempts to create virtual interfacewith unique mac address failed"
+msgstr "Selhalo 5 pokusů o vytvoření virtuálního rozhraní s jedinečnou mac adresou"
+
+#: cinder/exception.py:195
+msgid "Connection to glance failed"
+msgstr "Připojení k glance selhalo"
+
+#: cinder/exception.py:199
+msgid "Connection to melange failed"
+msgstr "Připojení k melange selhalo"
+
+#: cinder/exception.py:203
+msgid "Not authorized."
+msgstr "Neschváleno."
+
+#: cinder/exception.py:208
+msgid "User does not have admin privileges"
+msgstr "Uživatel nemá správcovská oprávnění"
+
+#: cinder/exception.py:212
+#, python-format
+msgid "Policy doesn't allow %(action)s to be performed."
+msgstr "Pravidla nedovolují, aby bylo %(action)s provedeno."
+
+#: cinder/exception.py:216
+#, fuzzy, python-format
+msgid "Not authorized for image %(image_id)s."
+msgstr "Kernel nenalezen v obrazu %(image_id)s."
+
+#: cinder/exception.py:220
+msgid "Unacceptable parameters."
+msgstr "Nepřijatelné parametry."
+
+#: cinder/exception.py:225
+msgid "Invalid snapshot"
+msgstr "Neplatný snímek"
+
+#: cinder/exception.py:229
+#, python-format
+msgid "Volume %(volume_id)s is not attached to anything"
+msgstr "Svazek %(volume_id)s není k ničemu připojen"
+
+#: cinder/exception.py:233 cinder/api/openstack/compute/contrib/keypairs.py:113
+msgid "Keypair data is invalid"
+msgstr "Data páru klíčů jsou neplatná"
+
+#: cinder/exception.py:237
+msgid "Failed to load data into json format"
+msgstr "Nelze načíst data do formátu json"
+
+#: cinder/exception.py:241
+msgid "The request is invalid."
+msgstr "Požadavek je neplatný."
+
+#: cinder/exception.py:245
+#, python-format
+msgid "Invalid signature %(signature)s for user %(user)s."
+msgstr "Neplatný podpis %(signature)s pro uživatele %(user)s."
+
+#: cinder/exception.py:249
+msgid "Invalid input received"
+msgstr "Obdržen neplatný vstup"
+
+#: cinder/exception.py:253
+#, python-format
+msgid "Invalid instance type %(instance_type)s."
+msgstr "Neplatná instance typu %(instance_type)s."
+
+#: cinder/exception.py:257
+msgid "Invalid volume type"
+msgstr "Neplatný typ svazku"
+
+#: cinder/exception.py:261
+msgid "Invalid volume"
+msgstr "Neplatný svazek"
+
+#: cinder/exception.py:265
+#, python-format
+msgid "Invalid port range %(from_port)s:%(to_port)s. %(msg)s"
+msgstr "Neplatný rozsah portů %(from_port)s:%(to_port)s. %(msg)s"
+
+#: cinder/exception.py:269
+#, python-format
+msgid "Invalid IP protocol %(protocol)s."
+msgstr "Neplatný protokol IP %(protocol)s."
+
+#: cinder/exception.py:273
+#, python-format
+msgid "Invalid content type %(content_type)s."
+msgstr "Neplatný typ obsahu %(content_type)s."
+
+#: cinder/exception.py:277
+#, python-format
+msgid "Invalid cidr %(cidr)s."
+msgstr "Neplatný cidr %(cidr)s."
+
+#: cinder/exception.py:281
+msgid "Invalid reuse of an RPC connection."
+msgstr "Neplatné znovu použití připojení RPC."
+
+#: cinder/exception.py:285
+msgid "Invalid Parameter: Unicode is not supported by the current database."
+msgstr ""
+
+#: cinder/exception.py:292
+#, python-format
+msgid "%(err)s"
+msgstr "%(err)s"
+
+#: cinder/exception.py:296
+#, python-format
+msgid ""
+"Cannot perform action '%(action)s' on aggregate %(aggregate_id)s. Reason:"
+" %(reason)s."
+msgstr ""
+"Nelze provést činnost '%(action)s' na agregátu %(aggregate_id)s. Důvod: "
+"%(reason)s."
+
+#: cinder/exception.py:301
+#, fuzzy, python-format
+msgid "Group not valid. Reason: %(reason)s"
+msgstr "Nebyl nalezen žádný platný hostitel. %(reason)s"
+
+#: cinder/exception.py:305
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot %(method)s while"
+" the instance is in this state."
+msgstr ""
+"Instance %(instance_uuid)s v %(attr)s %(state)s.  Nelze %(method)s "
+"zatímco je instance v tomto stavu."
+
+#: cinder/exception.py:310
+#, python-format
+msgid "Instance %(instance_id)s is not running."
+msgstr "Instance %(instance_id)s není spuštěna."
+
+#: cinder/exception.py:314
+#, python-format
+msgid "Instance %(instance_id)s is not suspended."
+msgstr "Instance %(instance_id)s není pozastavena."
+
+#: cinder/exception.py:318
+#, python-format
+msgid "Instance %(instance_id)s is not in rescue mode"
+msgstr "Instance %(instance_id)s není v nouzovém režimu."
+
+#: cinder/exception.py:322
+msgid "Failed to suspend instance"
+msgstr "Nelze pozastavit instanci"
+
+#: cinder/exception.py:326
+msgid "Failed to resume server"
+msgstr "Server nemůže pokračovat"
+
+#: cinder/exception.py:330
+msgid "Failed to reboot instance"
+msgstr "Nelze restartovat instanci"
+
+#: cinder/exception.py:334
+#, fuzzy
+msgid "Failed to terminate instance"
+msgstr "Nelze restartovat instanci"
+
+#: cinder/exception.py:338
+msgid "Service is unavailable at this time."
+msgstr "Služba je v tuto chvíli nedostupná."
+
+#: cinder/exception.py:342
+msgid "Volume service is unavailable at this time."
+msgstr "Služba svazku je v tuto chvíli nedostupná."
+
+#: cinder/exception.py:346
+msgid "Compute service is unavailable at this time."
+msgstr "Služba výpočtu je v tuto chvíli nedostupná."
+
+#: cinder/exception.py:350
+#, python-format
+msgid "Unable to migrate instance (%(instance_id)s) to current host (%(host)s)."
+msgstr ""
+"Nelze přesunout instanci (%(instance_id)s) na současného hostitele "
+"(%(host)s)."
+
+#: cinder/exception.py:355
+msgid "Destination compute host is unavailable at this time."
+msgstr "Cílový výpočetní hostitel je v současnosti nedostupný."
+
+#: cinder/exception.py:359
+msgid "Original compute host is unavailable at this time."
+msgstr "Původní výpočetní hostitel je v současnosti nedostupný."
+
+#: cinder/exception.py:363
+msgid "The supplied hypervisor type of is invalid."
+msgstr "Zadaný typ hypervizoru je neplatný."
+
+#: cinder/exception.py:367
+msgid "The instance requires a newer hypervisor version than has been provided."
+msgstr "Instance vyžaduje novější verzi hypervizoru, než byla poskytnuta."
+
+#: cinder/exception.py:372
+#, python-format
+msgid ""
+"The supplied disk path (%(path)s) already exists, it is expected not to "
+"exist."
+msgstr "Zadaná cesta disku (%(path)s) již existuje, očekává se, že nebude."
+
+#: cinder/exception.py:377
+#, python-format
+msgid "The supplied device path (%(path)s) is invalid."
+msgstr "Zadaná cesta zařízení (%(path)s) je neplatná."
+
+#: cinder/exception.py:381
+#, fuzzy, python-format
+msgid "The supplied device (%(device)s) is busy."
+msgstr "Zadaná cesta zařízení (%(path)s) je neplatná."
+
+#: cinder/exception.py:385
+msgid "Unacceptable CPU info"
+msgstr "Nepřijatelné informace o procesoru"
+
+#: cinder/exception.py:389
+#, python-format
+msgid "%(address)s is not a valid IP v4/6 address."
+msgstr "%(address)s není platná IP adresa v4/6."
+
+#: cinder/exception.py:393
+#, python-format
+msgid ""
+"VLAN tag is not appropriate for the port group %(bridge)s. Expected VLAN "
+"tag is %(tag)s, but the one associated with the port group is %(pgroup)s."
+msgstr ""
+"Značka VLAN není vhodná pro skupinu portů %(bridge)s. Očekávaná značka "
+"VLAN je %(tag)s, ale značka připojená ke skupině portů je %(pgroup)s."
+
+#: cinder/exception.py:399
+#, python-format
+msgid ""
+"vSwitch which contains the port group %(bridge)s is not associated with "
+"the desired physical adapter. Expected vSwitch is %(expected)s, but the "
+"one associated is %(actual)s."
+msgstr ""
+"vSwitch který obsahuje skupinu portů %(bridge)s není spojen s požadovaným"
+" fyzickým adaptérem. Očekávaný vSwitch je %(expected)s, ale spojený je "
+"%(actual)s."
+
+#: cinder/exception.py:406
+#, python-format
+msgid "Disk format %(disk_format)s is not acceptable"
+msgstr "Formát disku %(disk_format)s není přijatelný"
+
+#: cinder/exception.py:410
+#, python-format
+msgid "Image %(image_id)s is unacceptable: %(reason)s"
+msgstr "Obraz %(image_id)s je nepřijatelný: %(reason)s"
+
+#: cinder/exception.py:414
+#, python-format
+msgid "Instance %(instance_id)s is unacceptable: %(reason)s"
+msgstr "Instance %(instance_id)s je nepřijatelná: %(reason)s"
+
+#: cinder/exception.py:418
+#, python-format
+msgid "Ec2 id %(ec2_id)s is unacceptable."
+msgstr "Id Ec2 %(ec2_id)s je nepřijatelné."
+
+#: cinder/exception.py:422
+msgid "Resource could not be found."
+msgstr "Zdroj nemohl být nalezen."
+
+#: cinder/exception.py:427
+#, python-format
+msgid "Required flag %(flag)s not set."
+msgstr "Požadovaný příznak %(flag)s není nastaven."
+
+#: cinder/exception.py:431
+#, python-format
+msgid "Volume %(volume_id)s could not be found."
+msgstr "Svazek %(volume_id)s nemohl být nastaven."
+
+#: cinder/exception.py:435
+#, fuzzy, python-format
+msgid "Unable to locate account %(account_name)s on Solidfire device"
+msgstr "Nelze nalézt účet %(account_name) on zařízení Solidfire"
+
+#: cinder/exception.py:440
+#, python-format
+msgid "Volume not found for instance %(instance_id)s."
+msgstr "Svazek není nalezen v instanci %(instance_id)s."
+
+#: cinder/exception.py:444
+#, python-format
+msgid "Volume %(volume_id)s has no metadata with key %(metadata_key)s."
+msgstr "Svazek %(volume_id)s nemá žádná metadata s klíčem %(metadata_key)s."
+
+#: cinder/exception.py:449
+msgid "Zero volume types found."
+msgstr "Nalezeno nula typů svazku."
+
+#: cinder/exception.py:453
+#, python-format
+msgid "Volume type %(volume_type_id)s could not be found."
+msgstr "Typ svazku %(volume_type_id)s nemohl být nalezen."
+
+#: cinder/exception.py:457
+#, python-format
+msgid "Volume type with name %(volume_type_name)s could not be found."
+msgstr "Typ svazku s názvem %(volume_type_name)s nemohl být nalezen."
+
+#: cinder/exception.py:462
+#, python-format
+msgid ""
+"Volume Type %(volume_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+"Typ svazku %(volume_type_id)s nemá žádné dodatečné parametry s klíčem "
+"%(extra_specs_key)s."
+
+#: cinder/exception.py:467
+#, python-format
+msgid "Snapshot %(snapshot_id)s could not be found."
+msgstr "Snímek %(snapshot_id)s nemohl být nalezen."
+
+#: cinder/exception.py:471
+#, python-format
+msgid "deleting volume %(volume_name)s that has snapshot"
+msgstr "mazání svazku %(volume_name)s který má snímek"
+
+#: cinder/exception.py:475
+#, python-format
+msgid "deleting snapshot %(snapshot_name)s that has dependent volumes"
+msgstr ""
+
+#: cinder/exception.py:480
+#, python-format
+msgid "No target id found for volume %(volume_id)s."
+msgstr "Nenalezeno žádné cílové id ve svazku %(volume_id)s."
+
+#: cinder/exception.py:484
+#, python-format
+msgid "No disk at %(location)s"
+msgstr "Źádný disk ve %(location)s"
+
+#: cinder/exception.py:488
+#, python-format
+msgid "Could not find a handler for %(driver_type)s volume."
+msgstr "Nelze najít obslužnou rutinu pro svazek %(driver_type)s."
+
+#: cinder/exception.py:492
+#, python-format
+msgid "Invalid image href %(image_href)s."
+msgstr "Neplatný href %(image_href)s obrazu."
+
+#: cinder/exception.py:496
+msgid ""
+"Some images have been stored via hrefs. This version of the api does not "
+"support displaying image hrefs."
+msgstr ""
+"Některé obrazy byly uloženy pomocí href. Tato verze api nepodporuje "
+"zobrazování href obrazů."
+
+#: cinder/exception.py:501
+#, python-format
+msgid "Image %(image_id)s could not be found."
+msgstr "Obraz %(image_id)s nemohl být nalezen."
+
+#: cinder/exception.py:505
+#, python-format
+msgid "Kernel not found for image %(image_id)s."
+msgstr "Kernel nenalezen v obrazu %(image_id)s."
+
+#: cinder/exception.py:509
+#, python-format
+msgid "User %(user_id)s could not be found."
+msgstr "Uživatel %(user_id)s nemohl být nalezen."
+
+#: cinder/exception.py:513
+#, python-format
+msgid "Project %(project_id)s could not be found."
+msgstr "Projekt %(project_id)s nemohl být nalezen."
+
+#: cinder/exception.py:517
+#, python-format
+msgid "User %(user_id)s is not a member of project %(project_id)s."
+msgstr "Uživatel %(user_id)s není členem projektu %(project_id)s."
+
+#: cinder/exception.py:521
+#, python-format
+msgid "Role %(role_id)s could not be found."
+msgstr "Role %(role_id)s nemohla být nalezena."
+
+#: cinder/exception.py:525
+msgid "Cannot find SR to read/write VDI."
+msgstr "Nelze najít SR pro čtení/zápis VDI."
+
+#: cinder/exception.py:529
+#, python-format
+msgid "%(req)s is required to create a network."
+msgstr "%(req)s je vyžadováno pro vytvoření sítě."
+
+#: cinder/exception.py:533
+#, python-format
+msgid "Network %(network_id)s could not be found."
+msgstr "Síť %(network_id)s nemohla být nalezena."
+
+#: cinder/exception.py:537
+#, python-format
+msgid "Network could not be found for bridge %(bridge)s"
+msgstr "Síť nemohla být pro most %(bridge)s nalezena."
+
+#: cinder/exception.py:541
+#, python-format
+msgid "Network could not be found for uuid %(uuid)s"
+msgstr "Síť nemohla být pro uuid %(uuid)s nalezena."
+
+#: cinder/exception.py:545
+#, python-format
+msgid "Network could not be found with cidr %(cidr)s."
+msgstr "Síť nemohla být pro cidr %(cidr)s nalezena."
+
+#: cinder/exception.py:549
+#, python-format
+msgid "Network could not be found for instance %(instance_id)s."
+msgstr "Síť nemohla být pro instance %(instance_id)s nalezena."
+
+#: cinder/exception.py:553
+msgid "No networks defined."
+msgstr "Źádné sítě nejsou určeny."
+
+#: cinder/exception.py:557
+#, python-format
+msgid ""
+"Either Network uuid %(network_uuid)s is not present or is not assigned to"
+" the project %(project_id)s."
+msgstr ""
+"Buď síť uuid %(network_uuid)s není přítomna nebo je přidělena projektu "
+"%(project_id)s."
+
+#: cinder/exception.py:562
+#, python-format
+msgid "Host is not set to the network (%(network_id)s)."
+msgstr "Hostitel není v síti (%(network_id)s) nastaven."
+
+#: cinder/exception.py:566
+#, python-format
+msgid "Network %(network)s has active ports, cannot delete."
+msgstr ""
+
+#: cinder/exception.py:570
+msgid "Could not find the datastore reference(s) which the VM uses."
+msgstr "Nelze najít odkazy datového úložiště, který VM používá."
+
+#: cinder/exception.py:574
+#, python-format
+msgid "No fixed IP associated with id %(id)s."
+msgstr "Žádná pevná IP není spojena s %(id)s."
+
+#: cinder/exception.py:578
+#, python-format
+msgid "Fixed ip not found for address %(address)s."
+msgstr "Pevná ip není pro adresu %(address)s nalezena."
+
+#: cinder/exception.py:582
+#, python-format
+msgid "Instance %(instance_id)s has zero fixed ips."
+msgstr "Instance %(instance_id)s má nula pevných ip."
+
+#: cinder/exception.py:586
+#, python-format
+msgid "Network host %(host)s has zero fixed ips in network %(network_id)s."
+msgstr "Síťový hostitel %(host)s má nula pevných ip v síti %(network_id)s."
+
+#: cinder/exception.py:591
+#, python-format
+msgid "Instance %(instance_id)s doesn't have fixed ip '%(ip)s'."
+msgstr "Instance %(instance_id)s nemá pevnou ip '%(ip)s'."
+
+#: cinder/exception.py:595
+#, python-format
+msgid "Host %(host)s has zero fixed ips."
+msgstr "Hostitel %(host)s má nula pevných ip."
+
+#: cinder/exception.py:599
+#, python-format
+msgid ""
+"Fixed IP address (%(address)s) does not exist in network "
+"(%(network_uuid)s)."
+msgstr "Pevná IP adresa (%(address)s) v síti (%(network_uuid)s) neexistuje."
+
+#: cinder/exception.py:604
+#, python-format
+msgid "Fixed IP address %(address)s is already in use."
+msgstr "Pevná IP adresa (%(address)s) je již používána."
+
+#: cinder/exception.py:608
+#, python-format
+msgid "Fixed IP address %(address)s is invalid."
+msgstr "Pevná IP adresa (%(address)s) je neplatná."
+
+#: cinder/exception.py:612
+msgid "Zero fixed ips available."
+msgstr "Je dostupno nula pevných ip."
+
+#: cinder/exception.py:616
+msgid "Zero fixed ips could be found."
+msgstr "Bylo nalezeno nula pevných ip."
+
+#: cinder/exception.py:620
+#, python-format
+msgid "Floating ip not found for id %(id)s."
+msgstr "Plovoucí ip není nalezena pro id %(id)s."
+
+#: cinder/exception.py:624
+#, python-format
+msgid "The DNS entry %(name)s already exists in domain %(domain)s."
+msgstr "Záznam DNS %(name)s již v doméně %(domain)s existuje."
+
+#: cinder/exception.py:628
+#, python-format
+msgid "Floating ip not found for address %(address)s."
+msgstr "Plovoucí ip nenalezeno pro adresu %(address)s."
+
+#: cinder/exception.py:632
+#, python-format
+msgid "Floating ip not found for host %(host)s."
+msgstr "Plovoucí ip nenalezeno pro hostitele %(host)s."
+
+#: cinder/exception.py:636
+msgid "Zero floating ips available."
+msgstr "Je dostupných nula plovoucích ip."
+
+#: cinder/exception.py:640
+#, python-format
+msgid "Floating ip %(address)s is associated."
+msgstr "Plovoucí ip %(address)s je přidružena."
+
+#: cinder/exception.py:644
+#, python-format
+msgid "Floating ip %(address)s is not associated."
+msgstr "Plovoucí ip %(address)s není přidružena."
+
+#: cinder/exception.py:648
+msgid "Zero floating ips exist."
+msgstr "Existuje nula plovoucích ip."
+
+#: cinder/exception.py:652
+#, python-format
+msgid "Interface %(interface)s not found."
+msgstr "Rozhraní %(interface)s nenalezeno."
+
+#: cinder/exception.py:656
+#, python-format
+msgid "Keypair %(name)s not found for user %(user_id)s"
+msgstr "Dvojice klíčů %(name)s nenalezena pro uživatele %(user_id)s"
+
+#: cinder/exception.py:660
+#, python-format
+msgid "Certificate %(certificate_id)s not found."
+msgstr "Certifikát %(certificate_id)s nenalezen."
+
+#: cinder/exception.py:664
+#, python-format
+msgid "Service %(service_id)s could not be found."
+msgstr "Služba %(service_id)s nemohla být nalezena."
+
+#: cinder/exception.py:668
+#, python-format
+msgid "Host %(host)s could not be found."
+msgstr "Hostitel %(host)s nemohl být nalezen."
+
+#: cinder/exception.py:672
+#, python-format
+msgid "Compute host %(host)s could not be found."
+msgstr "Hostitel výpočtu %(host)s nemohl být nalezen."
+
+#: cinder/exception.py:676
+#, python-format
+msgid "Could not find binary %(binary)s on host %(host)s."
+msgstr "Nelze najít binární soubor %(binary)s v hostiteli %(host)s."
+
+#: cinder/exception.py:680
+#, python-format
+msgid "Auth token %(token)s could not be found."
+msgstr "Známka opeávnění %(token)s nemohla být nalezena."
+
+#: cinder/exception.py:684
+#, python-format
+msgid "Access Key %(access_key)s could not be found."
+msgstr "Přístupový klíč %(access_key)s nemohl být nalezen."
+
+#: cinder/exception.py:688
+msgid "Quota could not be found"
+msgstr "Kvóta nemohla být nalezena."
+
+#: cinder/exception.py:692
+#, python-format
+msgid "Quota for project %(project_id)s could not be found."
+msgstr "Kvóta pro projekt %(project_id)s nemohla být nalezena."
+
+#: cinder/exception.py:696
+#, fuzzy, python-format
+msgid "Quota class %(class_name)s could not be found."
+msgstr "Třída %(class_name)s nemohla být nalezena: %(exception)s"
+
+#: cinder/exception.py:700
+#, python-format
+msgid "Security group %(security_group_id)s not found."
+msgstr "Bezpečnostní skupina %(security_group_id)s není nalezena."
+
+#: cinder/exception.py:704
+#, python-format
+msgid "Security group %(security_group_id)s not found for project %(project_id)s."
+msgstr ""
+"Bezpečnostní skupina %(security_group_id)s není nalezena v projektu "
+"%(project_id)s."
+
+#: cinder/exception.py:709
+#, python-format
+msgid "Security group with rule %(rule_id)s not found."
+msgstr "Bezpečnostní skupina s pravidlem %(rule_id)s nenalezena."
+
+#: cinder/exception.py:713
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is already associated with the "
+"instance %(instance_id)s"
+msgstr ""
+"Bezpečnostní skupina %(security_group_id)s je již přidružena k instanci "
+"%(instance_id)s"
+
+#: cinder/exception.py:718
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is not associated with the instance "
+"%(instance_id)s"
+msgstr ""
+"Bezpečnostní skupina %(security_group_id)s není přidružena k instanci "
+"%(instance_id)s"
+
+#: cinder/exception.py:723
+#, python-format
+msgid "Migration %(migration_id)s could not be found."
+msgstr "Přesun %(migration_id)s nemohl být nalezen."
+
+#: cinder/exception.py:727
+#, python-format
+msgid "Migration not found for instance %(instance_id)s with status %(status)s."
+msgstr "Přesun nenalezen v instanci %(instance_id)s se stavem %(status)s."
+
+#: cinder/exception.py:732
+#, python-format
+msgid "Console pool %(pool_id)s could not be found."
+msgstr "Zásoba konzole %(pool_id)s nemohla být nalezena."
+
+#: cinder/exception.py:736
+#, python-format
+msgid ""
+"Console pool of type %(console_type)s for compute host %(compute_host)s "
+"on proxy host %(host)s not found."
+msgstr ""
+"Zásoba konzole typu %(console_type)s pro výpočetního hostitele "
+"%(compute_host)s v hostitele proxy %(host)s nemohla být nalezena."
+
+#: cinder/exception.py:742
+#, python-format
+msgid "Console %(console_id)s could not be found."
+msgstr "Konzole %(console_id)s nemohla být nalezena."
+
+#: cinder/exception.py:746
+#, python-format
+msgid "Console for instance %(instance_id)s could not be found."
+msgstr "Konzole pro instanci %(instance_id)s nemohla být nalezena."
+
+#: cinder/exception.py:750
+#, python-format
+msgid ""
+"Console for instance %(instance_id)s in pool %(pool_id)s could not be "
+"found."
+msgstr ""
+"Konzole pro instanci %(instance_id)s v zásobě %(pool_id)s nemohla být "
+"nalezena."
+
+#: cinder/exception.py:755
+#, python-format
+msgid "Invalid console type %(console_type)s "
+msgstr "Neplatná konzole typu %(console_type)s "
+
+#: cinder/exception.py:759
+msgid "Zero instance types found."
+msgstr "Nalezeno nula typů instancí."
+
+#: cinder/exception.py:763
+#, python-format
+msgid "Instance type %(instance_type_id)s could not be found."
+msgstr "Instance typu %(instance_type_id)s nemohla být nalezena."
+
+#: cinder/exception.py:767
+#, python-format
+msgid "Instance type with name %(instance_type_name)s could not be found."
+msgstr "Instance typu s názvem %(instance_type_name)s nemohla být nalezena."
+
+#: cinder/exception.py:772
+#, python-format
+msgid "Flavor %(flavor_id)s could not be found."
+msgstr "Konfigurace %(flavor_id)s nemohla být nalezena."
+
+#: cinder/exception.py:776
+#, fuzzy, python-format
+msgid "Cell %(cell_id)s could not be found."
+msgstr "Zóna %(zone_id)s nemohla být nalezena."
+
+#: cinder/exception.py:780
+#, python-format
+msgid "Scheduler Host Filter %(filter_name)s could not be found."
+msgstr "Filtr hostitelů plácinderče %(filter_name)s nemohl být nalezen."
+
+#: cinder/exception.py:784
+#, python-format
+msgid "Scheduler cost function %(cost_fn_str)s could not be found."
+msgstr "Funkce nákladů plácinderče %(cost_fn_str)s nemohla být nalezena."
+
+#: cinder/exception.py:789
+#, python-format
+msgid "Scheduler weight flag not found: %(flag_name)s"
+msgstr "Příznak váhy plácinderče nemohl být nalezen: %(flag_name)s"
+
+#: cinder/exception.py:793
+#, python-format
+msgid "Instance %(instance_id)s has no metadata with key %(metadata_key)s."
+msgstr "Instance %(instance_id)s nemá žádná metadata s klíčem %(metadata_key)s."
+
+#: cinder/exception.py:798
+#, python-format
+msgid ""
+"Instance Type %(instance_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+"Instance typu %(instance_type_id)s nemá žádné dodatečné specifikace s "
+"klíčem %(extra_specs_key)s."
+
+#: cinder/exception.py:803
+msgid "LDAP object could not be found"
+msgstr "Objekt LDAP nemohl být nalezen"
+
+#: cinder/exception.py:807
+#, python-format
+msgid "LDAP user %(user_id)s could not be found."
+msgstr "Uživatel LDAP %(user_id)s nemohl být nalezen."
+
+#: cinder/exception.py:811
+#, python-format
+msgid "LDAP group %(group_id)s could not be found."
+msgstr "Skupina LDAP %(group_id)s nemohla být nalezena."
+
+#: cinder/exception.py:815
+#, python-format
+msgid "LDAP user %(user_id)s is not a member of group %(group_id)s."
+msgstr "Uživatel LDAP %(user_id)s není členem skupiny %(group_id)s."
+
+#: cinder/exception.py:819
+#, python-format
+msgid "File %(file_path)s could not be found."
+msgstr "Soubor %(file_path)s nemohl být nalezen."
+
+#: cinder/exception.py:823
+msgid "Zero files could be found."
+msgstr "Nalezeno nula souborů."
+
+#: cinder/exception.py:827
+#, python-format
+msgid "Virtual switch associated with the network adapter %(adapter)s not found."
+msgstr "Nenalezen virtuální přepínač sdružený se síťovým adaptérem %(adapter)s."
+
+#: cinder/exception.py:832
+#, python-format
+msgid "Network adapter %(adapter)s could not be found."
+msgstr "Síťový adaptér %(adapter)s nemohl být nalezen."
+
+#: cinder/exception.py:836
+#, python-format
+msgid "Class %(class_name)s could not be found: %(exception)s"
+msgstr "Třída %(class_name)s nemohla být nalezena: %(exception)s"
+
+#: cinder/exception.py:840
+msgid "Action not allowed."
+msgstr "Činnost není povolena."
+
+#: cinder/exception.py:844
+#, python-format
+msgid "Unable to use global role %(role_id)s"
+msgstr "Nelze použít globální roli %(role_id)s"
+
+#: cinder/exception.py:848
+msgid "Rotation is not allowed for snapshots"
+msgstr "Střídání není povoleno pro snímky"
+
+#: cinder/exception.py:852
+msgid "Rotation param is required for backup image_type"
+msgstr "Parametr rotation je vyžadován pro backup image_type"
+
+#: cinder/exception.py:861
+#, python-format
+msgid "Key pair %(key_name)s already exists."
+msgstr "Dvojice klíčů %(key_name)s již existuje."
+
+#: cinder/exception.py:865
+#, python-format
+msgid "User %(user)s already exists."
+msgstr "Uživatel %(user)s již existuje."
+
+#: cinder/exception.py:869
+#, python-format
+msgid "LDAP user %(user)s already exists."
+msgstr "LDAP uživatel %(user)s již existuje."
+
+#: cinder/exception.py:873
+#, python-format
+msgid "LDAP group %(group)s already exists."
+msgstr "LDAP skupina %(group)s již existuje."
+
+#: cinder/exception.py:877
+#, python-format
+msgid "User %(uid)s is already a member of the group %(group_dn)s"
+msgstr "Uživatel %(uid)s již je členem skupiny %(group_dn)s"
+
+#: cinder/exception.py:882
+#, python-format
+msgid "Project %(project)s already exists."
+msgstr "Projekt %(project)s již existuje."
+
+#: cinder/exception.py:886
+#, python-format
+msgid "Instance %(name)s already exists."
+msgstr "Instance %(name)s již existuje."
+
+#: cinder/exception.py:890
+#, python-format
+msgid "Instance Type %(name)s already exists."
+msgstr "Instance typu %(name)s již existuje."
+
+#: cinder/exception.py:894
+#, python-format
+msgid "Volume Type %(name)s already exists."
+msgstr "Typ svazku %(name)s již existuje."
+
+#: cinder/exception.py:898
+#, python-format
+msgid "%(path)s is on shared storage: %(reason)s"
+msgstr "%(path)s je ve sdíleném úložišti: %(reason)s"
+
+#: cinder/exception.py:902
+msgid "Migration error"
+msgstr "Chyba přesunu"
+
+#: cinder/exception.py:906
+#, python-format
+msgid "Malformed message body: %(reason)s"
+msgstr "Poškozené tělo zprávy: %(reason)s"
+
+#: cinder/exception.py:910
+#, python-format
+msgid "Could not find config at %(path)s"
+msgstr "Nelze najít nastavení v %(path)s"
+
+#: cinder/exception.py:914
+#, python-format
+msgid "Could not load paste app '%(name)s' from %(path)s"
+msgstr "Nelze načíst aplikaci vložení '%(name)s' z %(path)s"
+
+#: cinder/exception.py:918
+msgid "When resizing, instances must change size!"
+msgstr "Při změně velikosti ji musí instance změnit také!"
+
+#: cinder/exception.py:922
+msgid "Image is larger than instance type allows"
+msgstr "Obraz je větší než typ instance povoluje"
+
+#: cinder/exception.py:926
+msgid "1 or more Zones could not complete the request"
+msgstr "1 nebo více Zón nemohlo požadavek dokončit"
+
+#: cinder/exception.py:930
+msgid "Instance type's memory is too small for requested image."
+msgstr "Typ paměti instance je pro požadovaný obraz příliš malý."
+
+#: cinder/exception.py:934
+msgid "Instance type's disk is too small for requested image."
+msgstr "Typ disku instance je pro požadovaný obraz příliš malý."
+
+#: cinder/exception.py:938
+#, python-format
+msgid "Insufficient free memory on compute node to start %(uuid)s."
+msgstr "Pro spuštění %(uuid)s je v uzlu výpočtu nedostatek volné paměti."
+
+#: cinder/exception.py:942
+msgid "Could not fetch bandwidth/cpu/disk metrics for this host."
+msgstr "Nelze získat metriky šířky pásma/procesoru/disku pro tohoto hostitele."
+
+#: cinder/exception.py:946
+#, python-format
+msgid "No valid host was found. %(reason)s"
+msgstr "Nebyl nalezen žádný platný hostitel. %(reason)s"
+
+#: cinder/exception.py:950
+#, python-format
+msgid "Host %(host)s is not up or doesn't exist."
+msgstr "Hostitel %(host)s není dostupný nebo neexistuje."
+
+#: cinder/exception.py:954
+msgid "Quota exceeded"
+msgstr "Kvóta překročena"
+
+#: cinder/exception.py:958
+#, fuzzy, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: action '%(action)s' caused an error: "
+"%(reason)s."
+msgstr "Agregát %(aggregate_id)s nemá hostitele %(host)s."
+
+#: cinder/exception.py:963
+#, python-format
+msgid "Aggregate %(aggregate_id)s could not be found."
+msgstr "Agregát %(aggregate_id)s nemohl být nalezen."
+
+#: cinder/exception.py:967
+#, python-format
+msgid "Aggregate %(aggregate_name)s already exists."
+msgstr "Agregát %(aggregate_name)s již existuje."
+
+#: cinder/exception.py:971
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no host %(host)s."
+msgstr "Agregát %(aggregate_id)s nemá hostitele %(host)s."
+
+#: cinder/exception.py:975
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no metadata with key %(metadata_key)s."
+msgstr "Agregát %(aggregate_id)s nemá žádná metadata s klíčem %(metadata_key)s."
+
+#: cinder/exception.py:980
+#, python-format
+msgid "Host %(host)s already member of another aggregate."
+msgstr "Hostitel %(host)s již je členem jiného agregátu."
+
+#: cinder/exception.py:984
+#, python-format
+msgid "Aggregate %(aggregate_id)s already has host %(host)s."
+msgstr "Agregát %(aggregate_id)s již má hostitele %(host)s."
+
+#: cinder/exception.py:988
+#, fuzzy, python-format
+msgid "Detected more than one volume with name %(vol_name)s"
+msgstr "Zjištěn více než jeden svazek s názvem %(vol_name)"
+
+#: cinder/exception.py:992
+#, python-format
+msgid "Cannot create volume_type with name %(name)s and specs %(extra_specs)s"
+msgstr ""
+"Nelze vytvořit typ_svazku s názvem %(name)s a specifikacemi "
+"%(extra_specs)s"
+
+#: cinder/exception.py:997
+msgid "Unable to create instance type"
+msgstr "Nelze vytvořit typ instance"
+
+#: cinder/exception.py:1001
+msgid "Bad response from SolidFire API"
+msgstr "Špatná odpověď od SolidFire API"
+
+#: cinder/exception.py:1005
+#, python-format
+msgid "Error in SolidFire API response: status=%(status)s"
+msgstr "Chyba v odpovědi SolidFire API: stav=%(status)s"
+
+#: cinder/exception.py:1009
+#, python-format
+msgid "Error in SolidFire API response: data=%(data)s"
+msgstr "Chyba v odpovědi SolidFire API: data=%(data)s"
+
+#: cinder/exception.py:1013
+#, fuzzy, python-format
+msgid "Detected existing vlan with id %(vlan)d"
+msgstr "Zjišťěna existující vlan s id %(vlan)"
+
+#: cinder/exception.py:1017
+#, python-format
+msgid "Instance %(instance_id)s could not be found."
+msgstr "Instance %(instance_id)s nemohla být nastavena."
+
+#: cinder/exception.py:1021
+#, python-format
+msgid "Invalid id: %(val)s (expecting \"i-...\")."
+msgstr ""
+
+#: cinder/exception.py:1025
+#, fuzzy, python-format
+msgid "Could not fetch image %(image)s"
+msgstr "Kernel nenalezen v obrazu %(image_id)s."
+
+#: cinder/log.py:315
+#, python-format
+msgid "syslog facility must be one of: %s"
+msgstr "zařízení záznamu systému musí být jedno z: %s"
+
+#: cinder/manager.py:146
+#, python-format
+msgid "Skipping %(full_task_name)s, %(ticks_to_skip)s ticks left until next run"
+msgstr ""
+"Přeskakování %(full_task_name)s, zbývá %(ticks_to_skip)s tiků do dalšího "
+"spuštění"
+
+#: cinder/manager.py:152
+#, python-format
+msgid "Running periodic task %(full_task_name)s"
+msgstr "Spuštění pravidelné úlohy %(full_task_name)s"
+
+#: cinder/manager.py:159
+#, python-format
+msgid "Error during %(full_task_name)s: %(e)s"
+msgstr "Chyba při %(full_task_name)s: %(e)s"
+
+#: cinder/manager.py:203
+msgid "Notifying Schedulers of capabilities ..."
+msgstr "Oznamování schopností plácinderčům ..."
+
+#: cinder/policy.py:30
+msgid "JSON file representing policy"
+msgstr "Soubor JSON představující zásady"
+
+#: cinder/policy.py:33
+msgid "Rule checked when requested rule is not found"
+msgstr "Kontrolované pravidlo, když požadované není nalezeno"
+
+#: cinder/service.py:137
+msgid "SIGTERM received"
+msgstr ""
+
+#: cinder/service.py:177
+#, python-format
+msgid "Starting %(topic)s node (version %(vcs_string)s)"
+msgstr "Začínající uzel %(topic)s (verze %(vcs_string)s)"
+
+#: cinder/service.py:195
+#, python-format
+msgid "Creating Consumer connection for Service %s"
+msgstr "Vytváření připojení zákazníka pro službu %s"
+
+#: cinder/service.py:282
+msgid "Service killed that has no database entry"
+msgstr "Ukončena služba bez záznamu v databázi"
+
+#: cinder/service.py:319
+msgid "The service database object disappeared, Recreating it."
+msgstr "Objekt databáze služby zmizel, je znovu vytvářen."
+
+#: cinder/service.py:334
+msgid "Recovered model server connection!"
+msgstr "Obnoveno připojení modelového serveru!"
+
+#: cinder/service.py:340
+msgid "model server went away"
+msgstr "modelový server je nedostupný"
+
+#: cinder/service.py:433
+msgid "Full set of FLAGS:"
+msgstr "Úplná sada PŘÍZNAKŮ:"
+
+#: cinder/service.py:440
+#, python-format
+msgid "%(flag)s : FLAG SET "
+msgstr "%(flag)s : SADA PŽÍZNAKŮ "
+
+#: cinder/utils.py:79
+#, python-format
+msgid "Inner Exception: %s"
+msgstr "Vnitřní výjimka: %s"
+
+#: cinder/utils.py:165
+#, python-format
+msgid "Fetching %s"
+msgstr "Získávání %s"
+
+#: cinder/utils.py:210
+#, python-format
+msgid "Got unknown keyword args to utils.execute: %r"
+msgstr "Získány neznámé argumenty klíčového slova pro utils.execute: %r"
+
+#: cinder/utils.py:220
+#, python-format
+msgid "Running cmd (subprocess): %s"
+msgstr "Spouštění příkazu (podproces): %s"
+
+#: cinder/utils.py:236 cinder/utils.py:315
+#, python-format
+msgid "Result was %s"
+msgstr "Výsledek byl %s"
+
+#: cinder/utils.py:249
+#, python-format
+msgid "%r failed. Retrying."
+msgstr "%r selhalo. Opakování."
+
+#: cinder/utils.py:291
+#, python-format
+msgid "Running cmd (SSH): %s"
+msgstr "Spouštění příkazu (SSH): %s"
+
+#: cinder/utils.py:293
+msgid "Environment not supported over SSH"
+msgstr "Prostředí není podporováno přes SSH"
+
+#: cinder/utils.py:297
+msgid "process_input not supported over SSH"
+msgstr "process_input není podporován přes SSH"
+
+#: cinder/utils.py:352
+#, python-format
+msgid "debug in callback: %s"
+msgstr "ladění ve zpětném volání: %s"
+
+#: cinder/utils.py:534
+#, python-format
+msgid "Link Local address is not found.:%s"
+msgstr "Adresa místního spojení nenalezena.: %s"
+
+#: cinder/utils.py:537
+#, python-format
+msgid "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+msgstr "Nelze získat IP místního spojení %(interface)s :%(ex)s"
+
+#: cinder/utils.py:648
+#, python-format
+msgid "Invalid backend: %s"
+msgstr "Neplatná podpůrná vrstva: %s"
+
+#: cinder/utils.py:659
+#, python-format
+msgid "backend %s"
+msgstr "podpůrná vrstva: %s"
+
+#: cinder/utils.py:709
+msgid "in looping call"
+msgstr "v opakujícím volání"
+
+#: cinder/utils.py:927
+#, fuzzy, python-format
+msgid "Attempting to grab semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr "Pokus získat semafor \"%(lock)s\" pro zámek metody \"%(method)s\""
+
+#: cinder/utils.py:931
+#, fuzzy, python-format
+msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr "Získán semafor \"%(lock)s\" pro zámek metody \"%(method)s\""
+
+#: cinder/utils.py:935
+#, fuzzy, python-format
+msgid "Attempting to grab file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr "Pokus o získání zámku souboru \"%(lock)s\" pro zámek metody \"%(method)s\""
+
+#: cinder/utils.py:942
+#, fuzzy, python-format
+msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr "Získán zámek souboru \"%(lock)s\" pro zámek metody \"%(method)s\""
+
+#: cinder/utils.py:1001
+#, python-format
+msgid "Found sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1008
+#, python-format
+msgid "Cleaned sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1023
+#, python-format
+msgid "Found lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1028
+#, python-format
+msgid "Cleaned lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1138
+#, python-format
+msgid "Expected object of type: %s"
+msgstr "Očekáván objekt typu: %s"
+
+#: cinder/utils.py:1169
+#, python-format
+msgid "Invalid server_string: %s"
+msgstr "Neplatný  server_string: %s"
+
+#: cinder/utils.py:1298
+#, python-format
+msgid "timefunc: '%(name)s' took %(total_time).2f secs"
+msgstr "timefunc: '%(name)s' trvalo %(total_time).2f sek"
+
+#: cinder/utils.py:1330
+msgid "Original exception being dropped"
+msgstr "Původní výjimka je zahozena"
+
+#: cinder/utils.py:1461
+#, python-format
+msgid "Class %(fullname)s is deprecated: %(msg)s"
+msgstr "Třída %(fullname)s je zastaralá: %(msg)s"
+
+#: cinder/utils.py:1463
+#, python-format
+msgid "Class %(fullname)s is deprecated"
+msgstr "Třída %(fullname)s je zastaralá"
+
+#: cinder/utils.py:1495
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated: %(msg)s"
+msgstr "Funkce %(name)s v %(location)s je zastaralá: %(msg)s"
+
+#: cinder/utils.py:1497
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated"
+msgstr "Funkce %(name)s v %(location)s je zastaralá"
+
+#: cinder/utils.py:1681
+#, python-format
+msgid "Could not remove tmpdir: %s"
+msgstr ""
+
+#: cinder/wsgi.py:97
+#, python-format
+msgid "Started %(name)s on %(host)s:%(port)s"
+msgstr "%(name)s spuštěno v %(host)s:%(port)s"
+
+#: cinder/wsgi.py:108
+msgid "Stopping WSGI server."
+msgstr "Zastavování serveru WSGI."
+
+#: cinder/wsgi.py:111
+msgid "Stopping raw TCP server."
+msgstr "Zastavování prostého serveru TCP."
+
+#: cinder/wsgi.py:117
+#, python-format
+msgid "Starting TCP server %(arg0)s on %(host)s:%(port)s"
+msgstr "Spiuštění serveru TCP %(arg0)s na %(host)s:%(port)s"
+
+#: cinder/wsgi.py:133
+msgid "WSGI server has stopped."
+msgstr "Server WSGI byl zastaven."
+
+#: cinder/wsgi.py:211
+msgid "You must implement __call__"
+msgstr "Musíte zavést __call__"
+
+#: cinder/api/direct.py:218
+msgid "not available"
+msgstr "nedostupné"
+
+#: cinder/api/direct.py:299
+#, python-format
+msgid "Returned non-serializeable type: %s"
+msgstr "Navrácen neserializovatelný typ: %s"
+
+#: cinder/api/sizelimit.py:51
+msgid "Request is too large."
+msgstr ""
+
+#: cinder/api/validator.py:142
+#, python-format
+msgid "%(key)s with value %(value)s failed validator  %(validator)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:73
+#, python-format
+msgid "%(code)s: %(message)s"
+msgstr "%(code)s: %(message)s"
+
+#: cinder/api/ec2/__init__.py:95
+#, python-format
+msgid "FaultWrapper: %s"
+msgstr "Obalovačchyb: %s"
+
+#: cinder/api/ec2/__init__.py:170
+msgid "Too many failed authentications."
+msgstr "Příliš mnoho ověření selhalo."
+
+#: cinder/api/ec2/__init__.py:180
+#, python-format
+msgid ""
+"Access key %(access_key)s has had %(failures)d failed authentications and"
+" will be locked out for %(lock_mins)d minutes."
+msgstr ""
+"Přístupový klíč %(access_key)s %(failures)d krát selhal při ověření a "
+"bude zablokován na %(lock_mins)d minut."
+
+#: cinder/api/ec2/__init__.py:267
+msgid "Signature not provided"
+msgstr "Podpis není zadán"
+
+#: cinder/api/ec2/__init__.py:271
+msgid "Access key not provided"
+msgstr "Přístupový klíč není zadán"
+
+#: cinder/api/ec2/__init__.py:306 cinder/api/ec2/__init__.py:319
+msgid "Failure communicating with keystone"
+msgstr "Chyba při komunikaci s keystone"
+
+#: cinder/api/ec2/__init__.py:388
+#, python-format
+msgid "Authentication Failure: %s"
+msgstr "Selhání ověření: %s"
+
+#: cinder/api/ec2/__init__.py:404
+#, python-format
+msgid "Authenticated Request For %(uname)s:%(pname)s)"
+msgstr "Požadavek na ověření pro %(uname)s:%(pname)s)"
+
+#: cinder/api/ec2/__init__.py:435
+#, python-format
+msgid "action: %s"
+msgstr "činnost: %s"
+
+#: cinder/api/ec2/__init__.py:437
+#, python-format
+msgid "arg: %(key)s\t\tval: %(value)s"
+msgstr "arg: %(key)s\t\thod: %(value)s"
+
+#: cinder/api/ec2/__init__.py:512
+#, python-format
+msgid "Unauthorized request for controller=%(controller)s and action=%(action)s"
+msgstr "Neoprávnění požadavek pro ovladač=%(controller)s a činnost=%(action)s"
+
+#: cinder/api/ec2/__init__.py:584
+#, python-format
+msgid "InstanceNotFound raised: %s"
+msgstr "Vyvoláno InstanceNenalezena: %s"
+
+#: cinder/api/ec2/__init__.py:590
+#, python-format
+msgid "VolumeNotFound raised: %s"
+msgstr "Vyvoláno SvazekNenalezen: %s"
+
+#: cinder/api/ec2/__init__.py:596
+#, python-format
+msgid "SnapshotNotFound raised: %s"
+msgstr "Vyvoláno SnímekNenalzen: %s"
+
+#: cinder/api/ec2/__init__.py:602
+#, python-format
+msgid "NotFound raised: %s"
+msgstr "Vyvoláno Nenalezeno: %s"
+
+#: cinder/api/ec2/__init__.py:605
+#, python-format
+msgid "EC2APIError raised: %s"
+msgstr "Vyvoláno ChybaApiEC2: %s"
+
+#: cinder/api/ec2/__init__.py:613
+#, python-format
+msgid "KeyPairExists raised: %s"
+msgstr "Vyvoláno DvojiceKlíčůExistuje: %s"
+
+#: cinder/api/ec2/__init__.py:617
+#, python-format
+msgid "InvalidParameterValue raised: %s"
+msgstr "Vyvoláno NeplatnáHodnotaParametru: %s"
+
+#: cinder/api/ec2/__init__.py:621
+#, python-format
+msgid "InvalidPortRange raised: %s"
+msgstr "Vyvoláno NeplatnýROzsahPortů: %s"
+
+#: cinder/api/ec2/__init__.py:625
+#, python-format
+msgid "NotAuthorized raised: %s"
+msgstr "Vyvoláno NeníOprávněno: %s"
+
+#: cinder/api/ec2/__init__.py:629
+#, python-format
+msgid "InvalidRequest raised: %s"
+msgstr "Vyvoláno NeplatnáOperace: %s"
+
+#: cinder/api/ec2/__init__.py:633
+#, fuzzy, python-format
+msgid "QuotaError raised: %s"
+msgstr "Vyvolána neznámá chyba: %s"
+
+#: cinder/api/ec2/__init__.py:637
+#, python-format
+msgid "Invalid id: bogus (expecting \"i-...\"): %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:646
+#, python-format
+msgid "Unexpected error raised: %s"
+msgstr "Vyvolána neznámá chyba: %s"
+
+#: cinder/api/ec2/__init__.py:647
+#, python-format
+msgid "Environment: %s"
+msgstr "Prostředí: %s"
+
+#: cinder/api/ec2/__init__.py:649 cinder/api/metadata/handler.py:248
+msgid "An unknown error has occurred. Please try your request again."
+msgstr "Vyskytla se neznámá chyba. Prosím zopakujte Váš požadavek."
+
+#: cinder/api/ec2/apirequest.py:64
+#, python-format
+msgid "Unsupported API request: controller = %(controller)s, action = %(action)s"
+msgstr ""
+"Nepodporovaný požadavek API: ovladač = %(controller)s, činnost = "
+"%(action)s"
+
+#: cinder/api/ec2/cloud.py:336
+#, python-format
+msgid "Create snapshot of volume %s"
+msgstr "Vytvořit snímek svazku %s"
+
+#: cinder/api/ec2/cloud.py:372
+#, fuzzy, python-format
+msgid ""
+"Value (%s) for KeyName is invalid. Content limited to Alphanumeric "
+"character, spaces, dashes, and underscore."
+msgstr ""
+"Hodnota (%s) parametru GroupName je neplatná. Obsah je omezen na "
+"alfanumerické znaky, mezery, pomlčky a podtržítka."
+
+#: cinder/api/ec2/cloud.py:378
+#, fuzzy, python-format
+msgid "Value (%s) for Keyname is invalid. Length exceeds maximum of 255."
+msgstr ""
+"Hodnota (%s) parametru GroupName je neplatná. Délka překračuje maximum "
+"255 znaků."
+
+#: cinder/api/ec2/cloud.py:382
+#, python-format
+msgid "Create key pair %s"
+msgstr "Vytvořit dvojici klíčů %s"
+
+#: cinder/api/ec2/cloud.py:391
+#, python-format
+msgid "Import key %s"
+msgstr "Imprtovat klíč %s"
+
+#: cinder/api/ec2/cloud.py:409
+#, python-format
+msgid "Delete key pair %s"
+msgstr "Smazat dvojici klíčů %s"
+
+#: cinder/api/ec2/cloud.py:551
+#, fuzzy, python-format
+msgid "Invalid CIDR"
+msgstr "Neplatný cidr %(cidr)s."
+
+#: cinder/api/ec2/cloud.py:639 cinder/api/ec2/cloud.py:693
+#: cinder/api/ec2/cloud.py:800
+msgid "Not enough parameters, need group_name or group_id"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:654
+#: cinder/api/openstack/compute/contrib/security_groups.py:517
+#, python-format
+msgid "Revoke security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:666 cinder/api/ec2/cloud.py:719
+#, python-format
+msgid "%s Not enough parameters to build a valid rule"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:684 cinder/api/ec2/cloud.py:744
+msgid "No rule for the specified parameters."
+msgstr "Pro zadané parametry není žádné pravidlo."
+
+#: cinder/api/ec2/cloud.py:708
+#: cinder/api/openstack/compute/contrib/security_groups.py:354
+#, python-format
+msgid "Authorize security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:725
+#, python-format
+msgid "%s - This rule already exists in group"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:769
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Content limited to "
+"Alphanumeric characters, spaces, dashes, and underscores."
+msgstr ""
+"Hodnota (%s) parametru GroupName je neplatná. Obsah je omezen na "
+"alfanumerické znaky, mezery, pomlčky a podtržítka."
+
+#: cinder/api/ec2/cloud.py:776
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Length exceeds maximum of "
+"255."
+msgstr ""
+"Hodnota (%s) parametru GroupName je neplatná. Délka překračuje maximum "
+"255 znaků."
+
+#: cinder/api/ec2/cloud.py:780
+#: cinder/api/openstack/compute/contrib/security_groups.py:292
+#, python-format
+msgid "Create Security Group %s"
+msgstr "Vytvořit bezpečnostní skupinu %s"
+
+#: cinder/api/ec2/cloud.py:783
+#, python-format
+msgid "group %s already exists"
+msgstr "skupina %s již existuje"
+
+#: cinder/api/ec2/cloud.py:815
+#: cinder/api/openstack/compute/contrib/security_groups.py:245
+#, python-format
+msgid "Delete security group %s"
+msgstr "Smazat bezpečnostní skupinu %s"
+
+#: cinder/api/ec2/cloud.py:823 cinder/compute/manager.py:1630
+#, python-format
+msgid "Get console output for instance %s"
+msgstr "Získat výstup konzole pro instanci %s"
+
+#: cinder/api/ec2/cloud.py:894
+#, python-format
+msgid "Create volume from snapshot %s"
+msgstr "Vytvořit svazek ze snímku %s"
+
+#: cinder/api/ec2/cloud.py:898 cinder/api/openstack/compute/contrib/volumes.py:186
+#: cinder/api/openstack/volume/volumes.py:222
+#, python-format
+msgid "Create volume of %s GB"
+msgstr "Vytvořit svazek o %s GB"
+
+#: cinder/api/ec2/cloud.py:921
+msgid "Delete Failed"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:931
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(instance_id)s at %(device)s"
+msgstr "Připojit svazek %(volume_id)s k instanci %(instance_id)s na %(device)s"
+
+#: cinder/api/ec2/cloud.py:939
+msgid "Attach Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:952 cinder/api/openstack/compute/contrib/volumes.py:366
+#, python-format
+msgid "Detach volume %s"
+msgstr "Odpojit svazek %s"
+
+#: cinder/api/ec2/cloud.py:959
+#, fuzzy, python-format
+msgid "Detach Volume Failed."
+msgstr "Odpojit svazek %s"
+
+#: cinder/api/ec2/cloud.py:984 cinder/api/ec2/cloud.py:1041
+#: cinder/api/ec2/cloud.py:1518 cinder/api/ec2/cloud.py:1533
+#, python-format
+msgid "attribute not supported: %s"
+msgstr "vlastnost není podporována: %s"
+
+#: cinder/api/ec2/cloud.py:1107
+#, python-format
+msgid "vol = %s\n"
+msgstr "svz = %s\n"
+
+#: cinder/api/ec2/cloud.py:1255
+msgid "Allocate address"
+msgstr "Přidělit adresu"
+
+#: cinder/api/ec2/cloud.py:1267
+#, python-format
+msgid "Release address %s"
+msgstr "Uvolnit adresu %s"
+
+#: cinder/api/ec2/cloud.py:1272
+#, python-format
+msgid "Associate address %(public_ip)s to instance %(instance_id)s"
+msgstr "Přidělit adresu %(public_ip)s k instanci %(instance_id)s"
+
+#: cinder/api/ec2/cloud.py:1282
+#, python-format
+msgid "Disassociate address %s"
+msgstr "Oddělit adresu %s"
+
+#: cinder/api/ec2/cloud.py:1308
+msgid "Image must be available"
+msgstr "Obraz musí být dostupný"
+
+#: cinder/api/ec2/cloud.py:1329
+msgid "Going to start terminating instances"
+msgstr "BUde spuštěno ukončování insatncí"
+
+#: cinder/api/ec2/cloud.py:1343
+#, python-format
+msgid "Reboot instance %r"
+msgstr "Restratovat instanci %r"
+
+#: cinder/api/ec2/cloud.py:1354
+msgid "Going to stop instances"
+msgstr "Instance budou zastaveny"
+
+#: cinder/api/ec2/cloud.py:1365
+msgid "Going to start instances"
+msgstr "Instance budou spuštěny"
+
+#: cinder/api/ec2/cloud.py:1455
+#, python-format
+msgid "De-registering image %s"
+msgstr "Zrušení registrace obrazu %s"
+
+#: cinder/api/ec2/cloud.py:1471
+msgid "imageLocation is required"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1490
+#, python-format
+msgid "Registered image %(image_location)s with id %(image_id)s"
+msgstr "Obraz %(image_location)s registrován s id %(image_id)s"
+
+#: cinder/api/ec2/cloud.py:1536
+msgid "user or group not specified"
+msgstr "uživatel nebo skupina nebyly zadány"
+
+#: cinder/api/ec2/cloud.py:1538
+msgid "only group \"all\" is supported"
+msgstr "podporována je pouze skupina \"all\""
+
+#: cinder/api/ec2/cloud.py:1540
+msgid "operation_type must be add or remove"
+msgstr "operation_type musí být add nebo remove"
+
+#: cinder/api/ec2/cloud.py:1542
+#, python-format
+msgid "Updating image %s publicity"
+msgstr "Aktualizace publicity obrazu %s"
+
+#: cinder/api/ec2/cloud.py:1555
+#, python-format
+msgid "Not allowed to modify attributes for image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1603
+#, python-format
+msgid "Couldn't stop instance with in %d sec"
+msgstr "Nelze zastavit instanci za %d sek"
+
+#: cinder/api/metadata/handler.py:246 cinder/api/metadata/handler.py:253
+#, python-format
+msgid "Failed to get metadata for ip: %s"
+msgstr "Nelze získat metadata pro ip: %s"
+
+#: cinder/api/openstack/__init__.py:43
+#, python-format
+msgid "Caught error: %s"
+msgstr "Zachycena chyba: %s"
+
+#: cinder/api/openstack/__init__.py:45 cinder/api/openstack/wsgi.py:886
+#, python-format
+msgid "%(url)s returned with HTTP %(status)d"
+msgstr "%(url)s vrácena s HTTP %(status)d"
+
+#: cinder/api/openstack/__init__.py:94
+msgid "Must specify an ExtensionManager class"
+msgstr "Musí být určena třída ExtensionManager"
+
+#: cinder/api/openstack/__init__.py:105
+#, python-format
+msgid "Extended resource: %s"
+msgstr "Rozšířený zdroj: %s"
+
+#: cinder/api/openstack/__init__.py:130
+#, python-format
+msgid ""
+"Extension %(ext_name)s: Cannot extend resource %(collection)s: No such "
+"resource"
+msgstr "Rozšíření %(ext_name)s: nelze rozšířit %(collection)s: Žádný takový zdroj"
+
+#: cinder/api/openstack/__init__.py:135
+#, python-format
+msgid "Extension %(ext_name)s extending resource: %(collection)s"
+msgstr "Rozšíření %(ext_name)s: rozšiřování zdroje %(collection)s"
+
+#: cinder/api/openstack/auth.py:90
+#, python-format
+msgid "%(user_id)s could not be found with token '%(token)s'"
+msgstr "%(user_id)s nelze nalézt se známkou '%(token)s'"
+
+#: cinder/api/openstack/auth.py:134
+#, python-format
+msgid "%(user_id)s must be an admin or a member of %(project_id)s"
+msgstr "%(user_id)s musí být správcem nebo členem %(project_id)s"
+
+#: cinder/api/openstack/auth.py:152
+msgid "Authentication requests must be made against a version root (e.g. /v2)."
+msgstr "Požadavky o ověření musí být prováděny proti verzi kořenu (např. /v2)."
+
+#: cinder/api/openstack/auth.py:167
+#, python-format
+msgid "Could not find %s in request."
+msgstr "Nelze najít %s v požadavku."
+
+#: cinder/api/openstack/auth.py:191
+#, python-format
+msgid "Successfully authenticated '%s'"
+msgstr "'%s' úspěšně ověřeno"
+
+#: cinder/api/openstack/auth.py:241
+msgid "User not found with provided API key."
+msgstr "Uživatel nenalezen pomocí zadaného klíče API."
+
+#: cinder/api/openstack/auth.py:258
+#, python-format
+msgid "Provided API key is valid, but not for user '%(username)s'"
+msgstr "Zadaný klíč API je platný, ale ne pro uživatele '%(username)s'"
+
+#: cinder/api/openstack/common.py:133 cinder/api/openstack/common.py:167
+msgid "limit param must be an integer"
+msgstr "parametr limit musí být celé číslo"
+
+#: cinder/api/openstack/common.py:136 cinder/api/openstack/common.py:171
+msgid "limit param must be positive"
+msgstr "parametr limit musí být kladný"
+
+#: cinder/api/openstack/common.py:161
+msgid "offset param must be an integer"
+msgstr "parametr offset musí být celé číslo"
+
+#: cinder/api/openstack/common.py:175
+msgid "offset param must be positive"
+msgstr "parametr offset musí být kladný"
+
+#: cinder/api/openstack/common.py:203
+#, python-format
+msgid "marker [%s] not found"
+msgstr "značka [%s] nenalezena"
+
+#: cinder/api/openstack/common.py:243
+#, python-format
+msgid "href %s does not contain version"
+msgstr "href %s neobsahuje verzi"
+
+#: cinder/api/openstack/common.py:278
+msgid "Image metadata limit exceeded"
+msgstr "Metadata obrazu překračují limit"
+
+#: cinder/api/openstack/common.py:295
+#, python-format
+msgid "Converting nw_info: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:305
+#, python-format
+msgid "Converted networks: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:338
+#, python-format
+msgid "Cannot '%(action)s' while instance is in %(attr)s %(state)s"
+msgstr "Nelze '%(action)s' zatímco instance je %(attr)s %(state)s"
+
+#: cinder/api/openstack/common.py:341
+#, python-format
+msgid "Instance is in an invalid state for '%(action)s'"
+msgstr "Instance je v neplatném stavu pro '%(action)s'"
+
+#: cinder/api/openstack/common.py:421
+msgid "Rejecting snapshot request, snapshots currently disabled"
+msgstr "Odmítnutí žádosti o snímek, snímky jsou nyní zakázány"
+
+#: cinder/api/openstack/common.py:423
+msgid "Instance snapshots are not permitted at this time."
+msgstr "Snímky instance nejsou v současnosti povoleny."
+
+#: cinder/api/openstack/extensions.py:188
+#, python-format
+msgid "Loaded extension: %s"
+msgstr "Načteno rozšíření: %s"
+
+#: cinder/api/openstack/extensions.py:225
+#, python-format
+msgid "Ext name: %s"
+msgstr "Název roz: %s"
+
+#: cinder/api/openstack/extensions.py:226
+#, python-format
+msgid "Ext alias: %s"
+msgstr "Přezdívká roz: %s"
+
+#: cinder/api/openstack/extensions.py:227
+#, python-format
+msgid "Ext description: %s"
+msgstr "Popis roz: %s"
+
+#: cinder/api/openstack/extensions.py:229
+#, python-format
+msgid "Ext namespace: %s"
+msgstr "Jmenný prostor roz: %s"
+
+#: cinder/api/openstack/extensions.py:230
+#, python-format
+msgid "Ext updated: %s"
+msgstr "Roz aktualizováno: %s"
+
+#: cinder/api/openstack/extensions.py:232
+#, python-format
+msgid "Exception loading extension: %s"
+msgstr "Výjimka při načítání rozšíření: %s"
+
+#: cinder/api/openstack/extensions.py:246
+#, python-format
+msgid "Loading extension %s"
+msgstr "Načítání rozšíření %s"
+
+#: cinder/api/openstack/extensions.py:252
+#, python-format
+msgid "Calling extension factory %s"
+msgstr "Volání továrny rozšíření %s"
+
+#: cinder/api/openstack/extensions.py:264
+#, python-format
+msgid "Failed to load extension %(ext_factory)s: %(exc)s"
+msgstr "Nelze načít rozšížení %(ext_factory)s: %(exc)s"
+
+#: cinder/api/openstack/extensions.py:344
+#, python-format
+msgid "Failed to load extension %(classpath)s: %(exc)s"
+msgstr "Nelze načíst rozšíření %(classpath)s: %(exc)s"
+
+#: cinder/api/openstack/extensions.py:368
+#, python-format
+msgid "Failed to load extension %(ext_name)s: %(exc)s"
+msgstr "Nelze načíst rozšíření %(ext_name)s: %(exc)s"
+
+#: cinder/api/openstack/wsgi.py:135 cinder/api/openstack/wsgi.py:538
+msgid "cannot understand JSON"
+msgstr "JSON nelze porozumět"
+
+#: cinder/api/openstack/wsgi.py:159
+#: cinder/api/openstack/compute/contrib/hosts.py:86
+msgid "cannot understand XML"
+msgstr "XML nelze porozumět"
+
+#: cinder/api/openstack/wsgi.py:543
+msgid "too many body keys"
+msgstr "příliš mnoho klíčů těla"
+
+#: cinder/api/openstack/wsgi.py:582
+#, fuzzy, python-format
+msgid "Exception handling resource: %s"
+msgstr "Rozšířený zdroj: %s"
+
+#: cinder/api/openstack/wsgi.py:586
+#, python-format
+msgid "Fault thrown: %s"
+msgstr "Vyvolána chyba: %s"
+
+#: cinder/api/openstack/wsgi.py:589
+#, python-format
+msgid "HTTP exception thrown: %s"
+msgstr "Vyvolána výjimka HTTP: %s"
+
+#: cinder/api/openstack/wsgi.py:697
+msgid "Unrecognized Content-Type provided in request"
+msgstr "V požadavku zadán nerozpoznaný Content-Type"
+
+#: cinder/api/openstack/wsgi.py:701
+msgid "No Content-Type provided in request"
+msgstr "V požadavku nezadán Content-Type"
+
+#: cinder/api/openstack/wsgi.py:705
+msgid "Empty body provided in request"
+msgstr "V požadavku zadáno prázdné tělo"
+
+#: cinder/api/openstack/wsgi.py:816
+#, python-format
+msgid "There is no such action: %s"
+msgstr "Žádná taková činnost: %s"
+
+#: cinder/api/openstack/wsgi.py:819 cinder/api/openstack/wsgi.py:832
+#: cinder/api/openstack/compute/server_metadata.py:58
+#: cinder/api/openstack/compute/server_metadata.py:76
+#: cinder/api/openstack/compute/server_metadata.py:101
+#: cinder/api/openstack/compute/server_metadata.py:126
+#: cinder/api/openstack/compute/contrib/admin_actions.py:211
+#: cinder/api/openstack/compute/contrib/console_output.py:52
+msgid "Malformed request body"
+msgstr "Poškozené tělo požadavku"
+
+#: cinder/api/openstack/wsgi.py:829
+msgid "Unsupported Content-Type"
+msgstr "Nepodporovaný Content-Type"
+
+#: cinder/api/openstack/wsgi.py:841
+msgid "Malformed request url"
+msgstr "Poškozená url požadavku"
+
+#: cinder/api/openstack/wsgi.py:889
+#, python-format
+msgid "%(url)s returned a fault: %(e)s"
+msgstr "%(url)s vrátilo chybu: %(e)s"
+
+#: cinder/api/openstack/xmlutil.py:265
+msgid "element is not a child"
+msgstr "prvek není podřazený"
+
+#: cinder/api/openstack/xmlutil.py:414
+msgid "root element selecting a list"
+msgstr "kořenový prvek volí seznam"
+
+#: cinder/api/openstack/xmlutil.py:739
+#, python-format
+msgid "Template tree mismatch; adding slave %(slavetag)s to master %(mastertag)s"
+msgstr ""
+"Neshoda stromu šablony; přidávání sluhy %(slavetag)s k pánovi "
+"%(mastertag)s"
+
+#: cinder/api/openstack/xmlutil.py:858
+msgid "subclasses must implement construct()!"
+msgstr "podtřídy musí zavádět construct()!"
+
+#: cinder/api/openstack/compute/extensions.py:29
+#: cinder/api/openstack/volume/extensions.py:29
+msgid "Initializing extension manager."
+msgstr "Zavádění správce rozšíření."
+
+#: cinder/api/openstack/compute/image_metadata.py:40
+#: cinder/api/openstack/compute/images.py:146
+#: cinder/api/openstack/compute/images.py:161
+msgid "Image not found."
+msgstr "Obraz nenalezen"
+
+#: cinder/api/openstack/compute/image_metadata.py:79
+msgid "Incorrect request body format"
+msgstr "Nsprávný formát těla požadavku"
+
+#: cinder/api/openstack/compute/image_metadata.py:83
+#: cinder/api/openstack/compute/server_metadata.py:80
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:79
+#: cinder/api/openstack/compute/contrib/volumetypes.py:188
+msgid "Request body and URI mismatch"
+msgstr "Neshoda s tělem požadavku a URI"
+
+#: cinder/api/openstack/compute/image_metadata.py:86
+#: cinder/api/openstack/compute/server_metadata.py:84
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:82
+#: cinder/api/openstack/compute/contrib/volumetypes.py:191
+msgid "Request body contains too many items"
+msgstr "Tělo požadavku obsahuje příliš mnoho položek"
+
+#: cinder/api/openstack/compute/image_metadata.py:111
+msgid "Invalid metadata key"
+msgstr "Neplatný klíč metadata"
+
+#: cinder/api/openstack/compute/ips.py:74
+msgid "Instance does not exist"
+msgstr "Instance neexistuje"
+
+#: cinder/api/openstack/compute/ips.py:97
+msgid "Instance is not a member of specified network"
+msgstr "Instance není členem zadané sítě"
+
+#: cinder/api/openstack/compute/limits.py:140
+#, python-format
+msgid ""
+"Only %(value)s %(verb)s request(s) can be made to %(uri)s every "
+"%(unit_string)s."
+msgstr ""
+"Pouze %(value)s požadavky %(verb)s mohou být provedeny pro %(uri)s "
+"každých %(unit_string)s."
+
+#: cinder/api/openstack/compute/limits.py:266
+msgid "This request was rate-limited."
+msgstr "Tento požadavek má omezen množství."
+
+#: cinder/api/openstack/compute/server_metadata.py:38
+#: cinder/api/openstack/compute/server_metadata.py:122
+#: cinder/api/openstack/compute/server_metadata.py:159
+msgid "Server does not exist"
+msgstr "Server neexistuje"
+
+#: cinder/api/openstack/compute/server_metadata.py:141
+#: cinder/api/openstack/compute/server_metadata.py:152
+msgid "Metadata item was not found"
+msgstr "Položka metadat nenalezena"
+
+#: cinder/api/openstack/compute/servers.py:425
+#, python-format
+msgid "Invalid server status: %(status)s"
+msgstr "Neplatný stav serveru: %(status)s"
+
+#: cinder/api/openstack/compute/servers.py:433
+msgid "Invalid changes-since value"
+msgstr "Neplatná hodnota changes-since"
+
+#: cinder/api/openstack/compute/servers.py:483
+msgid "Personality file limit exceeded"
+msgstr "Překročen limit osobnostního souboru"
+
+#: cinder/api/openstack/compute/servers.py:485
+msgid "Personality file path too long"
+msgstr "Cesta osobnostního souboru je příliš dlouhá"
+
+#: cinder/api/openstack/compute/servers.py:487
+msgid "Personality file content too long"
+msgstr "Obsah osobnostního souboru je příliš dlouhý"
+
+#: cinder/api/openstack/compute/servers.py:501
+msgid "Server name is not a string or unicode"
+msgstr "Název serveru není řetězec nebo unicode"
+
+#: cinder/api/openstack/compute/servers.py:505
+msgid "Server name is an empty string"
+msgstr "Název serveru je prázdný řetězec"
+
+#: cinder/api/openstack/compute/servers.py:509
+msgid "Server name must be less than 256 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:527
+#, python-format
+msgid "Bad personality format: missing %s"
+msgstr "Špatný formát osobnosti: chybí %s"
+
+#: cinder/api/openstack/compute/servers.py:530
+msgid "Bad personality format"
+msgstr "Špatný formát osobnosti"
+
+#: cinder/api/openstack/compute/servers.py:535
+#, python-format
+msgid "Personality content for %s cannot be decoded"
+msgstr "Obsah osobnosti pro %s nemůže být dekódován"
+
+#: cinder/api/openstack/compute/servers.py:550
+#, python-format
+msgid "Bad networks format: network uuid is not in proper format (%s)"
+msgstr "Špatný formát sítí: uuid sítě není ve správném formátu (%s)"
+
+#: cinder/api/openstack/compute/servers.py:559
+#, python-format
+msgid "Invalid fixed IP address (%s)"
+msgstr "Neplatná pevná IP adresa (%s)"
+
+#: cinder/api/openstack/compute/servers.py:566
+#, python-format
+msgid "Duplicate networks (%s) are not allowed"
+msgstr "Duplicitní sítě (%s) nejosu povoleny"
+
+#: cinder/api/openstack/compute/servers.py:572
+#, python-format
+msgid "Bad network format: missing %s"
+msgstr "Špatný formát sítě: chybí %s"
+
+#: cinder/api/openstack/compute/servers.py:575
+msgid "Bad networks format"
+msgstr "Špatný formát sítě"
+
+#: cinder/api/openstack/compute/servers.py:587
+msgid "Userdata content cannot be decoded"
+msgstr "Obsah uživatelských dat nemůže být dekódován"
+
+#: cinder/api/openstack/compute/servers.py:594
+msgid "accessIPv4 is not proper IPv4 format"
+msgstr "accessIPv4 není ve správném formátu IPv4"
+
+#: cinder/api/openstack/compute/servers.py:601
+#, fuzzy
+msgid "accessIPv6 is not proper IPv6 format"
+msgstr "accessIPv4 není ve správném formátu IPv4"
+
+#: cinder/api/openstack/compute/servers.py:633
+msgid "Server name is not defined"
+msgstr "Název serveru není určen"
+
+#: cinder/api/openstack/compute/servers.py:675
+#: cinder/api/openstack/compute/servers.py:740
+msgid "Invalid flavorRef provided."
+msgstr "Zadáno neplatné flavorRef."
+
+#: cinder/api/openstack/compute/servers.py:737
+msgid "Can not find requested image"
+msgstr "Nelze najít požadovaný obraz"
+
+#: cinder/api/openstack/compute/servers.py:743
+msgid "Invalid key_name provided."
+msgstr "Zadán neplatný název_klíče."
+
+#: cinder/api/openstack/compute/servers.py:829
+#: cinder/api/openstack/compute/servers.py:849
+msgid "Instance has not been resized."
+msgstr "Instanci nebyla změněna velikost."
+
+#: cinder/api/openstack/compute/servers.py:835
+#, python-format
+msgid "Error in confirm-resize %s"
+msgstr "Chyba v confirm-resize %s"
+
+#: cinder/api/openstack/compute/servers.py:855
+#, python-format
+msgid "Error in revert-resize %s"
+msgstr "Chyba v revert-resize %s"
+
+#: cinder/api/openstack/compute/servers.py:868
+msgid "Argument 'type' for reboot is not HARD or SOFT"
+msgstr "Argument 'type' pro restart není HARD či SOFT"
+
+#: cinder/api/openstack/compute/servers.py:872
+msgid "Missing argument 'type' for reboot"
+msgstr "Chybí argument 'type' pro restart"
+
+#: cinder/api/openstack/compute/servers.py:885
+#, python-format
+msgid "Error in reboot %s"
+msgstr "Chyba v restartu %s"
+
+#: cinder/api/openstack/compute/servers.py:897
+msgid "Unable to locate requested flavor."
+msgstr "Nelze najít požadovanou konfiguraci."
+
+#: cinder/api/openstack/compute/servers.py:900
+msgid "Resize requires a change in size."
+msgstr "Resize vyžaduje změnu velikosti."
+
+#: cinder/api/openstack/compute/servers.py:924
+msgid "Malformed server entity"
+msgstr "Poškozený objekt serveru"
+
+#: cinder/api/openstack/compute/servers.py:931
+msgid "Missing imageRef attribute"
+msgstr "Chybí vlastnost imageRef"
+
+#: cinder/api/openstack/compute/servers.py:940
+msgid "Invalid imageRef provided."
+msgstr "Zadáno neplatné imageRef."
+
+#: cinder/api/openstack/compute/servers.py:949
+msgid "Missing flavorRef attribute"
+msgstr "Chybí vlastnost flavorRef"
+
+#: cinder/api/openstack/compute/servers.py:962
+msgid "No adminPass was specified"
+msgstr "Nebylo zadáno adminPass"
+
+#: cinder/api/openstack/compute/servers.py:966
+#: cinder/api/openstack/compute/servers.py:1144
+msgid "Invalid adminPass"
+msgstr "Neplatné adminPass"
+
+#: cinder/api/openstack/compute/servers.py:980
+msgid "Unable to parse metadata key/value pairs."
+msgstr "Nelze zpracovat metadata dvojic hodnot/klíčů."
+
+#: cinder/api/openstack/compute/servers.py:993
+msgid "Resize request has invalid 'flavorRef' attribute."
+msgstr "Požadavek na změnu velikosti má neplatnou vlastnost 'flavorRef'."
+
+#: cinder/api/openstack/compute/servers.py:996
+msgid "Resize requests require 'flavorRef' attribute."
+msgstr "Požadavek na změnu velikosti vyžaduje vlastnost 'flavorRef'."
+
+#: cinder/api/openstack/compute/servers.py:1014
+#: cinder/api/openstack/compute/contrib/aggregates.py:142
+#: cinder/api/openstack/compute/contrib/networks.py:65
+msgid "Invalid request body"
+msgstr "Neplatné tělo požadavku"
+
+#: cinder/api/openstack/compute/servers.py:1019
+msgid "Could not parse imageRef from request."
+msgstr "Nelze zpracovat imageRef z požadavku."
+
+#: cinder/api/openstack/compute/servers.py:1071
+msgid "Instance could not be found"
+msgstr "Instance nemohla být nalezena"
+
+#: cinder/api/openstack/compute/servers.py:1074
+msgid "Cannot find image for rebuild"
+msgstr "Nelze najít obraz ke znovu sestavení"
+
+#: cinder/api/openstack/compute/servers.py:1103
+msgid "createImage entity requires name attribute"
+msgstr "Objekt createImage cyžaduje vlastnost name"
+
+#: cinder/api/openstack/compute/servers.py:1112
+#: cinder/api/openstack/compute/contrib/admin_actions.py:238
+msgid "Invalid metadata"
+msgstr "Neplatná metadata"
+
+#: cinder/api/openstack/compute/servers.py:1167
+#, python-format
+msgid "Removing options '%(unk_opt_str)s' from query"
+msgstr "Odstraňování voleb '%(unk_opt_str)s' z fronty"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:60
+#, python-format
+msgid "Compute.api::pause %s"
+msgstr "Compute.api::pauza %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:77
+#, python-format
+msgid "Compute.api::unpause %s"
+msgstr "Compute.api::zruš pauzu %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:94
+#, python-format
+msgid "compute.api::suspend %s"
+msgstr "compute.api::přerušení %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:111
+#, python-format
+msgid "compute.api::resume %s"
+msgstr "compute.api::pokračování %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:127
+#, python-format
+msgid "Error in migrate %s"
+msgstr "Chyba v přesunu %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:141
+#, python-format
+msgid "Compute.api::reset_network %s"
+msgstr "Compute.api::reset_sítě %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:154
+#: cinder/api/openstack/compute/contrib/admin_actions.py:170
+#: cinder/api/openstack/compute/contrib/admin_actions.py:186
+#: cinder/api/openstack/compute/contrib/multinic.py:41
+#: cinder/api/openstack/compute/contrib/rescue.py:44
+msgid "Server not found"
+msgstr "Server nenalezen"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:157
+#, python-format
+msgid "Compute.api::inject_network_info %s"
+msgstr "Compute.api::vložit_info_sítě %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:173
+#, python-format
+msgid "Compute.api::lock %s"
+msgstr "Compute.api::uzamčení %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:189
+#, python-format
+msgid "Compute.api::unlock %s"
+msgstr "Compute.api::odemčení %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:219
+#, python-format
+msgid "createBackup entity requires %s attribute"
+msgstr "Objekt createBackup vyžaduej vlastnost %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:223
+msgid "Malformed createBackup entity"
+msgstr "Poškozený objekt createBackup"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:229
+msgid "createBackup attribute 'rotation' must be an integer"
+msgstr "Vlastnost createBackup 'rotation' musí být celé číslo"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:244
+#: cinder/api/openstack/compute/contrib/console_output.py:47
+#: cinder/api/openstack/compute/contrib/console_output.py:59
+#: cinder/api/openstack/compute/contrib/consoles.py:49
+#: cinder/api/openstack/compute/contrib/consoles.py:60
+#: cinder/api/openstack/compute/contrib/server_action_list.py:49
+#: cinder/api/openstack/compute/contrib/server_diagnostics.py:47
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:38
+msgid "Instance not found"
+msgstr "Instance nenalezena"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:272
+msgid "host and block_migration must be specified."
+msgstr "host a block_migration musí být zadány."
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:284
+#, python-format
+msgid "Live migration of instance %(id)s to host %(host)s failed"
+msgstr "Migrace za chodu instance %(id)s na hostitele %(host)s selhala"
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:76
+#, fuzzy, python-format
+msgid ""
+"Cannot create aggregate with name %(name)s and availability zone "
+"%(avail_zone)s"
+msgstr ""
+"Nelze vytvořit typ_svazku s názvem %(name)s a specifikacemi "
+"%(extra_specs)s"
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:88
+#, python-format
+msgid "Cannot show aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:114
+#, python-format
+msgid "Cannot update aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:126
+#, python-format
+msgid "Cannot delete aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:139
+#, python-format
+msgid "Aggregates does not have %s action"
+msgstr "Agregáty nemají činnost %s"
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:152
+#: cinder/api/openstack/compute/contrib/aggregates.py:158
+#, python-format
+msgid "Cannot add host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:171
+#: cinder/api/openstack/compute/contrib/aggregates.py:175
+#, python-format
+msgid "Cannot remove host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:195
+#, python-format
+msgid "Cannot set metadata %(metadata)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/certificates.py:75
+msgid "Only root certificate can be retrieved."
+msgstr "Může být získán pouze kořenový certifikát."
+
+#: cinder/api/openstack/compute/contrib/cloudpipe.py:146
+msgid ""
+"Unable to claim IP for VPN instances, ensure it isn't running, and try "
+"again in a few minutes"
+msgstr ""
+"Nelze získat IP pro instance VPN, ujistěte se, že není spuštěna a zkuste "
+"to znovu za pár minut."
+
+#: cinder/api/openstack/compute/contrib/consoles.py:44
+msgid "Missing type specification"
+msgstr "Chybí určení typu"
+
+#: cinder/api/openstack/compute/contrib/consoles.py:56
+msgid "Invalid type specification"
+msgstr "Neplatné určení typu"
+
+#: cinder/api/openstack/compute/contrib/disk_config.py:44
+#, python-format
+msgid "%s must be either 'MANUAL' or 'AUTO'."
+msgstr "%s musí být buď 'MANUAL' nebo 'AUTO'."
+
+#: cinder/api/openstack/compute/contrib/extended_server_attributes.py:77
+#: cinder/api/openstack/compute/contrib/extended_status.py:61
+msgid "Server not found."
+msgstr "Server nenalezen."
+
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:61
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:91
+#, fuzzy
+msgid "Flavor not found."
+msgstr "Server nenalezen."
+
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:49
+#: cinder/api/openstack/compute/contrib/volumetypes.py:158
+msgid "No Request Body"
+msgstr "Žádné tělo požadavku"
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:159
+#, python-format
+msgid "No more floating ips in pool %s."
+msgstr "Žádné další plovoucí ip v zásobníku %s."
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:161
+msgid "No more floating ips available."
+msgstr "Žádné další plovoucí ip nejsou dostupné."
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:201
+#: cinder/api/openstack/compute/contrib/floating_ips.py:230
+#: cinder/api/openstack/compute/contrib/security_groups.py:571
+#: cinder/api/openstack/compute/contrib/security_groups.py:604
+msgid "Missing parameter dict"
+msgstr "Chybí parametr dict"
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:204
+#: cinder/api/openstack/compute/contrib/floating_ips.py:233
+msgid "Address not specified"
+msgstr "Adresa není určena"
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:213
+msgid "No fixed ips associated to instance"
+msgstr "K instanci nejsou přidruženy žádné pevné ip"
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:216
+msgid "Associate floating ip failed"
+msgstr "Přidružení plovoucí ip selhalo"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:144
+#, python-format
+msgid "Invalid status: '%s'"
+msgstr "Neplatný stav: '%s'"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:148
+#, fuzzy, python-format
+msgid "Invalid mode: '%s'"
+msgstr "Neplatný stav: '%s'"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:152
+#, python-format
+msgid "Invalid update setting: '%s'"
+msgstr "Neplatné nastavení aktualizace: '%s'"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:170
+#, fuzzy, python-format
+msgid "Putting host %(host)s in maintenance mode %(mode)s."
+msgstr "Nastavování hostitele %(host)s na %(state)s."
+
+#: cinder/api/openstack/compute/contrib/hosts.py:181
+#, python-format
+msgid "Setting host %(host)s to %(state)s."
+msgstr "Nastavování hostitele %(host)s na %(state)s."
+
+#: cinder/api/openstack/compute/contrib/hosts.py:230
+msgid "Describe-resource is admin only functionality"
+msgstr "Describe-resource je funkce pouze pro správce"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:238
+msgid "Host not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:70
+msgid "Keypair name contains unsafe characters"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:95
+msgid "Keypair name must be between 1 and 255 characters long"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:100
+#, python-format
+msgid "Key pair '%s' already exists."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:52
+msgid "Missing 'networkId' argument for addFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:68
+msgid "Missing 'address' argument for removeFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:77
+#, python-format
+msgid "Unable to find address %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:62
+#, python-format
+msgid "Network does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:70
+#, python-format
+msgid "Disassociating network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:74
+#: cinder/api/openstack/compute/contrib/networks.py:91
+#: cinder/api/openstack/compute/contrib/networks.py:101
+msgid "Network not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:87
+#, python-format
+msgid "Showing network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:97
+#, python-format
+msgid "Deleting network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/scheduler_hints.py:41
+msgid "Malformed scheduler_hints attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:222
+msgid "Security group id should be integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:243
+msgid "Security group is still in use"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:295
+#, python-format
+msgid "Security group %s already exists"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:315
+#, python-format
+msgid "Security group %s is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:318
+#, python-format
+msgid "Security group %s cannot be empty."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:321
+#, python-format
+msgid "Security group %s should not be greater than 255 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:348
+msgid "Parent group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:351
+#, python-format
+msgid "Security group (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:369
+msgid "Not enough parameters to build a valid rule."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:376
+#, python-format
+msgid "This rule already exists in group %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:414
+msgid "Parent or group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:507
+msgid "Rule id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:510
+#, python-format
+msgid "Rule (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:574
+#: cinder/api/openstack/compute/contrib/security_groups.py:607
+msgid "Security group not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:578
+#: cinder/api/openstack/compute/contrib/security_groups.py:611
+msgid "Security group name cannot be empty"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:45
+#, python-format
+msgid "start instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:54
+#, python-format
+msgid "stop instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:73
+#: cinder/api/openstack/volume/volumes.py:106
+#, python-format
+msgid "vol=%s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:146
+#: cinder/api/openstack/volume/volumes.py:184
+#, python-format
+msgid "Delete volume with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:329
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(server_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:481
+#: cinder/api/openstack/volume/snapshots.py:110
+#, python-format
+msgid "Delete snapshot with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:524
+#: cinder/api/openstack/volume/snapshots.py:150
+#, python-format
+msgid "Create snapshot from volume %s"
+msgstr ""
+
+#: cinder/auth/fakeldap.py:33
+msgid "Attempted to instantiate singleton"
+msgstr ""
+
+#: cinder/auth/ldapdriver.py:650
+#, python-format
+msgid ""
+"Attempted to remove the last member of a group. Deleting the group at %s "
+"instead."
+msgstr ""
+
+#: cinder/auth/manager.py:298
+#, python-format
+msgid "Looking up user: %r"
+msgstr ""
+
+#: cinder/auth/manager.py:302
+#, python-format
+msgid "Failed authorization for access key %s"
+msgstr ""
+
+#: cinder/auth/manager.py:308
+#, python-format
+msgid "Using project name = user name (%s)"
+msgstr ""
+
+#: cinder/auth/manager.py:315
+#, python-format
+msgid "failed authorization: no project named %(pjid)s (user=%(uname)s)"
+msgstr ""
+
+#: cinder/auth/manager.py:324
+#, python-format
+msgid ""
+"Failed authorization: user %(uname)s not admin and not member of project "
+"%(pjname)s"
+msgstr ""
+
+#: cinder/auth/manager.py:331 cinder/auth/manager.py:343
+#, python-format
+msgid "user.secret: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:332 cinder/auth/manager.py:344
+#, python-format
+msgid "expected_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:333 cinder/auth/manager.py:345
+#, python-format
+msgid "signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:335 cinder/auth/manager.py:357
+#, python-format
+msgid "Invalid signature for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:353
+#, python-format
+msgid "host_only_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:449
+msgid "Must specify project"
+msgstr ""
+
+#: cinder/auth/manager.py:490
+#, python-format
+msgid "Adding role %(role)s to user %(uid)s in project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:493
+#, python-format
+msgid "Adding sitewide role %(role)s to user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:519
+#, python-format
+msgid "Removing role %(role)s from user %(uid)s on project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:522
+#, python-format
+msgid "Removing sitewide role %(role)s from user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:595
+#, python-format
+msgid "Created project %(name)s with manager %(manager_user)s"
+msgstr ""
+
+#: cinder/auth/manager.py:613
+#, python-format
+msgid "modifying project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:625
+#, python-format
+msgid "Adding user %(uid)s to project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:646
+#, python-format
+msgid "Remove user %(uid)s from project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:676
+#, python-format
+msgid "Deleting project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:734
+#, python-format
+msgid "Created user %(rvname)s (admin: %(rvadmin)r)"
+msgstr ""
+
+#: cinder/auth/manager.py:743
+#, python-format
+msgid "Deleting user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:753
+#, python-format
+msgid "Access Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:755
+#, python-format
+msgid "Secret Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:757
+#, python-format
+msgid "Admin status set to %(admin)r for user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:802
+#, python-format
+msgid "No vpn data for project %s"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:46
+#, fuzzy, python-format
+msgid "Instance type for vpn instances"
+msgstr "Neplatná instance typu %(instance_type)s."
+
+#: cinder/cloudpipe/pipelib.py:49
+msgid "Template for cloudpipe instance boot script"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:52
+msgid "Network to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:55
+msgid "Netmask to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:107
+#, python-format
+msgid "Launching VPN for %s"
+msgstr ""
+
+#: cinder/compute/api.py:141
+msgid "No compute host specified"
+msgstr ""
+
+#: cinder/compute/api.py:144
+#, python-format
+msgid "Unable to find host for Instance %s"
+msgstr ""
+
+#: cinder/compute/api.py:192
+#, python-format
+msgid ""
+"Quota exceeded for %(pid)s, tried to set %(num_metadata)s metadata "
+"properties"
+msgstr ""
+
+#: cinder/compute/api.py:203
+#, python-format
+msgid "Quota exceeded for %(pid)s, metadata property key or value too long"
+msgstr ""
+
+#: cinder/compute/api.py:257
+msgid "Cannot run any more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:259
+#, python-format
+msgid "Can only run %s more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:261
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances. "
+msgstr ""
+
+#: cinder/compute/api.py:310
+msgid "Creating a raw instance"
+msgstr ""
+
+#: cinder/compute/api.py:312
+#, python-format
+msgid "Using Kernel=%(kernel_id)s, Ramdisk=%(ramdisk_id)s"
+msgstr ""
+
+#: cinder/compute/api.py:383
+#, python-format
+msgid "Going to run %s instances..."
+msgstr ""
+
+#: cinder/compute/api.py:447
+#, python-format
+msgid "bdm %s"
+msgstr ""
+
+#: cinder/compute/api.py:474
+#, python-format
+msgid "block_device_mapping %s"
+msgstr ""
+
+#: cinder/compute/api.py:591
+#, python-format
+msgid "Sending create to scheduler for %(pid)s/%(uid)s's"
+msgstr ""
+
+#: cinder/compute/api.py:871
+#, fuzzy
+msgid "Going to try to soft delete instance"
+msgstr "Instance budou spuštěny"
+
+#: cinder/compute/api.py:891
+msgid "No host for instance, deleting immediately"
+msgstr ""
+
+#: cinder/compute/api.py:939
+#, fuzzy
+msgid "Going to try to terminate instance"
+msgstr "BUde spuštěno ukončování insatncí"
+
+#: cinder/compute/api.py:977
+#, fuzzy
+msgid "Going to try to stop instance"
+msgstr "Instance budou zastaveny"
+
+#: cinder/compute/api.py:996
+#, fuzzy
+msgid "Going to try to start instance"
+msgstr "Instance budou spuštěny"
+
+#: cinder/compute/api.py:1000
+#, python-format
+msgid "Instance %(instance_uuid)s is not stopped. (%(vm_state)s"
+msgstr ""
+
+#: cinder/compute/api.py:1071 cinder/volume/api.py:173
+#: cinder/volume/volume_types.py:64
+#, python-format
+msgid "Searching by: %s"
+msgstr ""
+
+#: cinder/compute/api.py:1201
+#, python-format
+msgid "Image type not recognized %s"
+msgstr ""
+
+#: cinder/compute/api.py:1369
+msgid "flavor_id is None. Assuming migration."
+msgstr ""
+
+#: cinder/compute/api.py:1377
+#, python-format
+msgid ""
+"Old instance type %(current_instance_type_name)s,  new instance type "
+"%(new_instance_type_name)s"
+msgstr ""
+
+#: cinder/compute/api.py:1644
+#, python-format
+msgid "multiple fixedips exist, using the first: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:57 cinder/compute/instance_types.py:65
+msgid "create arguments must be positive integers"
+msgstr ""
+
+#: cinder/compute/instance_types.py:76 cinder/volume/volume_types.py:41
+#, python-format
+msgid "DB error: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:86
+#, python-format
+msgid "Instance type %s not found for deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:138
+#, python-format
+msgid "check_instance_lock: decorating: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:140
+#, python-format
+msgid ""
+"check_instance_lock: arguments: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+msgstr ""
+
+#: cinder/compute/manager.py:144
+#, python-format
+msgid "check_instance_lock: locked: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:146
+#, python-format
+msgid "check_instance_lock: admin: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:151
+#, python-format
+msgid "check_instance_lock: executing: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:155
+#, python-format
+msgid "check_instance_lock: not executing |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:201
+#, python-format
+msgid "Unable to load the virtualization driver: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:223
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s has been destroyed from under us while trying "
+"to set it to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:240
+#, python-format
+msgid "Current state is %(drv_state)s, state in DB is %(db_state)s."
+msgstr ""
+
+#: cinder/compute/manager.py:245
+msgid "Rebooting instance after cinder-compute restart."
+msgstr ""
+
+#: cinder/compute/manager.py:255
+msgid "Hypervisor driver does not support firewall rules"
+msgstr ""
+
+#: cinder/compute/manager.py:260
+msgid "Checking state"
+msgstr ""
+
+#: cinder/compute/manager.py:329
+#, python-format
+msgid "Setting up bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:400
+#, python-format
+msgid "Instance %s already deleted from database. Attempting forceful vm deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:406
+#, python-format
+msgid "Exception encountered while terminating the instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:444
+#, python-format
+msgid "Instance %s not found."
+msgstr ""
+
+#: cinder/compute/manager.py:480
+msgid "Instance has already been created"
+msgstr ""
+
+#: cinder/compute/manager.py:523
+#, python-format
+msgid ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:528
+#, python-format
+msgid ""
+"Image '%(image_id)s' size %(size_bytes)d exceeded instance_type allowed "
+"size %(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:538
+msgid "Starting instance..."
+msgstr ""
+
+#: cinder/compute/manager.py:548
+msgid "Skipping network allocation for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:561
+msgid "Instance failed network setup"
+msgstr ""
+
+#: cinder/compute/manager.py:565
+#, python-format
+msgid "Instance network_info: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:578
+msgid "Instance failed block device setup"
+msgstr ""
+
+#: cinder/compute/manager.py:594
+msgid "Instance failed to spawn"
+msgstr ""
+
+#: cinder/compute/manager.py:615
+msgid "Deallocating network for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:672
+#, python-format
+msgid "%(action_str)s instance"
+msgstr ""
+
+#: cinder/compute/manager.py:699
+#, python-format
+msgid "Ignoring DiskNotFound: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:708
+#, python-format
+msgid "terminating bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:742 cinder/compute/manager.py:1328
+#: cinder/compute/manager.py:1416 cinder/compute/manager.py:2501
+#, python-format
+msgid "%s. Setting instance vm_state to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:811
+#, python-format
+msgid ""
+"Cannot rebuild instance [%(instance_uuid)s], because the given image does"
+" not exist."
+msgstr ""
+
+#: cinder/compute/manager.py:816
+#, python-format
+msgid "Cannot rebuild instance [%(instance_uuid)s]: %(exc)s"
+msgstr ""
+
+#: cinder/compute/manager.py:823
+#, python-format
+msgid "Rebuilding instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:876
+#, python-format
+msgid "Rebooting instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:891
+#, python-format
+msgid ""
+"trying to reboot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:933
+#, python-format
+msgid "instance %s: snapshotting"
+msgstr ""
+
+#: cinder/compute/manager.py:939
+#, python-format
+msgid ""
+"trying to snapshot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:995
+#, python-format
+msgid "Found %(num_images)d images (rotation: %(rotation)d)"
+msgstr ""
+
+#: cinder/compute/manager.py:1001
+#, python-format
+msgid "Rotating out %d backups"
+msgstr ""
+
+#: cinder/compute/manager.py:1005
+#, python-format
+msgid "Deleting image %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1035
+#, python-format
+msgid "Failed to set admin password. Instance %s is not running"
+msgstr ""
+
+#: cinder/compute/manager.py:1041
+#, python-format
+msgid "Instance %s: Root password set"
+msgstr ""
+
+#: cinder/compute/manager.py:1050
+msgid "set_admin_password is not implemented by this driver."
+msgstr ""
+
+#: cinder/compute/manager.py:1064
+msgid "Error setting admin password"
+msgstr ""
+
+#: cinder/compute/manager.py:1079
+#, python-format
+msgid ""
+"trying to inject a file into a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1084
+#, python-format
+msgid "instance %(instance_uuid)s: injecting file to %(path)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1098
+#, python-format
+msgid ""
+"trying to update agent on a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1103
+#, python-format
+msgid "instance %(instance_uuid)s: updating agent to %(url)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1116
+#, python-format
+msgid "instance %s: rescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1141
+#, python-format
+msgid "instance %s: unrescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1270
+msgid "destination same as source!"
+msgstr ""
+
+#: cinder/compute/manager.py:1287
+#, python-format
+msgid "instance %s: migrating"
+msgstr ""
+
+#: cinder/compute/manager.py:1471
+#, python-format
+msgid "instance %s: pausing"
+msgstr ""
+
+#: cinder/compute/manager.py:1489
+#, python-format
+msgid "instance %s: unpausing"
+msgstr ""
+
+#: cinder/compute/manager.py:1525
+#, python-format
+msgid "instance %s: retrieving diagnostics"
+msgstr ""
+
+#: cinder/compute/manager.py:1534
+#, python-format
+msgid "instance %s: suspending"
+msgstr ""
+
+#: cinder/compute/manager.py:1556
+#, python-format
+msgid "instance %s: resuming"
+msgstr ""
+
+#: cinder/compute/manager.py:1579
+#, python-format
+msgid "instance %s: locking"
+msgstr ""
+
+#: cinder/compute/manager.py:1588
+#, python-format
+msgid "instance %s: unlocking"
+msgstr ""
+
+#: cinder/compute/manager.py:1596
+#, python-format
+msgid "instance %s: getting locked state"
+msgstr ""
+
+#: cinder/compute/manager.py:1606
+#, python-format
+msgid "instance %s: reset network"
+msgstr ""
+
+#: cinder/compute/manager.py:1614
+#, python-format
+msgid "instance %s: inject network info"
+msgstr ""
+
+#: cinder/compute/manager.py:1618
+#, python-format
+msgid "network_info to inject: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:1655
+#, python-format
+msgid "instance %s: getting vnc console"
+msgstr ""
+
+#: cinder/compute/manager.py:1685
+#, python-format
+msgid "Booting with volume %(volume_id)s at %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1703
+#, fuzzy, python-format
+msgid ""
+"instance %(instance_uuid)s: attaching volume %(volume_id)s to "
+"%(mountpoint)s"
+msgstr ""
+"Konzole pro instanci %(instance_id)s v zásobě %(pool_id)s nemohla být "
+"nalezena."
+
+#: cinder/compute/manager.py:1705
+#, python-format
+msgid "Attaching volume %(volume_id)s to %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1714
+#, fuzzy, python-format
+msgid "instance %(instance_uuid)s: attach failed %(mountpoint)s, removing"
+msgstr "Instance %(instance_id)s není v nouzovém režimu."
+
+#: cinder/compute/manager.py:1724
+#, python-format
+msgid "Attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1752
+#, python-format
+msgid "Detach volume %(volume_id)s from mountpoint %(mp)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1756
+#, python-format
+msgid "Detaching volume from unknown instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1822
+#, python-format
+msgid ""
+"Creating tmpfile %s to notify to other compute nodes that they should "
+"mount the same storage."
+msgstr ""
+
+#: cinder/compute/manager.py:1884
+msgid "Instance has no volume."
+msgstr ""
+
+#: cinder/compute/manager.py:1916
+#, python-format
+msgid "plug_vifs() failed %(cnt)d.Retry up to %(max_retry)d for %(hostname)s."
+msgstr ""
+
+#: cinder/compute/manager.py:1973
+#, python-format
+msgid "Pre live migration failed at  %(dest)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2000
+msgid "post_live_migration() is started.."
+msgstr ""
+
+#: cinder/compute/manager.py:2030
+msgid "No floating_ip found"
+msgstr ""
+
+#: cinder/compute/manager.py:2038
+msgid "No floating_ip found."
+msgstr ""
+
+#: cinder/compute/manager.py:2040
+#, python-format
+msgid ""
+"Live migration: Unexpected error: cannot inherit floating ip.\n"
+"%(e)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2073
+#, python-format
+msgid "Migrating instance to %(dest)s finished successfully."
+msgstr ""
+
+#: cinder/compute/manager.py:2075
+msgid ""
+"You may see the error \"libvirt: QEMU error: Domain not found: no domain "
+"with matching name.\" This error can be safely ignored."
+msgstr ""
+
+#: cinder/compute/manager.py:2090
+msgid "Post operation of migraton started"
+msgstr ""
+
+#: cinder/compute/manager.py:2226
+#, python-format
+msgid "Updated the info_cache for instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:2255
+msgid "Updating bandwidth usage cache"
+msgstr ""
+
+#: cinder/compute/manager.py:2277
+msgid "Updating host status"
+msgstr ""
+
+#: cinder/compute/manager.py:2305
+#, python-format
+msgid ""
+"Found %(num_db_instances)s in the database and %(num_vm_instances)s on "
+"the hypervisor."
+msgstr ""
+
+#: cinder/compute/manager.py:2331
+#, python-format
+msgid ""
+"During the sync_power process the instance %(uuid)s has moved from host "
+"%(src)s to host %(dst)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2344
+#, python-format
+msgid ""
+"Instance %s is in the process of migrating to this host. Wait next "
+"sync_power cycle before setting power state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2350
+msgid ""
+"Instance found in database but not known by hypervisor. Setting power "
+"state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2380
+msgid "FLAGS.reclaim_instance_interval <= 0, skipping..."
+msgstr ""
+
+#: cinder/compute/manager.py:2392
+msgid "Reclaiming deleted instance"
+msgstr ""
+
+#: cinder/compute/manager.py:2458
+#, python-format
+msgid ""
+"Detected instance with name label '%(name)s' which is marked as DELETED "
+"but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2465
+#, python-format
+msgid ""
+"Destroying instance with name label '%(name)s' which is marked as DELETED"
+" but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2472
+#, python-format
+msgid "Unrecognized value '%(action)s' for FLAGS.running_deleted_instance_action"
+msgstr ""
+
+#: cinder/compute/manager.py:2542
+#, fuzzy, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: unrecoverable state during operation on "
+"%(host)s"
+msgstr "Agregát %(aggregate_id)s již má hostitele %(host)s."
+
+#: cinder/compute/utils.py:142
+msgid "v4 subnets are required for legacy nw_info"
+msgstr ""
+
+#: cinder/console/manager.py:77 cinder/console/vmrc_manager.py:70
+msgid "Adding console"
+msgstr ""
+
+#: cinder/console/manager.py:97
+#, python-format
+msgid "Tried to remove non-existant console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:122
+#, python-format
+msgid "Tried to remove non-existent console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:125
+#, python-format
+msgid "Removing console %(console_id)s."
+msgstr ""
+
+#: cinder/console/xvp.py:98
+msgid "Rebuilding xvp conf"
+msgstr ""
+
+#: cinder/console/xvp.py:116
+#, python-format
+msgid "Re-wrote %s"
+msgstr ""
+
+#: cinder/console/xvp.py:121
+msgid "Stopping xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:134
+msgid "Starting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:141
+#, python-format
+msgid "Error starting xvp: %s"
+msgstr ""
+
+#: cinder/console/xvp.py:144
+msgid "Restarting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:146
+msgid "xvp not running..."
+msgstr ""
+
+#: cinder/consoleauth/manager.py:63
+#, python-format
+msgid "Deleting Expired Token: (%s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:75
+#, python-format
+msgid "Received Token: %(token)s, %(token_dict)s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:79
+#, python-format
+msgid "Checking Token: %(token)s, %(token_valid)s)"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:57
+msgid "Use of empty request context is deprecated"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:198
+#, python-format
+msgid "Unrecognized read_deleted value '%s'"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:516 cinder/db/sqlalchemy/api.py:551
+#, python-format
+msgid "No ComputeNode for %(host)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4019 cinder/db/sqlalchemy/api.py:4045
+#, python-format
+msgid "No backend config with id %(sm_backend_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4103
+#, python-format
+msgid "No sm_flavor called %(sm_flavor)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4147
+#, python-format
+msgid "No sm_volume with id %(volume_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:66
+msgid "python-migrate is not installed. Exiting."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:78
+msgid "version should be an integer"
+msgstr ""
+
+#: cinder/db/sqlalchemy/session.py:137
+#, python-format
+msgid "SQL connection failed. %s attempts left."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:48
+msgid "interface column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:80
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:54
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:48
+#, python-format
+msgid "Table |%s| not created!"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:87
+msgid "VIF column not added to fixed_ips table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:97
+#, python-format
+msgid "join list for moving mac_addresses |%s|"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:39
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:60
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:99
+msgid "foreign key constraint couldn't be added"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:58
+msgid "foreign key constraint couldn't be dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py:34
+msgid "priority column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:41
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:42
+#: cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py:56
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:68
+msgid "foreign key constraint couldn't be removed"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py:34
+msgid "progress column not added to instances table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py:97
+#, python-format
+msgid ""
+"Could not cast flavorid to integer: %s. Set flavorid to an integer-like "
+"string to downgrade."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:69
+msgid "instance_info_caches tables not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py:41
+msgid "progress column not added to compute_nodes table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:76
+msgid "dns_domains table not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:60
+msgid "quota_classes table not dropped"
+msgstr ""
+
+#: cinder/image/glance.py:147
+msgid "Connection error contacting glance server, retrying"
+msgstr ""
+
+#: cinder/image/glance.py:153 cinder/network/quantum/melange_connection.py:104
+msgid "Maximum attempts reached"
+msgstr ""
+
+#: cinder/image/glance.py:278
+#, python-format
+msgid "Creating image in Glance. Metadata passed in %s"
+msgstr ""
+
+#: cinder/image/glance.py:281
+#, python-format
+msgid "Metadata after formatting for Glance %s"
+msgstr ""
+
+#: cinder/image/glance.py:289
+#, python-format
+msgid "Metadata returned from Glance formatted for Base %s"
+msgstr ""
+
+#: cinder/image/glance.py:331 cinder/image/glance.py:335
+msgid "Not the image owner"
+msgstr ""
+
+#: cinder/image/glance.py:410
+#, python-format
+msgid "%(timestamp)s does not follow any of the signatures: %(iso_formats)s"
+msgstr ""
+
+#: cinder/image/s3.py:309
+#, python-format
+msgid "Failed to download %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:328
+#, python-format
+msgid "Failed to decrypt %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:340
+#, python-format
+msgid "Failed to untar %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:353
+#, python-format
+msgid "Failed to upload %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:379
+#, python-format
+msgid "Failed to decrypt private key: %s"
+msgstr ""
+
+#: cinder/image/s3.py:387
+#, python-format
+msgid "Failed to decrypt initialization vector: %s"
+msgstr ""
+
+#: cinder/image/s3.py:398
+#, python-format
+msgid "Failed to decrypt image file %(image_file)s: %(err)s"
+msgstr ""
+
+#: cinder/image/s3.py:410
+msgid "Unsafe filenames in image"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:38 cinder/ipv6/rfc2462.py:34
+#, python-format
+msgid "Bad mac for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:40 cinder/ipv6/rfc2462.py:36
+#, python-format
+msgid "Bad prefix for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:42
+#, python-format
+msgid "Bad project_id for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/network/ldapdns.py:321
+msgid "This driver only supports type 'a' entries."
+msgstr ""
+
+#: cinder/network/linux_net.py:166
+#, python-format
+msgid "Attempted to remove chain %s which does not exist"
+msgstr ""
+
+#: cinder/network/linux_net.py:192
+#, python-format
+msgid "Unknown chain: %r"
+msgstr ""
+
+#: cinder/network/linux_net.py:215
+#, python-format
+msgid ""
+"Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r "
+"%(top)r"
+msgstr ""
+
+#: cinder/network/linux_net.py:335
+msgid "IPTablesManager.apply completed with success"
+msgstr ""
+
+#: cinder/network/linux_net.py:694
+#, python-format
+msgid "Hupping dnsmasq threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:696
+#, python-format
+msgid "Pid %d is stale, relaunching dnsmasq"
+msgstr ""
+
+#: cinder/network/linux_net.py:756
+#, python-format
+msgid "killing radvd threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:758
+#, python-format
+msgid "Pid %d is stale, relaunching radvd"
+msgstr ""
+
+#: cinder/network/linux_net.py:967
+#, python-format
+msgid "Starting VLAN inteface %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:999
+#, python-format
+msgid "Starting Bridge interface for %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1142
+#, fuzzy, python-format
+msgid "Starting bridge %s "
+msgstr "Zrušení registrace obrazu %s"
+
+#: cinder/network/linux_net.py:1149
+#, fuzzy, python-format
+msgid "Done starting bridge %s"
+msgstr "Zrušení registrace obrazu %s"
+
+#: cinder/network/linux_net.py:1167
+#, python-format
+msgid "Failed unplugging gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/linux_net.py:1170
+#, python-format
+msgid "Unplugged gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/manager.py:291
+#, fuzzy, python-format
+msgid "Fixed ip %(fixed_ip_id)s not found"
+msgstr "Certifikát %(certificate_id)s nenalezen."
+
+#: cinder/network/manager.py:300 cinder/network/manager.py:496
+#, python-format
+msgid "Interface %(interface)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:315
+#, python-format
+msgid "floating IP allocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:353
+#, python-format
+msgid "floating IP deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:386
+#, python-format
+msgid "Address |%(address)s| is not allocated"
+msgstr ""
+
+#: cinder/network/manager.py:390
+#, python-format
+msgid "Address |%(address)s| is not allocated to your project |%(project)s|"
+msgstr ""
+
+#: cinder/network/manager.py:402
+#, python-format
+msgid "Quota exceeded for %s, tried to allocate address"
+msgstr ""
+
+#: cinder/network/manager.py:614
+#, python-format
+msgid ""
+"Database inconsistency: DNS domain |%s| is registered in the Cinder db but "
+"not visible to either the floating or instance DNS driver. It will be "
+"ignored."
+msgstr ""
+
+#: cinder/network/manager.py:660
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing zone to |%(av_zone)s|."
+msgstr ""
+
+#: cinder/network/manager.py:670
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing project to |%(project)s|."
+msgstr ""
+
+#: cinder/network/manager.py:778
+#, python-format
+msgid "Disassociated %s stale fixed ip(s)"
+msgstr ""
+
+#: cinder/network/manager.py:782
+msgid "setting network host"
+msgstr ""
+
+#: cinder/network/manager.py:896
+#, python-format
+msgid "network allocations for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:901
+#, python-format
+msgid "networks retrieved for instance |%(instance_id)s|: |%(networks)s|"
+msgstr ""
+
+#: cinder/network/manager.py:930
+#, python-format
+msgid "network deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:1152
+#, python-format
+msgid ""
+"instance-dns-zone is |%(domain)s|, which is in availability zone "
+"|%(zone)s|. Instance |%(instance)s| is in zone |%(zone2)s|. No DNS record"
+" will be created."
+msgstr ""
+
+#: cinder/network/manager.py:1227
+#, python-format
+msgid "Unable to release %s because vif doesn't exist."
+msgstr ""
+
+#: cinder/network/manager.py:1244
+#, python-format
+msgid "Leased IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1248
+#, python-format
+msgid "IP %s leased that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1256
+#, python-format
+msgid "IP |%s| leased that isn't allocated"
+msgstr ""
+
+#: cinder/network/manager.py:1261
+#, python-format
+msgid "Released IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1265
+#, python-format
+msgid "IP %s released that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1268
+#, python-format
+msgid "IP %s released that was not leased"
+msgstr ""
+
+#: cinder/network/manager.py:1331
+msgid "cidr already in use"
+msgstr ""
+
+#: cinder/network/manager.py:1334
+#, python-format
+msgid "requested cidr (%(cidr)s) conflicts with existing supernet (%(super)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1345
+#, python-format
+msgid ""
+"requested cidr (%(cidr)s) conflicts with existing smaller cidr "
+"(%(smaller)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1404
+msgid "Network already exists!"
+msgstr ""
+
+#: cinder/network/manager.py:1423
+#, python-format
+msgid "Network must be disassociated from project %s before delete"
+msgstr ""
+
+#: cinder/network/manager.py:1832
+msgid ""
+"The sum between the number of networks and the vlan start cannot be "
+"greater than 4094"
+msgstr ""
+
+#: cinder/network/manager.py:1839
+#, python-format
+msgid ""
+"The network range is not big enough to fit %(num_networks)s. Network size"
+" is %(network_size)s"
+msgstr ""
+
+#: cinder/network/minidns.py:65
+msgid "This driver only supports type 'a'"
+msgstr ""
+
+#: cinder/network/quantum/client.py:154
+msgid "Tenant ID not set"
+msgstr ""
+
+#: cinder/network/quantum/client.py:180
+#, python-format
+msgid "Quantum Client Request: %(method)s %(action)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:196
+#, python-format
+msgid "Quantum entity not found: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:206
+#, python-format
+msgid "Server %(status_code)s error: %(data)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:210
+#, python-format
+msgid "Unable to connect to server. Got error: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:228
+#, python-format
+msgid "unable to deserialize object of type = '%s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:162
+msgid "QuantumManager does not use 'multi_host' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:166
+msgid "QuantumManager requires that only one network is created per call"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:176
+msgid "QuantumManager does not use 'vlan_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:182
+msgid "QuantumManager does not use 'vpn_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:186
+msgid "QuantumManager does not use 'bridge' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:190
+msgid "QuantumManager does not use 'bridge_interface' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:195
+msgid "QuantumManager requires a valid (.1) gateway address."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:204
+#, python-format
+msgid ""
+"Unable to find existing quantum network for tenant '%(q_tenant_id)s' with"
+" net-id '%(quantum_net_id)s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:301
+#, python-format
+msgid "network allocations for instance %s"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:588
+#, python-format
+msgid ""
+"port deallocation failed for instance: |%(instance_id)s|, port_id: "
+"|%(port_id)s|"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:606
+#, python-format
+msgid ""
+"ipam deallocation failed for instance: |%(instance_id)s|, vif_uuid: "
+"|%(vif_uuid)s|"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:96
+#, python-format
+msgid "Server returned error: %s"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:98
+msgid "Connection error contacting melange service, retrying"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:108
+#, python-format
+msgid ""
+"allocate IP on network |%(network_id)s| belonging to "
+"|%(network_tenant_id)s| to this vif |%(vif_id)s| with mac "
+"|%(mac_address)s| belonging to |%(project_id)s| "
+msgstr ""
+
+#: cinder/network/quantum/melange_ipam_lib.py:133
+msgid "get_project_and_global_net_ids must be called with a non-null project_id"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:75
+msgid "Error creating network entry"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:90
+#, python-format
+msgid "No network with net_id = %s"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:221
+#, fuzzy, python-format
+msgid "No fixed IPs to deallocate for vif %s"
+msgstr "K instanci nejsou přidruženy žádné pevné ip"
+
+#: cinder/network/quantum/quantum_connection.py:99
+#, python-format
+msgid "Connecting interface %(interface_id)s to net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:113
+#, python-format
+msgid "Deleting port %(port_id)s on net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/notifier/api.py:115
+#, python-format
+msgid "%s not in valid priorities"
+msgstr ""
+
+#: cinder/notifier/api.py:130
+#, python-format
+msgid ""
+"Problem '%(e)s' attempting to send to notification system. "
+"Payload=%(payload)s"
+msgstr ""
+
+#: cinder/notifier/list_notifier.py:65
+#, python-format
+msgid "Problem '%(e)s' attempting to send to notification driver %(driver)s."
+msgstr ""
+
+#: cinder/notifier/rabbit_notifier.py:46
+#, python-format
+msgid "Could not send notification to %(topic)s. Payload=%(message)s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:146
+#, python-format
+msgid "Returning exception %s to caller"
+msgstr "Volajícímu je vrácena výjimka: %s"
+
+#: cinder/rpc/amqp.py:188
+#, python-format
+msgid "unpacked context: %s"
+msgstr "rozbalený kontext: %s"
+
+#: cinder/rpc/amqp.py:231
+#, python-format
+msgid "received %s"
+msgstr "obdrženo: %s"
+
+#: cinder/rpc/amqp.py:236
+#, python-format
+msgid "no method for message: %s"
+msgstr "pro zprávu není metoda: %s"
+
+#: cinder/rpc/amqp.py:237
+#, python-format
+msgid "No method for message: %s"
+msgstr "Pro zprávu není metoda: %s"
+
+#: cinder/rpc/amqp.py:321
+#, python-format
+msgid "Making asynchronous call on %s ..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:324
+#, python-format
+msgid "MSG_ID is %s"
+msgstr "MSG_ID je %s"
+
+#: cinder/rpc/amqp.py:346
+#, python-format
+msgid "Making asynchronous cast on %s..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:354
+msgid "Making asynchronous fanout cast..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:379
+#, python-format
+msgid "Sending notification on %s..."
+msgstr ""
+
+#: cinder/rpc/common.py:54
+#, python-format
+msgid ""
+"Remote error: %(exc_type)s %(value)s\n"
+"%(traceback)s."
+msgstr ""
+
+#: cinder/rpc/common.py:71
+msgid "Timeout while waiting on RPC response."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:111
+msgid "Failed to process message... skipping it."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:407
+#, python-format
+msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:430
+#, python-format
+msgid "Connected to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:466
+#, python-format
+msgid ""
+"Unable to connect to AMQP server on %(hostname)s:%(port)d after "
+"%(max_retries)d tries: %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:482
+#, python-format
+msgid ""
+"AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying "
+"again in %(sleep_time)d seconds."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:533 cinder/rpc/impl_qpid.py:385
+#, python-format
+msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:551 cinder/rpc/impl_qpid.py:400
+#, python-format
+msgid "Timed out waiting for RPC response: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:555 cinder/rpc/impl_qpid.py:404
+#, python-format
+msgid "Failed to consume message from queue: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:589 cinder/rpc/impl_qpid.py:434
+#, python-format
+msgid "Failed to publish message to topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:341
+#, python-format
+msgid "Unable to connect to AMQP server: %s "
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:346
+#, python-format
+msgid "Connected to AMQP server on %s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:354
+msgid "Re-established AMQP queues"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:412
+msgid "Error processing message.  Skipping it."
+msgstr ""
+
+#: cinder/scheduler/chance.py:47 cinder/scheduler/simple.py:91
+#: cinder/scheduler/simple.py:143
+msgid "Is the appropriate service running?"
+msgstr ""
+
+#: cinder/scheduler/chance.py:52
+msgid "Could not find another compute"
+msgstr ""
+
+#: cinder/scheduler/driver.py:63
+#, python-format
+msgid "Casted '%(method)s' to volume '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:80
+#, python-format
+msgid "Casted '%(method)s' to compute '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:89
+#, python-format
+msgid "Casted '%(method)s' to network '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:107
+#, python-format
+msgid "Casted '%(method)s' to %(topic)s '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:181
+msgid "Must implement a fallback schedule"
+msgstr ""
+
+#: cinder/scheduler/driver.py:185
+msgid "Driver must implement schedule_prep_resize"
+msgstr ""
+
+#: cinder/scheduler/driver.py:190
+msgid "Driver must implement schedule_run_instance"
+msgstr ""
+
+#: cinder/scheduler/driver.py:325
+msgid "Block migration can not be used with shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:330
+msgid "Live migration can not be used without shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:367 cinder/scheduler/driver.py:457
+#, python-format
+msgid "host %(dest)s is not compatible with original host %(src)s."
+msgstr ""
+
+#: cinder/scheduler/driver.py:416
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"memory(host:%(avail)s <= instance:%(mem_inst)s)"
+msgstr ""
+
+#: cinder/scheduler/driver.py:472
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"disk(host:%(available)s <= instance:%(necessary)s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:51
+#, python-format
+msgid "No host selection for %s defined."
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:64
+#, python-format
+msgid "Attempting to build %(num_instances)d instance(s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:157
+msgid "Scheduler only understands Compute nodes (for now)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:199
+#, python-format
+msgid "Filtered %(hosts)s"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:209
+#, python-format
+msgid "Weighted %(weighted_host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:144
+#, python-format
+msgid "Host filter fails for ignored host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:151
+#, python-format
+msgid "Host filter fails for non-forced host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:157
+#, python-format
+msgid "Host filter function %(func)s failed for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:163
+#, python-format
+msgid "Host filter passes for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:272
+#, python-format
+msgid "Received %(service_name)s service update from %(host)s."
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:313
+msgid "host_manager only implemented for 'compute'"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:323
+#, python-format
+msgid "No service for compute ID %s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:85
+#, python-format
+msgid ""
+"Driver Method %(driver_method_name)s missing: %(e)s. Reverting to "
+"schedule()"
+msgstr ""
+
+#: cinder/scheduler/manager.py:150
+#, python-format
+msgid "Failed to schedule_%(method)s: %(ex)s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:159
+#, fuzzy, python-format
+msgid "Setting instance %(instance_uuid)s to %(state)s state."
+msgstr "Nastavování hostitele %(host)s na %(state)s."
+
+#: cinder/scheduler/scheduler_options.py:66
+#, python-format
+msgid "Could not stat scheduler options file %(filename)s: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:75
+#, python-format
+msgid "Could not decode scheduler options: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/simple.py:87
+msgid "Not enough allocatable CPU cores remaining"
+msgstr ""
+
+#: cinder/scheduler/simple.py:137
+msgid "Not enough allocatable volume gigabytes remaining"
+msgstr ""
+
+#: cinder/scheduler/filters/core_filter.py:45
+msgid "VCPUs not set; assuming CPU collection broken"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:72
+#, python-format
+msgid "Faking execution of cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:80
+#, python-format
+msgid "Faked command matched %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:96
+#, python-format
+msgid "Faked command raised an exception %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:101
+#, python-format
+msgid "Reply to faked command is stdout='%(stdout)s' stderr='%(stderr)s'"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:784
+msgid "Please extend mock libvirt module to support flags"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:790
+msgid "Please extend fake libvirt module to support this auth method"
+msgstr ""
+
+#: cinder/tests/test_compute.py:365 cinder/tests/test_compute.py:1419
+#, python-format
+msgid "Running instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:371
+#, python-format
+msgid "After terminating instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:589
+msgid "Internal error"
+msgstr ""
+
+#: cinder/tests/test_compute.py:1430
+#, python-format
+msgid "After force-killing instances: %s"
+msgstr ""
+
+#: cinder/tests/test_misc.py:92
+#, python-format
+msgid ""
+"The following migrations are missing a downgrade:\n"
+"\t%s"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:169
+msgid "id"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:170
+msgid "IPv4"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:171
+msgid "IPv6"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:172
+msgid "start address"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:173
+msgid "DNS1"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:174
+msgid "DNS2"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:175
+msgid "VlanID"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:176
+msgid "project"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:177
+msgid "uuid"
+msgstr ""
+
+#: cinder/tests/test_volume.py:216
+#, python-format
+msgid "Target %s allocated"
+msgstr ""
+
+#: cinder/tests/test_volume.py:468
+#, python-format
+msgid "Cannot confirm exported volume id:%s."
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:58
+#, python-format
+msgid "Given data: %s"
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:59
+#, python-format
+msgid "Result data: %s"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:626
+#, python-format
+msgid "Creating files in %s to simulate guest agent"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:637
+#, python-format
+msgid "Removing simulated guest agent files in %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/test_servers.py:2144
+#, fuzzy, python-format
+msgid "Quota exceeded: code=%(code)s"
+msgstr "Kvóta překročena"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:57
+#, python-format
+msgid "_create: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:66
+#, python-format
+msgid "_delete: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:75
+#, python-format
+msgid "_get: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:85
+#, python-format
+msgid "_get_all: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:125
+#, python-format
+msgid "test_snapshot_create: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:134
+#, python-format
+msgid "test_snapshot_create: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:156
+#, python-format
+msgid "test_snapshot_create_force: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:165
+#, python-format
+msgid "test_snapshot_create_force: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:205
+#, python-format
+msgid "test_snapshot_show: resp=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:231
+#, python-format
+msgid "test_snapshot_detail: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/integrated/test_login.py:31
+#, python-format
+msgid "flavor: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:38
+#, python-format
+msgid ""
+"%(message)s\n"
+"Status Code: %(_status)s\n"
+"Body: %(_body)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:47
+msgid "Authentication error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:55
+msgid "Authorization error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:63
+msgid "Item not found"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:105
+#, python-format
+msgid "Doing %(method)s on %(relative_url)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:107
+#, python-format
+msgid "Body: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:125
+#, python-format
+msgid "%(auth_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:151
+#, python-format
+msgid "%(relative_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:161
+msgid "Unexpected status code"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:168
+#, python-format
+msgid "Decoding JSON: %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:133
+#, python-format
+msgid "Nested received %(queue)s, %(value)s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:142
+#, python-format
+msgid "Nested return %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:160
+msgid "RPC backend does not support timeouts"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:227 cinder/tests/rpc/common.py:233
+#, python-format
+msgid "Received %s"
+msgstr ""
+
+#: cinder/virt/connection.py:85
+msgid "Failed to open connection to the hypervisor"
+msgstr ""
+
+#: cinder/virt/fake.py:270 cinder/virt/xenapi_conn.py:396
+#: cinder/virt/baremetal/proxy.py:716 cinder/virt/libvirt/connection.py:2045
+#, python-format
+msgid "Compute_service record created for %s "
+msgstr ""
+
+#: cinder/virt/fake.py:273 cinder/virt/xenapi_conn.py:399
+#: cinder/virt/baremetal/proxy.py:720 cinder/virt/libvirt/connection.py:2048
+#, python-format
+msgid "Compute_service record updated for %s "
+msgstr ""
+
+#: cinder/virt/firewall.py:130
+#, python-format
+msgid "Attempted to unfilter instance %s which is not filtered"
+msgstr ""
+
+#: cinder/virt/firewall.py:137
+#, python-format
+msgid "Filters added to instance %s"
+msgstr ""
+
+#: cinder/virt/firewall.py:139
+msgid "Provider Firewall Rules refreshed"
+msgstr ""
+
+#: cinder/virt/firewall.py:291
+#, python-format
+msgid "Adding security group rule: %r"
+msgstr ""
+
+#: cinder/virt/firewall.py:403 cinder/virt/xenapi/firewall.py:87
+#, python-format
+msgid "Adding provider rule: %s"
+msgstr ""
+
+#: cinder/virt/images.py:86
+msgid "'qemu-img info' parsing failed."
+msgstr ""
+
+#: cinder/virt/images.py:92
+#, python-format
+msgid "fmt=%(fmt)s backed by: %(backing_file)s"
+msgstr ""
+
+#: cinder/virt/images.py:104
+#, python-format
+msgid "Converted to raw, but format is now %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:105
+msgid ""
+"Must specify vmwareapi_host_ip,vmwareapi_host_username and "
+"vmwareapi_host_password to useconnection_type=vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:276
+#, python-format
+msgid "In vmwareapi:_create_session, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:359
+#, python-format
+msgid "In vmwareapi:_call_method, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:398
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: success"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:404
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: error %(error_info)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:409
+#, python-format
+msgid "In vmwareapi:_poll_task, Got this error %s"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:140
+msgid ""
+"Must specify xenapi_connection_url, xenapi_connection_username "
+"(optionally), and xenapi_connection_password to use "
+"connection_type=xenapi"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:329 cinder/virt/libvirt/connection.py:472
+msgid "Could not determine iscsi initiator name"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:460
+msgid "Host startup on XenServer is not supported."
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:489
+msgid "Unable to log in to XenAPI (is the Dom0 disk full?)"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:527
+msgid "Host is member of a pool, but DB says otherwise"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:599 cinder/virt/xenapi_conn.py:612
+#, python-format
+msgid "Got exception: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:93
+msgid "No domains exist."
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:95
+#, python-format
+msgid "============= initial domains =========== : %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:99
+msgid "Building domain: to be removed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:103
+msgid "Not running domain: remove"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:111
+msgid "domain running on an unknown node: discarded"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:127
+#, python-format
+msgid "No such domain (%s)"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:134
+#, python-format
+msgid "Failed power down Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:143
+msgid "deactivate -> activate fails"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:153
+msgid "destroy_domain: no such domain"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:154
+#, python-format
+msgid "No such domain %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:161
+#, python-format
+msgid "Domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:163
+#, python-format
+msgid "Nodes: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:166
+#, python-format
+msgid "After storing domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:169
+msgid "deactivation/removing domain failed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:176
+msgid "===== Domain is being created ====="
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:179
+msgid "Same domain name already exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:181
+msgid "create_domain: before get_idle_node"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:198
+#, python-format
+msgid "Created new domain: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:213
+#, python-format
+msgid "Failed to boot Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:222
+msgid "No such domain exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:226
+#, python-format
+msgid "change_domain_state: to new state %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:233
+#, python-format
+msgid "Stored fake domains to the file: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:244
+msgid "domain does not exist"
+msgstr ""
+
+#: cinder/virt/baremetal/nodes.py:42
+#, python-format
+msgid "Unknown baremetal driver %(d)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:148
+#, python-format
+msgid "Error encountered when destroying instance '%(name)s': %(ex)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:162
+#, python-format
+msgid "instance %(instance_name)s: deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:189
+#, python-format
+msgid "instance %s: rebooted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:192
+msgid "_wait_for_reboot failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:222
+#, python-format
+msgid "instance %s: rescued"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:225
+msgid "_wait_for_rescue failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:242
+msgid "<============= spawn of baremetal =============>"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:255
+#, python-format
+msgid "instance %s: is building"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:260
+msgid "Key is injected but instance is not running yet"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:265
+#, python-format
+msgid "instance %s: booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:268
+#, python-format
+msgid "~~~~~~ current state = %s ~~~~~~"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:269
+#, python-format
+msgid "instance %s spawned successfully"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:272
+#, python-format
+msgid "instance %s:not booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:274
+msgid "Bremetal assignment is overcommitted."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:354
+#, python-format
+msgid "instance %s: Creating image"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:473
+#, python-format
+msgid "instance %(inst_name)s: injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:484
+#, python-format
+msgid ""
+"instance %(inst_name)s: ignoring error injecting data into image "
+"%(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:529
+#, python-format
+msgid "instance %s: starting toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:531
+#, python-format
+msgid "instance %s: finished toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:574 cinder/virt/libvirt/connection.py:1815
+msgid ""
+"Cannot get the number of cpu, because this function is not implemented "
+"for this platform. This error can be safely ignored for now."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:714
+#, python-format
+msgid "#### RLK: cpu_arch = %s "
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:746
+msgid "Updating!"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:773 cinder/virt/libvirt/connection.py:2609
+#: cinder/virt/xenapi/host.py:129
+msgid "Updating host stats"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:185
+msgid "free_node...."
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:216
+#, python-format
+msgid "deactivate_node is called for node_id = %(id)s node_ip = %(ip)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:221
+msgid "status of node is set to 0"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:232
+msgid "rootfs is already removed"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:264
+msgid "Before ping to the bare-metal node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:275
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is ready"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:279
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is not ready, out_msg=%(out_msg)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:292
+msgid "Noting to do for tilera nodes: vmlinux is in CF"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:316
+msgid "activate_node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:330
+msgid "Node is unknown error state."
+msgstr ""
+
+#: cinder/virt/disk/api.py:165
+msgid "no capable image handler configured"
+msgstr ""
+
+#: cinder/virt/disk/api.py:178
+#, python-format
+msgid "unknown disk image handler: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:189
+msgid "image already mounted"
+msgstr ""
+
+#: cinder/virt/disk/api.py:276 cinder/virt/disk/guestfs.py:64
+#: cinder/virt/disk/guestfs.py:78 cinder/virt/disk/mount.py:100
+#, python-format
+msgid "Failed to mount filesystem: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:291
+#, python-format
+msgid "Failed to remove container: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:441
+#, python-format
+msgid "User %(username)s not found in password file."
+msgstr ""
+
+#: cinder/virt/disk/api.py:457
+#, python-format
+msgid "User %(username)s not found in shadow file."
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:39
+#, python-format
+msgid "unsupported partition: %s"
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:77
+msgid "unknown guestmount error"
+msgstr ""
+
+#: cinder/virt/disk/loop.py:30
+#, python-format
+msgid "Could not attach image to loopback: %s"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:76
+msgid "no partitions found"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:77
+#, python-format
+msgid "Failed to map partitions: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:58
+msgid "nbd unavailable: module not loaded"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:63
+msgid "No free nbd devices"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:81
+#, python-format
+msgid "qemu-nbd error: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:93
+#, python-format
+msgid "nbd device %s did not show up"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:265
+#, python-format
+msgid "Connecting to libvirt: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:286
+msgid "Connection to libvirt broke"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:388
+#, python-format
+msgid "Error from libvirt during destroy. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:400
+#, python-format
+msgid ""
+"Error from libvirt during saved instance removal. Code=%(errcode)s "
+"Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:411
+#, python-format
+msgid "Error from libvirt during undefine. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:423
+msgid "Instance destroyed successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:435
+#, python-format
+msgid "Error from libvirt during unfilter. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:461
+#, python-format
+msgid "Deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:554
+msgid "attaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:567
+msgid "detaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:692
+msgid "Instance soft rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:696
+#, fuzzy
+msgid "Failed to soft reboot instance."
+msgstr "Nelze restartovat instanci"
+
+#: cinder/virt/libvirt/connection.py:725
+msgid "Instance shutdown successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:761 cinder/virt/libvirt/connection.py:905
+msgid "During reboot, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:766
+msgid "Instance rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:867 cinder/virt/xenapi/vmops.py:1358
+#, python-format
+msgid ""
+"Found %(migration_count)d unconfirmed migrations older than "
+"%(confirm_window)d seconds"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:871
+#, python-format
+msgid "Automatically confirming migration %d"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:896
+msgid "Instance is running"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:910
+msgid "Instance spawned successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:926
+#, python-format
+msgid "data: %(data)r, fpath: %(fpath)r"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:978
+#, fuzzy
+msgid "Guest does not have a console available"
+msgstr "Uživatel nemá správcovská oprávnění"
+
+#: cinder/virt/libvirt/connection.py:1020
+#, python-format
+msgid "Path '%(path)s' supports direct I/O"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1024
+#, python-format
+msgid "Path '%(path)s' does not support direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1028 cinder/virt/libvirt/connection.py:1032
+#, python-format
+msgid "Error on '%(path)s' while checking direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1153
+msgid "Creating image"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1339
+#, python-format
+msgid "Injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1349
+#, python-format
+msgid "Ignoring error injecting data into image %(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1381
+#, python-format
+msgid "block_device_list %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1658
+msgid "Starting toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1662
+msgid "Finished toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1679
+#, python-format
+msgid ""
+"Error from libvirt while looking up %(instance_name)s: [Error Code "
+"%(error_code)s] %(ex)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1920
+msgid "libvirt version is too old (does not support getVersion)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1942
+#, python-format
+msgid "'<cpu>' must be 1, but %d\n"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1969
+#, python-format
+msgid "topology (%(topology)s) must have %(ks)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2067
+#, python-format
+msgid ""
+"Instance launched has CPU info:\n"
+"%s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2079
+#, python-format
+msgid ""
+"CPU doesn't have compatibility.\n"
+"\n"
+"%(ret)s\n"
+"\n"
+"Refer to %(u)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2136
+#, python-format
+msgid "Timeout migrating for %s. nwfilter not found."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2352
+#, python-format
+msgid "skipping %(path)s since it looks like volume"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2407
+#, python-format
+msgid "Getting disk size of %(i_name)s: %(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2458
+#, python-format
+msgid "Instance %s: Starting migrate_disk_and_power_off"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2513
+msgid "During wait running, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2518
+msgid "Instance running successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2525
+#, python-format
+msgid "Instance %s: Starting finish_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2565
+#, python-format
+msgid "Instance %s: Starting finish_revert_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:42
+msgid ""
+"Libvirt module could not be loaded. NWFilterFirewall will not work "
+"correctly."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:93
+msgid "Called setup_basic_filtering in nwfilter"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:101
+msgid "Ensuring static filters"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:171
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:217
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) for%(name)s is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:233
+msgid "iptables firewall: Setup Basic Filtering"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:252
+msgid "Attempted to unfilter instance which is not filtered"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:170
+#, python-format
+msgid "%s is a valid instance name"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:173
+#, python-format
+msgid "%s has a disk file"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:175
+#, python-format
+msgid "Instance %(instance)s is backed by %(backing)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:186
+#, python-format
+msgid ""
+"Instance %(instance)s is using a backing file %(backing)s which does not "
+"appear in the image service"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:237
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification failed"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:247
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification skipped, no hash stored"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:266
+#, python-format
+msgid "Cannot remove %(base_file)s, it does not exist"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:278
+#, python-format
+msgid "Base file too young to remove: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:281
+#, python-format
+msgid "Removing base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:288
+#, python-format
+msgid "Failed to remove %(base_file)s, error was %(error)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:299
+#, python-format
+msgid "%(id)s (%(base_file)s): checking"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:318
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): in use: on this node %(local)d local, %(remote)d "
+"on other nodes"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:330
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): warning -- an absent base file is in use! "
+"instances: %(instance_list)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:338
+#, python-format
+msgid "%(id)s (%(base_file)s): in use on (%(remote)d on other nodes)"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:348
+#, python-format
+msgid "%(id)s (%(base_file)s): image is not in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:354
+#, python-format
+msgid "%(id)s (%(base_file)s): image is in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:377
+#, python-format
+msgid "Skipping verification, no base directory at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:381
+msgid "Verify base images"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:388
+#, python-format
+msgid "Image id %(id)s yields fingerprint %(fingerprint)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:406
+#, python-format
+msgid "Unknown base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:411
+#, python-format
+msgid "Active base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:414
+#, python-format
+msgid "Corrupt base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:418
+#, python-format
+msgid "Removable base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:426
+msgid "Verification complete"
+msgstr ""
+
+#: cinder/virt/libvirt/utils.py:264
+msgid "Unable to find an open port"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:90
+#, python-format
+msgid "Ensuring vlan %(vlan)s and bridge %(bridge)s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:99
+#, python-format
+msgid "Ensuring bridge %s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:165 cinder/virt/libvirt/vif.py:220
+#, python-format
+msgid "Failed while unplugging vif of instance '%s'"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:163
+#, python-format
+msgid "iSCSI device not found at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:166
+#, python-format
+msgid ""
+"ISCSI volume not yet found at: %(mount_device)s. Will rescan & retry.  "
+"Try number: %(tries)s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:178
+#, python-format
+msgid "Found iSCSI node %(mount_device)s (after %(tries)s rescans)"
+msgstr ""
+
+#: cinder/virt/vmwareapi/error_util.py:93
+#, python-format
+msgid "Error(s) %s occurred in the call to RetrieveProperties"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:44 cinder/virt/xenapi/fake.py:77
+#, python-format
+msgid "%(text)s: _db_content => %(content)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:131
+#, python-format
+msgid "Property %(attr)s not set for the managed object %(objName)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:437
+msgid "There is no VM registered"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:439 cinder/virt/vmwareapi/fake.py:609
+#, python-format
+msgid "Virtual Machine with ref %s is not there"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:502
+#, python-format
+msgid "Logging out a session that is invalid or already logged out: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:517
+msgid "Session is faulty"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:520
+msgid "Session Invalid"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:606
+msgid " No Virtual Machine has been registered yet"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:99
+#, python-format
+msgid "Glance image %s is in killed state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:107
+#, python-format
+msgid "Glance image %(image_id)s is in unknown state - %(state)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:128
+msgid ""
+"ESX SOAP server returned an empty port group for the host system in its "
+"response"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:155
+#, python-format
+msgid "Creating Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:169
+#, python-format
+msgid "Created Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/read_write_util.py:150
+#, python-format
+msgid "Exception during HTTP connection close in VMWareHTTpWrite. Exception is %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:84
+msgid "Unable to import suds."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:90
+msgid "Must specify vmwareapi_wsdl_loc"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:145
+#, python-format
+msgid "No such SOAP method '%s' provided by VI SDK"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:150
+#, python-format
+msgid "httplib error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:157
+#, python-format
+msgid "Socket error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:162
+#, python-format
+msgid "Type error in  %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:166
+#, python-format
+msgid "Exception in %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:66
+msgid "Getting list of instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:82
+#, python-format
+msgid "Got total of %s instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:126
+msgid "Couldn't get a local Datastore reference"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:196
+#, python-format
+msgid "Creating VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:205
+#, python-format
+msgid "Created VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:234
+#, python-format
+msgid ""
+"Creating Virtual Disk of size  %(vmdk_file_size_in_kb)s KB and adapter "
+"type  %(adapter_type)s on the ESX host local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:251
+#, python-format
+msgid ""
+"Created Virtual Disk of size %(vmdk_file_size_in_kb)s KB on the ESX host "
+"local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:260
+#, python-format
+msgid ""
+"Deleting the file %(flat_uploaded_vmdk_path)s on the ESX host localstore "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:272
+#, python-format
+msgid ""
+"Deleted the file %(flat_uploaded_vmdk_path)s on the ESX host local store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:283
+#, python-format
+msgid ""
+"Downloading image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:298
+#, python-format
+msgid ""
+"Downloaded image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:315
+#, python-format
+msgid "Reconfiguring VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:322
+#, python-format
+msgid "Reconfigured VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:329
+#, python-format
+msgid "Powering on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:335
+#, python-format
+msgid "Powered on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:381
+#, python-format
+msgid "Creating Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:391
+#, python-format
+msgid "Created Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:434
+#, python-format
+msgid "Copying disk data before snapshot of the VM  instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:447
+#, python-format
+msgid "Copied disk data before snapshot of the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:456
+#, python-format
+msgid "Uploading image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:469
+#, python-format
+msgid "Uploaded image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:479
+#, python-format
+msgid "Deleting temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:488
+#, python-format
+msgid "Deleted temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:520
+msgid "instance is not powered on"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:527
+#, python-format
+msgid "Rebooting guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:530
+#, python-format
+msgid "Rebooted guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:532
+#, python-format
+msgid "Doing hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:536
+#, python-format
+msgid "Did hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:548
+#, python-format
+msgid "instance - %s not present"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:567
+#, python-format
+msgid "Powering off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:572
+#, python-format
+msgid "Powered off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:576
+#, python-format
+msgid "Unregistering the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:579
+#, python-format
+msgid "Unregistered the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:581
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while un-registering the "
+"VM: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:592
+#, python-format
+msgid "Deleting contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:602
+#, python-format
+msgid "Deleted contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:607
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while deleting the VM "
+"contents from the disk: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:615
+msgid "pause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:619
+msgid "unpause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:633
+#, python-format
+msgid "Suspending the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:637
+#, python-format
+msgid "Suspended the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:640
+msgid "instance is powered off and can not be suspended."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:643
+#, python-format
+msgid "VM %s was already in suspended state. So returning without doing anything"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:656
+#, python-format
+msgid "Resuming the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:661
+#, python-format
+msgid "Resumed the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:663
+msgid "instance is not in a suspended state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:699
+msgid "get_diagnostics not implemented for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:757
+#, python-format
+msgid ""
+"Reconfiguring VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:765
+#, python-format
+msgid ""
+"Reconfigured VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:802
+#, python-format
+msgid "Creating directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:806
+#, python-format
+msgid "Created directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:89
+#, python-format
+msgid "Downloading image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:103
+#, python-format
+msgid "Downloaded image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:108
+#, python-format
+msgid "Uploading image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:129
+#, python-format
+msgid "Uploaded image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:139
+#, python-format
+msgid "Getting image size for the image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:143
+#, python-format
+msgid "Got image size of %(size)s for the image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:553 cinder/virt/xenapi/fake.py:652
+#: cinder/virt/xenapi/fake.py:670 cinder/virt/xenapi/fake.py:732
+msgid "Raising NotImplemented"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:555
+#, python-format
+msgid "xenapi.fake does not have an implementation for %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:589
+#, python-format
+msgid "Calling %(localname)s %(impl)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:594
+#, python-format
+msgid "Calling getter %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:654
+#, python-format
+msgid ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:67
+#, python-format
+msgid ""
+"Instance %(name)s running on %(host)s could not be found in the database:"
+" assuming it is a worker VM and skipping migration to a new host"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:137
+#, python-format
+msgid "Unable to get SR for this host: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:169
+#, fuzzy
+msgid "Unable to get updated status"
+msgstr "Nelze vytvořit typ instance"
+
+#: cinder/virt/xenapi/host.py:172
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:37
+#, python-format
+msgid "Found non-unique network for name_label %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:55
+#, python-format
+msgid "Found non-unique network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:58
+#, python-format
+msgid "Found no network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:111
+#, python-format
+msgid "Unable to eject %(host)s from the pool; pool not empty"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:126
+#, python-format
+msgid "Unable to eject %(host)s from the pool; No master found"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:143
+#, python-format
+msgid "Pool-Join failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:146
+#, python-format
+msgid "Unable to join %(host)s in the pool"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:162
+#, python-format
+msgid "Pool-eject failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:174
+#, fuzzy, python-format
+msgid "Unable to set up pool: %(e)s."
+msgstr "Nelze použít globální roli %(role_id)s"
+
+#: cinder/virt/xenapi/pool.py:185
+#, python-format
+msgid "Pool-set_name_label failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:103
+#, python-format
+msgid "Found no PIF for device %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:122
+#, python-format
+msgid ""
+"PIF %(pif_rec['uuid'])s for network %(bridge)s has VLAN id %(pif_vlan)d. "
+"Expected %(vlan_num)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:218
+msgid "Created VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:245
+#, python-format
+msgid "VBD not found in instance %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:262
+#, fuzzy, python-format
+msgid "VBD %s already detached"
+msgstr "skupina %s již existuje"
+
+#: cinder/virt/xenapi/vm_utils.py:265
+#, python-format
+msgid "VBD %(vbd_ref)s detach rejected, attempt %(num_attempt)d/%(max_attempts)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:270
+#, python-format
+msgid "Unable to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:275
+#, python-format
+msgid "Reached maximum number of retries trying to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:286
+#, python-format
+msgid "Unable to destroy VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:305
+#, python-format
+msgid "Creating %(vbd_type)s-type VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:308
+#, python-format
+msgid "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:319
+#, python-format
+msgid "Unable to destroy VDI %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:336
+#, python-format
+msgid ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:345
+#, python-format
+msgid "Copied VDI %(vdi_ref)s from VDI %(vdi_to_copy_ref)s on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:353
+#, python-format
+msgid "Cloned VDI %(vdi_ref)s from VDI %(vdi_to_clone_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:372
+#, fuzzy, python-format
+msgid "No primary VDI found for %(vm_ref)s"
+msgstr "Nenalezeno žádné cílové id ve svazku %(volume_id)s."
+
+#: cinder/virt/xenapi/vm_utils.py:379
+#, python-format
+msgid "Snapshotting with label '%(label)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:392
+#, python-format
+msgid "Created snapshot %(template_vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:431
+#, python-format
+msgid "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:583
+#, python-format
+msgid "Creating blank HD of size %(req_size)d gigs"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:634
+#, python-format
+msgid ""
+"Fast cloning is only supported on default local SR of type ext. SR on "
+"this system was found to be of type %(sr_type)s. Ignoring the cow flag."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:724
+#, python-format
+msgid ""
+"download_vhd %(image)s attempt %(attempt_num)d/%(max_attempts)d from "
+"%(glance_host)s:%(glance_port)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:734
+#, python-format
+msgid "download_vhd failed: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:750
+#, python-format
+msgid "Asking xapi to fetch vhd image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:760
+#, python-format
+msgid ""
+"xapi 'download_vhd' returned VDI of type '%(vdi_type)s' with UUID "
+"'%(vdi_uuid)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:789
+#, python-format
+msgid "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:805
+#, python-format
+msgid "image_size_bytes=%(size_bytes)d, allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:809
+#, python-format
+msgid ""
+"Image size %(size_bytes)d exceeded instance_type allowed size "
+"%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:831
+#, python-format
+msgid "Fetching image %(image)s, type %(image_type_str)"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:844
+#, python-format
+msgid "Size for image %(image)s: %(virtual_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:853
+#, python-format
+msgid ""
+"Kernel/Ramdisk image is too large: %(vdi_size)d bytes, max %(max_size)d "
+"bytes"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:870
+#, python-format
+msgid "Copying VDI %s to /boot/guest on dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:884
+#, python-format
+msgid "Kernel/Ramdisk VDI %s destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:895
+#, fuzzy
+msgid "Failed to fetch glance image"
+msgstr "Nelze restartovat instanci"
+
+#: cinder/virt/xenapi/vm_utils.py:934
+#, python-format
+msgid "Detected %(image_type_str)s format for image %(image_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:955
+#, python-format
+msgid "Looking up vdi %s for PV kernel"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:973
+#, python-format
+msgid "Unknown image format %(disk_image_type)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1016
+#, python-format
+msgid "VDI %s is still available"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1059
+#, python-format
+msgid "(VM_UTILS) xenserver vm state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1061
+#, python-format
+msgid "(VM_UTILS) xenapi power_state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1088
+#, python-format
+msgid "Unable to parse rrd of %(vm_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1108
+#, python-format
+msgid "Re-scanning SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1136
+#, python-format
+msgid "Flag sr_matching_filter '%s' does not respect formatting convention"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1154
+msgid ""
+"XenAPI is unable to find a Storage Repository to install guest instances "
+"on. Please check your configuration and/or configure the flag "
+"'sr_matching_filter'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1167
+msgid "Cannot find SR of content-type ISO"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1175
+#, python-format
+msgid "ISO: looking at SR %(sr_rec)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1177
+msgid "ISO: not iso content"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1180
+msgid "ISO: iso content_type, no 'i18n-key' key"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1183
+msgid "ISO: iso content_type, i18n-key value not 'local-storage-iso'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1187
+msgid "ISO: SR MATCHing our criteria"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1189
+msgid "ISO: ISO, looking to see if it is host local"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1192
+#, python-format
+msgid "ISO: PBD %(pbd_ref)s disappeared"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1195
+#, python-format
+msgid "ISO: PBD matching, want %(pbd_rec)s, have %(host)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1198
+msgid "ISO: SR with local PBD"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1220
+#, python-format
+msgid ""
+"Unable to obtain RRD XML for VM %(vm_uuid)s with server details: "
+"%(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1236
+#, python-format
+msgid "Unable to obtain RRD XML updates with server details: %(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1290
+#, python-format
+msgid "Invalid statistics data from Xenserver: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1343
+#, python-format
+msgid "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1417
+#, python-format
+msgid ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1427
+#, python-format
+msgid "VHD coalesce attempts exceeded (%(max_attempts)d), giving up..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1462
+#, python-format
+msgid "Timeout waiting for device %s to be created"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1473
+#, python-format
+msgid "Plugging VBD %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1476
+#, python-format
+msgid "Plugging VBD %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1478
+#, python-format
+msgid "VBD %(vbd_ref)s plugged as %(orig_dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1481
+#, python-format
+msgid "VBD %(vbd_ref)s plugged into wrong dev, remapping to %(dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1490
+#, python-format
+msgid "Destroying VBD for VDI %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1498
+#, python-format
+msgid "Destroying VBD for VDI %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1511
+#, python-format
+msgid "Running pygrub against %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1518
+#, python-format
+msgid "Found Xen kernel %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1520
+msgid "No Xen kernel found.  Booting HVM."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1533
+msgid "Partitions:"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1539
+#, python-format
+msgid "  %(num)s: %(ptype)s %(size)d sectors"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1565
+#, python-format
+msgid ""
+"Writing partition table %(primary_first)d %(primary_last)d to "
+"%(dev_path)s..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1578
+#, python-format
+msgid "Writing partition table %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1632
+#, python-format
+msgid ""
+"Starting sparse_copy src=%(src_path)s dst=%(dst_path)s "
+"virtual_size=%(virtual_size)d block_size=%(block_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1664
+#, python-format
+msgid ""
+"Finished sparse_copy in %(duration).2f secs, %(compression_pct).2f%% "
+"reduction in size"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1714
+msgid ""
+"XenServer tools installed in this image are capable of network injection."
+"  Networking files will not bemanipulated"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1722
+msgid ""
+"XenServer tools are present in this image but are not capable of network "
+"injection"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1726
+msgid "XenServer tools are not installed in this image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1742
+msgid "Manipulating interface files directly"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1751
+#, python-format
+msgid "Failed to mount filesystem (expected for non-linux instances): %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:131 cinder/virt/xenapi/vmops.py:722
+#, python-format
+msgid "Updating progress to %(progress)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:231
+#, python-format
+msgid "Attempted to power on non-existent instance bad instance id %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:233
+#, fuzzy
+msgid "Starting instance"
+msgstr "Instance budou spuštěny"
+
+#: cinder/virt/xenapi/vmops.py:303
+msgid "Removing kernel/ramdisk files from dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:358
+#, fuzzy
+msgid "Failed to spawn, rolling back"
+msgstr "Nelze pozastavit instanci"
+
+#: cinder/virt/xenapi/vmops.py:443
+msgid "Detected ISO image type, creating blank VM for install"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:462
+msgid "Auto configuring disk, attempting to resize partition..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:515
+#, python-format
+msgid "Invalid value for injected_files: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:520
+#, python-format
+msgid "Injecting file path: '%s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:527
+msgid "Setting admin password"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:531
+msgid "Resetting network"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:538
+msgid "Setting VCPU weight"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:544
+msgid "Starting VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:551
+#, python-format
+msgid ""
+"Latest agent build for %(hypervisor)s/%(os)s/%(architecture)s is "
+"%(version)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:554
+#, python-format
+msgid "No agent build found for %(hypervisor)s/%(os)s/%(architecture)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:561
+msgid "Waiting for instance state to become running"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:573
+msgid "Querying agent version"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:576
+#, python-format
+msgid "Instance agent version: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:581
+#, python-format
+msgid "Updating Agent to %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:616
+#, python-format
+msgid "No opaque_ref could be determined for '%s'."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:670
+msgid "Finished snapshot and upload for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:677
+#, fuzzy, python-format
+msgid "Starting snapshot for VM"
+msgstr "Vytvořit snímek svazku %s"
+
+#: cinder/virt/xenapi/vmops.py:686
+#, fuzzy, python-format
+msgid "Unable to Snapshot instance: %(exc)s"
+msgstr "Nelze vytvořit typ instance"
+
+#: cinder/virt/xenapi/vmops.py:702
+msgid "Failed to transfer vhd to new host"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:770
+#, python-format
+msgid "Resizing down VDI %(cow_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:893
+#, python-format
+msgid "Resizing up VDI %(vdi_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:901
+msgid "Resize complete"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:928
+#, python-format
+msgid "Failed to query agent version: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:949
+#, python-format
+msgid "domid changed from %(domid)s to %(newdomid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:962
+#, python-format
+msgid "Failed to update agent: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:983
+#, python-format
+msgid "Failed to exchange keys: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:998
+#, python-format
+msgid "Failed to update password: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1023
+#, python-format
+msgid "Failed to inject file: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1032
+msgid "VM already halted, skipping shutdown..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1036
+msgid "Shutting down VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1054
+msgid "Unable to find VBD for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1097
+msgid "Using RAW or VHD, skipping kernel and ramdisk deletion"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1104
+msgid "instance has a kernel or ramdisk but not both"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1111
+msgid "kernel/ramdisk files removed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1121
+msgid "VM destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1147
+msgid "Destroying VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1169
+msgid "VM is not present, skipping destroy..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1222
+#, python-format
+msgid "Instance is already in Rescue Mode: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1296
+#, python-format
+msgid "Found %(instance_count)d hung reboots older than %(timeout)d seconds"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1300
+msgid "Automatically hard rebooting"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1363
+#, python-format
+msgid "Setting migration %(migration_id)s to error: %(reason)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1374
+#, python-format
+msgid ""
+"Automatically confirming migration %(migration_id)s for instance "
+"%(instance_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1379
+#, fuzzy, python-format
+msgid "Instance %(instance_uuid)s not found"
+msgstr "Instance %(instance_id)s nemohla být nastavena."
+
+#: cinder/virt/xenapi/vmops.py:1383
+msgid "In ERROR state"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1389
+#, python-format
+msgid "In %(task_state)s task_state, not RESIZE_VERIFY"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1396
+#, python-format
+msgid "Error auto-confirming resize: %(e)s. Will retry later."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1418
+msgid "Could not get bandwidth info."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1469
+msgid "Injecting network info to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1483
+msgid "Creating vifs"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1492
+#, python-format
+msgid "Creating VIF for network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1495
+#, python-format
+msgid "Created VIF %(vif_ref)s, network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1520
+msgid "Injecting hostname to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1545
+#, python-format
+msgid ""
+"The agent call to %(method)s returned an invalid response: %(ret)r. "
+"path=%(path)s; args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1566
+#, python-format
+msgid "TIMEOUT: The call to %(method)s timed out. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1570
+#, python-format
+msgid ""
+"NOT IMPLEMENTED: The call to %(method)s is not supported by the agent. "
+"args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1575
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1661
+#, python-format
+msgid "OpenSSL error: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:52
+msgid "creating sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:55 cinder/virt/xenapi/volume_utils.py:83
+#, python-format
+msgid "type is = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:58 cinder/virt/xenapi/volume_utils.py:86
+#, python-format
+msgid "name = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:71
+#, python-format
+msgid "Created %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:76 cinder/virt/xenapi/volume_utils.py:174
+msgid "Unable to create Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:80
+msgid "introducing sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:103 cinder/virt/xenapi/volume_utils.py:170
+#: cinder/virt/xenapi/volumeops.py:156
+#, python-format
+msgid "Introduced %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:106
+msgid "Creating pbd for SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:108
+msgid "Plugging SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:116 cinder/virt/xenapi/volumeops.py:160
+msgid "Unable to introduce Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:127 cinder/virt/xenapi/volumeops.py:50
+msgid "Unable to get SR using uuid"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:129
+#, python-format
+msgid "Forgetting SR %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:137
+msgid "Unable to forget Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:157
+#, python-format
+msgid "Introducing %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:186
+#, python-format
+msgid "Unable to find SR from VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:204
+#, python-format
+msgid "Ignoring exception %(exc)s when getting PBDs for %(sr_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:210
+#, python-format
+msgid "Ignoring exception %(exc)s when unplugging PBD %(pbd)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:234
+#, python-format
+msgid "Unable to introduce VDI on SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:242
+#, python-format
+msgid "Unable to get record of VDI %s on"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:264
+#, python-format
+msgid "Unable to introduce VDI for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:274
+#, python-format
+msgid "Error finding vdis in SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:281
+#, python-format
+msgid "Unable to find vbd for vdi %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:315
+#, python-format
+msgid "Unable to obtain target information %(data)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:341
+#, python-format
+msgid "Mountpoint cannot be translated: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:64
+msgid "Could not find VDI ref"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:69
+#, python-format
+msgid "Creating SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:73
+msgid "Could not create SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:76
+msgid "Could not retrieve SR record"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:81
+#, python-format
+msgid "Introducing SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:85
+msgid "SR found in xapi database. No need to introduce"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:90
+msgid "Could not introduce SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:94
+#, python-format
+msgid "Checking for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:106
+#, python-format
+msgid "SR %s not found in the xapi database"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:112
+msgid "Could not forget SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:121
+#, python-format
+msgid "Attach_volume: %(connection_info)s, %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:178
+#, python-format
+msgid "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:189
+#, python-format
+msgid "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:197
+#, python-format
+msgid "Unable to attach volume to instance %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:200
+#, python-format
+msgid "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:210
+#, python-format
+msgid "Detach_volume: %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:219
+#, python-format
+msgid "Unable to locate volume %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:227
+#, python-format
+msgid "Unable to detach volume %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:232
+#, python-format
+msgid "Unable to destroy vbd %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:239
+#, python-format
+msgid "Error purging SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:241
+#, python-format
+msgid "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:98 cinder/vnc/xvp_proxy.py:103
+#, python-format
+msgid "Error in handshake: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:119
+#, python-format
+msgid "Invalid request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:139
+#, python-format
+msgid "Request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:142
+#, python-format
+msgid "Request made with missing token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:153
+#, python-format
+msgid "Request made with invalid token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:160
+#, python-format
+msgid "Unexpected error: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:180
+#, python-format
+msgid "Starting cinder-xvpvncproxy node (version %s)"
+msgstr ""
+
+#: cinder/volume/api.py:74 cinder/volume/api.py:220
+msgid "status must be available"
+msgstr ""
+
+#: cinder/volume/api.py:85
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to create %(size)sG volume"
+msgstr ""
+
+#: cinder/volume/api.py:137
+#, fuzzy
+msgid "Volume status must be available or error"
+msgstr "Obraz musí být dostupný"
+
+#: cinder/volume/api.py:142
+#, python-format
+msgid "Volume still has %d dependent snapshots"
+msgstr ""
+
+#: cinder/volume/api.py:223
+msgid "already attached"
+msgstr ""
+
+#: cinder/volume/api.py:230
+msgid "already detached"
+msgstr ""
+
+#: cinder/volume/api.py:292
+msgid "must be available"
+msgstr ""
+
+#: cinder/volume/api.py:325
+msgid "Volume Snapshot status must be available or error"
+msgstr ""
+
+#: cinder/volume/driver.py:96
+#, python-format
+msgid "Recovering from a failed execute.  Try number %s"
+msgstr ""
+
+#: cinder/volume/driver.py:106
+#, python-format
+msgid "volume group %s doesn't exist"
+msgstr ""
+
+#: cinder/volume/driver.py:270
+#, python-format
+msgid "Skipping ensure_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:318
+#, python-format
+msgid "Skipping remove_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:327
+#, python-format
+msgid ""
+"Skipping remove_export. No iscsi_target is presently exported for volume:"
+" %d"
+msgstr ""
+
+#: cinder/volume/driver.py:337
+msgid "ISCSI provider_location not stored, using discovery"
+msgstr ""
+
+#: cinder/volume/driver.py:384
+#, python-format
+msgid "Could not find iSCSI export  for volume %s"
+msgstr ""
+
+#: cinder/volume/driver.py:388
+#, python-format
+msgid "ISCSI Discovery: Found %s"
+msgstr ""
+
+#: cinder/volume/driver.py:466
+#, python-format
+msgid "Cannot confirm exported volume id:%(volume_id)s."
+msgstr ""
+
+#: cinder/volume/driver.py:493
+#, python-format
+msgid "FAKE ISCSI: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:505
+#, python-format
+msgid "rbd has no pool %s"
+msgstr ""
+
+#: cinder/volume/driver.py:579
+#, python-format
+msgid "Sheepdog is not working: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:581
+msgid "Sheepdog is not working"
+msgstr ""
+
+#: cinder/volume/driver.py:680 cinder/volume/driver.py:685
+#, python-format
+msgid "LoggingVolumeDriver: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:96
+#, python-format
+msgid "Re-exporting %s volumes"
+msgstr ""
+
+#: cinder/volume/manager.py:101
+#, python-format
+msgid "volume %s: skipping export"
+msgstr ""
+
+#: cinder/volume/manager.py:107
+#, python-format
+msgid "volume %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:119
+#, python-format
+msgid "volume %(vol_name)s: creating lv of size %(vol_size)sG"
+msgstr ""
+
+#: cinder/volume/manager.py:131
+#, python-format
+msgid "volume %s: creating export"
+msgstr ""
+
+#: cinder/volume/manager.py:144
+#, python-format
+msgid "volume %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:153
+msgid "Volume is still attached"
+msgstr ""
+
+#: cinder/volume/manager.py:155
+msgid "Volume is not local to this node"
+msgstr ""
+
+#: cinder/volume/manager.py:159
+#, python-format
+msgid "volume %s: removing export"
+msgstr ""
+
+#: cinder/volume/manager.py:161
+#, python-format
+msgid "volume %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:164
+#, python-format
+msgid "volume %s: volume is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:176
+#, python-format
+msgid "volume %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:183
+#, python-format
+msgid "snapshot %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:187
+#, python-format
+msgid "snapshot %(snap_name)s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:202
+#, python-format
+msgid "snapshot %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:211
+#, python-format
+msgid "snapshot %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:214
+#, python-format
+msgid "snapshot %s: snapshot is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:226
+#, python-format
+msgid "snapshot %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:310
+msgid "Checking volume capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:314
+#, python-format
+msgid "New capabilities found: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:325
+msgid "Clear capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:329
+#, python-format
+msgid "Notification {%s} received"
+msgstr ""
+
+#: cinder/volume/netapp.py:79
+#, fuzzy, python-format
+msgid "API %(name)sfailed: %(reason)s"
+msgstr "Obraz %(image_id)s je nepřijatelný: %(reason)s"
+
+#: cinder/volume/netapp.py:109
+#, python-format
+msgid "%s is not set"
+msgstr ""
+
+#: cinder/volume/netapp.py:128
+#, fuzzy
+msgid "Connected to DFM server"
+msgstr "Znovu připojeno k frontě"
+
+#: cinder/volume/netapp.py:159
+#, fuzzy, python-format
+msgid "Job failed: %s"
+msgstr "Vyvoláno Nenalezeno: %s"
+
+#: cinder/volume/netapp.py:240
+msgid "Failed to provision dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:252
+msgid "No LUN was created by the provision job"
+msgstr ""
+
+#: cinder/volume/netapp.py:261 cinder/volume/netapp.py:433
+#, python-format
+msgid "Failed to find LUN ID for volume %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:280
+msgid "Failed to remove and delete dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:603 cinder/volume/netapp.py:657
+#, python-format
+msgid "No LUN ID for volume %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:607 cinder/volume/netapp.py:661
+#, fuzzy, python-format
+msgid "Failed to get LUN details for LUN ID %s"
+msgstr "Nelze získat metadata pro ip: %s"
+
+#: cinder/volume/netapp.py:614
+#, fuzzy, python-format
+msgid "Failed to get host details for host ID %s"
+msgstr "Nelze získat metadata pro ip: %s"
+
+#: cinder/volume/netapp.py:620
+#, fuzzy, python-format
+msgid "Failed to get target portal for filer: %s"
+msgstr "Nelze získat metadata pro ip: %s"
+
+#: cinder/volume/netapp.py:625
+#, fuzzy, python-format
+msgid "Failed to get target IQN for filer: %s"
+msgstr "Nelze získat metadata pro ip: %s"
+
+#: cinder/volume/san.py:113 cinder/volume/san.py:151
+msgid "Specify san_password or san_private_key"
+msgstr ""
+
+#: cinder/volume/san.py:156
+msgid "san_ip must be set"
+msgstr ""
+
+#: cinder/volume/san.py:320
+#, python-format
+msgid "LUID not found for %(zfs_poolname)s. Output=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:452
+#, python-format
+msgid "CLIQ command returned %s"
+msgstr ""
+
+#: cinder/volume/san.py:458
+#, python-format
+msgid "Malformed response to CLIQ command %(verb)s %(cliq_args)s. Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:466
+#, python-format
+msgid "Error running CLIQ command %(verb)s %(cliq_args)s.  Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:496
+#, python-format
+msgid ""
+"Unexpected number of virtual ips for cluster  %(cluster_name)s. "
+"Result=%(_xml)s"
+msgstr ""
+
+#: cinder/volume/san.py:549
+#, python-format
+msgid "Volume info: %(volume_name)s => %(volume_attributes)s"
+msgstr ""
+
+#: cinder/volume/san.py:594
+msgid "local_path not supported"
+msgstr ""
+
+#: cinder/volume/san.py:626
+#, python-format
+msgid "Could not determine project for volume %s, can't export"
+msgstr ""
+
+#: cinder/volume/san.py:696
+#, python-format
+msgid "Payload for SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:713
+#, python-format
+msgid "Call to json.loads() raised an exception: %s"
+msgstr ""
+
+#: cinder/volume/san.py:718
+#, python-format
+msgid "Results of SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:732
+#, python-format
+msgid "Found solidfire account: %s"
+msgstr ""
+
+#: cinder/volume/san.py:746
+#, python-format
+msgid "solidfire account: %s does not exist, create it..."
+msgstr ""
+
+#: cinder/volume/san.py:804
+msgid "Enter SolidFire create_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:846
+msgid "Leaving SolidFire create_volume"
+msgstr ""
+
+#: cinder/volume/san.py:861
+msgid "Enter SolidFire delete_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:880
+#, python-format
+msgid "Deleting volumeID: %s "
+msgstr ""
+
+#: cinder/volume/san.py:888
+msgid "Leaving SolidFire delete_volume"
+msgstr ""
+
+#: cinder/volume/san.py:891
+msgid "Executing SolidFire ensure_export..."
+msgstr ""
+
+#: cinder/volume/san.py:895
+msgid "Executing SolidFire create_export..."
+msgstr ""
+
+#: cinder/volume/volume_types.py:49 cinder/volume/volume_types.py:108
+msgid "name cannot be None"
+msgstr ""
+
+#: cinder/volume/volume_types.py:96
+msgid "id cannot be None"
+msgstr ""
+
+#: cinder/volume/xensm.py:55
+#, python-format
+msgid "SR name = %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:56
+#, python-format
+msgid "Params: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:60
+#, python-format
+msgid "Failed to create sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:62
+msgid "Create failed"
+msgstr ""
+
+#: cinder/volume/xensm.py:64
+#, python-format
+msgid "SR UUID of new SR is: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:71
+msgid "Failed to update db"
+msgstr ""
+
+#: cinder/volume/xensm.py:80
+#, python-format
+msgid "Failed to introduce sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:91
+#, python-format
+msgid "Failed to reach backend %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:100
+msgid "XenSMDriver requires xenapi connection"
+msgstr ""
+
+#: cinder/volume/xensm.py:110
+msgid "Failed to initiate session"
+msgstr ""
+
+#: cinder/volume/xensm.py:142
+#, python-format
+msgid "Volume will be created in backend - %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:154
+msgid "Failed to update volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:157
+msgid "Unable to create volume"
+msgstr ""
+
+#: cinder/volume/xensm.py:171
+msgid "Failed to delete vdi"
+msgstr ""
+
+#: cinder/volume/xensm.py:177
+msgid "Failed to delete volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:210
+msgid "Failed to find volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:221
+msgid "Failed to find backend in db"
+msgstr ""
+
+#: cinder/volume/nexenta/__init__.py:27
+msgid "Nexenta SA returned the error"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:64
+#, python-format
+msgid "Sending JSON data: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:69
+#, python-format
+msgid "Auto switching to HTTPS connection to %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:75
+msgid "No headers in server response"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:76
+#, fuzzy
+msgid "Bad response from server"
+msgstr "Špatná odpověď od SolidFire API"
+
+#: cinder/volume/nexenta/jsonrpc.py:79
+#, fuzzy, python-format
+msgid "Got response: %s"
+msgstr "odpověď %s"
+
+#: cinder/volume/nexenta/volume.py:96
+#, python-format
+msgid "Volume %s does not exist in Nexenta SA"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:180
+msgid ""
+"Call to local_path should not happen. Verify that use_local_volumes flag "
+"is turned off."
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:202
+#, python-format
+msgid "Ignored target creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:210
+#, python-format
+msgid "Ignored target group creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:219
+#, python-format
+msgid "Ignored target group member addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:227
+#, python-format
+msgid "Ignored LU creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:237
+#, python-format
+msgid "Ignored LUN mapping entry addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:273
+#, python-format
+msgid ""
+"Got error trying to destroy target group %(target_group)s, assuming it is"
+" already gone: %(exc)s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:280
+#, python-format
+msgid ""
+"Got error trying to delete target %(target)s, assuming it is already "
+"gone: %(exc)s"
+msgstr ""
+
+#~ msgid "Cinder access parameters were not specified."
+#~ msgstr "Přístupové parametry Cinder nebyly zadány."
+
+#~ msgid "Virtual Storage Array %(id)d could not be found."
+#~ msgstr "Pole virtuálního úložiště %(id)d nebylo nalezeno."
+
+#~ msgid "Virtual Storage Array %(name)s could not be found."
+#~ msgstr "Pole virtuálního úložiště %(name)s nebylo nalezeno."
+
+#~ msgid "Parent group id and group id cannot be same"
+#~ msgstr ""
+
+#~ msgid "No body provided"
+#~ msgstr ""
+
+#~ msgid "Create VSA %(display_name)s of type %(vc_type)s"
+#~ msgstr ""
+
+#~ msgid "Delete VSA with id: %s"
+#~ msgstr ""
+
+#~ msgid "Associate address %(ip)s to VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "Disassociate address from VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "%(obj)s with ID %(id)s not found"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(obj)s with ID %(id)s belongs to "
+#~ "VSA %(own_vsa_id)s and not to VSA "
+#~ "%(vsa_id)s."
+#~ msgstr ""
+
+#~ msgid "Index. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Detail. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Create. vsa_id=%(vsa_id)s, body=%(body)s"
+#~ msgstr ""
+
+#~ msgid "Create volume of %(size)s GB from VSA ID %(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Update %(obj)s with id: %(id)s, changes: %(changes)s"
+#~ msgstr ""
+
+#~ msgid "Delete. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Show. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Index instances for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You cannot run"
+#~ " any more instances of this type."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You can only"
+#~ " run %s more instances of this "
+#~ "type."
+#~ msgstr ""
+
+#~ msgid "Going to try to soft delete %s"
+#~ msgstr ""
+
+#~ msgid "No host for instance %s, deleting immediately"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to stop %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to start %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Going to force the deletion of the"
+#~ " vm %(instance_uuid)s, even if it is"
+#~ " deleted"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s did not exist "
+#~ "in the DB, but I will shut "
+#~ "it down anyway using a special "
+#~ "context"
+#~ msgstr ""
+
+#~ msgid "exception terminating the instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "trying to destroy already destroyed instance: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(name)s found in database but"
+#~ " not known by hypervisor. Setting "
+#~ "power state to NOSTATE"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Detected instance  with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Destroying instance with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid "SQL connection failed (%(connstring)s). %(attempts)d attempts left."
+#~ msgstr ""
+
+#~ msgid "Can't downgrade without losing data"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_id)s not found"
+#~ msgstr ""
+
+#~ msgid "Network %s has active ports, cannot delete"
+#~ msgstr ""
+
+#~ msgid "No fixed IPs to deallocate for vif %sid"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "AMQP server on %(fl_host)s:%(fl_port)d is "
+#~ "unreachable: %(e)s. Trying again in "
+#~ "%(fl_intv)d seconds."
+#~ msgstr ""
+
+#~ msgid "Unable to connect to AMQP server after %(tries)d tries. Shutting down."
+#~ msgstr ""
+
+#~ msgid "Failed to fetch message from queue: %s"
+#~ msgstr ""
+
+#~ msgid "Initing the Adapter Consumer for %s"
+#~ msgstr ""
+
+#~ msgid "Created \"%(exchange)s\" fanout exchange with \"%(key)s\" routing key"
+#~ msgstr ""
+
+#~ msgid "Exception while processing consumer"
+#~ msgstr ""
+
+#~ msgid "Creating \"%(exchange)s\" fanout exchange"
+#~ msgstr ""
+
+#~ msgid "topic is %s"
+#~ msgstr ""
+
+#~ msgid "message %s"
+#~ msgstr "zpráva %s"
+
+#~ msgid ""
+#~ "Cannot confirm tmpfile at %(ipath)s is"
+#~ " on same shared storage between "
+#~ "%(src)s and %(dest)s."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of memory(host:%(avail)s <= "
+#~ "instance:%(mem_inst)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of disk(host:%(available)s <="
+#~ " instance:%(necessary)s)"
+#~ msgstr ""
+
+#~ msgid "Driver Method %(driver_method)s missing: %(e)s.Reverting to schedule()"
+#~ msgstr ""
+
+#~ msgid "Setting instance %(instance_uuid)s to ERROR state."
+#~ msgstr ""
+
+#~ msgid "_filter_hosts: %(request_spec)s"
+#~ msgstr ""
+
+#~ msgid "Filter hosts for drive type %s"
+#~ msgstr ""
+
+#~ msgid "Host %s has no free capacity. Skip"
+#~ msgstr ""
+
+#~ msgid "Filter hosts: %s"
+#~ msgstr ""
+
+#~ msgid "Must implement host selection mechanism"
+#~ msgstr ""
+
+#~ msgid "Maximum number of hosts selected (%d)"
+#~ msgstr ""
+
+#~ msgid "Selected excessive host %(host)s"
+#~ msgstr ""
+
+#~ msgid "Provision volume %(name)s of size %(size)s GB on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "volume_params %(volume_params)s"
+#~ msgstr ""
+
+#~ msgid "%(i)d: Volume %(name)s"
+#~ msgstr ""
+
+#~ msgid "Attempting to spawn %(num_volumes)d volume(s)"
+#~ msgstr ""
+
+#~ msgid "Error creating volumes"
+#~ msgstr ""
+
+#~ msgid "Non-VSA volume %d"
+#~ msgstr ""
+
+#~ msgid "Spawning volume %(volume_id)s with drive type %(drive_type)s"
+#~ msgstr ""
+
+#~ msgid "Error creating volume"
+#~ msgstr ""
+
+#~ msgid "No capability selected for volume of size %(size)s"
+#~ msgstr ""
+
+#~ msgid "Host %s:"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\tDrive %(qosgrp)-25s: total %(total)2s, "
+#~ "used %(used)2s, free %(free)2s. Available "
+#~ "capacity %(avail)-5s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t LeastUsedHost: Best host: %(best_host)s."
+#~ " (used capacity %(min_used)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t MostAvailCap: Best host: %(best_host)s. "
+#~ "(available %(max_avail)s %(type_str)s)"
+#~ msgstr ""
+
+#~ msgid "(%(nm)s) publish (key: %(routing_key)s) %(message)s"
+#~ msgstr ""
+
+#~ msgid "Publishing to route %s"
+#~ msgstr ""
+
+#~ msgid "Declaring queue %s"
+#~ msgstr ""
+
+#~ msgid "Declaring exchange %s"
+#~ msgstr ""
+
+#~ msgid "Binding %(queue)s to %(exchange)s with key %(routing_key)s"
+#~ msgstr ""
+
+#~ msgid "Getting from %(queue)s: %(message)s"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate wrong VSA name. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate DB error. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: user_data = %s"
+#~ msgstr ""
+
+#~ msgid "_create: param=%s"
+#~ msgstr ""
+
+#~ msgid "Host %s"
+#~ msgstr ""
+
+#~ msgid "Test: provision vol %(name)s on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "\t vol=%(vol)s"
+#~ msgstr ""
+
+#~ msgid "Test: VSA update request: vsa_id=%(vsa_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume create: %s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get request: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume update request: id=%(volume_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: success    %(result)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: %(status)s    %(error_info)s"
+#~ msgstr ""
+
+#~ msgid "Unable to get updated status: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "deactivate_node is called for                "
+#~ "node_id = %(id)s node_ip = %(ip)s"
+#~ msgstr ""
+
+#~ msgid "virsh said: %r"
+#~ msgstr ""
+
+#~ msgid "cool, it's a device"
+#~ msgstr ""
+
+#~ msgid "Unable to read LXC console"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "to xml...\n"
+#~ ":%s "
+#~ msgstr ""
+
+#~ msgid "During wait running, %s disappeared."
+#~ msgstr ""
+
+#~ msgid "Instance %s running successfully."
+#~ msgstr ""
+
+#~ msgid "The nwfilter(%(instance_secgroup_filter_name)s) is not found."
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image verification failed"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): image "
+#~ "verification skipped, no hash stored"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): checking"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in use:"
+#~ " on this node %(local)d local, "
+#~ "%(remote)d on other nodes"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): warning "
+#~ "-- an absent base file is in "
+#~ "use! instances: %(instance_list)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in: on"
+#~ " other nodes (%(remote)d on other "
+#~ "nodes)"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is not in use"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is in use"
+#~ msgstr ""
+
+#~ msgid "Created VM %s..."
+#~ msgstr ""
+
+#~ msgid "Created VM %(instance_name)s as %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Creating a CDROM-specific VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Created a CDROM-specific VBD %(vbd_ref)s"
+#~ "  for VM %(vm_ref)s, VDI %(vdi_ref)s."
+#~ msgstr ""
+
+#~ msgid "No primary VDI found for%(vm_ref)s"
+#~ msgstr ""
+
+#~ msgid "Snapshotting VM %(vm_ref)s with label '%(label)s'..."
+#~ msgstr ""
+
+#~ msgid "Created snapshot %(template_vm_ref)s from VM %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Fetching image %(image)s"
+#~ msgstr ""
+
+#~ msgid "Image Type: %s"
+#~ msgstr ""
+
+#~ msgid "ISO: Found sr possibly containing the ISO image"
+#~ msgstr ""
+
+#~ msgid "Size for image %(image)s:%(virtual_size)d"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to fetch glance image"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s ... "
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s done."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful first time."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug rejected: retrying..."
+#~ msgstr ""
+
+#~ msgid "Not sleeping anymore!"
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful eventually."
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure in VBD.unplug: %s"
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure %s"
+#~ msgstr ""
+
+#~ msgid "Starting instance %s"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn"
+#~ msgstr ""
+
+#~ msgid "Instance %s failed to spawn - performing clean-up"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn - Unable to create VM"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Auto configuring disk for instance "
+#~ "%(instance_uuid)s, attempting to resize "
+#~ "partition..."
+#~ msgstr ""
+
+#~ msgid "Invalid value for injected_files: '%s'"
+#~ msgstr ""
+
+#~ msgid "Starting VM %s..."
+#~ msgstr ""
+
+#~ msgid "Spawning VM %(instance_uuid)s created %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Instance %s: waiting for running"
+#~ msgstr ""
+
+#~ msgid "Instance %s: running"
+#~ msgstr ""
+
+#~ msgid "Resources to remove:%s"
+#~ msgstr ""
+
+#~ msgid "Removing VDI %(vdi_ref)s(uuid:%(vdi_to_remove)s)"
+#~ msgstr ""
+
+#~ msgid "Skipping VDI destroy for %s"
+#~ msgstr ""
+
+#~ msgid "Finished snapshot and upload for VM %s"
+#~ msgstr ""
+
+#~ msgid "Starting snapshot for VM %s"
+#~ msgstr ""
+
+#~ msgid "Unable to Snapshot instance %(instance_uuid)s: %(exc)s"
+#~ msgstr ""
+
+#~ msgid "Updating instance '%(instance_uuid)s' progress to %(progress)d"
+#~ msgstr ""
+
+#~ msgid "Resize instance %s complete"
+#~ msgstr ""
+
+#~ msgid "domid changed from %(olddomid)s to %(newdomid)s"
+#~ msgstr ""
+
+#~ msgid "VM %(instance_uuid)s already halted,skipping shutdown..."
+#~ msgstr ""
+
+#~ msgid "Shutting down VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Destroying VDIs for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s using RAW or "
+#~ "VHD, skipping kernel and ramdisk "
+#~ "deletion"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_uuid)s VM destroyed"
+#~ msgstr ""
+
+#~ msgid "Destroying VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Automatically hard rebooting %d"
+#~ msgstr ""
+
+#~ msgid "Instance for migration %d not found, skipping"
+#~ msgstr ""
+
+#~ msgid "injecting network info to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "creating vif(s) for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "Creating VIF for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr ""
+
+#~ msgid "Created VIF %(vif_ref)s for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr ""
+
+#~ msgid "injecting hostname to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The agent call to %(method)s returned"
+#~ " an invalid response: %(ret)r. VM "
+#~ "id=%(instance_uuid)s; path=%(path)s; args=%(addl_args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "TIMEOUT: The call to %(method)s timed"
+#~ " out. VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "NOT IMPLEMENTED: The call to %(method)s"
+#~ " is not supported by the agent. "
+#~ "VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The call to %(method)s returned an "
+#~ "error: %(e)s. VM id=%(instance_uuid)s; "
+#~ "args=%(args)r"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid "Error destroying VDI"
+#~ msgstr ""
+
+#~ msgid "Volume status must be available"
+#~ msgstr ""
+
+#~ msgid "\tVolume %s is NOT VSA volume"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s creation - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s succeeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s deletion - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s suceeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s local path call - call discover"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s ensure export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s create export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s remove export - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE remove_export for %s failed"
+#~ msgstr ""
+
+#~ msgid "Failed to retrieve QoS info"
+#~ msgstr ""
+
+#~ msgid "invalid drive data"
+#~ msgstr ""
+
+#~ msgid "drive_name not defined"
+#~ msgstr ""
+
+#~ msgid "invalid drive type name %s"
+#~ msgstr ""
+
+#~ msgid "*** Experimental VSA code ***"
+#~ msgstr ""
+
+#~ msgid "Requested number of VCs (%d) is too high. Setting to default"
+#~ msgstr ""
+
+#~ msgid "Creating VSA: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d %(vsa_name)s: Create "
+#~ "volume %(vol_name)s, %(vol_size)d GB, type "
+#~ "%(vol_type_id)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA status to %(status)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA call"
+#~ msgstr ""
+
+#~ msgid "Adding %(add_cnt)s VCs to VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "Deleting %(del_cnt)s VCs from VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Deleting %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Unable to delete volume %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Forced delete. %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate VSA ID %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Delete instance %(name)s"
+#~ msgstr ""
+
+#~ msgid "Create call received for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Failed to find VSA %(vsa_id)d"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Drive %(vol_id)s created. Status %(status)s"
+#~ msgstr ""
+
+#~ msgid "Drive %(vol_name)s (%(vol_disp_name)s) still in creating phase - wait"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Not all volumes "
+#~ "are created (%(cvol_real)d of %(cvol_exp)d)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Drive %(vol_name)s "
+#~ "(%(vol_disp_name)s) is in %(status)s state"
+#~ msgstr ""
+
+#~ msgid "Failed to update attach status for volume %(vol_name)s. %(ex)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Delete all BE volumes"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Start %(vc_count)d instances"
+#~ msgstr ""
+
diff --git a/cinder/locale/da/LC_MESSAGES/nova.po b/cinder/locale/da/LC_MESSAGES/nova.po
new file mode 100644
index 000000000..5c5ba583c
--- /dev/null
+++ b/cinder/locale/da/LC_MESSAGES/nova.po
@@ -0,0 +1,8203 @@
+# Danish translation for cinder
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the cinder package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version:  cinder\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-04-08 23:04+0000\n"
+"PO-Revision-Date: 2011-01-15 21:46+0000\n"
+"Last-Translator: Soren Hansen <soren@linux2go.dk>\n"
+"Language-Team: Danish <da@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: cinder/context.py:59
+#, python-format
+msgid "Arguments dropped when creating context: %s"
+msgstr ""
+
+#: cinder/context.py:90
+#, python-format
+msgid "read_deleted can only be one of 'no', 'yes' or 'only', not %r"
+msgstr ""
+
+#: cinder/crypto.py:48
+msgid "Filename of root CA"
+msgstr ""
+
+#: cinder/crypto.py:51
+msgid "Filename of private key"
+msgstr "Filnavn for privatnøgle"
+
+#: cinder/crypto.py:54
+msgid "Filename of root Certificate Revocation List"
+msgstr ""
+
+#: cinder/crypto.py:57
+msgid "Where we keep our keys"
+msgstr ""
+
+#: cinder/crypto.py:60
+msgid "Where we keep our root CA"
+msgstr ""
+
+#: cinder/crypto.py:63
+msgid "Should we use a CA for each project?"
+msgstr ""
+
+#: cinder/crypto.py:67
+#, python-format
+msgid "Subject for certificate for users, %s for project, user, timestamp"
+msgstr ""
+
+#: cinder/crypto.py:72
+#, python-format
+msgid "Subject for certificate for projects, %s for project, timestamp"
+msgstr ""
+
+#: cinder/crypto.py:292
+#, python-format
+msgid "Flags path: %s"
+msgstr ""
+
+#: cinder/exception.py:56
+msgid "Unexpected error while running command."
+msgstr ""
+
+#: cinder/exception.py:59
+#, python-format
+msgid ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+msgstr ""
+
+#: cinder/exception.py:94
+msgid "DB exception wrapped."
+msgstr ""
+
+#: cinder/exception.py:155
+msgid "An unknown exception occurred."
+msgstr ""
+
+#: cinder/exception.py:178
+msgid "Failed to decrypt text"
+msgstr ""
+
+#: cinder/exception.py:182
+msgid "Failed to paginate through images from image service"
+msgstr ""
+
+#: cinder/exception.py:186
+msgid "Virtual Interface creation failed"
+msgstr ""
+
+#: cinder/exception.py:190
+msgid "5 attempts to create virtual interfacewith unique mac address failed"
+msgstr ""
+
+#: cinder/exception.py:195
+msgid "Connection to glance failed"
+msgstr ""
+
+#: cinder/exception.py:199
+msgid "Connection to melange failed"
+msgstr ""
+
+#: cinder/exception.py:203
+msgid "Not authorized."
+msgstr ""
+
+#: cinder/exception.py:208
+msgid "User does not have admin privileges"
+msgstr ""
+
+#: cinder/exception.py:212
+#, python-format
+msgid "Policy doesn't allow %(action)s to be performed."
+msgstr ""
+
+#: cinder/exception.py:216
+#, python-format
+msgid "Not authorized for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:220
+msgid "Unacceptable parameters."
+msgstr ""
+
+#: cinder/exception.py:225
+msgid "Invalid snapshot"
+msgstr ""
+
+#: cinder/exception.py:229
+#, python-format
+msgid "Volume %(volume_id)s is not attached to anything"
+msgstr ""
+
+#: cinder/exception.py:233 cinder/api/openstack/compute/contrib/keypairs.py:113
+msgid "Keypair data is invalid"
+msgstr ""
+
+#: cinder/exception.py:237
+msgid "Failed to load data into json format"
+msgstr ""
+
+#: cinder/exception.py:241
+msgid "The request is invalid."
+msgstr ""
+
+#: cinder/exception.py:245
+#, python-format
+msgid "Invalid signature %(signature)s for user %(user)s."
+msgstr ""
+
+#: cinder/exception.py:249
+msgid "Invalid input received"
+msgstr ""
+
+#: cinder/exception.py:253
+#, python-format
+msgid "Invalid instance type %(instance_type)s."
+msgstr ""
+
+#: cinder/exception.py:257
+msgid "Invalid volume type"
+msgstr ""
+
+#: cinder/exception.py:261
+msgid "Invalid volume"
+msgstr ""
+
+#: cinder/exception.py:265
+#, python-format
+msgid "Invalid port range %(from_port)s:%(to_port)s. %(msg)s"
+msgstr ""
+
+#: cinder/exception.py:269
+#, python-format
+msgid "Invalid IP protocol %(protocol)s."
+msgstr ""
+
+#: cinder/exception.py:273
+#, python-format
+msgid "Invalid content type %(content_type)s."
+msgstr ""
+
+#: cinder/exception.py:277
+#, python-format
+msgid "Invalid cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:281
+msgid "Invalid reuse of an RPC connection."
+msgstr ""
+
+#: cinder/exception.py:285
+msgid "Invalid Parameter: Unicode is not supported by the current database."
+msgstr ""
+
+#: cinder/exception.py:292
+#, python-format
+msgid "%(err)s"
+msgstr ""
+
+#: cinder/exception.py:296
+#, python-format
+msgid ""
+"Cannot perform action '%(action)s' on aggregate %(aggregate_id)s. Reason:"
+" %(reason)s."
+msgstr ""
+
+#: cinder/exception.py:301
+#, python-format
+msgid "Group not valid. Reason: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:305
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot %(method)s while"
+" the instance is in this state."
+msgstr ""
+
+#: cinder/exception.py:310
+#, python-format
+msgid "Instance %(instance_id)s is not running."
+msgstr ""
+
+#: cinder/exception.py:314
+#, python-format
+msgid "Instance %(instance_id)s is not suspended."
+msgstr ""
+
+#: cinder/exception.py:318
+#, python-format
+msgid "Instance %(instance_id)s is not in rescue mode"
+msgstr ""
+
+#: cinder/exception.py:322
+msgid "Failed to suspend instance"
+msgstr ""
+
+#: cinder/exception.py:326
+msgid "Failed to resume server"
+msgstr ""
+
+#: cinder/exception.py:330
+msgid "Failed to reboot instance"
+msgstr ""
+
+#: cinder/exception.py:334
+msgid "Failed to terminate instance"
+msgstr ""
+
+#: cinder/exception.py:338
+msgid "Service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:342
+msgid "Volume service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:346
+msgid "Compute service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:350
+#, python-format
+msgid "Unable to migrate instance (%(instance_id)s) to current host (%(host)s)."
+msgstr ""
+
+#: cinder/exception.py:355
+msgid "Destination compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:359
+msgid "Original compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:363
+msgid "The supplied hypervisor type of is invalid."
+msgstr ""
+
+#: cinder/exception.py:367
+msgid "The instance requires a newer hypervisor version than has been provided."
+msgstr ""
+
+#: cinder/exception.py:372
+#, python-format
+msgid ""
+"The supplied disk path (%(path)s) already exists, it is expected not to "
+"exist."
+msgstr ""
+
+#: cinder/exception.py:377
+#, python-format
+msgid "The supplied device path (%(path)s) is invalid."
+msgstr ""
+
+#: cinder/exception.py:381
+#, python-format
+msgid "The supplied device (%(device)s) is busy."
+msgstr ""
+
+#: cinder/exception.py:385
+msgid "Unacceptable CPU info"
+msgstr ""
+
+#: cinder/exception.py:389
+#, python-format
+msgid "%(address)s is not a valid IP v4/6 address."
+msgstr ""
+
+#: cinder/exception.py:393
+#, python-format
+msgid ""
+"VLAN tag is not appropriate for the port group %(bridge)s. Expected VLAN "
+"tag is %(tag)s, but the one associated with the port group is %(pgroup)s."
+msgstr ""
+
+#: cinder/exception.py:399
+#, python-format
+msgid ""
+"vSwitch which contains the port group %(bridge)s is not associated with "
+"the desired physical adapter. Expected vSwitch is %(expected)s, but the "
+"one associated is %(actual)s."
+msgstr ""
+
+#: cinder/exception.py:406
+#, python-format
+msgid "Disk format %(disk_format)s is not acceptable"
+msgstr ""
+
+#: cinder/exception.py:410
+#, python-format
+msgid "Image %(image_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:414
+#, python-format
+msgid "Instance %(instance_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:418
+#, python-format
+msgid "Ec2 id %(ec2_id)s is unacceptable."
+msgstr ""
+
+#: cinder/exception.py:422
+msgid "Resource could not be found."
+msgstr ""
+
+#: cinder/exception.py:427
+#, python-format
+msgid "Required flag %(flag)s not set."
+msgstr ""
+
+#: cinder/exception.py:431
+#, python-format
+msgid "Volume %(volume_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:435
+#, python-format
+msgid "Unable to locate account %(account_name)s on Solidfire device"
+msgstr ""
+
+#: cinder/exception.py:440
+#, python-format
+msgid "Volume not found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:444
+#, python-format
+msgid "Volume %(volume_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:449
+msgid "Zero volume types found."
+msgstr ""
+
+#: cinder/exception.py:453
+#, python-format
+msgid "Volume type %(volume_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:457
+#, python-format
+msgid "Volume type with name %(volume_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:462
+#, python-format
+msgid ""
+"Volume Type %(volume_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:467
+#, python-format
+msgid "Snapshot %(snapshot_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:471
+#, python-format
+msgid "deleting volume %(volume_name)s that has snapshot"
+msgstr ""
+
+#: cinder/exception.py:475
+#, python-format
+msgid "deleting snapshot %(snapshot_name)s that has dependent volumes"
+msgstr ""
+
+#: cinder/exception.py:480
+#, python-format
+msgid "No target id found for volume %(volume_id)s."
+msgstr ""
+
+#: cinder/exception.py:484
+#, python-format
+msgid "No disk at %(location)s"
+msgstr ""
+
+#: cinder/exception.py:488
+#, python-format
+msgid "Could not find a handler for %(driver_type)s volume."
+msgstr ""
+
+#: cinder/exception.py:492
+#, python-format
+msgid "Invalid image href %(image_href)s."
+msgstr ""
+
+#: cinder/exception.py:496
+msgid ""
+"Some images have been stored via hrefs. This version of the api does not "
+"support displaying image hrefs."
+msgstr ""
+
+#: cinder/exception.py:501
+#, python-format
+msgid "Image %(image_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:505
+#, python-format
+msgid "Kernel not found for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:509
+#, python-format
+msgid "User %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:513
+#, python-format
+msgid "Project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:517
+#, python-format
+msgid "User %(user_id)s is not a member of project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:521
+#, python-format
+msgid "Role %(role_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:525
+msgid "Cannot find SR to read/write VDI."
+msgstr ""
+
+#: cinder/exception.py:529
+#, python-format
+msgid "%(req)s is required to create a network."
+msgstr ""
+
+#: cinder/exception.py:533
+#, python-format
+msgid "Network %(network_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:537
+#, python-format
+msgid "Network could not be found for bridge %(bridge)s"
+msgstr ""
+
+#: cinder/exception.py:541
+#, python-format
+msgid "Network could not be found for uuid %(uuid)s"
+msgstr ""
+
+#: cinder/exception.py:545
+#, python-format
+msgid "Network could not be found with cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:549
+#, python-format
+msgid "Network could not be found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:553
+msgid "No networks defined."
+msgstr ""
+
+#: cinder/exception.py:557
+#, python-format
+msgid ""
+"Either Network uuid %(network_uuid)s is not present or is not assigned to"
+" the project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:562
+#, python-format
+msgid "Host is not set to the network (%(network_id)s)."
+msgstr ""
+
+#: cinder/exception.py:566
+#, python-format
+msgid "Network %(network)s has active ports, cannot delete."
+msgstr ""
+
+#: cinder/exception.py:570
+msgid "Could not find the datastore reference(s) which the VM uses."
+msgstr ""
+
+#: cinder/exception.py:574
+#, python-format
+msgid "No fixed IP associated with id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:578
+#, python-format
+msgid "Fixed ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:582
+#, python-format
+msgid "Instance %(instance_id)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:586
+#, python-format
+msgid "Network host %(host)s has zero fixed ips in network %(network_id)s."
+msgstr ""
+
+#: cinder/exception.py:591
+#, python-format
+msgid "Instance %(instance_id)s doesn't have fixed ip '%(ip)s'."
+msgstr ""
+
+#: cinder/exception.py:595
+#, python-format
+msgid "Host %(host)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:599
+#, python-format
+msgid ""
+"Fixed IP address (%(address)s) does not exist in network "
+"(%(network_uuid)s)."
+msgstr ""
+
+#: cinder/exception.py:604
+#, python-format
+msgid "Fixed IP address %(address)s is already in use."
+msgstr ""
+
+#: cinder/exception.py:608
+#, python-format
+msgid "Fixed IP address %(address)s is invalid."
+msgstr ""
+
+#: cinder/exception.py:612
+msgid "Zero fixed ips available."
+msgstr ""
+
+#: cinder/exception.py:616
+msgid "Zero fixed ips could be found."
+msgstr ""
+
+#: cinder/exception.py:620
+#, python-format
+msgid "Floating ip not found for id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:624
+#, python-format
+msgid "The DNS entry %(name)s already exists in domain %(domain)s."
+msgstr ""
+
+#: cinder/exception.py:628
+#, python-format
+msgid "Floating ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:632
+#, python-format
+msgid "Floating ip not found for host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:636
+msgid "Zero floating ips available."
+msgstr ""
+
+#: cinder/exception.py:640
+#, python-format
+msgid "Floating ip %(address)s is associated."
+msgstr ""
+
+#: cinder/exception.py:644
+#, python-format
+msgid "Floating ip %(address)s is not associated."
+msgstr ""
+
+#: cinder/exception.py:648
+msgid "Zero floating ips exist."
+msgstr ""
+
+#: cinder/exception.py:652
+#, python-format
+msgid "Interface %(interface)s not found."
+msgstr ""
+
+#: cinder/exception.py:656
+#, python-format
+msgid "Keypair %(name)s not found for user %(user_id)s"
+msgstr ""
+
+#: cinder/exception.py:660
+#, python-format
+msgid "Certificate %(certificate_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:664
+#, python-format
+msgid "Service %(service_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:668
+#, python-format
+msgid "Host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:672
+#, python-format
+msgid "Compute host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:676
+#, python-format
+msgid "Could not find binary %(binary)s on host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:680
+#, python-format
+msgid "Auth token %(token)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:684
+#, python-format
+msgid "Access Key %(access_key)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:688
+msgid "Quota could not be found"
+msgstr ""
+
+#: cinder/exception.py:692
+#, python-format
+msgid "Quota for project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:696
+#, python-format
+msgid "Quota class %(class_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:700
+#, python-format
+msgid "Security group %(security_group_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:704
+#, python-format
+msgid "Security group %(security_group_id)s not found for project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:709
+#, python-format
+msgid "Security group with rule %(rule_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:713
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is already associated with the "
+"instance %(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:718
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is not associated with the instance "
+"%(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:723
+#, python-format
+msgid "Migration %(migration_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:727
+#, python-format
+msgid "Migration not found for instance %(instance_id)s with status %(status)s."
+msgstr ""
+
+#: cinder/exception.py:732
+#, python-format
+msgid "Console pool %(pool_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:736
+#, python-format
+msgid ""
+"Console pool of type %(console_type)s for compute host %(compute_host)s "
+"on proxy host %(host)s not found."
+msgstr ""
+
+#: cinder/exception.py:742
+#, python-format
+msgid "Console %(console_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:746
+#, python-format
+msgid "Console for instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:750
+#, python-format
+msgid ""
+"Console for instance %(instance_id)s in pool %(pool_id)s could not be "
+"found."
+msgstr ""
+
+#: cinder/exception.py:755
+#, python-format
+msgid "Invalid console type %(console_type)s "
+msgstr ""
+
+#: cinder/exception.py:759
+msgid "Zero instance types found."
+msgstr ""
+
+#: cinder/exception.py:763
+#, python-format
+msgid "Instance type %(instance_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:767
+#, python-format
+msgid "Instance type with name %(instance_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:772
+#, python-format
+msgid "Flavor %(flavor_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:776
+#, python-format
+msgid "Cell %(cell_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:780
+#, python-format
+msgid "Scheduler Host Filter %(filter_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:784
+#, python-format
+msgid "Scheduler cost function %(cost_fn_str)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:789
+#, python-format
+msgid "Scheduler weight flag not found: %(flag_name)s"
+msgstr ""
+
+#: cinder/exception.py:793
+#, python-format
+msgid "Instance %(instance_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:798
+#, python-format
+msgid ""
+"Instance Type %(instance_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:803
+msgid "LDAP object could not be found"
+msgstr ""
+
+#: cinder/exception.py:807
+#, python-format
+msgid "LDAP user %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:811
+#, python-format
+msgid "LDAP group %(group_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:815
+#, python-format
+msgid "LDAP user %(user_id)s is not a member of group %(group_id)s."
+msgstr ""
+
+#: cinder/exception.py:819
+#, python-format
+msgid "File %(file_path)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:823
+msgid "Zero files could be found."
+msgstr ""
+
+#: cinder/exception.py:827
+#, python-format
+msgid "Virtual switch associated with the network adapter %(adapter)s not found."
+msgstr ""
+
+#: cinder/exception.py:832
+#, python-format
+msgid "Network adapter %(adapter)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:836
+#, python-format
+msgid "Class %(class_name)s could not be found: %(exception)s"
+msgstr ""
+
+#: cinder/exception.py:840
+msgid "Action not allowed."
+msgstr ""
+
+#: cinder/exception.py:844
+#, python-format
+msgid "Unable to use global role %(role_id)s"
+msgstr ""
+
+#: cinder/exception.py:848
+msgid "Rotation is not allowed for snapshots"
+msgstr ""
+
+#: cinder/exception.py:852
+msgid "Rotation param is required for backup image_type"
+msgstr ""
+
+#: cinder/exception.py:861
+#, python-format
+msgid "Key pair %(key_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:865
+#, python-format
+msgid "User %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:869
+#, python-format
+msgid "LDAP user %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:873
+#, python-format
+msgid "LDAP group %(group)s already exists."
+msgstr ""
+
+#: cinder/exception.py:877
+#, python-format
+msgid "User %(uid)s is already a member of the group %(group_dn)s"
+msgstr ""
+
+#: cinder/exception.py:882
+#, python-format
+msgid "Project %(project)s already exists."
+msgstr ""
+
+#: cinder/exception.py:886
+#, python-format
+msgid "Instance %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:890
+#, python-format
+msgid "Instance Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:894
+#, python-format
+msgid "Volume Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:898
+#, python-format
+msgid "%(path)s is on shared storage: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:902
+msgid "Migration error"
+msgstr ""
+
+#: cinder/exception.py:906
+#, python-format
+msgid "Malformed message body: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:910
+#, python-format
+msgid "Could not find config at %(path)s"
+msgstr ""
+
+#: cinder/exception.py:914
+#, python-format
+msgid "Could not load paste app '%(name)s' from %(path)s"
+msgstr ""
+
+#: cinder/exception.py:918
+msgid "When resizing, instances must change size!"
+msgstr ""
+
+#: cinder/exception.py:922
+msgid "Image is larger than instance type allows"
+msgstr ""
+
+#: cinder/exception.py:926
+msgid "1 or more Zones could not complete the request"
+msgstr ""
+
+#: cinder/exception.py:930
+msgid "Instance type's memory is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:934
+msgid "Instance type's disk is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:938
+#, python-format
+msgid "Insufficient free memory on compute node to start %(uuid)s."
+msgstr ""
+
+#: cinder/exception.py:942
+msgid "Could not fetch bandwidth/cpu/disk metrics for this host."
+msgstr ""
+
+#: cinder/exception.py:946
+#, python-format
+msgid "No valid host was found. %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:950
+#, python-format
+msgid "Host %(host)s is not up or doesn't exist."
+msgstr ""
+
+#: cinder/exception.py:954
+msgid "Quota exceeded"
+msgstr ""
+
+#: cinder/exception.py:958
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: action '%(action)s' caused an error: "
+"%(reason)s."
+msgstr ""
+
+#: cinder/exception.py:963
+#, python-format
+msgid "Aggregate %(aggregate_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:967
+#, python-format
+msgid "Aggregate %(aggregate_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:971
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:975
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:980
+#, python-format
+msgid "Host %(host)s already member of another aggregate."
+msgstr ""
+
+#: cinder/exception.py:984
+#, python-format
+msgid "Aggregate %(aggregate_id)s already has host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:988
+#, python-format
+msgid "Detected more than one volume with name %(vol_name)s"
+msgstr ""
+
+#: cinder/exception.py:992
+#, python-format
+msgid "Cannot create volume_type with name %(name)s and specs %(extra_specs)s"
+msgstr ""
+
+#: cinder/exception.py:997
+msgid "Unable to create instance type"
+msgstr ""
+
+#: cinder/exception.py:1001
+msgid "Bad response from SolidFire API"
+msgstr ""
+
+#: cinder/exception.py:1005
+#, python-format
+msgid "Error in SolidFire API response: status=%(status)s"
+msgstr ""
+
+#: cinder/exception.py:1009
+#, python-format
+msgid "Error in SolidFire API response: data=%(data)s"
+msgstr ""
+
+#: cinder/exception.py:1013
+#, python-format
+msgid "Detected existing vlan with id %(vlan)d"
+msgstr ""
+
+#: cinder/exception.py:1017
+#, python-format
+msgid "Instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:1021
+#, python-format
+msgid "Invalid id: %(val)s (expecting \"i-...\")."
+msgstr ""
+
+#: cinder/exception.py:1025
+#, python-format
+msgid "Could not fetch image %(image)s"
+msgstr ""
+
+#: cinder/log.py:315
+#, python-format
+msgid "syslog facility must be one of: %s"
+msgstr ""
+
+#: cinder/manager.py:146
+#, python-format
+msgid "Skipping %(full_task_name)s, %(ticks_to_skip)s ticks left until next run"
+msgstr ""
+
+#: cinder/manager.py:152
+#, python-format
+msgid "Running periodic task %(full_task_name)s"
+msgstr ""
+
+#: cinder/manager.py:159
+#, python-format
+msgid "Error during %(full_task_name)s: %(e)s"
+msgstr ""
+
+#: cinder/manager.py:203
+msgid "Notifying Schedulers of capabilities ..."
+msgstr ""
+
+#: cinder/policy.py:30
+msgid "JSON file representing policy"
+msgstr ""
+
+#: cinder/policy.py:33
+msgid "Rule checked when requested rule is not found"
+msgstr ""
+
+#: cinder/service.py:137
+msgid "SIGTERM received"
+msgstr ""
+
+#: cinder/service.py:177
+#, python-format
+msgid "Starting %(topic)s node (version %(vcs_string)s)"
+msgstr ""
+
+#: cinder/service.py:195
+#, python-format
+msgid "Creating Consumer connection for Service %s"
+msgstr ""
+
+#: cinder/service.py:282
+msgid "Service killed that has no database entry"
+msgstr ""
+
+#: cinder/service.py:319
+msgid "The service database object disappeared, Recreating it."
+msgstr ""
+
+#: cinder/service.py:334
+msgid "Recovered model server connection!"
+msgstr ""
+
+#: cinder/service.py:340
+msgid "model server went away"
+msgstr ""
+
+#: cinder/service.py:433
+msgid "Full set of FLAGS:"
+msgstr ""
+
+#: cinder/service.py:440
+#, python-format
+msgid "%(flag)s : FLAG SET "
+msgstr ""
+
+#: cinder/utils.py:79
+#, python-format
+msgid "Inner Exception: %s"
+msgstr ""
+
+#: cinder/utils.py:165
+#, python-format
+msgid "Fetching %s"
+msgstr ""
+
+#: cinder/utils.py:210
+#, python-format
+msgid "Got unknown keyword args to utils.execute: %r"
+msgstr ""
+
+#: cinder/utils.py:220
+#, python-format
+msgid "Running cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/utils.py:236 cinder/utils.py:315
+#, python-format
+msgid "Result was %s"
+msgstr ""
+
+#: cinder/utils.py:249
+#, python-format
+msgid "%r failed. Retrying."
+msgstr ""
+
+#: cinder/utils.py:291
+#, python-format
+msgid "Running cmd (SSH): %s"
+msgstr ""
+
+#: cinder/utils.py:293
+msgid "Environment not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:297
+msgid "process_input not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:352
+#, python-format
+msgid "debug in callback: %s"
+msgstr ""
+
+#: cinder/utils.py:534
+#, python-format
+msgid "Link Local address is not found.:%s"
+msgstr ""
+
+#: cinder/utils.py:537
+#, python-format
+msgid "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+msgstr ""
+
+#: cinder/utils.py:648
+#, python-format
+msgid "Invalid backend: %s"
+msgstr ""
+
+#: cinder/utils.py:659
+#, python-format
+msgid "backend %s"
+msgstr ""
+
+#: cinder/utils.py:709
+msgid "in looping call"
+msgstr ""
+
+#: cinder/utils.py:927
+#, python-format
+msgid "Attempting to grab semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:931
+#, python-format
+msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:935
+#, python-format
+msgid "Attempting to grab file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:942
+#, python-format
+msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:1001
+#, python-format
+msgid "Found sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1008
+#, python-format
+msgid "Cleaned sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1023
+#, python-format
+msgid "Found lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1028
+#, python-format
+msgid "Cleaned lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1138
+#, python-format
+msgid "Expected object of type: %s"
+msgstr ""
+
+#: cinder/utils.py:1169
+#, python-format
+msgid "Invalid server_string: %s"
+msgstr ""
+
+#: cinder/utils.py:1298
+#, python-format
+msgid "timefunc: '%(name)s' took %(total_time).2f secs"
+msgstr ""
+
+#: cinder/utils.py:1330
+msgid "Original exception being dropped"
+msgstr ""
+
+#: cinder/utils.py:1461
+#, python-format
+msgid "Class %(fullname)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1463
+#, python-format
+msgid "Class %(fullname)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1495
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1497
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1681
+#, python-format
+msgid "Could not remove tmpdir: %s"
+msgstr ""
+
+#: cinder/wsgi.py:97
+#, python-format
+msgid "Started %(name)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:108
+msgid "Stopping WSGI server."
+msgstr ""
+
+#: cinder/wsgi.py:111
+msgid "Stopping raw TCP server."
+msgstr ""
+
+#: cinder/wsgi.py:117
+#, python-format
+msgid "Starting TCP server %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:133
+msgid "WSGI server has stopped."
+msgstr ""
+
+#: cinder/wsgi.py:211
+msgid "You must implement __call__"
+msgstr ""
+
+#: cinder/api/direct.py:218
+msgid "not available"
+msgstr ""
+
+#: cinder/api/direct.py:299
+#, python-format
+msgid "Returned non-serializeable type: %s"
+msgstr ""
+
+#: cinder/api/sizelimit.py:51
+msgid "Request is too large."
+msgstr ""
+
+#: cinder/api/validator.py:142
+#, python-format
+msgid "%(key)s with value %(value)s failed validator  %(validator)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:73
+#, python-format
+msgid "%(code)s: %(message)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:95
+#, python-format
+msgid "FaultWrapper: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:170
+msgid "Too many failed authentications."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:180
+#, python-format
+msgid ""
+"Access key %(access_key)s has had %(failures)d failed authentications and"
+" will be locked out for %(lock_mins)d minutes."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:267
+msgid "Signature not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:271
+msgid "Access key not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:306 cinder/api/ec2/__init__.py:319
+msgid "Failure communicating with keystone"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:388
+#, python-format
+msgid "Authentication Failure: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:404
+#, python-format
+msgid "Authenticated Request For %(uname)s:%(pname)s)"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:435
+#, python-format
+msgid "action: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:437
+#, python-format
+msgid "arg: %(key)s\t\tval: %(value)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:512
+#, python-format
+msgid "Unauthorized request for controller=%(controller)s and action=%(action)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:584
+#, python-format
+msgid "InstanceNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:590
+#, python-format
+msgid "VolumeNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:596
+#, python-format
+msgid "SnapshotNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:602
+#, python-format
+msgid "NotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:605
+#, python-format
+msgid "EC2APIError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:613
+#, python-format
+msgid "KeyPairExists raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:617
+#, python-format
+msgid "InvalidParameterValue raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:621
+#, python-format
+msgid "InvalidPortRange raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:625
+#, python-format
+msgid "NotAuthorized raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:629
+#, python-format
+msgid "InvalidRequest raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:633
+#, python-format
+msgid "QuotaError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:637
+#, python-format
+msgid "Invalid id: bogus (expecting \"i-...\"): %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:646
+#, python-format
+msgid "Unexpected error raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:647
+#, python-format
+msgid "Environment: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:649 cinder/api/metadata/handler.py:248
+msgid "An unknown error has occurred. Please try your request again."
+msgstr ""
+
+#: cinder/api/ec2/apirequest.py:64
+#, python-format
+msgid "Unsupported API request: controller = %(controller)s, action = %(action)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:336
+#, python-format
+msgid "Create snapshot of volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:372
+#, python-format
+msgid ""
+"Value (%s) for KeyName is invalid. Content limited to Alphanumeric "
+"character, spaces, dashes, and underscore."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:378
+#, python-format
+msgid "Value (%s) for Keyname is invalid. Length exceeds maximum of 255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:382
+#, python-format
+msgid "Create key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:391
+#, python-format
+msgid "Import key %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:409
+#, python-format
+msgid "Delete key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:551
+msgid "Invalid CIDR"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:639 cinder/api/ec2/cloud.py:693
+#: cinder/api/ec2/cloud.py:800
+msgid "Not enough parameters, need group_name or group_id"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:654
+#: cinder/api/openstack/compute/contrib/security_groups.py:517
+#, python-format
+msgid "Revoke security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:666 cinder/api/ec2/cloud.py:719
+#, python-format
+msgid "%s Not enough parameters to build a valid rule"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:684 cinder/api/ec2/cloud.py:744
+msgid "No rule for the specified parameters."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:708
+#: cinder/api/openstack/compute/contrib/security_groups.py:354
+#, python-format
+msgid "Authorize security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:725
+#, python-format
+msgid "%s - This rule already exists in group"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:769
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Content limited to "
+"Alphanumeric characters, spaces, dashes, and underscores."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:776
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Length exceeds maximum of "
+"255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:780
+#: cinder/api/openstack/compute/contrib/security_groups.py:292
+#, python-format
+msgid "Create Security Group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:783
+#, python-format
+msgid "group %s already exists"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:815
+#: cinder/api/openstack/compute/contrib/security_groups.py:245
+#, python-format
+msgid "Delete security group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:823 cinder/compute/manager.py:1630
+#, python-format
+msgid "Get console output for instance %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:894
+#, python-format
+msgid "Create volume from snapshot %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:898 cinder/api/openstack/compute/contrib/volumes.py:186
+#: cinder/api/openstack/volume/volumes.py:222
+#, python-format
+msgid "Create volume of %s GB"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:921
+msgid "Delete Failed"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:931
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(instance_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:939
+msgid "Attach Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:952 cinder/api/openstack/compute/contrib/volumes.py:366
+#, python-format
+msgid "Detach volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:959
+msgid "Detach Volume Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:984 cinder/api/ec2/cloud.py:1041
+#: cinder/api/ec2/cloud.py:1518 cinder/api/ec2/cloud.py:1533
+#, python-format
+msgid "attribute not supported: %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1107
+#, python-format
+msgid "vol = %s\n"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1255
+msgid "Allocate address"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1267
+#, python-format
+msgid "Release address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1272
+#, python-format
+msgid "Associate address %(public_ip)s to instance %(instance_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1282
+#, python-format
+msgid "Disassociate address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1308
+msgid "Image must be available"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1329
+msgid "Going to start terminating instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1343
+#, python-format
+msgid "Reboot instance %r"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1354
+msgid "Going to stop instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1365
+msgid "Going to start instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1455
+#, python-format
+msgid "De-registering image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1471
+msgid "imageLocation is required"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1490
+#, python-format
+msgid "Registered image %(image_location)s with id %(image_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1536
+msgid "user or group not specified"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1538
+msgid "only group \"all\" is supported"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1540
+msgid "operation_type must be add or remove"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1542
+#, python-format
+msgid "Updating image %s publicity"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1555
+#, python-format
+msgid "Not allowed to modify attributes for image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1603
+#, python-format
+msgid "Couldn't stop instance with in %d sec"
+msgstr ""
+
+#: cinder/api/metadata/handler.py:246 cinder/api/metadata/handler.py:253
+#, python-format
+msgid "Failed to get metadata for ip: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:43
+#, python-format
+msgid "Caught error: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:45 cinder/api/openstack/wsgi.py:886
+#, python-format
+msgid "%(url)s returned with HTTP %(status)d"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:94
+msgid "Must specify an ExtensionManager class"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:105
+#, python-format
+msgid "Extended resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:130
+#, python-format
+msgid ""
+"Extension %(ext_name)s: Cannot extend resource %(collection)s: No such "
+"resource"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:135
+#, python-format
+msgid "Extension %(ext_name)s extending resource: %(collection)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:90
+#, python-format
+msgid "%(user_id)s could not be found with token '%(token)s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:134
+#, python-format
+msgid "%(user_id)s must be an admin or a member of %(project_id)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:152
+msgid "Authentication requests must be made against a version root (e.g. /v2)."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:167
+#, python-format
+msgid "Could not find %s in request."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:191
+#, python-format
+msgid "Successfully authenticated '%s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:241
+msgid "User not found with provided API key."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:258
+#, python-format
+msgid "Provided API key is valid, but not for user '%(username)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:133 cinder/api/openstack/common.py:167
+msgid "limit param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:136 cinder/api/openstack/common.py:171
+msgid "limit param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:161
+msgid "offset param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:175
+msgid "offset param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:203
+#, python-format
+msgid "marker [%s] not found"
+msgstr ""
+
+#: cinder/api/openstack/common.py:243
+#, python-format
+msgid "href %s does not contain version"
+msgstr ""
+
+#: cinder/api/openstack/common.py:278
+msgid "Image metadata limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/common.py:295
+#, python-format
+msgid "Converting nw_info: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:305
+#, python-format
+msgid "Converted networks: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:338
+#, python-format
+msgid "Cannot '%(action)s' while instance is in %(attr)s %(state)s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:341
+#, python-format
+msgid "Instance is in an invalid state for '%(action)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:421
+msgid "Rejecting snapshot request, snapshots currently disabled"
+msgstr ""
+
+#: cinder/api/openstack/common.py:423
+msgid "Instance snapshots are not permitted at this time."
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:188
+#, python-format
+msgid "Loaded extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:225
+#, python-format
+msgid "Ext name: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:226
+#, python-format
+msgid "Ext alias: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:227
+#, python-format
+msgid "Ext description: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:229
+#, python-format
+msgid "Ext namespace: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:230
+#, python-format
+msgid "Ext updated: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:232
+#, python-format
+msgid "Exception loading extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:246
+#, python-format
+msgid "Loading extension %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:252
+#, python-format
+msgid "Calling extension factory %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:264
+#, python-format
+msgid "Failed to load extension %(ext_factory)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:344
+#, python-format
+msgid "Failed to load extension %(classpath)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:368
+#, python-format
+msgid "Failed to load extension %(ext_name)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:135 cinder/api/openstack/wsgi.py:538
+msgid "cannot understand JSON"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:159
+#: cinder/api/openstack/compute/contrib/hosts.py:86
+msgid "cannot understand XML"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:543
+msgid "too many body keys"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:582
+#, python-format
+msgid "Exception handling resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:586
+#, python-format
+msgid "Fault thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:589
+#, python-format
+msgid "HTTP exception thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:697
+msgid "Unrecognized Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:701
+msgid "No Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:705
+msgid "Empty body provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:816
+#, python-format
+msgid "There is no such action: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:819 cinder/api/openstack/wsgi.py:832
+#: cinder/api/openstack/compute/server_metadata.py:58
+#: cinder/api/openstack/compute/server_metadata.py:76
+#: cinder/api/openstack/compute/server_metadata.py:101
+#: cinder/api/openstack/compute/server_metadata.py:126
+#: cinder/api/openstack/compute/contrib/admin_actions.py:211
+#: cinder/api/openstack/compute/contrib/console_output.py:52
+msgid "Malformed request body"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:829
+msgid "Unsupported Content-Type"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:841
+msgid "Malformed request url"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:889
+#, python-format
+msgid "%(url)s returned a fault: %(e)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:265
+msgid "element is not a child"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:414
+msgid "root element selecting a list"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:739
+#, python-format
+msgid "Template tree mismatch; adding slave %(slavetag)s to master %(mastertag)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:858
+msgid "subclasses must implement construct()!"
+msgstr ""
+
+#: cinder/api/openstack/compute/extensions.py:29
+#: cinder/api/openstack/volume/extensions.py:29
+msgid "Initializing extension manager."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:40
+#: cinder/api/openstack/compute/images.py:146
+#: cinder/api/openstack/compute/images.py:161
+msgid "Image not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:79
+msgid "Incorrect request body format"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:83
+#: cinder/api/openstack/compute/server_metadata.py:80
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:79
+#: cinder/api/openstack/compute/contrib/volumetypes.py:188
+msgid "Request body and URI mismatch"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:86
+#: cinder/api/openstack/compute/server_metadata.py:84
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:82
+#: cinder/api/openstack/compute/contrib/volumetypes.py:191
+msgid "Request body contains too many items"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:111
+msgid "Invalid metadata key"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:74
+msgid "Instance does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:97
+msgid "Instance is not a member of specified network"
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:140
+#, python-format
+msgid ""
+"Only %(value)s %(verb)s request(s) can be made to %(uri)s every "
+"%(unit_string)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:266
+msgid "This request was rate-limited."
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:38
+#: cinder/api/openstack/compute/server_metadata.py:122
+#: cinder/api/openstack/compute/server_metadata.py:159
+msgid "Server does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:141
+#: cinder/api/openstack/compute/server_metadata.py:152
+msgid "Metadata item was not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:425
+#, python-format
+msgid "Invalid server status: %(status)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:433
+msgid "Invalid changes-since value"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:483
+msgid "Personality file limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:485
+msgid "Personality file path too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:487
+msgid "Personality file content too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:501
+msgid "Server name is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:505
+msgid "Server name is an empty string"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:509
+msgid "Server name must be less than 256 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:527
+#, python-format
+msgid "Bad personality format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:530
+msgid "Bad personality format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:535
+#, python-format
+msgid "Personality content for %s cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:550
+#, python-format
+msgid "Bad networks format: network uuid is not in proper format (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:559
+#, python-format
+msgid "Invalid fixed IP address (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:566
+#, python-format
+msgid "Duplicate networks (%s) are not allowed"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:572
+#, python-format
+msgid "Bad network format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:575
+msgid "Bad networks format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:587
+msgid "Userdata content cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:594
+msgid "accessIPv4 is not proper IPv4 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:601
+msgid "accessIPv6 is not proper IPv6 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:633
+msgid "Server name is not defined"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:675
+#: cinder/api/openstack/compute/servers.py:740
+msgid "Invalid flavorRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:737
+msgid "Can not find requested image"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:743
+msgid "Invalid key_name provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:829
+#: cinder/api/openstack/compute/servers.py:849
+msgid "Instance has not been resized."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:835
+#, python-format
+msgid "Error in confirm-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:855
+#, python-format
+msgid "Error in revert-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:868
+msgid "Argument 'type' for reboot is not HARD or SOFT"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:872
+msgid "Missing argument 'type' for reboot"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:885
+#, python-format
+msgid "Error in reboot %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:897
+msgid "Unable to locate requested flavor."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:900
+msgid "Resize requires a change in size."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:924
+msgid "Malformed server entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:931
+msgid "Missing imageRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:940
+msgid "Invalid imageRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:949
+msgid "Missing flavorRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:962
+msgid "No adminPass was specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:966
+#: cinder/api/openstack/compute/servers.py:1144
+msgid "Invalid adminPass"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:980
+msgid "Unable to parse metadata key/value pairs."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:993
+msgid "Resize request has invalid 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:996
+msgid "Resize requests require 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1014
+#: cinder/api/openstack/compute/contrib/aggregates.py:142
+#: cinder/api/openstack/compute/contrib/networks.py:65
+msgid "Invalid request body"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1019
+msgid "Could not parse imageRef from request."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1071
+msgid "Instance could not be found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1074
+msgid "Cannot find image for rebuild"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1103
+msgid "createImage entity requires name attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1112
+#: cinder/api/openstack/compute/contrib/admin_actions.py:238
+msgid "Invalid metadata"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1167
+#, python-format
+msgid "Removing options '%(unk_opt_str)s' from query"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:60
+#, python-format
+msgid "Compute.api::pause %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:77
+#, python-format
+msgid "Compute.api::unpause %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:94
+#, python-format
+msgid "compute.api::suspend %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:111
+#, python-format
+msgid "compute.api::resume %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:127
+#, python-format
+msgid "Error in migrate %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:141
+#, python-format
+msgid "Compute.api::reset_network %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:154
+#: cinder/api/openstack/compute/contrib/admin_actions.py:170
+#: cinder/api/openstack/compute/contrib/admin_actions.py:186
+#: cinder/api/openstack/compute/contrib/multinic.py:41
+#: cinder/api/openstack/compute/contrib/rescue.py:44
+msgid "Server not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:157
+#, python-format
+msgid "Compute.api::inject_network_info %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:173
+#, python-format
+msgid "Compute.api::lock %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:189
+#, python-format
+msgid "Compute.api::unlock %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:219
+#, python-format
+msgid "createBackup entity requires %s attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:223
+msgid "Malformed createBackup entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:229
+msgid "createBackup attribute 'rotation' must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:244
+#: cinder/api/openstack/compute/contrib/console_output.py:47
+#: cinder/api/openstack/compute/contrib/console_output.py:59
+#: cinder/api/openstack/compute/contrib/consoles.py:49
+#: cinder/api/openstack/compute/contrib/consoles.py:60
+#: cinder/api/openstack/compute/contrib/server_action_list.py:49
+#: cinder/api/openstack/compute/contrib/server_diagnostics.py:47
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:38
+msgid "Instance not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:272
+msgid "host and block_migration must be specified."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:284
+#, python-format
+msgid "Live migration of instance %(id)s to host %(host)s failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:76
+#, python-format
+msgid ""
+"Cannot create aggregate with name %(name)s and availability zone "
+"%(avail_zone)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:88
+#, python-format
+msgid "Cannot show aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:114
+#, python-format
+msgid "Cannot update aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:126
+#, python-format
+msgid "Cannot delete aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:139
+#, python-format
+msgid "Aggregates does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:152
+#: cinder/api/openstack/compute/contrib/aggregates.py:158
+#, python-format
+msgid "Cannot add host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:171
+#: cinder/api/openstack/compute/contrib/aggregates.py:175
+#, python-format
+msgid "Cannot remove host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:195
+#, python-format
+msgid "Cannot set metadata %(metadata)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/certificates.py:75
+msgid "Only root certificate can be retrieved."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/cloudpipe.py:146
+msgid ""
+"Unable to claim IP for VPN instances, ensure it isn't running, and try "
+"again in a few minutes"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:44
+msgid "Missing type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:56
+msgid "Invalid type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/disk_config.py:44
+#, python-format
+msgid "%s must be either 'MANUAL' or 'AUTO'."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/extended_server_attributes.py:77
+#: cinder/api/openstack/compute/contrib/extended_status.py:61
+msgid "Server not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:61
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:91
+msgid "Flavor not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:49
+#: cinder/api/openstack/compute/contrib/volumetypes.py:158
+msgid "No Request Body"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:159
+#, python-format
+msgid "No more floating ips in pool %s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:161
+msgid "No more floating ips available."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:201
+#: cinder/api/openstack/compute/contrib/floating_ips.py:230
+#: cinder/api/openstack/compute/contrib/security_groups.py:571
+#: cinder/api/openstack/compute/contrib/security_groups.py:604
+msgid "Missing parameter dict"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:204
+#: cinder/api/openstack/compute/contrib/floating_ips.py:233
+msgid "Address not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:213
+msgid "No fixed ips associated to instance"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:216
+msgid "Associate floating ip failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:144
+#, python-format
+msgid "Invalid status: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:148
+#, python-format
+msgid "Invalid mode: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:152
+#, python-format
+msgid "Invalid update setting: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:170
+#, python-format
+msgid "Putting host %(host)s in maintenance mode %(mode)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:181
+#, python-format
+msgid "Setting host %(host)s to %(state)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:230
+msgid "Describe-resource is admin only functionality"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:238
+msgid "Host not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:70
+msgid "Keypair name contains unsafe characters"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:95
+msgid "Keypair name must be between 1 and 255 characters long"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:100
+#, python-format
+msgid "Key pair '%s' already exists."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:52
+msgid "Missing 'networkId' argument for addFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:68
+msgid "Missing 'address' argument for removeFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:77
+#, python-format
+msgid "Unable to find address %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:62
+#, python-format
+msgid "Network does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:70
+#, python-format
+msgid "Disassociating network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:74
+#: cinder/api/openstack/compute/contrib/networks.py:91
+#: cinder/api/openstack/compute/contrib/networks.py:101
+msgid "Network not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:87
+#, python-format
+msgid "Showing network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:97
+#, python-format
+msgid "Deleting network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/scheduler_hints.py:41
+msgid "Malformed scheduler_hints attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:222
+msgid "Security group id should be integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:243
+msgid "Security group is still in use"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:295
+#, python-format
+msgid "Security group %s already exists"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:315
+#, python-format
+msgid "Security group %s is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:318
+#, python-format
+msgid "Security group %s cannot be empty."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:321
+#, python-format
+msgid "Security group %s should not be greater than 255 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:348
+msgid "Parent group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:351
+#, python-format
+msgid "Security group (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:369
+msgid "Not enough parameters to build a valid rule."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:376
+#, python-format
+msgid "This rule already exists in group %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:414
+msgid "Parent or group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:507
+msgid "Rule id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:510
+#, python-format
+msgid "Rule (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:574
+#: cinder/api/openstack/compute/contrib/security_groups.py:607
+msgid "Security group not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:578
+#: cinder/api/openstack/compute/contrib/security_groups.py:611
+msgid "Security group name cannot be empty"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:45
+#, python-format
+msgid "start instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:54
+#, python-format
+msgid "stop instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:73
+#: cinder/api/openstack/volume/volumes.py:106
+#, python-format
+msgid "vol=%s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:146
+#: cinder/api/openstack/volume/volumes.py:184
+#, python-format
+msgid "Delete volume with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:329
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(server_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:481
+#: cinder/api/openstack/volume/snapshots.py:110
+#, python-format
+msgid "Delete snapshot with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:524
+#: cinder/api/openstack/volume/snapshots.py:150
+#, python-format
+msgid "Create snapshot from volume %s"
+msgstr ""
+
+#: cinder/auth/fakeldap.py:33
+msgid "Attempted to instantiate singleton"
+msgstr ""
+
+#: cinder/auth/ldapdriver.py:650
+#, python-format
+msgid ""
+"Attempted to remove the last member of a group. Deleting the group at %s "
+"instead."
+msgstr ""
+
+#: cinder/auth/manager.py:298
+#, python-format
+msgid "Looking up user: %r"
+msgstr ""
+
+#: cinder/auth/manager.py:302
+#, python-format
+msgid "Failed authorization for access key %s"
+msgstr ""
+
+#: cinder/auth/manager.py:308
+#, python-format
+msgid "Using project name = user name (%s)"
+msgstr ""
+
+#: cinder/auth/manager.py:315
+#, python-format
+msgid "failed authorization: no project named %(pjid)s (user=%(uname)s)"
+msgstr ""
+
+#: cinder/auth/manager.py:324
+#, python-format
+msgid ""
+"Failed authorization: user %(uname)s not admin and not member of project "
+"%(pjname)s"
+msgstr ""
+
+#: cinder/auth/manager.py:331 cinder/auth/manager.py:343
+#, python-format
+msgid "user.secret: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:332 cinder/auth/manager.py:344
+#, python-format
+msgid "expected_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:333 cinder/auth/manager.py:345
+#, python-format
+msgid "signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:335 cinder/auth/manager.py:357
+#, python-format
+msgid "Invalid signature for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:353
+#, python-format
+msgid "host_only_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:449
+msgid "Must specify project"
+msgstr ""
+
+#: cinder/auth/manager.py:490
+#, python-format
+msgid "Adding role %(role)s to user %(uid)s in project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:493
+#, python-format
+msgid "Adding sitewide role %(role)s to user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:519
+#, python-format
+msgid "Removing role %(role)s from user %(uid)s on project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:522
+#, python-format
+msgid "Removing sitewide role %(role)s from user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:595
+#, python-format
+msgid "Created project %(name)s with manager %(manager_user)s"
+msgstr ""
+
+#: cinder/auth/manager.py:613
+#, python-format
+msgid "modifying project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:625
+#, python-format
+msgid "Adding user %(uid)s to project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:646
+#, python-format
+msgid "Remove user %(uid)s from project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:676
+#, python-format
+msgid "Deleting project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:734
+#, python-format
+msgid "Created user %(rvname)s (admin: %(rvadmin)r)"
+msgstr ""
+
+#: cinder/auth/manager.py:743
+#, python-format
+msgid "Deleting user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:753
+#, python-format
+msgid "Access Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:755
+#, python-format
+msgid "Secret Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:757
+#, python-format
+msgid "Admin status set to %(admin)r for user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:802
+#, python-format
+msgid "No vpn data for project %s"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:46
+msgid "Instance type for vpn instances"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:49
+msgid "Template for cloudpipe instance boot script"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:52
+msgid "Network to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:55
+msgid "Netmask to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:107
+#, python-format
+msgid "Launching VPN for %s"
+msgstr ""
+
+#: cinder/compute/api.py:141
+msgid "No compute host specified"
+msgstr ""
+
+#: cinder/compute/api.py:144
+#, python-format
+msgid "Unable to find host for Instance %s"
+msgstr ""
+
+#: cinder/compute/api.py:192
+#, python-format
+msgid ""
+"Quota exceeded for %(pid)s, tried to set %(num_metadata)s metadata "
+"properties"
+msgstr ""
+
+#: cinder/compute/api.py:203
+#, python-format
+msgid "Quota exceeded for %(pid)s, metadata property key or value too long"
+msgstr ""
+
+#: cinder/compute/api.py:257
+msgid "Cannot run any more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:259
+#, python-format
+msgid "Can only run %s more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:261
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances. "
+msgstr ""
+
+#: cinder/compute/api.py:310
+msgid "Creating a raw instance"
+msgstr ""
+
+#: cinder/compute/api.py:312
+#, python-format
+msgid "Using Kernel=%(kernel_id)s, Ramdisk=%(ramdisk_id)s"
+msgstr ""
+
+#: cinder/compute/api.py:383
+#, python-format
+msgid "Going to run %s instances..."
+msgstr ""
+
+#: cinder/compute/api.py:447
+#, python-format
+msgid "bdm %s"
+msgstr ""
+
+#: cinder/compute/api.py:474
+#, python-format
+msgid "block_device_mapping %s"
+msgstr ""
+
+#: cinder/compute/api.py:591
+#, python-format
+msgid "Sending create to scheduler for %(pid)s/%(uid)s's"
+msgstr ""
+
+#: cinder/compute/api.py:871
+msgid "Going to try to soft delete instance"
+msgstr ""
+
+#: cinder/compute/api.py:891
+msgid "No host for instance, deleting immediately"
+msgstr ""
+
+#: cinder/compute/api.py:939
+msgid "Going to try to terminate instance"
+msgstr ""
+
+#: cinder/compute/api.py:977
+msgid "Going to try to stop instance"
+msgstr ""
+
+#: cinder/compute/api.py:996
+msgid "Going to try to start instance"
+msgstr ""
+
+#: cinder/compute/api.py:1000
+#, python-format
+msgid "Instance %(instance_uuid)s is not stopped. (%(vm_state)s"
+msgstr ""
+
+#: cinder/compute/api.py:1071 cinder/volume/api.py:173
+#: cinder/volume/volume_types.py:64
+#, python-format
+msgid "Searching by: %s"
+msgstr ""
+
+#: cinder/compute/api.py:1201
+#, python-format
+msgid "Image type not recognized %s"
+msgstr ""
+
+#: cinder/compute/api.py:1369
+msgid "flavor_id is None. Assuming migration."
+msgstr ""
+
+#: cinder/compute/api.py:1377
+#, python-format
+msgid ""
+"Old instance type %(current_instance_type_name)s,  new instance type "
+"%(new_instance_type_name)s"
+msgstr ""
+
+#: cinder/compute/api.py:1644
+#, python-format
+msgid "multiple fixedips exist, using the first: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:57 cinder/compute/instance_types.py:65
+msgid "create arguments must be positive integers"
+msgstr ""
+
+#: cinder/compute/instance_types.py:76 cinder/volume/volume_types.py:41
+#, python-format
+msgid "DB error: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:86
+#, python-format
+msgid "Instance type %s not found for deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:138
+#, python-format
+msgid "check_instance_lock: decorating: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:140
+#, python-format
+msgid ""
+"check_instance_lock: arguments: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+msgstr ""
+
+#: cinder/compute/manager.py:144
+#, python-format
+msgid "check_instance_lock: locked: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:146
+#, python-format
+msgid "check_instance_lock: admin: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:151
+#, python-format
+msgid "check_instance_lock: executing: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:155
+#, python-format
+msgid "check_instance_lock: not executing |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:201
+#, python-format
+msgid "Unable to load the virtualization driver: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:223
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s has been destroyed from under us while trying "
+"to set it to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:240
+#, python-format
+msgid "Current state is %(drv_state)s, state in DB is %(db_state)s."
+msgstr ""
+
+#: cinder/compute/manager.py:245
+msgid "Rebooting instance after cinder-compute restart."
+msgstr ""
+
+#: cinder/compute/manager.py:255
+msgid "Hypervisor driver does not support firewall rules"
+msgstr ""
+
+#: cinder/compute/manager.py:260
+msgid "Checking state"
+msgstr ""
+
+#: cinder/compute/manager.py:329
+#, python-format
+msgid "Setting up bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:400
+#, python-format
+msgid "Instance %s already deleted from database. Attempting forceful vm deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:406
+#, python-format
+msgid "Exception encountered while terminating the instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:444
+#, python-format
+msgid "Instance %s not found."
+msgstr ""
+
+#: cinder/compute/manager.py:480
+msgid "Instance has already been created"
+msgstr ""
+
+#: cinder/compute/manager.py:523
+#, python-format
+msgid ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:528
+#, python-format
+msgid ""
+"Image '%(image_id)s' size %(size_bytes)d exceeded instance_type allowed "
+"size %(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:538
+msgid "Starting instance..."
+msgstr ""
+
+#: cinder/compute/manager.py:548
+msgid "Skipping network allocation for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:561
+msgid "Instance failed network setup"
+msgstr ""
+
+#: cinder/compute/manager.py:565
+#, python-format
+msgid "Instance network_info: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:578
+msgid "Instance failed block device setup"
+msgstr ""
+
+#: cinder/compute/manager.py:594
+msgid "Instance failed to spawn"
+msgstr ""
+
+#: cinder/compute/manager.py:615
+msgid "Deallocating network for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:672
+#, python-format
+msgid "%(action_str)s instance"
+msgstr ""
+
+#: cinder/compute/manager.py:699
+#, python-format
+msgid "Ignoring DiskNotFound: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:708
+#, python-format
+msgid "terminating bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:742 cinder/compute/manager.py:1328
+#: cinder/compute/manager.py:1416 cinder/compute/manager.py:2501
+#, python-format
+msgid "%s. Setting instance vm_state to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:811
+#, python-format
+msgid ""
+"Cannot rebuild instance [%(instance_uuid)s], because the given image does"
+" not exist."
+msgstr ""
+
+#: cinder/compute/manager.py:816
+#, python-format
+msgid "Cannot rebuild instance [%(instance_uuid)s]: %(exc)s"
+msgstr ""
+
+#: cinder/compute/manager.py:823
+#, python-format
+msgid "Rebuilding instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:876
+#, python-format
+msgid "Rebooting instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:891
+#, python-format
+msgid ""
+"trying to reboot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:933
+#, python-format
+msgid "instance %s: snapshotting"
+msgstr ""
+
+#: cinder/compute/manager.py:939
+#, python-format
+msgid ""
+"trying to snapshot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:995
+#, python-format
+msgid "Found %(num_images)d images (rotation: %(rotation)d)"
+msgstr ""
+
+#: cinder/compute/manager.py:1001
+#, python-format
+msgid "Rotating out %d backups"
+msgstr ""
+
+#: cinder/compute/manager.py:1005
+#, python-format
+msgid "Deleting image %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1035
+#, python-format
+msgid "Failed to set admin password. Instance %s is not running"
+msgstr ""
+
+#: cinder/compute/manager.py:1041
+#, python-format
+msgid "Instance %s: Root password set"
+msgstr ""
+
+#: cinder/compute/manager.py:1050
+msgid "set_admin_password is not implemented by this driver."
+msgstr ""
+
+#: cinder/compute/manager.py:1064
+msgid "Error setting admin password"
+msgstr ""
+
+#: cinder/compute/manager.py:1079
+#, python-format
+msgid ""
+"trying to inject a file into a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1084
+#, python-format
+msgid "instance %(instance_uuid)s: injecting file to %(path)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1098
+#, python-format
+msgid ""
+"trying to update agent on a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1103
+#, python-format
+msgid "instance %(instance_uuid)s: updating agent to %(url)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1116
+#, python-format
+msgid "instance %s: rescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1141
+#, python-format
+msgid "instance %s: unrescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1270
+msgid "destination same as source!"
+msgstr ""
+
+#: cinder/compute/manager.py:1287
+#, python-format
+msgid "instance %s: migrating"
+msgstr ""
+
+#: cinder/compute/manager.py:1471
+#, python-format
+msgid "instance %s: pausing"
+msgstr ""
+
+#: cinder/compute/manager.py:1489
+#, python-format
+msgid "instance %s: unpausing"
+msgstr ""
+
+#: cinder/compute/manager.py:1525
+#, python-format
+msgid "instance %s: retrieving diagnostics"
+msgstr ""
+
+#: cinder/compute/manager.py:1534
+#, python-format
+msgid "instance %s: suspending"
+msgstr ""
+
+#: cinder/compute/manager.py:1556
+#, python-format
+msgid "instance %s: resuming"
+msgstr ""
+
+#: cinder/compute/manager.py:1579
+#, python-format
+msgid "instance %s: locking"
+msgstr ""
+
+#: cinder/compute/manager.py:1588
+#, python-format
+msgid "instance %s: unlocking"
+msgstr ""
+
+#: cinder/compute/manager.py:1596
+#, python-format
+msgid "instance %s: getting locked state"
+msgstr ""
+
+#: cinder/compute/manager.py:1606
+#, python-format
+msgid "instance %s: reset network"
+msgstr ""
+
+#: cinder/compute/manager.py:1614
+#, python-format
+msgid "instance %s: inject network info"
+msgstr ""
+
+#: cinder/compute/manager.py:1618
+#, python-format
+msgid "network_info to inject: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:1655
+#, python-format
+msgid "instance %s: getting vnc console"
+msgstr ""
+
+#: cinder/compute/manager.py:1685
+#, python-format
+msgid "Booting with volume %(volume_id)s at %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1703
+#, python-format
+msgid ""
+"instance %(instance_uuid)s: attaching volume %(volume_id)s to "
+"%(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1705
+#, python-format
+msgid "Attaching volume %(volume_id)s to %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1714
+#, python-format
+msgid "instance %(instance_uuid)s: attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1724
+#, python-format
+msgid "Attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1752
+#, python-format
+msgid "Detach volume %(volume_id)s from mountpoint %(mp)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1756
+#, python-format
+msgid "Detaching volume from unknown instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1822
+#, python-format
+msgid ""
+"Creating tmpfile %s to notify to other compute nodes that they should "
+"mount the same storage."
+msgstr ""
+
+#: cinder/compute/manager.py:1884
+msgid "Instance has no volume."
+msgstr ""
+
+#: cinder/compute/manager.py:1916
+#, python-format
+msgid "plug_vifs() failed %(cnt)d.Retry up to %(max_retry)d for %(hostname)s."
+msgstr ""
+
+#: cinder/compute/manager.py:1973
+#, python-format
+msgid "Pre live migration failed at  %(dest)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2000
+msgid "post_live_migration() is started.."
+msgstr ""
+
+#: cinder/compute/manager.py:2030
+msgid "No floating_ip found"
+msgstr ""
+
+#: cinder/compute/manager.py:2038
+msgid "No floating_ip found."
+msgstr ""
+
+#: cinder/compute/manager.py:2040
+#, python-format
+msgid ""
+"Live migration: Unexpected error: cannot inherit floating ip.\n"
+"%(e)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2073
+#, python-format
+msgid "Migrating instance to %(dest)s finished successfully."
+msgstr ""
+
+#: cinder/compute/manager.py:2075
+msgid ""
+"You may see the error \"libvirt: QEMU error: Domain not found: no domain "
+"with matching name.\" This error can be safely ignored."
+msgstr ""
+
+#: cinder/compute/manager.py:2090
+msgid "Post operation of migraton started"
+msgstr ""
+
+#: cinder/compute/manager.py:2226
+#, python-format
+msgid "Updated the info_cache for instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:2255
+msgid "Updating bandwidth usage cache"
+msgstr ""
+
+#: cinder/compute/manager.py:2277
+msgid "Updating host status"
+msgstr ""
+
+#: cinder/compute/manager.py:2305
+#, python-format
+msgid ""
+"Found %(num_db_instances)s in the database and %(num_vm_instances)s on "
+"the hypervisor."
+msgstr ""
+
+#: cinder/compute/manager.py:2331
+#, python-format
+msgid ""
+"During the sync_power process the instance %(uuid)s has moved from host "
+"%(src)s to host %(dst)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2344
+#, python-format
+msgid ""
+"Instance %s is in the process of migrating to this host. Wait next "
+"sync_power cycle before setting power state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2350
+msgid ""
+"Instance found in database but not known by hypervisor. Setting power "
+"state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2380
+msgid "FLAGS.reclaim_instance_interval <= 0, skipping..."
+msgstr ""
+
+#: cinder/compute/manager.py:2392
+msgid "Reclaiming deleted instance"
+msgstr ""
+
+#: cinder/compute/manager.py:2458
+#, python-format
+msgid ""
+"Detected instance with name label '%(name)s' which is marked as DELETED "
+"but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2465
+#, python-format
+msgid ""
+"Destroying instance with name label '%(name)s' which is marked as DELETED"
+" but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2472
+#, python-format
+msgid "Unrecognized value '%(action)s' for FLAGS.running_deleted_instance_action"
+msgstr ""
+
+#: cinder/compute/manager.py:2542
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: unrecoverable state during operation on "
+"%(host)s"
+msgstr ""
+
+#: cinder/compute/utils.py:142
+msgid "v4 subnets are required for legacy nw_info"
+msgstr ""
+
+#: cinder/console/manager.py:77 cinder/console/vmrc_manager.py:70
+msgid "Adding console"
+msgstr ""
+
+#: cinder/console/manager.py:97
+#, python-format
+msgid "Tried to remove non-existant console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:122
+#, python-format
+msgid "Tried to remove non-existent console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:125
+#, python-format
+msgid "Removing console %(console_id)s."
+msgstr ""
+
+#: cinder/console/xvp.py:98
+msgid "Rebuilding xvp conf"
+msgstr ""
+
+#: cinder/console/xvp.py:116
+#, python-format
+msgid "Re-wrote %s"
+msgstr ""
+
+#: cinder/console/xvp.py:121
+msgid "Stopping xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:134
+msgid "Starting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:141
+#, python-format
+msgid "Error starting xvp: %s"
+msgstr ""
+
+#: cinder/console/xvp.py:144
+msgid "Restarting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:146
+msgid "xvp not running..."
+msgstr ""
+
+#: cinder/consoleauth/manager.py:63
+#, python-format
+msgid "Deleting Expired Token: (%s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:75
+#, python-format
+msgid "Received Token: %(token)s, %(token_dict)s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:79
+#, python-format
+msgid "Checking Token: %(token)s, %(token_valid)s)"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:57
+msgid "Use of empty request context is deprecated"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:198
+#, python-format
+msgid "Unrecognized read_deleted value '%s'"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:516 cinder/db/sqlalchemy/api.py:551
+#, python-format
+msgid "No ComputeNode for %(host)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4019 cinder/db/sqlalchemy/api.py:4045
+#, python-format
+msgid "No backend config with id %(sm_backend_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4103
+#, python-format
+msgid "No sm_flavor called %(sm_flavor)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4147
+#, python-format
+msgid "No sm_volume with id %(volume_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:66
+msgid "python-migrate is not installed. Exiting."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:78
+msgid "version should be an integer"
+msgstr ""
+
+#: cinder/db/sqlalchemy/session.py:137
+#, python-format
+msgid "SQL connection failed. %s attempts left."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:48
+msgid "interface column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:80
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:54
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:48
+#, python-format
+msgid "Table |%s| not created!"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:87
+msgid "VIF column not added to fixed_ips table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:97
+#, python-format
+msgid "join list for moving mac_addresses |%s|"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:39
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:60
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:99
+msgid "foreign key constraint couldn't be added"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:58
+msgid "foreign key constraint couldn't be dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py:34
+msgid "priority column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:41
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:42
+#: cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py:56
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:68
+msgid "foreign key constraint couldn't be removed"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py:34
+msgid "progress column not added to instances table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py:97
+#, python-format
+msgid ""
+"Could not cast flavorid to integer: %s. Set flavorid to an integer-like "
+"string to downgrade."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:69
+msgid "instance_info_caches tables not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py:41
+msgid "progress column not added to compute_nodes table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:76
+msgid "dns_domains table not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:60
+msgid "quota_classes table not dropped"
+msgstr ""
+
+#: cinder/image/glance.py:147
+msgid "Connection error contacting glance server, retrying"
+msgstr ""
+
+#: cinder/image/glance.py:153 cinder/network/quantum/melange_connection.py:104
+msgid "Maximum attempts reached"
+msgstr ""
+
+#: cinder/image/glance.py:278
+#, python-format
+msgid "Creating image in Glance. Metadata passed in %s"
+msgstr ""
+
+#: cinder/image/glance.py:281
+#, python-format
+msgid "Metadata after formatting for Glance %s"
+msgstr ""
+
+#: cinder/image/glance.py:289
+#, python-format
+msgid "Metadata returned from Glance formatted for Base %s"
+msgstr ""
+
+#: cinder/image/glance.py:331 cinder/image/glance.py:335
+msgid "Not the image owner"
+msgstr ""
+
+#: cinder/image/glance.py:410
+#, python-format
+msgid "%(timestamp)s does not follow any of the signatures: %(iso_formats)s"
+msgstr ""
+
+#: cinder/image/s3.py:309
+#, python-format
+msgid "Failed to download %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:328
+#, python-format
+msgid "Failed to decrypt %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:340
+#, python-format
+msgid "Failed to untar %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:353
+#, python-format
+msgid "Failed to upload %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:379
+#, python-format
+msgid "Failed to decrypt private key: %s"
+msgstr ""
+
+#: cinder/image/s3.py:387
+#, python-format
+msgid "Failed to decrypt initialization vector: %s"
+msgstr ""
+
+#: cinder/image/s3.py:398
+#, python-format
+msgid "Failed to decrypt image file %(image_file)s: %(err)s"
+msgstr ""
+
+#: cinder/image/s3.py:410
+msgid "Unsafe filenames in image"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:38 cinder/ipv6/rfc2462.py:34
+#, python-format
+msgid "Bad mac for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:40 cinder/ipv6/rfc2462.py:36
+#, python-format
+msgid "Bad prefix for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:42
+#, python-format
+msgid "Bad project_id for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/network/ldapdns.py:321
+msgid "This driver only supports type 'a' entries."
+msgstr ""
+
+#: cinder/network/linux_net.py:166
+#, python-format
+msgid "Attempted to remove chain %s which does not exist"
+msgstr ""
+
+#: cinder/network/linux_net.py:192
+#, python-format
+msgid "Unknown chain: %r"
+msgstr ""
+
+#: cinder/network/linux_net.py:215
+#, python-format
+msgid ""
+"Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r "
+"%(top)r"
+msgstr ""
+
+#: cinder/network/linux_net.py:335
+msgid "IPTablesManager.apply completed with success"
+msgstr ""
+
+#: cinder/network/linux_net.py:694
+#, python-format
+msgid "Hupping dnsmasq threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:696
+#, python-format
+msgid "Pid %d is stale, relaunching dnsmasq"
+msgstr ""
+
+#: cinder/network/linux_net.py:756
+#, python-format
+msgid "killing radvd threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:758
+#, python-format
+msgid "Pid %d is stale, relaunching radvd"
+msgstr ""
+
+#: cinder/network/linux_net.py:967
+#, python-format
+msgid "Starting VLAN inteface %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:999
+#, python-format
+msgid "Starting Bridge interface for %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1142
+#, python-format
+msgid "Starting bridge %s "
+msgstr ""
+
+#: cinder/network/linux_net.py:1149
+#, python-format
+msgid "Done starting bridge %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1167
+#, python-format
+msgid "Failed unplugging gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/linux_net.py:1170
+#, python-format
+msgid "Unplugged gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/manager.py:291
+#, python-format
+msgid "Fixed ip %(fixed_ip_id)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:300 cinder/network/manager.py:496
+#, python-format
+msgid "Interface %(interface)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:315
+#, python-format
+msgid "floating IP allocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:353
+#, python-format
+msgid "floating IP deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:386
+#, python-format
+msgid "Address |%(address)s| is not allocated"
+msgstr ""
+
+#: cinder/network/manager.py:390
+#, python-format
+msgid "Address |%(address)s| is not allocated to your project |%(project)s|"
+msgstr ""
+
+#: cinder/network/manager.py:402
+#, python-format
+msgid "Quota exceeded for %s, tried to allocate address"
+msgstr ""
+
+#: cinder/network/manager.py:614
+#, python-format
+msgid ""
+"Database inconsistency: DNS domain |%s| is registered in the Cinder db but "
+"not visible to either the floating or instance DNS driver. It will be "
+"ignored."
+msgstr ""
+
+#: cinder/network/manager.py:660
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing zone to |%(av_zone)s|."
+msgstr ""
+
+#: cinder/network/manager.py:670
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing project to |%(project)s|."
+msgstr ""
+
+#: cinder/network/manager.py:778
+#, python-format
+msgid "Disassociated %s stale fixed ip(s)"
+msgstr ""
+
+#: cinder/network/manager.py:782
+msgid "setting network host"
+msgstr ""
+
+#: cinder/network/manager.py:896
+#, python-format
+msgid "network allocations for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:901
+#, python-format
+msgid "networks retrieved for instance |%(instance_id)s|: |%(networks)s|"
+msgstr ""
+
+#: cinder/network/manager.py:930
+#, python-format
+msgid "network deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:1152
+#, python-format
+msgid ""
+"instance-dns-zone is |%(domain)s|, which is in availability zone "
+"|%(zone)s|. Instance |%(instance)s| is in zone |%(zone2)s|. No DNS record"
+" will be created."
+msgstr ""
+
+#: cinder/network/manager.py:1227
+#, python-format
+msgid "Unable to release %s because vif doesn't exist."
+msgstr ""
+
+#: cinder/network/manager.py:1244
+#, python-format
+msgid "Leased IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1248
+#, python-format
+msgid "IP %s leased that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1256
+#, python-format
+msgid "IP |%s| leased that isn't allocated"
+msgstr ""
+
+#: cinder/network/manager.py:1261
+#, python-format
+msgid "Released IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1265
+#, python-format
+msgid "IP %s released that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1268
+#, python-format
+msgid "IP %s released that was not leased"
+msgstr ""
+
+#: cinder/network/manager.py:1331
+msgid "cidr already in use"
+msgstr ""
+
+#: cinder/network/manager.py:1334
+#, python-format
+msgid "requested cidr (%(cidr)s) conflicts with existing supernet (%(super)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1345
+#, python-format
+msgid ""
+"requested cidr (%(cidr)s) conflicts with existing smaller cidr "
+"(%(smaller)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1404
+msgid "Network already exists!"
+msgstr ""
+
+#: cinder/network/manager.py:1423
+#, python-format
+msgid "Network must be disassociated from project %s before delete"
+msgstr ""
+
+#: cinder/network/manager.py:1832
+msgid ""
+"The sum between the number of networks and the vlan start cannot be "
+"greater than 4094"
+msgstr ""
+
+#: cinder/network/manager.py:1839
+#, python-format
+msgid ""
+"The network range is not big enough to fit %(num_networks)s. Network size"
+" is %(network_size)s"
+msgstr ""
+
+#: cinder/network/minidns.py:65
+msgid "This driver only supports type 'a'"
+msgstr ""
+
+#: cinder/network/quantum/client.py:154
+msgid "Tenant ID not set"
+msgstr ""
+
+#: cinder/network/quantum/client.py:180
+#, python-format
+msgid "Quantum Client Request: %(method)s %(action)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:196
+#, python-format
+msgid "Quantum entity not found: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:206
+#, python-format
+msgid "Server %(status_code)s error: %(data)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:210
+#, python-format
+msgid "Unable to connect to server. Got error: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:228
+#, python-format
+msgid "unable to deserialize object of type = '%s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:162
+msgid "QuantumManager does not use 'multi_host' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:166
+msgid "QuantumManager requires that only one network is created per call"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:176
+msgid "QuantumManager does not use 'vlan_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:182
+msgid "QuantumManager does not use 'vpn_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:186
+msgid "QuantumManager does not use 'bridge' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:190
+msgid "QuantumManager does not use 'bridge_interface' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:195
+msgid "QuantumManager requires a valid (.1) gateway address."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:204
+#, python-format
+msgid ""
+"Unable to find existing quantum network for tenant '%(q_tenant_id)s' with"
+" net-id '%(quantum_net_id)s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:301
+#, python-format
+msgid "network allocations for instance %s"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:588
+#, python-format
+msgid ""
+"port deallocation failed for instance: |%(instance_id)s|, port_id: "
+"|%(port_id)s|"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:606
+#, python-format
+msgid ""
+"ipam deallocation failed for instance: |%(instance_id)s|, vif_uuid: "
+"|%(vif_uuid)s|"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:96
+#, python-format
+msgid "Server returned error: %s"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:98
+msgid "Connection error contacting melange service, retrying"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:108
+#, python-format
+msgid ""
+"allocate IP on network |%(network_id)s| belonging to "
+"|%(network_tenant_id)s| to this vif |%(vif_id)s| with mac "
+"|%(mac_address)s| belonging to |%(project_id)s| "
+msgstr ""
+
+#: cinder/network/quantum/melange_ipam_lib.py:133
+msgid "get_project_and_global_net_ids must be called with a non-null project_id"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:75
+msgid "Error creating network entry"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:90
+#, python-format
+msgid "No network with net_id = %s"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:221
+#, python-format
+msgid "No fixed IPs to deallocate for vif %s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:99
+#, python-format
+msgid "Connecting interface %(interface_id)s to net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:113
+#, python-format
+msgid "Deleting port %(port_id)s on net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/notifier/api.py:115
+#, python-format
+msgid "%s not in valid priorities"
+msgstr ""
+
+#: cinder/notifier/api.py:130
+#, python-format
+msgid ""
+"Problem '%(e)s' attempting to send to notification system. "
+"Payload=%(payload)s"
+msgstr ""
+
+#: cinder/notifier/list_notifier.py:65
+#, python-format
+msgid "Problem '%(e)s' attempting to send to notification driver %(driver)s."
+msgstr ""
+
+#: cinder/notifier/rabbit_notifier.py:46
+#, python-format
+msgid "Could not send notification to %(topic)s. Payload=%(message)s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:146
+#, python-format
+msgid "Returning exception %s to caller"
+msgstr ""
+
+#: cinder/rpc/amqp.py:188
+#, python-format
+msgid "unpacked context: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:231
+#, python-format
+msgid "received %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:236
+#, python-format
+msgid "no method for message: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:237
+#, python-format
+msgid "No method for message: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:321
+#, python-format
+msgid "Making asynchronous call on %s ..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:324
+#, python-format
+msgid "MSG_ID is %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:346
+#, python-format
+msgid "Making asynchronous cast on %s..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:354
+msgid "Making asynchronous fanout cast..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:379
+#, python-format
+msgid "Sending notification on %s..."
+msgstr ""
+
+#: cinder/rpc/common.py:54
+#, python-format
+msgid ""
+"Remote error: %(exc_type)s %(value)s\n"
+"%(traceback)s."
+msgstr ""
+
+#: cinder/rpc/common.py:71
+msgid "Timeout while waiting on RPC response."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:111
+msgid "Failed to process message... skipping it."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:407
+#, python-format
+msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:430
+#, python-format
+msgid "Connected to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:466
+#, python-format
+msgid ""
+"Unable to connect to AMQP server on %(hostname)s:%(port)d after "
+"%(max_retries)d tries: %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:482
+#, python-format
+msgid ""
+"AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying "
+"again in %(sleep_time)d seconds."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:533 cinder/rpc/impl_qpid.py:385
+#, python-format
+msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:551 cinder/rpc/impl_qpid.py:400
+#, python-format
+msgid "Timed out waiting for RPC response: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:555 cinder/rpc/impl_qpid.py:404
+#, python-format
+msgid "Failed to consume message from queue: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:589 cinder/rpc/impl_qpid.py:434
+#, python-format
+msgid "Failed to publish message to topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:341
+#, python-format
+msgid "Unable to connect to AMQP server: %s "
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:346
+#, python-format
+msgid "Connected to AMQP server on %s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:354
+msgid "Re-established AMQP queues"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:412
+msgid "Error processing message.  Skipping it."
+msgstr ""
+
+#: cinder/scheduler/chance.py:47 cinder/scheduler/simple.py:91
+#: cinder/scheduler/simple.py:143
+msgid "Is the appropriate service running?"
+msgstr ""
+
+#: cinder/scheduler/chance.py:52
+msgid "Could not find another compute"
+msgstr ""
+
+#: cinder/scheduler/driver.py:63
+#, python-format
+msgid "Casted '%(method)s' to volume '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:80
+#, python-format
+msgid "Casted '%(method)s' to compute '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:89
+#, python-format
+msgid "Casted '%(method)s' to network '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:107
+#, python-format
+msgid "Casted '%(method)s' to %(topic)s '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:181
+msgid "Must implement a fallback schedule"
+msgstr ""
+
+#: cinder/scheduler/driver.py:185
+msgid "Driver must implement schedule_prep_resize"
+msgstr ""
+
+#: cinder/scheduler/driver.py:190
+msgid "Driver must implement schedule_run_instance"
+msgstr ""
+
+#: cinder/scheduler/driver.py:325
+msgid "Block migration can not be used with shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:330
+msgid "Live migration can not be used without shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:367 cinder/scheduler/driver.py:457
+#, python-format
+msgid "host %(dest)s is not compatible with original host %(src)s."
+msgstr ""
+
+#: cinder/scheduler/driver.py:416
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"memory(host:%(avail)s <= instance:%(mem_inst)s)"
+msgstr ""
+
+#: cinder/scheduler/driver.py:472
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"disk(host:%(available)s <= instance:%(necessary)s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:51
+#, python-format
+msgid "No host selection for %s defined."
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:64
+#, python-format
+msgid "Attempting to build %(num_instances)d instance(s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:157
+msgid "Scheduler only understands Compute nodes (for now)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:199
+#, python-format
+msgid "Filtered %(hosts)s"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:209
+#, python-format
+msgid "Weighted %(weighted_host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:144
+#, python-format
+msgid "Host filter fails for ignored host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:151
+#, python-format
+msgid "Host filter fails for non-forced host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:157
+#, python-format
+msgid "Host filter function %(func)s failed for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:163
+#, python-format
+msgid "Host filter passes for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:272
+#, python-format
+msgid "Received %(service_name)s service update from %(host)s."
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:313
+msgid "host_manager only implemented for 'compute'"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:323
+#, python-format
+msgid "No service for compute ID %s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:85
+#, python-format
+msgid ""
+"Driver Method %(driver_method_name)s missing: %(e)s. Reverting to "
+"schedule()"
+msgstr ""
+
+#: cinder/scheduler/manager.py:150
+#, python-format
+msgid "Failed to schedule_%(method)s: %(ex)s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:159
+#, python-format
+msgid "Setting instance %(instance_uuid)s to %(state)s state."
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:66
+#, python-format
+msgid "Could not stat scheduler options file %(filename)s: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:75
+#, python-format
+msgid "Could not decode scheduler options: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/simple.py:87
+msgid "Not enough allocatable CPU cores remaining"
+msgstr ""
+
+#: cinder/scheduler/simple.py:137
+msgid "Not enough allocatable volume gigabytes remaining"
+msgstr ""
+
+#: cinder/scheduler/filters/core_filter.py:45
+msgid "VCPUs not set; assuming CPU collection broken"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:72
+#, python-format
+msgid "Faking execution of cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:80
+#, python-format
+msgid "Faked command matched %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:96
+#, python-format
+msgid "Faked command raised an exception %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:101
+#, python-format
+msgid "Reply to faked command is stdout='%(stdout)s' stderr='%(stderr)s'"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:784
+msgid "Please extend mock libvirt module to support flags"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:790
+msgid "Please extend fake libvirt module to support this auth method"
+msgstr ""
+
+#: cinder/tests/test_compute.py:365 cinder/tests/test_compute.py:1419
+#, python-format
+msgid "Running instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:371
+#, python-format
+msgid "After terminating instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:589
+msgid "Internal error"
+msgstr ""
+
+#: cinder/tests/test_compute.py:1430
+#, python-format
+msgid "After force-killing instances: %s"
+msgstr ""
+
+#: cinder/tests/test_misc.py:92
+#, python-format
+msgid ""
+"The following migrations are missing a downgrade:\n"
+"\t%s"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:169
+msgid "id"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:170
+msgid "IPv4"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:171
+msgid "IPv6"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:172
+msgid "start address"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:173
+msgid "DNS1"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:174
+msgid "DNS2"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:175
+msgid "VlanID"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:176
+msgid "project"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:177
+msgid "uuid"
+msgstr ""
+
+#: cinder/tests/test_volume.py:216
+#, python-format
+msgid "Target %s allocated"
+msgstr ""
+
+#: cinder/tests/test_volume.py:468
+#, python-format
+msgid "Cannot confirm exported volume id:%s."
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:58
+#, python-format
+msgid "Given data: %s"
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:59
+#, python-format
+msgid "Result data: %s"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:626
+#, python-format
+msgid "Creating files in %s to simulate guest agent"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:637
+#, python-format
+msgid "Removing simulated guest agent files in %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/test_servers.py:2144
+#, python-format
+msgid "Quota exceeded: code=%(code)s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:57
+#, python-format
+msgid "_create: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:66
+#, python-format
+msgid "_delete: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:75
+#, python-format
+msgid "_get: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:85
+#, python-format
+msgid "_get_all: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:125
+#, python-format
+msgid "test_snapshot_create: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:134
+#, python-format
+msgid "test_snapshot_create: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:156
+#, python-format
+msgid "test_snapshot_create_force: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:165
+#, python-format
+msgid "test_snapshot_create_force: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:205
+#, python-format
+msgid "test_snapshot_show: resp=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:231
+#, python-format
+msgid "test_snapshot_detail: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/integrated/test_login.py:31
+#, python-format
+msgid "flavor: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:38
+#, python-format
+msgid ""
+"%(message)s\n"
+"Status Code: %(_status)s\n"
+"Body: %(_body)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:47
+msgid "Authentication error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:55
+msgid "Authorization error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:63
+msgid "Item not found"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:105
+#, python-format
+msgid "Doing %(method)s on %(relative_url)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:107
+#, python-format
+msgid "Body: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:125
+#, python-format
+msgid "%(auth_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:151
+#, python-format
+msgid "%(relative_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:161
+msgid "Unexpected status code"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:168
+#, python-format
+msgid "Decoding JSON: %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:133
+#, python-format
+msgid "Nested received %(queue)s, %(value)s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:142
+#, python-format
+msgid "Nested return %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:160
+msgid "RPC backend does not support timeouts"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:227 cinder/tests/rpc/common.py:233
+#, python-format
+msgid "Received %s"
+msgstr ""
+
+#: cinder/virt/connection.py:85
+msgid "Failed to open connection to the hypervisor"
+msgstr ""
+
+#: cinder/virt/fake.py:270 cinder/virt/xenapi_conn.py:396
+#: cinder/virt/baremetal/proxy.py:716 cinder/virt/libvirt/connection.py:2045
+#, python-format
+msgid "Compute_service record created for %s "
+msgstr ""
+
+#: cinder/virt/fake.py:273 cinder/virt/xenapi_conn.py:399
+#: cinder/virt/baremetal/proxy.py:720 cinder/virt/libvirt/connection.py:2048
+#, python-format
+msgid "Compute_service record updated for %s "
+msgstr ""
+
+#: cinder/virt/firewall.py:130
+#, python-format
+msgid "Attempted to unfilter instance %s which is not filtered"
+msgstr ""
+
+#: cinder/virt/firewall.py:137
+#, python-format
+msgid "Filters added to instance %s"
+msgstr ""
+
+#: cinder/virt/firewall.py:139
+msgid "Provider Firewall Rules refreshed"
+msgstr ""
+
+#: cinder/virt/firewall.py:291
+#, python-format
+msgid "Adding security group rule: %r"
+msgstr ""
+
+#: cinder/virt/firewall.py:403 cinder/virt/xenapi/firewall.py:87
+#, python-format
+msgid "Adding provider rule: %s"
+msgstr ""
+
+#: cinder/virt/images.py:86
+msgid "'qemu-img info' parsing failed."
+msgstr ""
+
+#: cinder/virt/images.py:92
+#, python-format
+msgid "fmt=%(fmt)s backed by: %(backing_file)s"
+msgstr ""
+
+#: cinder/virt/images.py:104
+#, python-format
+msgid "Converted to raw, but format is now %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:105
+msgid ""
+"Must specify vmwareapi_host_ip,vmwareapi_host_username and "
+"vmwareapi_host_password to useconnection_type=vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:276
+#, python-format
+msgid "In vmwareapi:_create_session, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:359
+#, python-format
+msgid "In vmwareapi:_call_method, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:398
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: success"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:404
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: error %(error_info)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:409
+#, python-format
+msgid "In vmwareapi:_poll_task, Got this error %s"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:140
+msgid ""
+"Must specify xenapi_connection_url, xenapi_connection_username "
+"(optionally), and xenapi_connection_password to use "
+"connection_type=xenapi"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:329 cinder/virt/libvirt/connection.py:472
+msgid "Could not determine iscsi initiator name"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:460
+msgid "Host startup on XenServer is not supported."
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:489
+msgid "Unable to log in to XenAPI (is the Dom0 disk full?)"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:527
+msgid "Host is member of a pool, but DB says otherwise"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:599 cinder/virt/xenapi_conn.py:612
+#, python-format
+msgid "Got exception: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:93
+msgid "No domains exist."
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:95
+#, python-format
+msgid "============= initial domains =========== : %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:99
+msgid "Building domain: to be removed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:103
+msgid "Not running domain: remove"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:111
+msgid "domain running on an unknown node: discarded"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:127
+#, python-format
+msgid "No such domain (%s)"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:134
+#, python-format
+msgid "Failed power down Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:143
+msgid "deactivate -> activate fails"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:153
+msgid "destroy_domain: no such domain"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:154
+#, python-format
+msgid "No such domain %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:161
+#, python-format
+msgid "Domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:163
+#, python-format
+msgid "Nodes: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:166
+#, python-format
+msgid "After storing domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:169
+msgid "deactivation/removing domain failed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:176
+msgid "===== Domain is being created ====="
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:179
+msgid "Same domain name already exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:181
+msgid "create_domain: before get_idle_node"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:198
+#, python-format
+msgid "Created new domain: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:213
+#, python-format
+msgid "Failed to boot Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:222
+msgid "No such domain exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:226
+#, python-format
+msgid "change_domain_state: to new state %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:233
+#, python-format
+msgid "Stored fake domains to the file: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:244
+msgid "domain does not exist"
+msgstr ""
+
+#: cinder/virt/baremetal/nodes.py:42
+#, python-format
+msgid "Unknown baremetal driver %(d)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:148
+#, python-format
+msgid "Error encountered when destroying instance '%(name)s': %(ex)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:162
+#, python-format
+msgid "instance %(instance_name)s: deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:189
+#, python-format
+msgid "instance %s: rebooted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:192
+msgid "_wait_for_reboot failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:222
+#, python-format
+msgid "instance %s: rescued"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:225
+msgid "_wait_for_rescue failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:242
+msgid "<============= spawn of baremetal =============>"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:255
+#, python-format
+msgid "instance %s: is building"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:260
+msgid "Key is injected but instance is not running yet"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:265
+#, python-format
+msgid "instance %s: booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:268
+#, python-format
+msgid "~~~~~~ current state = %s ~~~~~~"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:269
+#, python-format
+msgid "instance %s spawned successfully"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:272
+#, python-format
+msgid "instance %s:not booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:274
+msgid "Bremetal assignment is overcommitted."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:354
+#, python-format
+msgid "instance %s: Creating image"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:473
+#, python-format
+msgid "instance %(inst_name)s: injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:484
+#, python-format
+msgid ""
+"instance %(inst_name)s: ignoring error injecting data into image "
+"%(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:529
+#, python-format
+msgid "instance %s: starting toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:531
+#, python-format
+msgid "instance %s: finished toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:574 cinder/virt/libvirt/connection.py:1815
+msgid ""
+"Cannot get the number of cpu, because this function is not implemented "
+"for this platform. This error can be safely ignored for now."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:714
+#, python-format
+msgid "#### RLK: cpu_arch = %s "
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:746
+msgid "Updating!"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:773 cinder/virt/libvirt/connection.py:2609
+#: cinder/virt/xenapi/host.py:129
+msgid "Updating host stats"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:185
+msgid "free_node...."
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:216
+#, python-format
+msgid "deactivate_node is called for node_id = %(id)s node_ip = %(ip)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:221
+msgid "status of node is set to 0"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:232
+msgid "rootfs is already removed"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:264
+msgid "Before ping to the bare-metal node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:275
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is ready"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:279
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is not ready, out_msg=%(out_msg)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:292
+msgid "Noting to do for tilera nodes: vmlinux is in CF"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:316
+msgid "activate_node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:330
+msgid "Node is unknown error state."
+msgstr ""
+
+#: cinder/virt/disk/api.py:165
+msgid "no capable image handler configured"
+msgstr ""
+
+#: cinder/virt/disk/api.py:178
+#, python-format
+msgid "unknown disk image handler: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:189
+msgid "image already mounted"
+msgstr ""
+
+#: cinder/virt/disk/api.py:276 cinder/virt/disk/guestfs.py:64
+#: cinder/virt/disk/guestfs.py:78 cinder/virt/disk/mount.py:100
+#, python-format
+msgid "Failed to mount filesystem: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:291
+#, python-format
+msgid "Failed to remove container: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:441
+#, python-format
+msgid "User %(username)s not found in password file."
+msgstr ""
+
+#: cinder/virt/disk/api.py:457
+#, python-format
+msgid "User %(username)s not found in shadow file."
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:39
+#, python-format
+msgid "unsupported partition: %s"
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:77
+msgid "unknown guestmount error"
+msgstr ""
+
+#: cinder/virt/disk/loop.py:30
+#, python-format
+msgid "Could not attach image to loopback: %s"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:76
+msgid "no partitions found"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:77
+#, python-format
+msgid "Failed to map partitions: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:58
+msgid "nbd unavailable: module not loaded"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:63
+msgid "No free nbd devices"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:81
+#, python-format
+msgid "qemu-nbd error: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:93
+#, python-format
+msgid "nbd device %s did not show up"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:265
+#, python-format
+msgid "Connecting to libvirt: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:286
+msgid "Connection to libvirt broke"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:388
+#, python-format
+msgid "Error from libvirt during destroy. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:400
+#, python-format
+msgid ""
+"Error from libvirt during saved instance removal. Code=%(errcode)s "
+"Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:411
+#, python-format
+msgid "Error from libvirt during undefine. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:423
+msgid "Instance destroyed successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:435
+#, python-format
+msgid "Error from libvirt during unfilter. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:461
+#, python-format
+msgid "Deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:554
+msgid "attaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:567
+msgid "detaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:692
+#, fuzzy, python-format
+msgid "Instance soft rebooted successfully."
+msgstr "bind %s: slettet"
+
+#: cinder/virt/libvirt/connection.py:696
+msgid "Failed to soft reboot instance."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:725
+msgid "Instance shutdown successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:761 cinder/virt/libvirt/connection.py:905
+msgid "During reboot, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:766
+msgid "Instance rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:867 cinder/virt/xenapi/vmops.py:1358
+#, python-format
+msgid ""
+"Found %(migration_count)d unconfirmed migrations older than "
+"%(confirm_window)d seconds"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:871
+#, python-format
+msgid "Automatically confirming migration %d"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:896
+msgid "Instance is running"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:910
+msgid "Instance spawned successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:926
+#, python-format
+msgid "data: %(data)r, fpath: %(fpath)r"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:978
+msgid "Guest does not have a console available"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1020
+#, python-format
+msgid "Path '%(path)s' supports direct I/O"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1024
+#, python-format
+msgid "Path '%(path)s' does not support direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1028 cinder/virt/libvirt/connection.py:1032
+#, python-format
+msgid "Error on '%(path)s' while checking direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1153
+msgid "Creating image"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1339
+#, python-format
+msgid "Injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1349
+#, python-format
+msgid "Ignoring error injecting data into image %(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1381
+#, python-format
+msgid "block_device_list %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1658
+msgid "Starting toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1662
+msgid "Finished toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1679
+#, python-format
+msgid ""
+"Error from libvirt while looking up %(instance_name)s: [Error Code "
+"%(error_code)s] %(ex)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1920
+msgid "libvirt version is too old (does not support getVersion)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1942
+#, python-format
+msgid "'<cpu>' must be 1, but %d\n"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1969
+#, python-format
+msgid "topology (%(topology)s) must have %(ks)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2067
+#, python-format
+msgid ""
+"Instance launched has CPU info:\n"
+"%s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2079
+#, python-format
+msgid ""
+"CPU doesn't have compatibility.\n"
+"\n"
+"%(ret)s\n"
+"\n"
+"Refer to %(u)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2136
+#, python-format
+msgid "Timeout migrating for %s. nwfilter not found."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2352
+#, python-format
+msgid "skipping %(path)s since it looks like volume"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2407
+#, python-format
+msgid "Getting disk size of %(i_name)s: %(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2458
+#, python-format
+msgid "Instance %s: Starting migrate_disk_and_power_off"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2513
+msgid "During wait running, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2518
+msgid "Instance running successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2525
+#, python-format
+msgid "Instance %s: Starting finish_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2565
+#, python-format
+msgid "Instance %s: Starting finish_revert_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:42
+msgid ""
+"Libvirt module could not be loaded. NWFilterFirewall will not work "
+"correctly."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:93
+msgid "Called setup_basic_filtering in nwfilter"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:101
+msgid "Ensuring static filters"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:171
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:217
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) for%(name)s is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:233
+msgid "iptables firewall: Setup Basic Filtering"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:252
+msgid "Attempted to unfilter instance which is not filtered"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:170
+#, python-format
+msgid "%s is a valid instance name"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:173
+#, python-format
+msgid "%s has a disk file"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:175
+#, python-format
+msgid "Instance %(instance)s is backed by %(backing)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:186
+#, python-format
+msgid ""
+"Instance %(instance)s is using a backing file %(backing)s which does not "
+"appear in the image service"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:237
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification failed"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:247
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification skipped, no hash stored"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:266
+#, python-format
+msgid "Cannot remove %(base_file)s, it does not exist"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:278
+#, python-format
+msgid "Base file too young to remove: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:281
+#, python-format
+msgid "Removing base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:288
+#, python-format
+msgid "Failed to remove %(base_file)s, error was %(error)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:299
+#, python-format
+msgid "%(id)s (%(base_file)s): checking"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:318
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): in use: on this node %(local)d local, %(remote)d "
+"on other nodes"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:330
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): warning -- an absent base file is in use! "
+"instances: %(instance_list)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:338
+#, python-format
+msgid "%(id)s (%(base_file)s): in use on (%(remote)d on other nodes)"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:348
+#, python-format
+msgid "%(id)s (%(base_file)s): image is not in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:354
+#, python-format
+msgid "%(id)s (%(base_file)s): image is in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:377
+#, python-format
+msgid "Skipping verification, no base directory at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:381
+msgid "Verify base images"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:388
+#, python-format
+msgid "Image id %(id)s yields fingerprint %(fingerprint)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:406
+#, python-format
+msgid "Unknown base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:411
+#, python-format
+msgid "Active base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:414
+#, python-format
+msgid "Corrupt base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:418
+#, python-format
+msgid "Removable base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:426
+msgid "Verification complete"
+msgstr ""
+
+#: cinder/virt/libvirt/utils.py:264
+msgid "Unable to find an open port"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:90
+#, python-format
+msgid "Ensuring vlan %(vlan)s and bridge %(bridge)s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:99
+#, python-format
+msgid "Ensuring bridge %s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:165 cinder/virt/libvirt/vif.py:220
+#, python-format
+msgid "Failed while unplugging vif of instance '%s'"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:163
+#, python-format
+msgid "iSCSI device not found at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:166
+#, python-format
+msgid ""
+"ISCSI volume not yet found at: %(mount_device)s. Will rescan & retry.  "
+"Try number: %(tries)s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:178
+#, python-format
+msgid "Found iSCSI node %(mount_device)s (after %(tries)s rescans)"
+msgstr ""
+
+#: cinder/virt/vmwareapi/error_util.py:93
+#, python-format
+msgid "Error(s) %s occurred in the call to RetrieveProperties"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:44 cinder/virt/xenapi/fake.py:77
+#, python-format
+msgid "%(text)s: _db_content => %(content)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:131
+#, python-format
+msgid "Property %(attr)s not set for the managed object %(objName)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:437
+msgid "There is no VM registered"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:439 cinder/virt/vmwareapi/fake.py:609
+#, python-format
+msgid "Virtual Machine with ref %s is not there"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:502
+#, python-format
+msgid "Logging out a session that is invalid or already logged out: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:517
+msgid "Session is faulty"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:520
+msgid "Session Invalid"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:606
+msgid " No Virtual Machine has been registered yet"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:99
+#, python-format
+msgid "Glance image %s is in killed state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:107
+#, python-format
+msgid "Glance image %(image_id)s is in unknown state - %(state)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:128
+msgid ""
+"ESX SOAP server returned an empty port group for the host system in its "
+"response"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:155
+#, python-format
+msgid "Creating Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:169
+#, python-format
+msgid "Created Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/read_write_util.py:150
+#, python-format
+msgid "Exception during HTTP connection close in VMWareHTTpWrite. Exception is %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:84
+msgid "Unable to import suds."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:90
+msgid "Must specify vmwareapi_wsdl_loc"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:145
+#, python-format
+msgid "No such SOAP method '%s' provided by VI SDK"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:150
+#, python-format
+msgid "httplib error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:157
+#, python-format
+msgid "Socket error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:162
+#, python-format
+msgid "Type error in  %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:166
+#, python-format
+msgid "Exception in %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:66
+msgid "Getting list of instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:82
+#, python-format
+msgid "Got total of %s instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:126
+msgid "Couldn't get a local Datastore reference"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:196
+#, python-format
+msgid "Creating VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:205
+#, python-format
+msgid "Created VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:234
+#, python-format
+msgid ""
+"Creating Virtual Disk of size  %(vmdk_file_size_in_kb)s KB and adapter "
+"type  %(adapter_type)s on the ESX host local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:251
+#, python-format
+msgid ""
+"Created Virtual Disk of size %(vmdk_file_size_in_kb)s KB on the ESX host "
+"local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:260
+#, python-format
+msgid ""
+"Deleting the file %(flat_uploaded_vmdk_path)s on the ESX host localstore "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:272
+#, python-format
+msgid ""
+"Deleted the file %(flat_uploaded_vmdk_path)s on the ESX host local store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:283
+#, python-format
+msgid ""
+"Downloading image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:298
+#, python-format
+msgid ""
+"Downloaded image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:315
+#, python-format
+msgid "Reconfiguring VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:322
+#, python-format
+msgid "Reconfigured VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:329
+#, python-format
+msgid "Powering on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:335
+#, python-format
+msgid "Powered on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:381
+#, python-format
+msgid "Creating Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:391
+#, python-format
+msgid "Created Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:434
+#, python-format
+msgid "Copying disk data before snapshot of the VM  instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:447
+#, python-format
+msgid "Copied disk data before snapshot of the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:456
+#, python-format
+msgid "Uploading image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:469
+#, python-format
+msgid "Uploaded image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:479
+#, python-format
+msgid "Deleting temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:488
+#, python-format
+msgid "Deleted temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:520
+msgid "instance is not powered on"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:527
+#, python-format
+msgid "Rebooting guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:530
+#, python-format
+msgid "Rebooted guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:532
+#, python-format
+msgid "Doing hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:536
+#, python-format
+msgid "Did hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:548
+#, python-format
+msgid "instance - %s not present"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:567
+#, python-format
+msgid "Powering off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:572
+#, python-format
+msgid "Powered off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:576
+#, python-format
+msgid "Unregistering the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:579
+#, python-format
+msgid "Unregistered the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:581
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while un-registering the "
+"VM: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:592
+#, python-format
+msgid "Deleting contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:602
+#, python-format
+msgid "Deleted contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:607
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while deleting the VM "
+"contents from the disk: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:615
+msgid "pause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:619
+msgid "unpause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:633
+#, python-format
+msgid "Suspending the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:637
+#, python-format
+msgid "Suspended the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:640
+msgid "instance is powered off and can not be suspended."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:643
+#, python-format
+msgid "VM %s was already in suspended state. So returning without doing anything"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:656
+#, python-format
+msgid "Resuming the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:661
+#, python-format
+msgid "Resumed the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:663
+msgid "instance is not in a suspended state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:699
+msgid "get_diagnostics not implemented for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:757
+#, python-format
+msgid ""
+"Reconfiguring VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:765
+#, python-format
+msgid ""
+"Reconfigured VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:802
+#, python-format
+msgid "Creating directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:806
+#, python-format
+msgid "Created directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:89
+#, python-format
+msgid "Downloading image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:103
+#, python-format
+msgid "Downloaded image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:108
+#, python-format
+msgid "Uploading image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:129
+#, python-format
+msgid "Uploaded image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:139
+#, python-format
+msgid "Getting image size for the image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:143
+#, python-format
+msgid "Got image size of %(size)s for the image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:553 cinder/virt/xenapi/fake.py:652
+#: cinder/virt/xenapi/fake.py:670 cinder/virt/xenapi/fake.py:732
+msgid "Raising NotImplemented"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:555
+#, python-format
+msgid "xenapi.fake does not have an implementation for %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:589
+#, python-format
+msgid "Calling %(localname)s %(impl)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:594
+#, python-format
+msgid "Calling getter %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:654
+#, python-format
+msgid ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:67
+#, python-format
+msgid ""
+"Instance %(name)s running on %(host)s could not be found in the database:"
+" assuming it is a worker VM and skipping migration to a new host"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:137
+#, python-format
+msgid "Unable to get SR for this host: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:169
+msgid "Unable to get updated status"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:172
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:37
+#, python-format
+msgid "Found non-unique network for name_label %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:55
+#, python-format
+msgid "Found non-unique network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:58
+#, python-format
+msgid "Found no network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:111
+#, python-format
+msgid "Unable to eject %(host)s from the pool; pool not empty"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:126
+#, python-format
+msgid "Unable to eject %(host)s from the pool; No master found"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:143
+#, python-format
+msgid "Pool-Join failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:146
+#, python-format
+msgid "Unable to join %(host)s in the pool"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:162
+#, python-format
+msgid "Pool-eject failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:174
+#, python-format
+msgid "Unable to set up pool: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:185
+#, python-format
+msgid "Pool-set_name_label failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:103
+#, python-format
+msgid "Found no PIF for device %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:122
+#, python-format
+msgid ""
+"PIF %(pif_rec['uuid'])s for network %(bridge)s has VLAN id %(pif_vlan)d. "
+"Expected %(vlan_num)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:218
+msgid "Created VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:245
+#, python-format
+msgid "VBD not found in instance %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:262
+#, python-format
+msgid "VBD %s already detached"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:265
+#, python-format
+msgid "VBD %(vbd_ref)s detach rejected, attempt %(num_attempt)d/%(max_attempts)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:270
+#, python-format
+msgid "Unable to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:275
+#, python-format
+msgid "Reached maximum number of retries trying to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:286
+#, python-format
+msgid "Unable to destroy VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:305
+#, python-format
+msgid "Creating %(vbd_type)s-type VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:308
+#, python-format
+msgid "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:319
+#, python-format
+msgid "Unable to destroy VDI %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:336
+#, python-format
+msgid ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:345
+#, python-format
+msgid "Copied VDI %(vdi_ref)s from VDI %(vdi_to_copy_ref)s on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:353
+#, python-format
+msgid "Cloned VDI %(vdi_ref)s from VDI %(vdi_to_clone_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:372
+#, python-format
+msgid "No primary VDI found for %(vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:379
+#, python-format
+msgid "Snapshotting with label '%(label)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:392
+#, python-format
+msgid "Created snapshot %(template_vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:431
+#, python-format
+msgid "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:583
+#, python-format
+msgid "Creating blank HD of size %(req_size)d gigs"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:634
+#, python-format
+msgid ""
+"Fast cloning is only supported on default local SR of type ext. SR on "
+"this system was found to be of type %(sr_type)s. Ignoring the cow flag."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:724
+#, python-format
+msgid ""
+"download_vhd %(image)s attempt %(attempt_num)d/%(max_attempts)d from "
+"%(glance_host)s:%(glance_port)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:734
+#, python-format
+msgid "download_vhd failed: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:750
+#, python-format
+msgid "Asking xapi to fetch vhd image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:760
+#, python-format
+msgid ""
+"xapi 'download_vhd' returned VDI of type '%(vdi_type)s' with UUID "
+"'%(vdi_uuid)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:789
+#, python-format
+msgid "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:805
+#, python-format
+msgid "image_size_bytes=%(size_bytes)d, allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:809
+#, python-format
+msgid ""
+"Image size %(size_bytes)d exceeded instance_type allowed size "
+"%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:831
+#, python-format
+msgid "Fetching image %(image)s, type %(image_type_str)"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:844
+#, python-format
+msgid "Size for image %(image)s: %(virtual_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:853
+#, python-format
+msgid ""
+"Kernel/Ramdisk image is too large: %(vdi_size)d bytes, max %(max_size)d "
+"bytes"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:870
+#, python-format
+msgid "Copying VDI %s to /boot/guest on dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:884
+#, python-format
+msgid "Kernel/Ramdisk VDI %s destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:895
+msgid "Failed to fetch glance image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:934
+#, python-format
+msgid "Detected %(image_type_str)s format for image %(image_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:955
+#, python-format
+msgid "Looking up vdi %s for PV kernel"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:973
+#, python-format
+msgid "Unknown image format %(disk_image_type)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1016
+#, python-format
+msgid "VDI %s is still available"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1059
+#, python-format
+msgid "(VM_UTILS) xenserver vm state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1061
+#, python-format
+msgid "(VM_UTILS) xenapi power_state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1088
+#, python-format
+msgid "Unable to parse rrd of %(vm_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1108
+#, python-format
+msgid "Re-scanning SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1136
+#, python-format
+msgid "Flag sr_matching_filter '%s' does not respect formatting convention"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1154
+msgid ""
+"XenAPI is unable to find a Storage Repository to install guest instances "
+"on. Please check your configuration and/or configure the flag "
+"'sr_matching_filter'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1167
+msgid "Cannot find SR of content-type ISO"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1175
+#, python-format
+msgid "ISO: looking at SR %(sr_rec)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1177
+msgid "ISO: not iso content"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1180
+msgid "ISO: iso content_type, no 'i18n-key' key"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1183
+msgid "ISO: iso content_type, i18n-key value not 'local-storage-iso'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1187
+msgid "ISO: SR MATCHing our criteria"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1189
+msgid "ISO: ISO, looking to see if it is host local"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1192
+#, python-format
+msgid "ISO: PBD %(pbd_ref)s disappeared"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1195
+#, python-format
+msgid "ISO: PBD matching, want %(pbd_rec)s, have %(host)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1198
+msgid "ISO: SR with local PBD"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1220
+#, python-format
+msgid ""
+"Unable to obtain RRD XML for VM %(vm_uuid)s with server details: "
+"%(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1236
+#, python-format
+msgid "Unable to obtain RRD XML updates with server details: %(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1290
+#, python-format
+msgid "Invalid statistics data from Xenserver: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1343
+#, python-format
+msgid "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1417
+#, python-format
+msgid ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1427
+#, python-format
+msgid "VHD coalesce attempts exceeded (%(max_attempts)d), giving up..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1462
+#, python-format
+msgid "Timeout waiting for device %s to be created"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1473
+#, python-format
+msgid "Plugging VBD %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1476
+#, python-format
+msgid "Plugging VBD %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1478
+#, python-format
+msgid "VBD %(vbd_ref)s plugged as %(orig_dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1481
+#, python-format
+msgid "VBD %(vbd_ref)s plugged into wrong dev, remapping to %(dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1490
+#, python-format
+msgid "Destroying VBD for VDI %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1498
+#, python-format
+msgid "Destroying VBD for VDI %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1511
+#, python-format
+msgid "Running pygrub against %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1518
+#, python-format
+msgid "Found Xen kernel %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1520
+msgid "No Xen kernel found.  Booting HVM."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1533
+msgid "Partitions:"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1539
+#, python-format
+msgid "  %(num)s: %(ptype)s %(size)d sectors"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1565
+#, python-format
+msgid ""
+"Writing partition table %(primary_first)d %(primary_last)d to "
+"%(dev_path)s..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1578
+#, python-format
+msgid "Writing partition table %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1632
+#, python-format
+msgid ""
+"Starting sparse_copy src=%(src_path)s dst=%(dst_path)s "
+"virtual_size=%(virtual_size)d block_size=%(block_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1664
+#, python-format
+msgid ""
+"Finished sparse_copy in %(duration).2f secs, %(compression_pct).2f%% "
+"reduction in size"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1714
+msgid ""
+"XenServer tools installed in this image are capable of network injection."
+"  Networking files will not bemanipulated"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1722
+msgid ""
+"XenServer tools are present in this image but are not capable of network "
+"injection"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1726
+msgid "XenServer tools are not installed in this image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1742
+msgid "Manipulating interface files directly"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1751
+#, python-format
+msgid "Failed to mount filesystem (expected for non-linux instances): %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:131 cinder/virt/xenapi/vmops.py:722
+#, python-format
+msgid "Updating progress to %(progress)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:231
+#, python-format
+msgid "Attempted to power on non-existent instance bad instance id %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:233
+msgid "Starting instance"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:303
+msgid "Removing kernel/ramdisk files from dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:358
+msgid "Failed to spawn, rolling back"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:443
+msgid "Detected ISO image type, creating blank VM for install"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:462
+msgid "Auto configuring disk, attempting to resize partition..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:515
+#, python-format
+msgid "Invalid value for injected_files: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:520
+#, python-format
+msgid "Injecting file path: '%s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:527
+msgid "Setting admin password"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:531
+msgid "Resetting network"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:538
+msgid "Setting VCPU weight"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:544
+msgid "Starting VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:551
+#, python-format
+msgid ""
+"Latest agent build for %(hypervisor)s/%(os)s/%(architecture)s is "
+"%(version)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:554
+#, python-format
+msgid "No agent build found for %(hypervisor)s/%(os)s/%(architecture)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:561
+msgid "Waiting for instance state to become running"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:573
+msgid "Querying agent version"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:576
+#, python-format
+msgid "Instance agent version: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:581
+#, python-format
+msgid "Updating Agent to %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:616
+#, python-format
+msgid "No opaque_ref could be determined for '%s'."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:670
+msgid "Finished snapshot and upload for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:677
+msgid "Starting snapshot for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:686
+#, python-format
+msgid "Unable to Snapshot instance: %(exc)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:702
+msgid "Failed to transfer vhd to new host"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:770
+#, python-format
+msgid "Resizing down VDI %(cow_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:893
+#, python-format
+msgid "Resizing up VDI %(vdi_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:901
+msgid "Resize complete"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:928
+#, python-format
+msgid "Failed to query agent version: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:949
+#, python-format
+msgid "domid changed from %(domid)s to %(newdomid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:962
+#, python-format
+msgid "Failed to update agent: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:983
+#, python-format
+msgid "Failed to exchange keys: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:998
+#, python-format
+msgid "Failed to update password: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1023
+#, python-format
+msgid "Failed to inject file: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1032
+msgid "VM already halted, skipping shutdown..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1036
+msgid "Shutting down VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1054
+msgid "Unable to find VBD for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1097
+msgid "Using RAW or VHD, skipping kernel and ramdisk deletion"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1104
+msgid "instance has a kernel or ramdisk but not both"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1111
+msgid "kernel/ramdisk files removed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1121
+msgid "VM destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1147
+msgid "Destroying VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1169
+msgid "VM is not present, skipping destroy..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1222
+#, python-format
+msgid "Instance is already in Rescue Mode: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1296
+#, python-format
+msgid "Found %(instance_count)d hung reboots older than %(timeout)d seconds"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1300
+msgid "Automatically hard rebooting"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1363
+#, python-format
+msgid "Setting migration %(migration_id)s to error: %(reason)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1374
+#, python-format
+msgid ""
+"Automatically confirming migration %(migration_id)s for instance "
+"%(instance_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1379
+#, python-format
+msgid "Instance %(instance_uuid)s not found"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1383
+msgid "In ERROR state"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1389
+#, python-format
+msgid "In %(task_state)s task_state, not RESIZE_VERIFY"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1396
+#, python-format
+msgid "Error auto-confirming resize: %(e)s. Will retry later."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1418
+msgid "Could not get bandwidth info."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1469
+msgid "Injecting network info to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1483
+msgid "Creating vifs"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1492
+#, python-format
+msgid "Creating VIF for network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1495
+#, python-format
+msgid "Created VIF %(vif_ref)s, network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1520
+msgid "Injecting hostname to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1545
+#, python-format
+msgid ""
+"The agent call to %(method)s returned an invalid response: %(ret)r. "
+"path=%(path)s; args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1566
+#, python-format
+msgid "TIMEOUT: The call to %(method)s timed out. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1570
+#, python-format
+msgid ""
+"NOT IMPLEMENTED: The call to %(method)s is not supported by the agent. "
+"args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1575
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1661
+#, python-format
+msgid "OpenSSL error: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:52
+msgid "creating sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:55 cinder/virt/xenapi/volume_utils.py:83
+#, python-format
+msgid "type is = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:58 cinder/virt/xenapi/volume_utils.py:86
+#, python-format
+msgid "name = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:71
+#, python-format
+msgid "Created %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:76 cinder/virt/xenapi/volume_utils.py:174
+msgid "Unable to create Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:80
+msgid "introducing sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:103 cinder/virt/xenapi/volume_utils.py:170
+#: cinder/virt/xenapi/volumeops.py:156
+#, python-format
+msgid "Introduced %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:106
+msgid "Creating pbd for SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:108
+msgid "Plugging SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:116 cinder/virt/xenapi/volumeops.py:160
+msgid "Unable to introduce Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:127 cinder/virt/xenapi/volumeops.py:50
+msgid "Unable to get SR using uuid"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:129
+#, python-format
+msgid "Forgetting SR %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:137
+msgid "Unable to forget Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:157
+#, python-format
+msgid "Introducing %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:186
+#, python-format
+msgid "Unable to find SR from VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:204
+#, python-format
+msgid "Ignoring exception %(exc)s when getting PBDs for %(sr_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:210
+#, python-format
+msgid "Ignoring exception %(exc)s when unplugging PBD %(pbd)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:234
+#, python-format
+msgid "Unable to introduce VDI on SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:242
+#, python-format
+msgid "Unable to get record of VDI %s on"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:264
+#, python-format
+msgid "Unable to introduce VDI for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:274
+#, python-format
+msgid "Error finding vdis in SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:281
+#, python-format
+msgid "Unable to find vbd for vdi %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:315
+#, python-format
+msgid "Unable to obtain target information %(data)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:341
+#, python-format
+msgid "Mountpoint cannot be translated: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:64
+msgid "Could not find VDI ref"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:69
+#, python-format
+msgid "Creating SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:73
+msgid "Could not create SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:76
+msgid "Could not retrieve SR record"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:81
+#, python-format
+msgid "Introducing SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:85
+msgid "SR found in xapi database. No need to introduce"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:90
+msgid "Could not introduce SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:94
+#, python-format
+msgid "Checking for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:106
+#, python-format
+msgid "SR %s not found in the xapi database"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:112
+msgid "Could not forget SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:121
+#, python-format
+msgid "Attach_volume: %(connection_info)s, %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:178
+#, python-format
+msgid "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:189
+#, python-format
+msgid "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:197
+#, python-format
+msgid "Unable to attach volume to instance %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:200
+#, python-format
+msgid "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:210
+#, python-format
+msgid "Detach_volume: %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:219
+#, python-format
+msgid "Unable to locate volume %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:227
+#, python-format
+msgid "Unable to detach volume %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:232
+#, python-format
+msgid "Unable to destroy vbd %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:239
+#, python-format
+msgid "Error purging SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:241
+#, python-format
+msgid "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:98 cinder/vnc/xvp_proxy.py:103
+#, python-format
+msgid "Error in handshake: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:119
+#, python-format
+msgid "Invalid request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:139
+#, python-format
+msgid "Request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:142
+#, python-format
+msgid "Request made with missing token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:153
+#, python-format
+msgid "Request made with invalid token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:160
+#, python-format
+msgid "Unexpected error: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:180
+#, python-format
+msgid "Starting cinder-xvpvncproxy node (version %s)"
+msgstr ""
+
+#: cinder/volume/api.py:74 cinder/volume/api.py:220
+msgid "status must be available"
+msgstr ""
+
+#: cinder/volume/api.py:85
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to create %(size)sG volume"
+msgstr ""
+
+#: cinder/volume/api.py:137
+msgid "Volume status must be available or error"
+msgstr ""
+
+#: cinder/volume/api.py:142
+#, python-format
+msgid "Volume still has %d dependent snapshots"
+msgstr ""
+
+#: cinder/volume/api.py:223
+msgid "already attached"
+msgstr ""
+
+#: cinder/volume/api.py:230
+msgid "already detached"
+msgstr ""
+
+#: cinder/volume/api.py:292
+msgid "must be available"
+msgstr ""
+
+#: cinder/volume/api.py:325
+msgid "Volume Snapshot status must be available or error"
+msgstr ""
+
+#: cinder/volume/driver.py:96
+#, python-format
+msgid "Recovering from a failed execute.  Try number %s"
+msgstr ""
+
+#: cinder/volume/driver.py:106
+#, python-format
+msgid "volume group %s doesn't exist"
+msgstr ""
+
+#: cinder/volume/driver.py:270
+#, python-format
+msgid "Skipping ensure_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:318
+#, python-format
+msgid "Skipping remove_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:327
+#, python-format
+msgid ""
+"Skipping remove_export. No iscsi_target is presently exported for volume:"
+" %d"
+msgstr ""
+
+#: cinder/volume/driver.py:337
+msgid "ISCSI provider_location not stored, using discovery"
+msgstr ""
+
+#: cinder/volume/driver.py:384
+#, python-format
+msgid "Could not find iSCSI export  for volume %s"
+msgstr ""
+
+#: cinder/volume/driver.py:388
+#, python-format
+msgid "ISCSI Discovery: Found %s"
+msgstr ""
+
+#: cinder/volume/driver.py:466
+#, python-format
+msgid "Cannot confirm exported volume id:%(volume_id)s."
+msgstr ""
+
+#: cinder/volume/driver.py:493
+#, python-format
+msgid "FAKE ISCSI: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:505
+#, python-format
+msgid "rbd has no pool %s"
+msgstr ""
+
+#: cinder/volume/driver.py:579
+#, python-format
+msgid "Sheepdog is not working: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:581
+msgid "Sheepdog is not working"
+msgstr ""
+
+#: cinder/volume/driver.py:680 cinder/volume/driver.py:685
+#, python-format
+msgid "LoggingVolumeDriver: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:96
+#, python-format
+msgid "Re-exporting %s volumes"
+msgstr ""
+
+#: cinder/volume/manager.py:101
+#, python-format
+msgid "volume %s: skipping export"
+msgstr ""
+
+#: cinder/volume/manager.py:107
+#, python-format
+msgid "volume %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:119
+#, python-format
+msgid "volume %(vol_name)s: creating lv of size %(vol_size)sG"
+msgstr ""
+
+#: cinder/volume/manager.py:131
+#, python-format
+msgid "volume %s: creating export"
+msgstr ""
+
+#: cinder/volume/manager.py:144
+#, python-format
+msgid "volume %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:153
+msgid "Volume is still attached"
+msgstr ""
+
+#: cinder/volume/manager.py:155
+msgid "Volume is not local to this node"
+msgstr ""
+
+#: cinder/volume/manager.py:159
+#, python-format
+msgid "volume %s: removing export"
+msgstr ""
+
+#: cinder/volume/manager.py:161
+#, python-format
+msgid "volume %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:164
+#, python-format
+msgid "volume %s: volume is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:176
+#, python-format
+msgid "volume %s: deleted successfully"
+msgstr "bind %s: slettet"
+
+#: cinder/volume/manager.py:183
+#, python-format
+msgid "snapshot %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:187
+#, python-format
+msgid "snapshot %(snap_name)s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:202
+#, python-format
+msgid "snapshot %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:211
+#, python-format
+msgid "snapshot %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:214
+#, python-format
+msgid "snapshot %s: snapshot is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:226
+#, python-format
+msgid "snapshot %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:310
+msgid "Checking volume capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:314
+#, python-format
+msgid "New capabilities found: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:325
+msgid "Clear capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:329
+#, python-format
+msgid "Notification {%s} received"
+msgstr ""
+
+#: cinder/volume/netapp.py:79
+#, python-format
+msgid "API %(name)sfailed: %(reason)s"
+msgstr ""
+
+#: cinder/volume/netapp.py:109
+#, python-format
+msgid "%s is not set"
+msgstr ""
+
+#: cinder/volume/netapp.py:128
+msgid "Connected to DFM server"
+msgstr ""
+
+#: cinder/volume/netapp.py:159
+#, python-format
+msgid "Job failed: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:240
+msgid "Failed to provision dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:252
+msgid "No LUN was created by the provision job"
+msgstr ""
+
+#: cinder/volume/netapp.py:261 cinder/volume/netapp.py:433
+#, python-format
+msgid "Failed to find LUN ID for volume %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:280
+msgid "Failed to remove and delete dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:603 cinder/volume/netapp.py:657
+#, python-format
+msgid "No LUN ID for volume %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:607 cinder/volume/netapp.py:661
+#, python-format
+msgid "Failed to get LUN details for LUN ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:614
+#, python-format
+msgid "Failed to get host details for host ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:620
+#, python-format
+msgid "Failed to get target portal for filer: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:625
+#, python-format
+msgid "Failed to get target IQN for filer: %s"
+msgstr ""
+
+#: cinder/volume/san.py:113 cinder/volume/san.py:151
+msgid "Specify san_password or san_private_key"
+msgstr ""
+
+#: cinder/volume/san.py:156
+msgid "san_ip must be set"
+msgstr ""
+
+#: cinder/volume/san.py:320
+#, python-format
+msgid "LUID not found for %(zfs_poolname)s. Output=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:452
+#, python-format
+msgid "CLIQ command returned %s"
+msgstr ""
+
+#: cinder/volume/san.py:458
+#, python-format
+msgid "Malformed response to CLIQ command %(verb)s %(cliq_args)s. Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:466
+#, python-format
+msgid "Error running CLIQ command %(verb)s %(cliq_args)s.  Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:496
+#, python-format
+msgid ""
+"Unexpected number of virtual ips for cluster  %(cluster_name)s. "
+"Result=%(_xml)s"
+msgstr ""
+
+#: cinder/volume/san.py:549
+#, python-format
+msgid "Volume info: %(volume_name)s => %(volume_attributes)s"
+msgstr ""
+
+#: cinder/volume/san.py:594
+msgid "local_path not supported"
+msgstr ""
+
+#: cinder/volume/san.py:626
+#, python-format
+msgid "Could not determine project for volume %s, can't export"
+msgstr ""
+
+#: cinder/volume/san.py:696
+#, python-format
+msgid "Payload for SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:713
+#, python-format
+msgid "Call to json.loads() raised an exception: %s"
+msgstr ""
+
+#: cinder/volume/san.py:718
+#, python-format
+msgid "Results of SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:732
+#, python-format
+msgid "Found solidfire account: %s"
+msgstr ""
+
+#: cinder/volume/san.py:746
+#, python-format
+msgid "solidfire account: %s does not exist, create it..."
+msgstr ""
+
+#: cinder/volume/san.py:804
+msgid "Enter SolidFire create_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:846
+msgid "Leaving SolidFire create_volume"
+msgstr ""
+
+#: cinder/volume/san.py:861
+msgid "Enter SolidFire delete_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:880
+#, python-format
+msgid "Deleting volumeID: %s "
+msgstr ""
+
+#: cinder/volume/san.py:888
+msgid "Leaving SolidFire delete_volume"
+msgstr ""
+
+#: cinder/volume/san.py:891
+msgid "Executing SolidFire ensure_export..."
+msgstr ""
+
+#: cinder/volume/san.py:895
+msgid "Executing SolidFire create_export..."
+msgstr ""
+
+#: cinder/volume/volume_types.py:49 cinder/volume/volume_types.py:108
+msgid "name cannot be None"
+msgstr ""
+
+#: cinder/volume/volume_types.py:96
+msgid "id cannot be None"
+msgstr ""
+
+#: cinder/volume/xensm.py:55
+#, python-format
+msgid "SR name = %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:56
+#, python-format
+msgid "Params: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:60
+#, python-format
+msgid "Failed to create sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:62
+msgid "Create failed"
+msgstr ""
+
+#: cinder/volume/xensm.py:64
+#, python-format
+msgid "SR UUID of new SR is: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:71
+msgid "Failed to update db"
+msgstr ""
+
+#: cinder/volume/xensm.py:80
+#, python-format
+msgid "Failed to introduce sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:91
+#, python-format
+msgid "Failed to reach backend %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:100
+msgid "XenSMDriver requires xenapi connection"
+msgstr ""
+
+#: cinder/volume/xensm.py:110
+msgid "Failed to initiate session"
+msgstr ""
+
+#: cinder/volume/xensm.py:142
+#, python-format
+msgid "Volume will be created in backend - %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:154
+msgid "Failed to update volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:157
+msgid "Unable to create volume"
+msgstr ""
+
+#: cinder/volume/xensm.py:171
+msgid "Failed to delete vdi"
+msgstr ""
+
+#: cinder/volume/xensm.py:177
+msgid "Failed to delete volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:210
+msgid "Failed to find volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:221
+msgid "Failed to find backend in db"
+msgstr ""
+
+#: cinder/volume/nexenta/__init__.py:27
+msgid "Nexenta SA returned the error"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:64
+#, python-format
+msgid "Sending JSON data: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:69
+#, python-format
+msgid "Auto switching to HTTPS connection to %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:75
+msgid "No headers in server response"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:76
+msgid "Bad response from server"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:79
+#, python-format
+msgid "Got response: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:96
+#, python-format
+msgid "Volume %s does not exist in Nexenta SA"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:180
+msgid ""
+"Call to local_path should not happen. Verify that use_local_volumes flag "
+"is turned off."
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:202
+#, python-format
+msgid "Ignored target creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:210
+#, python-format
+msgid "Ignored target group creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:219
+#, python-format
+msgid "Ignored target group member addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:227
+#, python-format
+msgid "Ignored LU creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:237
+#, python-format
+msgid "Ignored LUN mapping entry addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:273
+#, python-format
+msgid ""
+"Got error trying to destroy target group %(target_group)s, assuming it is"
+" already gone: %(exc)s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:280
+#, python-format
+msgid ""
+"Got error trying to delete target %(target)s, assuming it is already "
+"gone: %(exc)s"
+msgstr ""
+
+#~ msgid "Unable to locate account %(account_name) on Solidfire device"
+#~ msgstr ""
+
+#~ msgid "Zone %(zone_id)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Cinder access parameters were not specified."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(id)d could not be found."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(name)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Detected more than one volume with name %(vol_name)"
+#~ msgstr ""
+
+#~ msgid "Detected existing vlan with id %(vlan)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab semaphore \"%(lock)s\" "
+#~ "for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab file lock "
+#~ "\"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Parent group id and group id cannot be same"
+#~ msgstr ""
+
+#~ msgid "No body provided"
+#~ msgstr ""
+
+#~ msgid "Create VSA %(display_name)s of type %(vc_type)s"
+#~ msgstr ""
+
+#~ msgid "Delete VSA with id: %s"
+#~ msgstr ""
+
+#~ msgid "Associate address %(ip)s to VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "Disassociate address from VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "%(obj)s with ID %(id)s not found"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(obj)s with ID %(id)s belongs to "
+#~ "VSA %(own_vsa_id)s and not to VSA "
+#~ "%(vsa_id)s."
+#~ msgstr ""
+
+#~ msgid "Index. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Detail. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Create. vsa_id=%(vsa_id)s, body=%(body)s"
+#~ msgstr ""
+
+#~ msgid "Create volume of %(size)s GB from VSA ID %(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Update %(obj)s with id: %(id)s, changes: %(changes)s"
+#~ msgstr ""
+
+#~ msgid "Delete. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Show. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Index instances for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You cannot run"
+#~ " any more instances of this type."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You can only"
+#~ " run %s more instances of this "
+#~ "type."
+#~ msgstr ""
+
+#~ msgid "Going to try to soft delete %s"
+#~ msgstr ""
+
+#~ msgid "No host for instance %s, deleting immediately"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to stop %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to start %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Going to force the deletion of the"
+#~ " vm %(instance_uuid)s, even if it is"
+#~ " deleted"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s did not exist "
+#~ "in the DB, but I will shut "
+#~ "it down anyway using a special "
+#~ "context"
+#~ msgstr ""
+
+#~ msgid "exception terminating the instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "trying to destroy already destroyed instance: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(name)s found in database but"
+#~ " not known by hypervisor. Setting "
+#~ "power state to NOSTATE"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Detected instance  with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Destroying instance with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid "SQL connection failed (%(connstring)s). %(attempts)d attempts left."
+#~ msgstr ""
+
+#~ msgid "Can't downgrade without losing data"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_id)s not found"
+#~ msgstr ""
+
+#~ msgid "Network %s has active ports, cannot delete"
+#~ msgstr ""
+
+#~ msgid "No fixed IPs to deallocate for vif %sid"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "AMQP server on %(fl_host)s:%(fl_port)d is "
+#~ "unreachable: %(e)s. Trying again in "
+#~ "%(fl_intv)d seconds."
+#~ msgstr ""
+
+#~ msgid "Unable to connect to AMQP server after %(tries)d tries. Shutting down."
+#~ msgstr ""
+
+#~ msgid "Reconnected to queue"
+#~ msgstr ""
+
+#~ msgid "Failed to fetch message from queue: %s"
+#~ msgstr ""
+
+#~ msgid "Initing the Adapter Consumer for %s"
+#~ msgstr ""
+
+#~ msgid "Created \"%(exchange)s\" fanout exchange with \"%(key)s\" routing key"
+#~ msgstr ""
+
+#~ msgid "Exception while processing consumer"
+#~ msgstr ""
+
+#~ msgid "Creating \"%(exchange)s\" fanout exchange"
+#~ msgstr ""
+
+#~ msgid "response %s"
+#~ msgstr ""
+
+#~ msgid "topic is %s"
+#~ msgstr ""
+
+#~ msgid "message %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Cannot confirm tmpfile at %(ipath)s is"
+#~ " on same shared storage between "
+#~ "%(src)s and %(dest)s."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of memory(host:%(avail)s <= "
+#~ "instance:%(mem_inst)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of disk(host:%(available)s <="
+#~ " instance:%(necessary)s)"
+#~ msgstr ""
+
+#~ msgid "Driver Method %(driver_method)s missing: %(e)s.Reverting to schedule()"
+#~ msgstr ""
+
+#~ msgid "Setting instance %(instance_uuid)s to ERROR state."
+#~ msgstr ""
+
+#~ msgid "_filter_hosts: %(request_spec)s"
+#~ msgstr ""
+
+#~ msgid "Filter hosts for drive type %s"
+#~ msgstr ""
+
+#~ msgid "Host %s has no free capacity. Skip"
+#~ msgstr ""
+
+#~ msgid "Filter hosts: %s"
+#~ msgstr ""
+
+#~ msgid "Must implement host selection mechanism"
+#~ msgstr ""
+
+#~ msgid "Maximum number of hosts selected (%d)"
+#~ msgstr ""
+
+#~ msgid "Selected excessive host %(host)s"
+#~ msgstr ""
+
+#~ msgid "Provision volume %(name)s of size %(size)s GB on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "volume_params %(volume_params)s"
+#~ msgstr ""
+
+#~ msgid "%(i)d: Volume %(name)s"
+#~ msgstr ""
+
+#~ msgid "Attempting to spawn %(num_volumes)d volume(s)"
+#~ msgstr ""
+
+#~ msgid "Error creating volumes"
+#~ msgstr ""
+
+#~ msgid "Non-VSA volume %d"
+#~ msgstr ""
+
+#~ msgid "Spawning volume %(volume_id)s with drive type %(drive_type)s"
+#~ msgstr ""
+
+#~ msgid "Error creating volume"
+#~ msgstr ""
+
+#~ msgid "No capability selected for volume of size %(size)s"
+#~ msgstr ""
+
+#~ msgid "Host %s:"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\tDrive %(qosgrp)-25s: total %(total)2s, "
+#~ "used %(used)2s, free %(free)2s. Available "
+#~ "capacity %(avail)-5s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t LeastUsedHost: Best host: %(best_host)s."
+#~ " (used capacity %(min_used)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t MostAvailCap: Best host: %(best_host)s. "
+#~ "(available %(max_avail)s %(type_str)s)"
+#~ msgstr ""
+
+#~ msgid "(%(nm)s) publish (key: %(routing_key)s) %(message)s"
+#~ msgstr ""
+
+#~ msgid "Publishing to route %s"
+#~ msgstr ""
+
+#~ msgid "Declaring queue %s"
+#~ msgstr ""
+
+#~ msgid "Declaring exchange %s"
+#~ msgstr ""
+
+#~ msgid "Binding %(queue)s to %(exchange)s with key %(routing_key)s"
+#~ msgstr ""
+
+#~ msgid "Getting from %(queue)s: %(message)s"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate wrong VSA name. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate DB error. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: user_data = %s"
+#~ msgstr ""
+
+#~ msgid "_create: param=%s"
+#~ msgstr ""
+
+#~ msgid "Host %s"
+#~ msgstr ""
+
+#~ msgid "Test: provision vol %(name)s on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "\t vol=%(vol)s"
+#~ msgstr ""
+
+#~ msgid "Test: VSA update request: vsa_id=%(vsa_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume create: %s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get request: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume update request: id=%(volume_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: success    %(result)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: %(status)s    %(error_info)s"
+#~ msgstr ""
+
+#~ msgid "Unable to get updated status: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "deactivate_node is called for                "
+#~ "node_id = %(id)s node_ip = %(ip)s"
+#~ msgstr ""
+
+#~ msgid "virsh said: %r"
+#~ msgstr ""
+
+#~ msgid "cool, it's a device"
+#~ msgstr ""
+
+#~ msgid "Unable to read LXC console"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "to xml...\n"
+#~ ":%s "
+#~ msgstr ""
+
+#~ msgid "During wait running, %s disappeared."
+#~ msgstr ""
+
+#~ msgid "Instance %s running successfully."
+#~ msgstr ""
+
+#~ msgid "The nwfilter(%(instance_secgroup_filter_name)s) is not found."
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image verification failed"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): image "
+#~ "verification skipped, no hash stored"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): checking"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in use:"
+#~ " on this node %(local)d local, "
+#~ "%(remote)d on other nodes"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): warning "
+#~ "-- an absent base file is in "
+#~ "use! instances: %(instance_list)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in: on"
+#~ " other nodes (%(remote)d on other "
+#~ "nodes)"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is not in use"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is in use"
+#~ msgstr ""
+
+#~ msgid "Created VM %s..."
+#~ msgstr ""
+
+#~ msgid "Created VM %(instance_name)s as %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Creating a CDROM-specific VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Created a CDROM-specific VBD %(vbd_ref)s"
+#~ "  for VM %(vm_ref)s, VDI %(vdi_ref)s."
+#~ msgstr ""
+
+#~ msgid "No primary VDI found for%(vm_ref)s"
+#~ msgstr ""
+
+#~ msgid "Snapshotting VM %(vm_ref)s with label '%(label)s'..."
+#~ msgstr ""
+
+#~ msgid "Created snapshot %(template_vm_ref)s from VM %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Fetching image %(image)s"
+#~ msgstr ""
+
+#~ msgid "Image Type: %s"
+#~ msgstr ""
+
+#~ msgid "ISO: Found sr possibly containing the ISO image"
+#~ msgstr ""
+
+#~ msgid "Size for image %(image)s:%(virtual_size)d"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to fetch glance image"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s ... "
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s done."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful first time."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug rejected: retrying..."
+#~ msgstr ""
+
+#~ msgid "Not sleeping anymore!"
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful eventually."
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure in VBD.unplug: %s"
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure %s"
+#~ msgstr ""
+
+#~ msgid "Starting instance %s"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn"
+#~ msgstr ""
+
+#~ msgid "Instance %s failed to spawn - performing clean-up"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn - Unable to create VM"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Auto configuring disk for instance "
+#~ "%(instance_uuid)s, attempting to resize "
+#~ "partition..."
+#~ msgstr ""
+
+#~ msgid "Invalid value for injected_files: '%s'"
+#~ msgstr ""
+
+#~ msgid "Starting VM %s..."
+#~ msgstr ""
+
+#~ msgid "Spawning VM %(instance_uuid)s created %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Instance %s: waiting for running"
+#~ msgstr ""
+
+#~ msgid "Instance %s: running"
+#~ msgstr ""
+
+#~ msgid "Resources to remove:%s"
+#~ msgstr ""
+
+#~ msgid "Removing VDI %(vdi_ref)s(uuid:%(vdi_to_remove)s)"
+#~ msgstr ""
+
+#~ msgid "Skipping VDI destroy for %s"
+#~ msgstr ""
+
+#~ msgid "Finished snapshot and upload for VM %s"
+#~ msgstr ""
+
+#~ msgid "Starting snapshot for VM %s"
+#~ msgstr ""
+
+#~ msgid "Unable to Snapshot instance %(instance_uuid)s: %(exc)s"
+#~ msgstr ""
+
+#~ msgid "Updating instance '%(instance_uuid)s' progress to %(progress)d"
+#~ msgstr ""
+
+#~ msgid "Resize instance %s complete"
+#~ msgstr ""
+
+#~ msgid "domid changed from %(olddomid)s to %(newdomid)s"
+#~ msgstr ""
+
+#~ msgid "VM %(instance_uuid)s already halted,skipping shutdown..."
+#~ msgstr ""
+
+#~ msgid "Shutting down VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Destroying VDIs for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s using RAW or "
+#~ "VHD, skipping kernel and ramdisk "
+#~ "deletion"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_uuid)s VM destroyed"
+#~ msgstr ""
+
+#~ msgid "Destroying VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Automatically hard rebooting %d"
+#~ msgstr ""
+
+#~ msgid "Instance for migration %d not found, skipping"
+#~ msgstr ""
+
+#~ msgid "injecting network info to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "creating vif(s) for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "Creating VIF for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr ""
+
+#~ msgid "Created VIF %(vif_ref)s for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr ""
+
+#~ msgid "injecting hostname to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The agent call to %(method)s returned"
+#~ " an invalid response: %(ret)r. VM "
+#~ "id=%(instance_uuid)s; path=%(path)s; args=%(addl_args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "TIMEOUT: The call to %(method)s timed"
+#~ " out. VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "NOT IMPLEMENTED: The call to %(method)s"
+#~ " is not supported by the agent. "
+#~ "VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The call to %(method)s returned an "
+#~ "error: %(e)s. VM id=%(instance_uuid)s; "
+#~ "args=%(args)r"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid "Error destroying VDI"
+#~ msgstr ""
+
+#~ msgid "Volume status must be available"
+#~ msgstr ""
+
+#~ msgid "\tVolume %s is NOT VSA volume"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s creation - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s succeeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s deletion - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s suceeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s local path call - call discover"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s ensure export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s create export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s remove export - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE remove_export for %s failed"
+#~ msgstr ""
+
+#~ msgid "Failed to retrieve QoS info"
+#~ msgstr ""
+
+#~ msgid "invalid drive data"
+#~ msgstr ""
+
+#~ msgid "drive_name not defined"
+#~ msgstr ""
+
+#~ msgid "invalid drive type name %s"
+#~ msgstr ""
+
+#~ msgid "*** Experimental VSA code ***"
+#~ msgstr ""
+
+#~ msgid "Requested number of VCs (%d) is too high. Setting to default"
+#~ msgstr ""
+
+#~ msgid "Creating VSA: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d %(vsa_name)s: Create "
+#~ "volume %(vol_name)s, %(vol_size)d GB, type "
+#~ "%(vol_type_id)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA status to %(status)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA call"
+#~ msgstr ""
+
+#~ msgid "Adding %(add_cnt)s VCs to VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "Deleting %(del_cnt)s VCs from VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Deleting %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Unable to delete volume %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Forced delete. %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate VSA ID %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Delete instance %(name)s"
+#~ msgstr ""
+
+#~ msgid "Create call received for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Failed to find VSA %(vsa_id)d"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Drive %(vol_id)s created. Status %(status)s"
+#~ msgstr ""
+
+#~ msgid "Drive %(vol_name)s (%(vol_disp_name)s) still in creating phase - wait"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Not all volumes "
+#~ "are created (%(cvol_real)d of %(cvol_exp)d)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Drive %(vol_name)s "
+#~ "(%(vol_disp_name)s) is in %(status)s state"
+#~ msgstr ""
+
+#~ msgid "Failed to update attach status for volume %(vol_name)s. %(ex)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Delete all BE volumes"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Start %(vc_count)d instances"
+#~ msgstr ""
+
diff --git a/cinder/locale/de/LC_MESSAGES/nova.po b/cinder/locale/de/LC_MESSAGES/nova.po
new file mode 100644
index 000000000..b9714c3e7
--- /dev/null
+++ b/cinder/locale/de/LC_MESSAGES/nova.po
@@ -0,0 +1,8208 @@
+# German translation for cinder
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the cinder package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version:  cinder\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-04-08 23:04+0000\n"
+"PO-Revision-Date: 2011-08-23 11:23+0000\n"
+"Last-Translator: Thierry Carrez <thierry.carrez+lp@gmail.com>\n"
+"Language-Team: German <de@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: cinder/context.py:59
+#, python-format
+msgid "Arguments dropped when creating context: %s"
+msgstr ""
+
+#: cinder/context.py:90
+#, python-format
+msgid "read_deleted can only be one of 'no', 'yes' or 'only', not %r"
+msgstr ""
+
+#: cinder/crypto.py:48
+msgid "Filename of root CA"
+msgstr "Dateiname der Root CA"
+
+#: cinder/crypto.py:51
+msgid "Filename of private key"
+msgstr "Dateiname des Private Key"
+
+#: cinder/crypto.py:54
+msgid "Filename of root Certificate Revocation List"
+msgstr ""
+
+#: cinder/crypto.py:57
+msgid "Where we keep our keys"
+msgstr "Wo wir unsere Schlüssel aufbewahren"
+
+#: cinder/crypto.py:60
+msgid "Where we keep our root CA"
+msgstr ""
+
+#: cinder/crypto.py:63
+msgid "Should we use a CA for each project?"
+msgstr "Soll eine eigenständige CA für jedes Projekt verwendet werden?"
+
+#: cinder/crypto.py:67
+#, python-format
+msgid "Subject for certificate for users, %s for project, user, timestamp"
+msgstr ""
+
+#: cinder/crypto.py:72
+#, python-format
+msgid "Subject for certificate for projects, %s for project, timestamp"
+msgstr ""
+
+#: cinder/crypto.py:292
+#, python-format
+msgid "Flags path: %s"
+msgstr ""
+
+#: cinder/exception.py:56
+msgid "Unexpected error while running command."
+msgstr "Unerwarteter Fehler bei Ausführung des Kommandos."
+
+#: cinder/exception.py:59
+#, python-format
+msgid ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+msgstr ""
+"%(description)s\n"
+"Befehl: %(cmd)s\n"
+"Exit-Code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+
+#: cinder/exception.py:94
+msgid "DB exception wrapped."
+msgstr ""
+
+#: cinder/exception.py:155
+msgid "An unknown exception occurred."
+msgstr ""
+
+#: cinder/exception.py:178
+msgid "Failed to decrypt text"
+msgstr ""
+
+#: cinder/exception.py:182
+msgid "Failed to paginate through images from image service"
+msgstr ""
+
+#: cinder/exception.py:186
+msgid "Virtual Interface creation failed"
+msgstr ""
+
+#: cinder/exception.py:190
+msgid "5 attempts to create virtual interfacewith unique mac address failed"
+msgstr ""
+
+#: cinder/exception.py:195
+msgid "Connection to glance failed"
+msgstr ""
+
+#: cinder/exception.py:199
+msgid "Connection to melange failed"
+msgstr ""
+
+#: cinder/exception.py:203
+msgid "Not authorized."
+msgstr ""
+
+#: cinder/exception.py:208
+msgid "User does not have admin privileges"
+msgstr ""
+
+#: cinder/exception.py:212
+#, python-format
+msgid "Policy doesn't allow %(action)s to be performed."
+msgstr ""
+
+#: cinder/exception.py:216
+#, fuzzy, python-format
+msgid "Not authorized for image %(image_id)s."
+msgstr "keine Methode für diese Nachricht gefunden: %s"
+
+#: cinder/exception.py:220
+msgid "Unacceptable parameters."
+msgstr ""
+
+#: cinder/exception.py:225
+msgid "Invalid snapshot"
+msgstr ""
+
+#: cinder/exception.py:229
+#, python-format
+msgid "Volume %(volume_id)s is not attached to anything"
+msgstr ""
+
+#: cinder/exception.py:233 cinder/api/openstack/compute/contrib/keypairs.py:113
+msgid "Keypair data is invalid"
+msgstr ""
+
+#: cinder/exception.py:237
+msgid "Failed to load data into json format"
+msgstr ""
+
+#: cinder/exception.py:241
+msgid "The request is invalid."
+msgstr ""
+
+#: cinder/exception.py:245
+#, python-format
+msgid "Invalid signature %(signature)s for user %(user)s."
+msgstr ""
+
+#: cinder/exception.py:249
+msgid "Invalid input received"
+msgstr ""
+
+#: cinder/exception.py:253
+#, python-format
+msgid "Invalid instance type %(instance_type)s."
+msgstr ""
+
+#: cinder/exception.py:257
+msgid "Invalid volume type"
+msgstr ""
+
+#: cinder/exception.py:261
+msgid "Invalid volume"
+msgstr ""
+
+#: cinder/exception.py:265
+#, python-format
+msgid "Invalid port range %(from_port)s:%(to_port)s. %(msg)s"
+msgstr ""
+
+#: cinder/exception.py:269
+#, python-format
+msgid "Invalid IP protocol %(protocol)s."
+msgstr ""
+
+#: cinder/exception.py:273
+#, python-format
+msgid "Invalid content type %(content_type)s."
+msgstr ""
+
+#: cinder/exception.py:277
+#, python-format
+msgid "Invalid cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:281
+msgid "Invalid reuse of an RPC connection."
+msgstr ""
+
+#: cinder/exception.py:285
+msgid "Invalid Parameter: Unicode is not supported by the current database."
+msgstr ""
+
+#: cinder/exception.py:292
+#, python-format
+msgid "%(err)s"
+msgstr ""
+
+#: cinder/exception.py:296
+#, python-format
+msgid ""
+"Cannot perform action '%(action)s' on aggregate %(aggregate_id)s. Reason:"
+" %(reason)s."
+msgstr ""
+
+#: cinder/exception.py:301
+#, python-format
+msgid "Group not valid. Reason: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:305
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot %(method)s while"
+" the instance is in this state."
+msgstr ""
+
+#: cinder/exception.py:310
+#, python-format
+msgid "Instance %(instance_id)s is not running."
+msgstr ""
+
+#: cinder/exception.py:314
+#, python-format
+msgid "Instance %(instance_id)s is not suspended."
+msgstr ""
+
+#: cinder/exception.py:318
+#, python-format
+msgid "Instance %(instance_id)s is not in rescue mode"
+msgstr ""
+
+#: cinder/exception.py:322
+msgid "Failed to suspend instance"
+msgstr ""
+
+#: cinder/exception.py:326
+msgid "Failed to resume server"
+msgstr ""
+
+#: cinder/exception.py:330
+msgid "Failed to reboot instance"
+msgstr ""
+
+#: cinder/exception.py:334
+msgid "Failed to terminate instance"
+msgstr ""
+
+#: cinder/exception.py:338
+msgid "Service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:342
+msgid "Volume service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:346
+msgid "Compute service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:350
+#, python-format
+msgid "Unable to migrate instance (%(instance_id)s) to current host (%(host)s)."
+msgstr ""
+
+#: cinder/exception.py:355
+msgid "Destination compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:359
+msgid "Original compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:363
+msgid "The supplied hypervisor type of is invalid."
+msgstr ""
+
+#: cinder/exception.py:367
+msgid "The instance requires a newer hypervisor version than has been provided."
+msgstr ""
+
+#: cinder/exception.py:372
+#, python-format
+msgid ""
+"The supplied disk path (%(path)s) already exists, it is expected not to "
+"exist."
+msgstr ""
+
+#: cinder/exception.py:377
+#, python-format
+msgid "The supplied device path (%(path)s) is invalid."
+msgstr ""
+
+#: cinder/exception.py:381
+#, python-format
+msgid "The supplied device (%(device)s) is busy."
+msgstr ""
+
+#: cinder/exception.py:385
+msgid "Unacceptable CPU info"
+msgstr ""
+
+#: cinder/exception.py:389
+#, python-format
+msgid "%(address)s is not a valid IP v4/6 address."
+msgstr ""
+
+#: cinder/exception.py:393
+#, python-format
+msgid ""
+"VLAN tag is not appropriate for the port group %(bridge)s. Expected VLAN "
+"tag is %(tag)s, but the one associated with the port group is %(pgroup)s."
+msgstr ""
+
+#: cinder/exception.py:399
+#, python-format
+msgid ""
+"vSwitch which contains the port group %(bridge)s is not associated with "
+"the desired physical adapter. Expected vSwitch is %(expected)s, but the "
+"one associated is %(actual)s."
+msgstr ""
+
+#: cinder/exception.py:406
+#, python-format
+msgid "Disk format %(disk_format)s is not acceptable"
+msgstr ""
+
+#: cinder/exception.py:410
+#, python-format
+msgid "Image %(image_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:414
+#, python-format
+msgid "Instance %(instance_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:418
+#, python-format
+msgid "Ec2 id %(ec2_id)s is unacceptable."
+msgstr ""
+
+#: cinder/exception.py:422
+msgid "Resource could not be found."
+msgstr ""
+
+#: cinder/exception.py:427
+#, python-format
+msgid "Required flag %(flag)s not set."
+msgstr ""
+
+#: cinder/exception.py:431
+#, python-format
+msgid "Volume %(volume_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:435
+#, python-format
+msgid "Unable to locate account %(account_name)s on Solidfire device"
+msgstr ""
+
+#: cinder/exception.py:440
+#, python-format
+msgid "Volume not found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:444
+#, python-format
+msgid "Volume %(volume_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:449
+msgid "Zero volume types found."
+msgstr ""
+
+#: cinder/exception.py:453
+#, python-format
+msgid "Volume type %(volume_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:457
+#, python-format
+msgid "Volume type with name %(volume_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:462
+#, python-format
+msgid ""
+"Volume Type %(volume_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:467
+#, python-format
+msgid "Snapshot %(snapshot_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:471
+#, python-format
+msgid "deleting volume %(volume_name)s that has snapshot"
+msgstr ""
+
+#: cinder/exception.py:475
+#, python-format
+msgid "deleting snapshot %(snapshot_name)s that has dependent volumes"
+msgstr ""
+
+#: cinder/exception.py:480
+#, python-format
+msgid "No target id found for volume %(volume_id)s."
+msgstr ""
+
+#: cinder/exception.py:484
+#, python-format
+msgid "No disk at %(location)s"
+msgstr ""
+
+#: cinder/exception.py:488
+#, python-format
+msgid "Could not find a handler for %(driver_type)s volume."
+msgstr ""
+
+#: cinder/exception.py:492
+#, python-format
+msgid "Invalid image href %(image_href)s."
+msgstr ""
+
+#: cinder/exception.py:496
+msgid ""
+"Some images have been stored via hrefs. This version of the api does not "
+"support displaying image hrefs."
+msgstr ""
+
+#: cinder/exception.py:501
+#, python-format
+msgid "Image %(image_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:505
+#, python-format
+msgid "Kernel not found for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:509
+#, python-format
+msgid "User %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:513
+#, python-format
+msgid "Project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:517
+#, python-format
+msgid "User %(user_id)s is not a member of project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:521
+#, python-format
+msgid "Role %(role_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:525
+msgid "Cannot find SR to read/write VDI."
+msgstr ""
+
+#: cinder/exception.py:529
+#, python-format
+msgid "%(req)s is required to create a network."
+msgstr ""
+
+#: cinder/exception.py:533
+#, python-format
+msgid "Network %(network_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:537
+#, python-format
+msgid "Network could not be found for bridge %(bridge)s"
+msgstr ""
+
+#: cinder/exception.py:541
+#, python-format
+msgid "Network could not be found for uuid %(uuid)s"
+msgstr ""
+
+#: cinder/exception.py:545
+#, python-format
+msgid "Network could not be found with cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:549
+#, python-format
+msgid "Network could not be found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:553
+msgid "No networks defined."
+msgstr ""
+
+#: cinder/exception.py:557
+#, python-format
+msgid ""
+"Either Network uuid %(network_uuid)s is not present or is not assigned to"
+" the project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:562
+#, python-format
+msgid "Host is not set to the network (%(network_id)s)."
+msgstr ""
+
+#: cinder/exception.py:566
+#, python-format
+msgid "Network %(network)s has active ports, cannot delete."
+msgstr ""
+
+#: cinder/exception.py:570
+msgid "Could not find the datastore reference(s) which the VM uses."
+msgstr ""
+
+#: cinder/exception.py:574
+#, python-format
+msgid "No fixed IP associated with id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:578
+#, python-format
+msgid "Fixed ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:582
+#, python-format
+msgid "Instance %(instance_id)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:586
+#, python-format
+msgid "Network host %(host)s has zero fixed ips in network %(network_id)s."
+msgstr ""
+
+#: cinder/exception.py:591
+#, python-format
+msgid "Instance %(instance_id)s doesn't have fixed ip '%(ip)s'."
+msgstr ""
+
+#: cinder/exception.py:595
+#, python-format
+msgid "Host %(host)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:599
+#, python-format
+msgid ""
+"Fixed IP address (%(address)s) does not exist in network "
+"(%(network_uuid)s)."
+msgstr ""
+
+#: cinder/exception.py:604
+#, python-format
+msgid "Fixed IP address %(address)s is already in use."
+msgstr ""
+
+#: cinder/exception.py:608
+#, python-format
+msgid "Fixed IP address %(address)s is invalid."
+msgstr ""
+
+#: cinder/exception.py:612
+msgid "Zero fixed ips available."
+msgstr ""
+
+#: cinder/exception.py:616
+msgid "Zero fixed ips could be found."
+msgstr ""
+
+#: cinder/exception.py:620
+#, python-format
+msgid "Floating ip not found for id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:624
+#, python-format
+msgid "The DNS entry %(name)s already exists in domain %(domain)s."
+msgstr ""
+
+#: cinder/exception.py:628
+#, python-format
+msgid "Floating ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:632
+#, python-format
+msgid "Floating ip not found for host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:636
+msgid "Zero floating ips available."
+msgstr ""
+
+#: cinder/exception.py:640
+#, python-format
+msgid "Floating ip %(address)s is associated."
+msgstr ""
+
+#: cinder/exception.py:644
+#, python-format
+msgid "Floating ip %(address)s is not associated."
+msgstr ""
+
+#: cinder/exception.py:648
+msgid "Zero floating ips exist."
+msgstr ""
+
+#: cinder/exception.py:652
+#, python-format
+msgid "Interface %(interface)s not found."
+msgstr ""
+
+#: cinder/exception.py:656
+#, python-format
+msgid "Keypair %(name)s not found for user %(user_id)s"
+msgstr ""
+
+#: cinder/exception.py:660
+#, python-format
+msgid "Certificate %(certificate_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:664
+#, python-format
+msgid "Service %(service_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:668
+#, python-format
+msgid "Host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:672
+#, python-format
+msgid "Compute host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:676
+#, python-format
+msgid "Could not find binary %(binary)s on host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:680
+#, python-format
+msgid "Auth token %(token)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:684
+#, python-format
+msgid "Access Key %(access_key)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:688
+msgid "Quota could not be found"
+msgstr ""
+
+#: cinder/exception.py:692
+#, python-format
+msgid "Quota for project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:696
+#, python-format
+msgid "Quota class %(class_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:700
+#, python-format
+msgid "Security group %(security_group_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:704
+#, python-format
+msgid "Security group %(security_group_id)s not found for project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:709
+#, python-format
+msgid "Security group with rule %(rule_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:713
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is already associated with the "
+"instance %(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:718
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is not associated with the instance "
+"%(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:723
+#, python-format
+msgid "Migration %(migration_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:727
+#, python-format
+msgid "Migration not found for instance %(instance_id)s with status %(status)s."
+msgstr ""
+
+#: cinder/exception.py:732
+#, python-format
+msgid "Console pool %(pool_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:736
+#, python-format
+msgid ""
+"Console pool of type %(console_type)s for compute host %(compute_host)s "
+"on proxy host %(host)s not found."
+msgstr ""
+
+#: cinder/exception.py:742
+#, python-format
+msgid "Console %(console_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:746
+#, python-format
+msgid "Console for instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:750
+#, python-format
+msgid ""
+"Console for instance %(instance_id)s in pool %(pool_id)s could not be "
+"found."
+msgstr ""
+
+#: cinder/exception.py:755
+#, python-format
+msgid "Invalid console type %(console_type)s "
+msgstr ""
+
+#: cinder/exception.py:759
+msgid "Zero instance types found."
+msgstr ""
+
+#: cinder/exception.py:763
+#, python-format
+msgid "Instance type %(instance_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:767
+#, python-format
+msgid "Instance type with name %(instance_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:772
+#, python-format
+msgid "Flavor %(flavor_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:776
+#, python-format
+msgid "Cell %(cell_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:780
+#, python-format
+msgid "Scheduler Host Filter %(filter_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:784
+#, python-format
+msgid "Scheduler cost function %(cost_fn_str)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:789
+#, python-format
+msgid "Scheduler weight flag not found: %(flag_name)s"
+msgstr ""
+
+#: cinder/exception.py:793
+#, python-format
+msgid "Instance %(instance_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:798
+#, python-format
+msgid ""
+"Instance Type %(instance_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:803
+msgid "LDAP object could not be found"
+msgstr ""
+
+#: cinder/exception.py:807
+#, python-format
+msgid "LDAP user %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:811
+#, python-format
+msgid "LDAP group %(group_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:815
+#, python-format
+msgid "LDAP user %(user_id)s is not a member of group %(group_id)s."
+msgstr ""
+
+#: cinder/exception.py:819
+#, python-format
+msgid "File %(file_path)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:823
+msgid "Zero files could be found."
+msgstr ""
+
+#: cinder/exception.py:827
+#, python-format
+msgid "Virtual switch associated with the network adapter %(adapter)s not found."
+msgstr ""
+
+#: cinder/exception.py:832
+#, python-format
+msgid "Network adapter %(adapter)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:836
+#, python-format
+msgid "Class %(class_name)s could not be found: %(exception)s"
+msgstr ""
+
+#: cinder/exception.py:840
+msgid "Action not allowed."
+msgstr ""
+
+#: cinder/exception.py:844
+#, python-format
+msgid "Unable to use global role %(role_id)s"
+msgstr ""
+
+#: cinder/exception.py:848
+msgid "Rotation is not allowed for snapshots"
+msgstr ""
+
+#: cinder/exception.py:852
+msgid "Rotation param is required for backup image_type"
+msgstr ""
+
+#: cinder/exception.py:861
+#, python-format
+msgid "Key pair %(key_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:865
+#, python-format
+msgid "User %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:869
+#, python-format
+msgid "LDAP user %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:873
+#, python-format
+msgid "LDAP group %(group)s already exists."
+msgstr ""
+
+#: cinder/exception.py:877
+#, python-format
+msgid "User %(uid)s is already a member of the group %(group_dn)s"
+msgstr ""
+
+#: cinder/exception.py:882
+#, python-format
+msgid "Project %(project)s already exists."
+msgstr ""
+
+#: cinder/exception.py:886
+#, python-format
+msgid "Instance %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:890
+#, python-format
+msgid "Instance Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:894
+#, python-format
+msgid "Volume Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:898
+#, python-format
+msgid "%(path)s is on shared storage: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:902
+msgid "Migration error"
+msgstr ""
+
+#: cinder/exception.py:906
+#, python-format
+msgid "Malformed message body: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:910
+#, python-format
+msgid "Could not find config at %(path)s"
+msgstr ""
+
+#: cinder/exception.py:914
+#, python-format
+msgid "Could not load paste app '%(name)s' from %(path)s"
+msgstr ""
+
+#: cinder/exception.py:918
+msgid "When resizing, instances must change size!"
+msgstr ""
+
+#: cinder/exception.py:922
+msgid "Image is larger than instance type allows"
+msgstr ""
+
+#: cinder/exception.py:926
+msgid "1 or more Zones could not complete the request"
+msgstr ""
+
+#: cinder/exception.py:930
+msgid "Instance type's memory is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:934
+msgid "Instance type's disk is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:938
+#, python-format
+msgid "Insufficient free memory on compute node to start %(uuid)s."
+msgstr ""
+
+#: cinder/exception.py:942
+msgid "Could not fetch bandwidth/cpu/disk metrics for this host."
+msgstr ""
+
+#: cinder/exception.py:946
+#, python-format
+msgid "No valid host was found. %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:950
+#, python-format
+msgid "Host %(host)s is not up or doesn't exist."
+msgstr ""
+
+#: cinder/exception.py:954
+msgid "Quota exceeded"
+msgstr ""
+
+#: cinder/exception.py:958
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: action '%(action)s' caused an error: "
+"%(reason)s."
+msgstr ""
+
+#: cinder/exception.py:963
+#, python-format
+msgid "Aggregate %(aggregate_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:967
+#, python-format
+msgid "Aggregate %(aggregate_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:971
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:975
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:980
+#, python-format
+msgid "Host %(host)s already member of another aggregate."
+msgstr ""
+
+#: cinder/exception.py:984
+#, python-format
+msgid "Aggregate %(aggregate_id)s already has host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:988
+#, python-format
+msgid "Detected more than one volume with name %(vol_name)s"
+msgstr ""
+
+#: cinder/exception.py:992
+#, python-format
+msgid "Cannot create volume_type with name %(name)s and specs %(extra_specs)s"
+msgstr ""
+
+#: cinder/exception.py:997
+msgid "Unable to create instance type"
+msgstr ""
+
+#: cinder/exception.py:1001
+msgid "Bad response from SolidFire API"
+msgstr ""
+
+#: cinder/exception.py:1005
+#, python-format
+msgid "Error in SolidFire API response: status=%(status)s"
+msgstr ""
+
+#: cinder/exception.py:1009
+#, python-format
+msgid "Error in SolidFire API response: data=%(data)s"
+msgstr ""
+
+#: cinder/exception.py:1013
+#, python-format
+msgid "Detected existing vlan with id %(vlan)d"
+msgstr ""
+
+#: cinder/exception.py:1017
+#, python-format
+msgid "Instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:1021
+#, python-format
+msgid "Invalid id: %(val)s (expecting \"i-...\")."
+msgstr ""
+
+#: cinder/exception.py:1025
+#, python-format
+msgid "Could not fetch image %(image)s"
+msgstr ""
+
+#: cinder/log.py:315
+#, python-format
+msgid "syslog facility must be one of: %s"
+msgstr ""
+
+#: cinder/manager.py:146
+#, python-format
+msgid "Skipping %(full_task_name)s, %(ticks_to_skip)s ticks left until next run"
+msgstr ""
+
+#: cinder/manager.py:152
+#, python-format
+msgid "Running periodic task %(full_task_name)s"
+msgstr ""
+
+#: cinder/manager.py:159
+#, python-format
+msgid "Error during %(full_task_name)s: %(e)s"
+msgstr ""
+
+#: cinder/manager.py:203
+msgid "Notifying Schedulers of capabilities ..."
+msgstr ""
+
+#: cinder/policy.py:30
+msgid "JSON file representing policy"
+msgstr ""
+
+#: cinder/policy.py:33
+msgid "Rule checked when requested rule is not found"
+msgstr ""
+
+#: cinder/service.py:137
+msgid "SIGTERM received"
+msgstr ""
+
+#: cinder/service.py:177
+#, python-format
+msgid "Starting %(topic)s node (version %(vcs_string)s)"
+msgstr ""
+
+#: cinder/service.py:195
+#, python-format
+msgid "Creating Consumer connection for Service %s"
+msgstr ""
+
+#: cinder/service.py:282
+msgid "Service killed that has no database entry"
+msgstr ""
+
+#: cinder/service.py:319
+msgid "The service database object disappeared, Recreating it."
+msgstr "Das Service-Datenbank-Objekt ist verschwunden, es wird erneut erzeugt."
+
+#: cinder/service.py:334
+msgid "Recovered model server connection!"
+msgstr ""
+
+#: cinder/service.py:340
+msgid "model server went away"
+msgstr ""
+
+#: cinder/service.py:433
+msgid "Full set of FLAGS:"
+msgstr "Alle vorhandenen FLAGS:"
+
+#: cinder/service.py:440
+#, python-format
+msgid "%(flag)s : FLAG SET "
+msgstr ""
+
+#: cinder/utils.py:79
+#, python-format
+msgid "Inner Exception: %s"
+msgstr ""
+
+#: cinder/utils.py:165
+#, python-format
+msgid "Fetching %s"
+msgstr "Hole %s"
+
+#: cinder/utils.py:210
+#, python-format
+msgid "Got unknown keyword args to utils.execute: %r"
+msgstr ""
+
+#: cinder/utils.py:220
+#, python-format
+msgid "Running cmd (subprocess): %s"
+msgstr "Führe Kommando (subprocess) aus: %s"
+
+#: cinder/utils.py:236 cinder/utils.py:315
+#, python-format
+msgid "Result was %s"
+msgstr "Ergebnis war %s"
+
+#: cinder/utils.py:249
+#, python-format
+msgid "%r failed. Retrying."
+msgstr ""
+
+#: cinder/utils.py:291
+#, python-format
+msgid "Running cmd (SSH): %s"
+msgstr ""
+
+#: cinder/utils.py:293
+msgid "Environment not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:297
+msgid "process_input not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:352
+#, python-format
+msgid "debug in callback: %s"
+msgstr ""
+
+#: cinder/utils.py:534
+#, python-format
+msgid "Link Local address is not found.:%s"
+msgstr ""
+
+#: cinder/utils.py:537
+#, python-format
+msgid "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+msgstr ""
+
+#: cinder/utils.py:648
+#, python-format
+msgid "Invalid backend: %s"
+msgstr ""
+
+#: cinder/utils.py:659
+#, python-format
+msgid "backend %s"
+msgstr ""
+
+#: cinder/utils.py:709
+msgid "in looping call"
+msgstr ""
+
+#: cinder/utils.py:927
+#, python-format
+msgid "Attempting to grab semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:931
+#, python-format
+msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:935
+#, python-format
+msgid "Attempting to grab file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:942
+#, python-format
+msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:1001
+#, python-format
+msgid "Found sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1008
+#, python-format
+msgid "Cleaned sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1023
+#, python-format
+msgid "Found lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1028
+#, python-format
+msgid "Cleaned lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1138
+#, python-format
+msgid "Expected object of type: %s"
+msgstr ""
+
+#: cinder/utils.py:1169
+#, python-format
+msgid "Invalid server_string: %s"
+msgstr ""
+
+#: cinder/utils.py:1298
+#, python-format
+msgid "timefunc: '%(name)s' took %(total_time).2f secs"
+msgstr ""
+
+#: cinder/utils.py:1330
+msgid "Original exception being dropped"
+msgstr ""
+
+#: cinder/utils.py:1461
+#, python-format
+msgid "Class %(fullname)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1463
+#, python-format
+msgid "Class %(fullname)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1495
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1497
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1681
+#, python-format
+msgid "Could not remove tmpdir: %s"
+msgstr ""
+
+#: cinder/wsgi.py:97
+#, python-format
+msgid "Started %(name)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:108
+msgid "Stopping WSGI server."
+msgstr ""
+
+#: cinder/wsgi.py:111
+msgid "Stopping raw TCP server."
+msgstr ""
+
+#: cinder/wsgi.py:117
+#, python-format
+msgid "Starting TCP server %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:133
+msgid "WSGI server has stopped."
+msgstr ""
+
+#: cinder/wsgi.py:211
+msgid "You must implement __call__"
+msgstr ""
+
+#: cinder/api/direct.py:218
+msgid "not available"
+msgstr ""
+
+#: cinder/api/direct.py:299
+#, python-format
+msgid "Returned non-serializeable type: %s"
+msgstr ""
+
+#: cinder/api/sizelimit.py:51
+msgid "Request is too large."
+msgstr ""
+
+#: cinder/api/validator.py:142
+#, python-format
+msgid "%(key)s with value %(value)s failed validator  %(validator)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:73
+#, python-format
+msgid "%(code)s: %(message)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:95
+#, python-format
+msgid "FaultWrapper: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:170
+msgid "Too many failed authentications."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:180
+#, python-format
+msgid ""
+"Access key %(access_key)s has had %(failures)d failed authentications and"
+" will be locked out for %(lock_mins)d minutes."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:267
+msgid "Signature not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:271
+msgid "Access key not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:306 cinder/api/ec2/__init__.py:319
+msgid "Failure communicating with keystone"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:388
+#, python-format
+msgid "Authentication Failure: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:404
+#, python-format
+msgid "Authenticated Request For %(uname)s:%(pname)s)"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:435
+#, python-format
+msgid "action: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:437
+#, python-format
+msgid "arg: %(key)s\t\tval: %(value)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:512
+#, python-format
+msgid "Unauthorized request for controller=%(controller)s and action=%(action)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:584
+#, python-format
+msgid "InstanceNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:590
+#, python-format
+msgid "VolumeNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:596
+#, python-format
+msgid "SnapshotNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:602
+#, python-format
+msgid "NotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:605
+#, python-format
+msgid "EC2APIError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:613
+#, python-format
+msgid "KeyPairExists raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:617
+#, python-format
+msgid "InvalidParameterValue raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:621
+#, python-format
+msgid "InvalidPortRange raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:625
+#, python-format
+msgid "NotAuthorized raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:629
+#, python-format
+msgid "InvalidRequest raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:633
+#, python-format
+msgid "QuotaError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:637
+#, python-format
+msgid "Invalid id: bogus (expecting \"i-...\"): %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:646
+#, python-format
+msgid "Unexpected error raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:647
+#, python-format
+msgid "Environment: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:649 cinder/api/metadata/handler.py:248
+msgid "An unknown error has occurred. Please try your request again."
+msgstr ""
+
+#: cinder/api/ec2/apirequest.py:64
+#, python-format
+msgid "Unsupported API request: controller = %(controller)s, action = %(action)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:336
+#, python-format
+msgid "Create snapshot of volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:372
+#, python-format
+msgid ""
+"Value (%s) for KeyName is invalid. Content limited to Alphanumeric "
+"character, spaces, dashes, and underscore."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:378
+#, python-format
+msgid "Value (%s) for Keyname is invalid. Length exceeds maximum of 255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:382
+#, python-format
+msgid "Create key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:391
+#, python-format
+msgid "Import key %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:409
+#, python-format
+msgid "Delete key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:551
+msgid "Invalid CIDR"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:639 cinder/api/ec2/cloud.py:693
+#: cinder/api/ec2/cloud.py:800
+msgid "Not enough parameters, need group_name or group_id"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:654
+#: cinder/api/openstack/compute/contrib/security_groups.py:517
+#, python-format
+msgid "Revoke security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:666 cinder/api/ec2/cloud.py:719
+#, python-format
+msgid "%s Not enough parameters to build a valid rule"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:684 cinder/api/ec2/cloud.py:744
+msgid "No rule for the specified parameters."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:708
+#: cinder/api/openstack/compute/contrib/security_groups.py:354
+#, python-format
+msgid "Authorize security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:725
+#, python-format
+msgid "%s - This rule already exists in group"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:769
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Content limited to "
+"Alphanumeric characters, spaces, dashes, and underscores."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:776
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Length exceeds maximum of "
+"255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:780
+#: cinder/api/openstack/compute/contrib/security_groups.py:292
+#, python-format
+msgid "Create Security Group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:783
+#, python-format
+msgid "group %s already exists"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:815
+#: cinder/api/openstack/compute/contrib/security_groups.py:245
+#, python-format
+msgid "Delete security group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:823 cinder/compute/manager.py:1630
+#, python-format
+msgid "Get console output for instance %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:894
+#, python-format
+msgid "Create volume from snapshot %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:898 cinder/api/openstack/compute/contrib/volumes.py:186
+#: cinder/api/openstack/volume/volumes.py:222
+#, python-format
+msgid "Create volume of %s GB"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:921
+msgid "Delete Failed"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:931
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(instance_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:939
+msgid "Attach Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:952 cinder/api/openstack/compute/contrib/volumes.py:366
+#, python-format
+msgid "Detach volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:959
+msgid "Detach Volume Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:984 cinder/api/ec2/cloud.py:1041
+#: cinder/api/ec2/cloud.py:1518 cinder/api/ec2/cloud.py:1533
+#, python-format
+msgid "attribute not supported: %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1107
+#, python-format
+msgid "vol = %s\n"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1255
+msgid "Allocate address"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1267
+#, python-format
+msgid "Release address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1272
+#, python-format
+msgid "Associate address %(public_ip)s to instance %(instance_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1282
+#, python-format
+msgid "Disassociate address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1308
+msgid "Image must be available"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1329
+msgid "Going to start terminating instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1343
+#, python-format
+msgid "Reboot instance %r"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1354
+msgid "Going to stop instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1365
+msgid "Going to start instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1455
+#, python-format
+msgid "De-registering image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1471
+msgid "imageLocation is required"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1490
+#, python-format
+msgid "Registered image %(image_location)s with id %(image_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1536
+msgid "user or group not specified"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1538
+msgid "only group \"all\" is supported"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1540
+msgid "operation_type must be add or remove"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1542
+#, python-format
+msgid "Updating image %s publicity"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1555
+#, python-format
+msgid "Not allowed to modify attributes for image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1603
+#, python-format
+msgid "Couldn't stop instance with in %d sec"
+msgstr ""
+
+#: cinder/api/metadata/handler.py:246 cinder/api/metadata/handler.py:253
+#, python-format
+msgid "Failed to get metadata for ip: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:43
+#, python-format
+msgid "Caught error: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:45 cinder/api/openstack/wsgi.py:886
+#, python-format
+msgid "%(url)s returned with HTTP %(status)d"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:94
+msgid "Must specify an ExtensionManager class"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:105
+#, python-format
+msgid "Extended resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:130
+#, python-format
+msgid ""
+"Extension %(ext_name)s: Cannot extend resource %(collection)s: No such "
+"resource"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:135
+#, python-format
+msgid "Extension %(ext_name)s extending resource: %(collection)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:90
+#, python-format
+msgid "%(user_id)s could not be found with token '%(token)s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:134
+#, python-format
+msgid "%(user_id)s must be an admin or a member of %(project_id)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:152
+msgid "Authentication requests must be made against a version root (e.g. /v2)."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:167
+#, python-format
+msgid "Could not find %s in request."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:191
+#, python-format
+msgid "Successfully authenticated '%s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:241
+msgid "User not found with provided API key."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:258
+#, python-format
+msgid "Provided API key is valid, but not for user '%(username)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:133 cinder/api/openstack/common.py:167
+msgid "limit param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:136 cinder/api/openstack/common.py:171
+msgid "limit param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:161
+msgid "offset param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:175
+msgid "offset param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:203
+#, python-format
+msgid "marker [%s] not found"
+msgstr ""
+
+#: cinder/api/openstack/common.py:243
+#, python-format
+msgid "href %s does not contain version"
+msgstr ""
+
+#: cinder/api/openstack/common.py:278
+msgid "Image metadata limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/common.py:295
+#, python-format
+msgid "Converting nw_info: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:305
+#, python-format
+msgid "Converted networks: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:338
+#, python-format
+msgid "Cannot '%(action)s' while instance is in %(attr)s %(state)s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:341
+#, python-format
+msgid "Instance is in an invalid state for '%(action)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:421
+msgid "Rejecting snapshot request, snapshots currently disabled"
+msgstr ""
+
+#: cinder/api/openstack/common.py:423
+msgid "Instance snapshots are not permitted at this time."
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:188
+#, python-format
+msgid "Loaded extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:225
+#, python-format
+msgid "Ext name: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:226
+#, python-format
+msgid "Ext alias: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:227
+#, python-format
+msgid "Ext description: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:229
+#, python-format
+msgid "Ext namespace: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:230
+#, python-format
+msgid "Ext updated: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:232
+#, python-format
+msgid "Exception loading extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:246
+#, python-format
+msgid "Loading extension %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:252
+#, python-format
+msgid "Calling extension factory %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:264
+#, python-format
+msgid "Failed to load extension %(ext_factory)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:344
+#, python-format
+msgid "Failed to load extension %(classpath)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:368
+#, python-format
+msgid "Failed to load extension %(ext_name)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:135 cinder/api/openstack/wsgi.py:538
+msgid "cannot understand JSON"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:159
+#: cinder/api/openstack/compute/contrib/hosts.py:86
+msgid "cannot understand XML"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:543
+msgid "too many body keys"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:582
+#, python-format
+msgid "Exception handling resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:586
+#, python-format
+msgid "Fault thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:589
+#, python-format
+msgid "HTTP exception thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:697
+msgid "Unrecognized Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:701
+msgid "No Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:705
+msgid "Empty body provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:816
+#, python-format
+msgid "There is no such action: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:819 cinder/api/openstack/wsgi.py:832
+#: cinder/api/openstack/compute/server_metadata.py:58
+#: cinder/api/openstack/compute/server_metadata.py:76
+#: cinder/api/openstack/compute/server_metadata.py:101
+#: cinder/api/openstack/compute/server_metadata.py:126
+#: cinder/api/openstack/compute/contrib/admin_actions.py:211
+#: cinder/api/openstack/compute/contrib/console_output.py:52
+msgid "Malformed request body"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:829
+msgid "Unsupported Content-Type"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:841
+msgid "Malformed request url"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:889
+#, python-format
+msgid "%(url)s returned a fault: %(e)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:265
+msgid "element is not a child"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:414
+msgid "root element selecting a list"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:739
+#, python-format
+msgid "Template tree mismatch; adding slave %(slavetag)s to master %(mastertag)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:858
+msgid "subclasses must implement construct()!"
+msgstr ""
+
+#: cinder/api/openstack/compute/extensions.py:29
+#: cinder/api/openstack/volume/extensions.py:29
+msgid "Initializing extension manager."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:40
+#: cinder/api/openstack/compute/images.py:146
+#: cinder/api/openstack/compute/images.py:161
+msgid "Image not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:79
+msgid "Incorrect request body format"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:83
+#: cinder/api/openstack/compute/server_metadata.py:80
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:79
+#: cinder/api/openstack/compute/contrib/volumetypes.py:188
+msgid "Request body and URI mismatch"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:86
+#: cinder/api/openstack/compute/server_metadata.py:84
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:82
+#: cinder/api/openstack/compute/contrib/volumetypes.py:191
+msgid "Request body contains too many items"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:111
+msgid "Invalid metadata key"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:74
+msgid "Instance does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:97
+msgid "Instance is not a member of specified network"
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:140
+#, python-format
+msgid ""
+"Only %(value)s %(verb)s request(s) can be made to %(uri)s every "
+"%(unit_string)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:266
+msgid "This request was rate-limited."
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:38
+#: cinder/api/openstack/compute/server_metadata.py:122
+#: cinder/api/openstack/compute/server_metadata.py:159
+msgid "Server does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:141
+#: cinder/api/openstack/compute/server_metadata.py:152
+msgid "Metadata item was not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:425
+#, python-format
+msgid "Invalid server status: %(status)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:433
+msgid "Invalid changes-since value"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:483
+msgid "Personality file limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:485
+msgid "Personality file path too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:487
+msgid "Personality file content too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:501
+msgid "Server name is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:505
+msgid "Server name is an empty string"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:509
+msgid "Server name must be less than 256 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:527
+#, python-format
+msgid "Bad personality format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:530
+msgid "Bad personality format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:535
+#, python-format
+msgid "Personality content for %s cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:550
+#, python-format
+msgid "Bad networks format: network uuid is not in proper format (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:559
+#, python-format
+msgid "Invalid fixed IP address (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:566
+#, python-format
+msgid "Duplicate networks (%s) are not allowed"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:572
+#, python-format
+msgid "Bad network format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:575
+msgid "Bad networks format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:587
+msgid "Userdata content cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:594
+msgid "accessIPv4 is not proper IPv4 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:601
+msgid "accessIPv6 is not proper IPv6 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:633
+msgid "Server name is not defined"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:675
+#: cinder/api/openstack/compute/servers.py:740
+msgid "Invalid flavorRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:737
+msgid "Can not find requested image"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:743
+msgid "Invalid key_name provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:829
+#: cinder/api/openstack/compute/servers.py:849
+msgid "Instance has not been resized."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:835
+#, python-format
+msgid "Error in confirm-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:855
+#, python-format
+msgid "Error in revert-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:868
+msgid "Argument 'type' for reboot is not HARD or SOFT"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:872
+msgid "Missing argument 'type' for reboot"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:885
+#, python-format
+msgid "Error in reboot %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:897
+msgid "Unable to locate requested flavor."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:900
+msgid "Resize requires a change in size."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:924
+msgid "Malformed server entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:931
+msgid "Missing imageRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:940
+msgid "Invalid imageRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:949
+msgid "Missing flavorRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:962
+msgid "No adminPass was specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:966
+#: cinder/api/openstack/compute/servers.py:1144
+msgid "Invalid adminPass"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:980
+msgid "Unable to parse metadata key/value pairs."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:993
+msgid "Resize request has invalid 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:996
+msgid "Resize requests require 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1014
+#: cinder/api/openstack/compute/contrib/aggregates.py:142
+#: cinder/api/openstack/compute/contrib/networks.py:65
+msgid "Invalid request body"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1019
+msgid "Could not parse imageRef from request."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1071
+msgid "Instance could not be found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1074
+msgid "Cannot find image for rebuild"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1103
+msgid "createImage entity requires name attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1112
+#: cinder/api/openstack/compute/contrib/admin_actions.py:238
+msgid "Invalid metadata"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1167
+#, python-format
+msgid "Removing options '%(unk_opt_str)s' from query"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:60
+#, python-format
+msgid "Compute.api::pause %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:77
+#, python-format
+msgid "Compute.api::unpause %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:94
+#, python-format
+msgid "compute.api::suspend %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:111
+#, python-format
+msgid "compute.api::resume %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:127
+#, python-format
+msgid "Error in migrate %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:141
+#, python-format
+msgid "Compute.api::reset_network %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:154
+#: cinder/api/openstack/compute/contrib/admin_actions.py:170
+#: cinder/api/openstack/compute/contrib/admin_actions.py:186
+#: cinder/api/openstack/compute/contrib/multinic.py:41
+#: cinder/api/openstack/compute/contrib/rescue.py:44
+msgid "Server not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:157
+#, python-format
+msgid "Compute.api::inject_network_info %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:173
+#, python-format
+msgid "Compute.api::lock %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:189
+#, python-format
+msgid "Compute.api::unlock %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:219
+#, python-format
+msgid "createBackup entity requires %s attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:223
+msgid "Malformed createBackup entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:229
+msgid "createBackup attribute 'rotation' must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:244
+#: cinder/api/openstack/compute/contrib/console_output.py:47
+#: cinder/api/openstack/compute/contrib/console_output.py:59
+#: cinder/api/openstack/compute/contrib/consoles.py:49
+#: cinder/api/openstack/compute/contrib/consoles.py:60
+#: cinder/api/openstack/compute/contrib/server_action_list.py:49
+#: cinder/api/openstack/compute/contrib/server_diagnostics.py:47
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:38
+msgid "Instance not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:272
+msgid "host and block_migration must be specified."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:284
+#, python-format
+msgid "Live migration of instance %(id)s to host %(host)s failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:76
+#, python-format
+msgid ""
+"Cannot create aggregate with name %(name)s and availability zone "
+"%(avail_zone)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:88
+#, python-format
+msgid "Cannot show aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:114
+#, python-format
+msgid "Cannot update aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:126
+#, python-format
+msgid "Cannot delete aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:139
+#, python-format
+msgid "Aggregates does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:152
+#: cinder/api/openstack/compute/contrib/aggregates.py:158
+#, python-format
+msgid "Cannot add host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:171
+#: cinder/api/openstack/compute/contrib/aggregates.py:175
+#, python-format
+msgid "Cannot remove host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:195
+#, python-format
+msgid "Cannot set metadata %(metadata)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/certificates.py:75
+msgid "Only root certificate can be retrieved."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/cloudpipe.py:146
+msgid ""
+"Unable to claim IP for VPN instances, ensure it isn't running, and try "
+"again in a few minutes"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:44
+msgid "Missing type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:56
+msgid "Invalid type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/disk_config.py:44
+#, python-format
+msgid "%s must be either 'MANUAL' or 'AUTO'."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/extended_server_attributes.py:77
+#: cinder/api/openstack/compute/contrib/extended_status.py:61
+msgid "Server not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:61
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:91
+msgid "Flavor not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:49
+#: cinder/api/openstack/compute/contrib/volumetypes.py:158
+msgid "No Request Body"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:159
+#, python-format
+msgid "No more floating ips in pool %s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:161
+msgid "No more floating ips available."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:201
+#: cinder/api/openstack/compute/contrib/floating_ips.py:230
+#: cinder/api/openstack/compute/contrib/security_groups.py:571
+#: cinder/api/openstack/compute/contrib/security_groups.py:604
+msgid "Missing parameter dict"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:204
+#: cinder/api/openstack/compute/contrib/floating_ips.py:233
+msgid "Address not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:213
+msgid "No fixed ips associated to instance"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:216
+msgid "Associate floating ip failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:144
+#, python-format
+msgid "Invalid status: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:148
+#, python-format
+msgid "Invalid mode: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:152
+#, python-format
+msgid "Invalid update setting: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:170
+#, python-format
+msgid "Putting host %(host)s in maintenance mode %(mode)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:181
+#, python-format
+msgid "Setting host %(host)s to %(state)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:230
+msgid "Describe-resource is admin only functionality"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:238
+msgid "Host not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:70
+msgid "Keypair name contains unsafe characters"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:95
+msgid "Keypair name must be between 1 and 255 characters long"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:100
+#, python-format
+msgid "Key pair '%s' already exists."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:52
+msgid "Missing 'networkId' argument for addFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:68
+msgid "Missing 'address' argument for removeFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:77
+#, python-format
+msgid "Unable to find address %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:62
+#, python-format
+msgid "Network does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:70
+#, python-format
+msgid "Disassociating network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:74
+#: cinder/api/openstack/compute/contrib/networks.py:91
+#: cinder/api/openstack/compute/contrib/networks.py:101
+msgid "Network not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:87
+#, python-format
+msgid "Showing network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:97
+#, python-format
+msgid "Deleting network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/scheduler_hints.py:41
+msgid "Malformed scheduler_hints attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:222
+msgid "Security group id should be integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:243
+msgid "Security group is still in use"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:295
+#, python-format
+msgid "Security group %s already exists"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:315
+#, python-format
+msgid "Security group %s is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:318
+#, python-format
+msgid "Security group %s cannot be empty."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:321
+#, python-format
+msgid "Security group %s should not be greater than 255 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:348
+msgid "Parent group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:351
+#, python-format
+msgid "Security group (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:369
+msgid "Not enough parameters to build a valid rule."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:376
+#, python-format
+msgid "This rule already exists in group %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:414
+msgid "Parent or group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:507
+msgid "Rule id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:510
+#, python-format
+msgid "Rule (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:574
+#: cinder/api/openstack/compute/contrib/security_groups.py:607
+msgid "Security group not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:578
+#: cinder/api/openstack/compute/contrib/security_groups.py:611
+msgid "Security group name cannot be empty"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:45
+#, python-format
+msgid "start instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:54
+#, python-format
+msgid "stop instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:73
+#: cinder/api/openstack/volume/volumes.py:106
+#, python-format
+msgid "vol=%s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:146
+#: cinder/api/openstack/volume/volumes.py:184
+#, python-format
+msgid "Delete volume with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:329
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(server_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:481
+#: cinder/api/openstack/volume/snapshots.py:110
+#, python-format
+msgid "Delete snapshot with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:524
+#: cinder/api/openstack/volume/snapshots.py:150
+#, python-format
+msgid "Create snapshot from volume %s"
+msgstr ""
+
+#: cinder/auth/fakeldap.py:33
+msgid "Attempted to instantiate singleton"
+msgstr ""
+
+#: cinder/auth/ldapdriver.py:650
+#, python-format
+msgid ""
+"Attempted to remove the last member of a group. Deleting the group at %s "
+"instead."
+msgstr ""
+
+#: cinder/auth/manager.py:298
+#, python-format
+msgid "Looking up user: %r"
+msgstr ""
+
+#: cinder/auth/manager.py:302
+#, python-format
+msgid "Failed authorization for access key %s"
+msgstr ""
+
+#: cinder/auth/manager.py:308
+#, python-format
+msgid "Using project name = user name (%s)"
+msgstr "Verwende Project-Name = User-Name (%s)"
+
+#: cinder/auth/manager.py:315
+#, python-format
+msgid "failed authorization: no project named %(pjid)s (user=%(uname)s)"
+msgstr ""
+
+#: cinder/auth/manager.py:324
+#, python-format
+msgid ""
+"Failed authorization: user %(uname)s not admin and not member of project "
+"%(pjname)s"
+msgstr ""
+
+#: cinder/auth/manager.py:331 cinder/auth/manager.py:343
+#, python-format
+msgid "user.secret: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:332 cinder/auth/manager.py:344
+#, python-format
+msgid "expected_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:333 cinder/auth/manager.py:345
+#, python-format
+msgid "signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:335 cinder/auth/manager.py:357
+#, python-format
+msgid "Invalid signature for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:353
+#, python-format
+msgid "host_only_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:449
+msgid "Must specify project"
+msgstr ""
+
+#: cinder/auth/manager.py:490
+#, python-format
+msgid "Adding role %(role)s to user %(uid)s in project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:493
+#, python-format
+msgid "Adding sitewide role %(role)s to user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:519
+#, python-format
+msgid "Removing role %(role)s from user %(uid)s on project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:522
+#, python-format
+msgid "Removing sitewide role %(role)s from user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:595
+#, python-format
+msgid "Created project %(name)s with manager %(manager_user)s"
+msgstr ""
+
+#: cinder/auth/manager.py:613
+#, python-format
+msgid "modifying project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:625
+#, python-format
+msgid "Adding user %(uid)s to project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:646
+#, python-format
+msgid "Remove user %(uid)s from project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:676
+#, python-format
+msgid "Deleting project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:734
+#, python-format
+msgid "Created user %(rvname)s (admin: %(rvadmin)r)"
+msgstr ""
+
+#: cinder/auth/manager.py:743
+#, python-format
+msgid "Deleting user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:753
+#, python-format
+msgid "Access Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:755
+#, python-format
+msgid "Secret Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:757
+#, python-format
+msgid "Admin status set to %(admin)r for user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:802
+#, python-format
+msgid "No vpn data for project %s"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:46
+msgid "Instance type for vpn instances"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:49
+msgid "Template for cloudpipe instance boot script"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:52
+msgid "Network to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:55
+msgid "Netmask to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:107
+#, python-format
+msgid "Launching VPN for %s"
+msgstr ""
+
+#: cinder/compute/api.py:141
+msgid "No compute host specified"
+msgstr ""
+
+#: cinder/compute/api.py:144
+#, python-format
+msgid "Unable to find host for Instance %s"
+msgstr ""
+
+#: cinder/compute/api.py:192
+#, python-format
+msgid ""
+"Quota exceeded for %(pid)s, tried to set %(num_metadata)s metadata "
+"properties"
+msgstr ""
+
+#: cinder/compute/api.py:203
+#, python-format
+msgid "Quota exceeded for %(pid)s, metadata property key or value too long"
+msgstr ""
+
+#: cinder/compute/api.py:257
+msgid "Cannot run any more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:259
+#, python-format
+msgid "Can only run %s more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:261
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances. "
+msgstr ""
+
+#: cinder/compute/api.py:310
+msgid "Creating a raw instance"
+msgstr ""
+
+#: cinder/compute/api.py:312
+#, python-format
+msgid "Using Kernel=%(kernel_id)s, Ramdisk=%(ramdisk_id)s"
+msgstr ""
+
+#: cinder/compute/api.py:383
+#, python-format
+msgid "Going to run %s instances..."
+msgstr ""
+
+#: cinder/compute/api.py:447
+#, python-format
+msgid "bdm %s"
+msgstr ""
+
+#: cinder/compute/api.py:474
+#, python-format
+msgid "block_device_mapping %s"
+msgstr ""
+
+#: cinder/compute/api.py:591
+#, python-format
+msgid "Sending create to scheduler for %(pid)s/%(uid)s's"
+msgstr ""
+
+#: cinder/compute/api.py:871
+msgid "Going to try to soft delete instance"
+msgstr ""
+
+#: cinder/compute/api.py:891
+msgid "No host for instance, deleting immediately"
+msgstr ""
+
+#: cinder/compute/api.py:939
+msgid "Going to try to terminate instance"
+msgstr ""
+
+#: cinder/compute/api.py:977
+msgid "Going to try to stop instance"
+msgstr ""
+
+#: cinder/compute/api.py:996
+msgid "Going to try to start instance"
+msgstr ""
+
+#: cinder/compute/api.py:1000
+#, python-format
+msgid "Instance %(instance_uuid)s is not stopped. (%(vm_state)s"
+msgstr ""
+
+#: cinder/compute/api.py:1071 cinder/volume/api.py:173
+#: cinder/volume/volume_types.py:64
+#, python-format
+msgid "Searching by: %s"
+msgstr ""
+
+#: cinder/compute/api.py:1201
+#, python-format
+msgid "Image type not recognized %s"
+msgstr ""
+
+#: cinder/compute/api.py:1369
+msgid "flavor_id is None. Assuming migration."
+msgstr ""
+
+#: cinder/compute/api.py:1377
+#, python-format
+msgid ""
+"Old instance type %(current_instance_type_name)s,  new instance type "
+"%(new_instance_type_name)s"
+msgstr ""
+
+#: cinder/compute/api.py:1644
+#, python-format
+msgid "multiple fixedips exist, using the first: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:57 cinder/compute/instance_types.py:65
+msgid "create arguments must be positive integers"
+msgstr ""
+
+#: cinder/compute/instance_types.py:76 cinder/volume/volume_types.py:41
+#, python-format
+msgid "DB error: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:86
+#, python-format
+msgid "Instance type %s not found for deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:138
+#, python-format
+msgid "check_instance_lock: decorating: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:140
+#, python-format
+msgid ""
+"check_instance_lock: arguments: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+msgstr ""
+
+#: cinder/compute/manager.py:144
+#, python-format
+msgid "check_instance_lock: locked: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:146
+#, python-format
+msgid "check_instance_lock: admin: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:151
+#, python-format
+msgid "check_instance_lock: executing: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:155
+#, python-format
+msgid "check_instance_lock: not executing |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:201
+#, python-format
+msgid "Unable to load the virtualization driver: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:223
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s has been destroyed from under us while trying "
+"to set it to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:240
+#, python-format
+msgid "Current state is %(drv_state)s, state in DB is %(db_state)s."
+msgstr ""
+
+#: cinder/compute/manager.py:245
+msgid "Rebooting instance after cinder-compute restart."
+msgstr ""
+
+#: cinder/compute/manager.py:255
+msgid "Hypervisor driver does not support firewall rules"
+msgstr ""
+
+#: cinder/compute/manager.py:260
+msgid "Checking state"
+msgstr ""
+
+#: cinder/compute/manager.py:329
+#, python-format
+msgid "Setting up bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:400
+#, python-format
+msgid "Instance %s already deleted from database. Attempting forceful vm deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:406
+#, python-format
+msgid "Exception encountered while terminating the instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:444
+#, python-format
+msgid "Instance %s not found."
+msgstr ""
+
+#: cinder/compute/manager.py:480
+msgid "Instance has already been created"
+msgstr "Instanz wurde bereits erstellt"
+
+#: cinder/compute/manager.py:523
+#, python-format
+msgid ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:528
+#, python-format
+msgid ""
+"Image '%(image_id)s' size %(size_bytes)d exceeded instance_type allowed "
+"size %(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:538
+msgid "Starting instance..."
+msgstr ""
+
+#: cinder/compute/manager.py:548
+msgid "Skipping network allocation for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:561
+msgid "Instance failed network setup"
+msgstr ""
+
+#: cinder/compute/manager.py:565
+#, python-format
+msgid "Instance network_info: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:578
+msgid "Instance failed block device setup"
+msgstr ""
+
+#: cinder/compute/manager.py:594
+msgid "Instance failed to spawn"
+msgstr ""
+
+#: cinder/compute/manager.py:615
+msgid "Deallocating network for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:672
+#, python-format
+msgid "%(action_str)s instance"
+msgstr ""
+
+#: cinder/compute/manager.py:699
+#, python-format
+msgid "Ignoring DiskNotFound: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:708
+#, python-format
+msgid "terminating bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:742 cinder/compute/manager.py:1328
+#: cinder/compute/manager.py:1416 cinder/compute/manager.py:2501
+#, python-format
+msgid "%s. Setting instance vm_state to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:811
+#, python-format
+msgid ""
+"Cannot rebuild instance [%(instance_uuid)s], because the given image does"
+" not exist."
+msgstr ""
+
+#: cinder/compute/manager.py:816
+#, python-format
+msgid "Cannot rebuild instance [%(instance_uuid)s]: %(exc)s"
+msgstr ""
+
+#: cinder/compute/manager.py:823
+#, python-format
+msgid "Rebuilding instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:876
+#, python-format
+msgid "Rebooting instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:891
+#, python-format
+msgid ""
+"trying to reboot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:933
+#, python-format
+msgid "instance %s: snapshotting"
+msgstr ""
+
+#: cinder/compute/manager.py:939
+#, python-format
+msgid ""
+"trying to snapshot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:995
+#, python-format
+msgid "Found %(num_images)d images (rotation: %(rotation)d)"
+msgstr ""
+
+#: cinder/compute/manager.py:1001
+#, python-format
+msgid "Rotating out %d backups"
+msgstr ""
+
+#: cinder/compute/manager.py:1005
+#, python-format
+msgid "Deleting image %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1035
+#, python-format
+msgid "Failed to set admin password. Instance %s is not running"
+msgstr ""
+
+#: cinder/compute/manager.py:1041
+#, python-format
+msgid "Instance %s: Root password set"
+msgstr ""
+
+#: cinder/compute/manager.py:1050
+msgid "set_admin_password is not implemented by this driver."
+msgstr ""
+
+#: cinder/compute/manager.py:1064
+msgid "Error setting admin password"
+msgstr ""
+
+#: cinder/compute/manager.py:1079
+#, python-format
+msgid ""
+"trying to inject a file into a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1084
+#, python-format
+msgid "instance %(instance_uuid)s: injecting file to %(path)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1098
+#, python-format
+msgid ""
+"trying to update agent on a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1103
+#, python-format
+msgid "instance %(instance_uuid)s: updating agent to %(url)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1116
+#, python-format
+msgid "instance %s: rescuing"
+msgstr "Instanz %s: Rettung"
+
+#: cinder/compute/manager.py:1141
+#, python-format
+msgid "instance %s: unrescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1270
+msgid "destination same as source!"
+msgstr ""
+
+#: cinder/compute/manager.py:1287
+#, python-format
+msgid "instance %s: migrating"
+msgstr ""
+
+#: cinder/compute/manager.py:1471
+#, python-format
+msgid "instance %s: pausing"
+msgstr "Instanz %s pausiert"
+
+#: cinder/compute/manager.py:1489
+#, python-format
+msgid "instance %s: unpausing"
+msgstr "Instanz %s wird fortgesetzt"
+
+#: cinder/compute/manager.py:1525
+#, python-format
+msgid "instance %s: retrieving diagnostics"
+msgstr ""
+
+#: cinder/compute/manager.py:1534
+#, python-format
+msgid "instance %s: suspending"
+msgstr ""
+
+#: cinder/compute/manager.py:1556
+#, python-format
+msgid "instance %s: resuming"
+msgstr ""
+
+#: cinder/compute/manager.py:1579
+#, python-format
+msgid "instance %s: locking"
+msgstr ""
+
+#: cinder/compute/manager.py:1588
+#, python-format
+msgid "instance %s: unlocking"
+msgstr ""
+
+#: cinder/compute/manager.py:1596
+#, python-format
+msgid "instance %s: getting locked state"
+msgstr ""
+
+#: cinder/compute/manager.py:1606
+#, python-format
+msgid "instance %s: reset network"
+msgstr ""
+
+#: cinder/compute/manager.py:1614
+#, python-format
+msgid "instance %s: inject network info"
+msgstr ""
+
+#: cinder/compute/manager.py:1618
+#, python-format
+msgid "network_info to inject: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:1655
+#, python-format
+msgid "instance %s: getting vnc console"
+msgstr ""
+
+#: cinder/compute/manager.py:1685
+#, python-format
+msgid "Booting with volume %(volume_id)s at %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1703
+#, python-format
+msgid ""
+"instance %(instance_uuid)s: attaching volume %(volume_id)s to "
+"%(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1705
+#, python-format
+msgid "Attaching volume %(volume_id)s to %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1714
+#, python-format
+msgid "instance %(instance_uuid)s: attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1724
+#, python-format
+msgid "Attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1752
+#, python-format
+msgid "Detach volume %(volume_id)s from mountpoint %(mp)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1756
+#, python-format
+msgid "Detaching volume from unknown instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1822
+#, python-format
+msgid ""
+"Creating tmpfile %s to notify to other compute nodes that they should "
+"mount the same storage."
+msgstr ""
+
+#: cinder/compute/manager.py:1884
+msgid "Instance has no volume."
+msgstr ""
+
+#: cinder/compute/manager.py:1916
+#, python-format
+msgid "plug_vifs() failed %(cnt)d.Retry up to %(max_retry)d for %(hostname)s."
+msgstr ""
+
+#: cinder/compute/manager.py:1973
+#, python-format
+msgid "Pre live migration failed at  %(dest)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2000
+msgid "post_live_migration() is started.."
+msgstr ""
+
+#: cinder/compute/manager.py:2030
+msgid "No floating_ip found"
+msgstr ""
+
+#: cinder/compute/manager.py:2038
+msgid "No floating_ip found."
+msgstr ""
+
+#: cinder/compute/manager.py:2040
+#, python-format
+msgid ""
+"Live migration: Unexpected error: cannot inherit floating ip.\n"
+"%(e)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2073
+#, python-format
+msgid "Migrating instance to %(dest)s finished successfully."
+msgstr ""
+
+#: cinder/compute/manager.py:2075
+msgid ""
+"You may see the error \"libvirt: QEMU error: Domain not found: no domain "
+"with matching name.\" This error can be safely ignored."
+msgstr ""
+
+#: cinder/compute/manager.py:2090
+msgid "Post operation of migraton started"
+msgstr ""
+
+#: cinder/compute/manager.py:2226
+#, python-format
+msgid "Updated the info_cache for instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:2255
+msgid "Updating bandwidth usage cache"
+msgstr ""
+
+#: cinder/compute/manager.py:2277
+msgid "Updating host status"
+msgstr ""
+
+#: cinder/compute/manager.py:2305
+#, python-format
+msgid ""
+"Found %(num_db_instances)s in the database and %(num_vm_instances)s on "
+"the hypervisor."
+msgstr ""
+
+#: cinder/compute/manager.py:2331
+#, python-format
+msgid ""
+"During the sync_power process the instance %(uuid)s has moved from host "
+"%(src)s to host %(dst)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2344
+#, python-format
+msgid ""
+"Instance %s is in the process of migrating to this host. Wait next "
+"sync_power cycle before setting power state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2350
+msgid ""
+"Instance found in database but not known by hypervisor. Setting power "
+"state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2380
+msgid "FLAGS.reclaim_instance_interval <= 0, skipping..."
+msgstr ""
+
+#: cinder/compute/manager.py:2392
+msgid "Reclaiming deleted instance"
+msgstr ""
+
+#: cinder/compute/manager.py:2458
+#, python-format
+msgid ""
+"Detected instance with name label '%(name)s' which is marked as DELETED "
+"but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2465
+#, python-format
+msgid ""
+"Destroying instance with name label '%(name)s' which is marked as DELETED"
+" but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2472
+#, python-format
+msgid "Unrecognized value '%(action)s' for FLAGS.running_deleted_instance_action"
+msgstr ""
+
+#: cinder/compute/manager.py:2542
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: unrecoverable state during operation on "
+"%(host)s"
+msgstr ""
+
+#: cinder/compute/utils.py:142
+msgid "v4 subnets are required for legacy nw_info"
+msgstr ""
+
+#: cinder/console/manager.py:77 cinder/console/vmrc_manager.py:70
+msgid "Adding console"
+msgstr ""
+
+#: cinder/console/manager.py:97
+#, python-format
+msgid "Tried to remove non-existant console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:122
+#, python-format
+msgid "Tried to remove non-existent console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:125
+#, python-format
+msgid "Removing console %(console_id)s."
+msgstr ""
+
+#: cinder/console/xvp.py:98
+msgid "Rebuilding xvp conf"
+msgstr ""
+
+#: cinder/console/xvp.py:116
+#, python-format
+msgid "Re-wrote %s"
+msgstr ""
+
+#: cinder/console/xvp.py:121
+msgid "Stopping xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:134
+msgid "Starting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:141
+#, python-format
+msgid "Error starting xvp: %s"
+msgstr ""
+
+#: cinder/console/xvp.py:144
+msgid "Restarting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:146
+msgid "xvp not running..."
+msgstr ""
+
+#: cinder/consoleauth/manager.py:63
+#, python-format
+msgid "Deleting Expired Token: (%s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:75
+#, python-format
+msgid "Received Token: %(token)s, %(token_dict)s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:79
+#, python-format
+msgid "Checking Token: %(token)s, %(token_valid)s)"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:57
+msgid "Use of empty request context is deprecated"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:198
+#, python-format
+msgid "Unrecognized read_deleted value '%s'"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:516 cinder/db/sqlalchemy/api.py:551
+#, python-format
+msgid "No ComputeNode for %(host)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4019 cinder/db/sqlalchemy/api.py:4045
+#, python-format
+msgid "No backend config with id %(sm_backend_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4103
+#, python-format
+msgid "No sm_flavor called %(sm_flavor)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4147
+#, python-format
+msgid "No sm_volume with id %(volume_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:66
+msgid "python-migrate is not installed. Exiting."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:78
+msgid "version should be an integer"
+msgstr ""
+
+#: cinder/db/sqlalchemy/session.py:137
+#, python-format
+msgid "SQL connection failed. %s attempts left."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:48
+msgid "interface column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:80
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:54
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:48
+#, python-format
+msgid "Table |%s| not created!"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:87
+msgid "VIF column not added to fixed_ips table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:97
+#, python-format
+msgid "join list for moving mac_addresses |%s|"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:39
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:60
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:99
+msgid "foreign key constraint couldn't be added"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:58
+msgid "foreign key constraint couldn't be dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py:34
+msgid "priority column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:41
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:42
+#: cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py:56
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:68
+msgid "foreign key constraint couldn't be removed"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py:34
+msgid "progress column not added to instances table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py:97
+#, python-format
+msgid ""
+"Could not cast flavorid to integer: %s. Set flavorid to an integer-like "
+"string to downgrade."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:69
+msgid "instance_info_caches tables not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py:41
+msgid "progress column not added to compute_nodes table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:76
+msgid "dns_domains table not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:60
+msgid "quota_classes table not dropped"
+msgstr ""
+
+#: cinder/image/glance.py:147
+msgid "Connection error contacting glance server, retrying"
+msgstr ""
+
+#: cinder/image/glance.py:153 cinder/network/quantum/melange_connection.py:104
+msgid "Maximum attempts reached"
+msgstr ""
+
+#: cinder/image/glance.py:278
+#, python-format
+msgid "Creating image in Glance. Metadata passed in %s"
+msgstr ""
+
+#: cinder/image/glance.py:281
+#, python-format
+msgid "Metadata after formatting for Glance %s"
+msgstr ""
+
+#: cinder/image/glance.py:289
+#, python-format
+msgid "Metadata returned from Glance formatted for Base %s"
+msgstr ""
+
+#: cinder/image/glance.py:331 cinder/image/glance.py:335
+msgid "Not the image owner"
+msgstr ""
+
+#: cinder/image/glance.py:410
+#, python-format
+msgid "%(timestamp)s does not follow any of the signatures: %(iso_formats)s"
+msgstr ""
+
+#: cinder/image/s3.py:309
+#, python-format
+msgid "Failed to download %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:328
+#, python-format
+msgid "Failed to decrypt %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:340
+#, python-format
+msgid "Failed to untar %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:353
+#, python-format
+msgid "Failed to upload %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:379
+#, python-format
+msgid "Failed to decrypt private key: %s"
+msgstr ""
+
+#: cinder/image/s3.py:387
+#, python-format
+msgid "Failed to decrypt initialization vector: %s"
+msgstr ""
+
+#: cinder/image/s3.py:398
+#, python-format
+msgid "Failed to decrypt image file %(image_file)s: %(err)s"
+msgstr ""
+
+#: cinder/image/s3.py:410
+msgid "Unsafe filenames in image"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:38 cinder/ipv6/rfc2462.py:34
+#, python-format
+msgid "Bad mac for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:40 cinder/ipv6/rfc2462.py:36
+#, python-format
+msgid "Bad prefix for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:42
+#, python-format
+msgid "Bad project_id for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/network/ldapdns.py:321
+msgid "This driver only supports type 'a' entries."
+msgstr ""
+
+#: cinder/network/linux_net.py:166
+#, python-format
+msgid "Attempted to remove chain %s which does not exist"
+msgstr ""
+
+#: cinder/network/linux_net.py:192
+#, python-format
+msgid "Unknown chain: %r"
+msgstr ""
+
+#: cinder/network/linux_net.py:215
+#, python-format
+msgid ""
+"Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r "
+"%(top)r"
+msgstr ""
+
+#: cinder/network/linux_net.py:335
+msgid "IPTablesManager.apply completed with success"
+msgstr ""
+
+#: cinder/network/linux_net.py:694
+#, python-format
+msgid "Hupping dnsmasq threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:696
+#, python-format
+msgid "Pid %d is stale, relaunching dnsmasq"
+msgstr ""
+
+#: cinder/network/linux_net.py:756
+#, python-format
+msgid "killing radvd threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:758
+#, python-format
+msgid "Pid %d is stale, relaunching radvd"
+msgstr ""
+
+#: cinder/network/linux_net.py:967
+#, python-format
+msgid "Starting VLAN inteface %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:999
+#, python-format
+msgid "Starting Bridge interface for %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1142
+#, python-format
+msgid "Starting bridge %s "
+msgstr ""
+
+#: cinder/network/linux_net.py:1149
+#, python-format
+msgid "Done starting bridge %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1167
+#, python-format
+msgid "Failed unplugging gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/linux_net.py:1170
+#, python-format
+msgid "Unplugged gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/manager.py:291
+#, python-format
+msgid "Fixed ip %(fixed_ip_id)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:300 cinder/network/manager.py:496
+#, python-format
+msgid "Interface %(interface)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:315
+#, python-format
+msgid "floating IP allocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:353
+#, python-format
+msgid "floating IP deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:386
+#, python-format
+msgid "Address |%(address)s| is not allocated"
+msgstr ""
+
+#: cinder/network/manager.py:390
+#, python-format
+msgid "Address |%(address)s| is not allocated to your project |%(project)s|"
+msgstr ""
+
+#: cinder/network/manager.py:402
+#, python-format
+msgid "Quota exceeded for %s, tried to allocate address"
+msgstr ""
+
+#: cinder/network/manager.py:614
+#, python-format
+msgid ""
+"Database inconsistency: DNS domain |%s| is registered in the Cinder db but "
+"not visible to either the floating or instance DNS driver. It will be "
+"ignored."
+msgstr ""
+
+#: cinder/network/manager.py:660
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing zone to |%(av_zone)s|."
+msgstr ""
+
+#: cinder/network/manager.py:670
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing project to |%(project)s|."
+msgstr ""
+
+#: cinder/network/manager.py:778
+#, python-format
+msgid "Disassociated %s stale fixed ip(s)"
+msgstr ""
+
+#: cinder/network/manager.py:782
+msgid "setting network host"
+msgstr ""
+
+#: cinder/network/manager.py:896
+#, python-format
+msgid "network allocations for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:901
+#, python-format
+msgid "networks retrieved for instance |%(instance_id)s|: |%(networks)s|"
+msgstr ""
+
+#: cinder/network/manager.py:930
+#, python-format
+msgid "network deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:1152
+#, python-format
+msgid ""
+"instance-dns-zone is |%(domain)s|, which is in availability zone "
+"|%(zone)s|. Instance |%(instance)s| is in zone |%(zone2)s|. No DNS record"
+" will be created."
+msgstr ""
+
+#: cinder/network/manager.py:1227
+#, python-format
+msgid "Unable to release %s because vif doesn't exist."
+msgstr ""
+
+#: cinder/network/manager.py:1244
+#, python-format
+msgid "Leased IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1248
+#, python-format
+msgid "IP %s leased that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1256
+#, python-format
+msgid "IP |%s| leased that isn't allocated"
+msgstr ""
+
+#: cinder/network/manager.py:1261
+#, python-format
+msgid "Released IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1265
+#, python-format
+msgid "IP %s released that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1268
+#, python-format
+msgid "IP %s released that was not leased"
+msgstr ""
+
+#: cinder/network/manager.py:1331
+msgid "cidr already in use"
+msgstr ""
+
+#: cinder/network/manager.py:1334
+#, python-format
+msgid "requested cidr (%(cidr)s) conflicts with existing supernet (%(super)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1345
+#, python-format
+msgid ""
+"requested cidr (%(cidr)s) conflicts with existing smaller cidr "
+"(%(smaller)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1404
+msgid "Network already exists!"
+msgstr ""
+
+#: cinder/network/manager.py:1423
+#, python-format
+msgid "Network must be disassociated from project %s before delete"
+msgstr ""
+
+#: cinder/network/manager.py:1832
+msgid ""
+"The sum between the number of networks and the vlan start cannot be "
+"greater than 4094"
+msgstr ""
+
+#: cinder/network/manager.py:1839
+#, python-format
+msgid ""
+"The network range is not big enough to fit %(num_networks)s. Network size"
+" is %(network_size)s"
+msgstr ""
+
+#: cinder/network/minidns.py:65
+msgid "This driver only supports type 'a'"
+msgstr ""
+
+#: cinder/network/quantum/client.py:154
+msgid "Tenant ID not set"
+msgstr ""
+
+#: cinder/network/quantum/client.py:180
+#, python-format
+msgid "Quantum Client Request: %(method)s %(action)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:196
+#, python-format
+msgid "Quantum entity not found: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:206
+#, python-format
+msgid "Server %(status_code)s error: %(data)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:210
+#, python-format
+msgid "Unable to connect to server. Got error: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:228
+#, python-format
+msgid "unable to deserialize object of type = '%s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:162
+msgid "QuantumManager does not use 'multi_host' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:166
+msgid "QuantumManager requires that only one network is created per call"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:176
+msgid "QuantumManager does not use 'vlan_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:182
+msgid "QuantumManager does not use 'vpn_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:186
+msgid "QuantumManager does not use 'bridge' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:190
+msgid "QuantumManager does not use 'bridge_interface' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:195
+msgid "QuantumManager requires a valid (.1) gateway address."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:204
+#, python-format
+msgid ""
+"Unable to find existing quantum network for tenant '%(q_tenant_id)s' with"
+" net-id '%(quantum_net_id)s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:301
+#, python-format
+msgid "network allocations for instance %s"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:588
+#, python-format
+msgid ""
+"port deallocation failed for instance: |%(instance_id)s|, port_id: "
+"|%(port_id)s|"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:606
+#, python-format
+msgid ""
+"ipam deallocation failed for instance: |%(instance_id)s|, vif_uuid: "
+"|%(vif_uuid)s|"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:96
+#, python-format
+msgid "Server returned error: %s"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:98
+msgid "Connection error contacting melange service, retrying"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:108
+#, python-format
+msgid ""
+"allocate IP on network |%(network_id)s| belonging to "
+"|%(network_tenant_id)s| to this vif |%(vif_id)s| with mac "
+"|%(mac_address)s| belonging to |%(project_id)s| "
+msgstr ""
+
+#: cinder/network/quantum/melange_ipam_lib.py:133
+msgid "get_project_and_global_net_ids must be called with a non-null project_id"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:75
+msgid "Error creating network entry"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:90
+#, python-format
+msgid "No network with net_id = %s"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:221
+#, python-format
+msgid "No fixed IPs to deallocate for vif %s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:99
+#, python-format
+msgid "Connecting interface %(interface_id)s to net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:113
+#, python-format
+msgid "Deleting port %(port_id)s on net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/notifier/api.py:115
+#, python-format
+msgid "%s not in valid priorities"
+msgstr ""
+
+#: cinder/notifier/api.py:130
+#, python-format
+msgid ""
+"Problem '%(e)s' attempting to send to notification system. "
+"Payload=%(payload)s"
+msgstr ""
+
+#: cinder/notifier/list_notifier.py:65
+#, python-format
+msgid "Problem '%(e)s' attempting to send to notification driver %(driver)s."
+msgstr ""
+
+#: cinder/notifier/rabbit_notifier.py:46
+#, python-format
+msgid "Could not send notification to %(topic)s. Payload=%(message)s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:146
+#, python-format
+msgid "Returning exception %s to caller"
+msgstr ""
+
+#: cinder/rpc/amqp.py:188
+#, python-format
+msgid "unpacked context: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:231
+#, python-format
+msgid "received %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:236
+#, python-format
+msgid "no method for message: %s"
+msgstr "keine Methode für diese Nachricht gefunden: %s"
+
+#: cinder/rpc/amqp.py:237
+#, python-format
+msgid "No method for message: %s"
+msgstr "keine Methode für diese Nachricht gefunden: %s"
+
+#: cinder/rpc/amqp.py:321
+#, python-format
+msgid "Making asynchronous call on %s ..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:324
+#, python-format
+msgid "MSG_ID is %s"
+msgstr "MSG_ID ist %s"
+
+#: cinder/rpc/amqp.py:346
+#, python-format
+msgid "Making asynchronous cast on %s..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:354
+msgid "Making asynchronous fanout cast..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:379
+#, python-format
+msgid "Sending notification on %s..."
+msgstr ""
+
+#: cinder/rpc/common.py:54
+#, python-format
+msgid ""
+"Remote error: %(exc_type)s %(value)s\n"
+"%(traceback)s."
+msgstr ""
+
+#: cinder/rpc/common.py:71
+msgid "Timeout while waiting on RPC response."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:111
+msgid "Failed to process message... skipping it."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:407
+#, python-format
+msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:430
+#, python-format
+msgid "Connected to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:466
+#, python-format
+msgid ""
+"Unable to connect to AMQP server on %(hostname)s:%(port)d after "
+"%(max_retries)d tries: %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:482
+#, python-format
+msgid ""
+"AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying "
+"again in %(sleep_time)d seconds."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:533 cinder/rpc/impl_qpid.py:385
+#, python-format
+msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:551 cinder/rpc/impl_qpid.py:400
+#, python-format
+msgid "Timed out waiting for RPC response: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:555 cinder/rpc/impl_qpid.py:404
+#, python-format
+msgid "Failed to consume message from queue: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:589 cinder/rpc/impl_qpid.py:434
+#, python-format
+msgid "Failed to publish message to topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:341
+#, python-format
+msgid "Unable to connect to AMQP server: %s "
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:346
+#, python-format
+msgid "Connected to AMQP server on %s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:354
+msgid "Re-established AMQP queues"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:412
+msgid "Error processing message.  Skipping it."
+msgstr ""
+
+#: cinder/scheduler/chance.py:47 cinder/scheduler/simple.py:91
+#: cinder/scheduler/simple.py:143
+msgid "Is the appropriate service running?"
+msgstr ""
+
+#: cinder/scheduler/chance.py:52
+msgid "Could not find another compute"
+msgstr ""
+
+#: cinder/scheduler/driver.py:63
+#, python-format
+msgid "Casted '%(method)s' to volume '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:80
+#, python-format
+msgid "Casted '%(method)s' to compute '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:89
+#, python-format
+msgid "Casted '%(method)s' to network '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:107
+#, python-format
+msgid "Casted '%(method)s' to %(topic)s '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:181
+msgid "Must implement a fallback schedule"
+msgstr ""
+
+#: cinder/scheduler/driver.py:185
+msgid "Driver must implement schedule_prep_resize"
+msgstr ""
+
+#: cinder/scheduler/driver.py:190
+msgid "Driver must implement schedule_run_instance"
+msgstr ""
+
+#: cinder/scheduler/driver.py:325
+msgid "Block migration can not be used with shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:330
+msgid "Live migration can not be used without shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:367 cinder/scheduler/driver.py:457
+#, python-format
+msgid "host %(dest)s is not compatible with original host %(src)s."
+msgstr ""
+
+#: cinder/scheduler/driver.py:416
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"memory(host:%(avail)s <= instance:%(mem_inst)s)"
+msgstr ""
+
+#: cinder/scheduler/driver.py:472
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"disk(host:%(available)s <= instance:%(necessary)s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:51
+#, python-format
+msgid "No host selection for %s defined."
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:64
+#, python-format
+msgid "Attempting to build %(num_instances)d instance(s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:157
+msgid "Scheduler only understands Compute nodes (for now)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:199
+#, python-format
+msgid "Filtered %(hosts)s"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:209
+#, python-format
+msgid "Weighted %(weighted_host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:144
+#, python-format
+msgid "Host filter fails for ignored host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:151
+#, python-format
+msgid "Host filter fails for non-forced host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:157
+#, python-format
+msgid "Host filter function %(func)s failed for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:163
+#, python-format
+msgid "Host filter passes for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:272
+#, python-format
+msgid "Received %(service_name)s service update from %(host)s."
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:313
+msgid "host_manager only implemented for 'compute'"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:323
+#, python-format
+msgid "No service for compute ID %s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:85
+#, python-format
+msgid ""
+"Driver Method %(driver_method_name)s missing: %(e)s. Reverting to "
+"schedule()"
+msgstr ""
+
+#: cinder/scheduler/manager.py:150
+#, python-format
+msgid "Failed to schedule_%(method)s: %(ex)s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:159
+#, python-format
+msgid "Setting instance %(instance_uuid)s to %(state)s state."
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:66
+#, python-format
+msgid "Could not stat scheduler options file %(filename)s: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:75
+#, python-format
+msgid "Could not decode scheduler options: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/simple.py:87
+msgid "Not enough allocatable CPU cores remaining"
+msgstr ""
+
+#: cinder/scheduler/simple.py:137
+msgid "Not enough allocatable volume gigabytes remaining"
+msgstr ""
+
+#: cinder/scheduler/filters/core_filter.py:45
+msgid "VCPUs not set; assuming CPU collection broken"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:72
+#, python-format
+msgid "Faking execution of cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:80
+#, python-format
+msgid "Faked command matched %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:96
+#, python-format
+msgid "Faked command raised an exception %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:101
+#, python-format
+msgid "Reply to faked command is stdout='%(stdout)s' stderr='%(stderr)s'"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:784
+msgid "Please extend mock libvirt module to support flags"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:790
+msgid "Please extend fake libvirt module to support this auth method"
+msgstr ""
+
+#: cinder/tests/test_compute.py:365 cinder/tests/test_compute.py:1419
+#, python-format
+msgid "Running instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:371
+#, python-format
+msgid "After terminating instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:589
+msgid "Internal error"
+msgstr ""
+
+#: cinder/tests/test_compute.py:1430
+#, python-format
+msgid "After force-killing instances: %s"
+msgstr ""
+
+#: cinder/tests/test_misc.py:92
+#, python-format
+msgid ""
+"The following migrations are missing a downgrade:\n"
+"\t%s"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:169
+msgid "id"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:170
+msgid "IPv4"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:171
+msgid "IPv6"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:172
+msgid "start address"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:173
+msgid "DNS1"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:174
+msgid "DNS2"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:175
+msgid "VlanID"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:176
+msgid "project"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:177
+msgid "uuid"
+msgstr ""
+
+#: cinder/tests/test_volume.py:216
+#, python-format
+msgid "Target %s allocated"
+msgstr ""
+
+#: cinder/tests/test_volume.py:468
+#, python-format
+msgid "Cannot confirm exported volume id:%s."
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:58
+#, python-format
+msgid "Given data: %s"
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:59
+#, python-format
+msgid "Result data: %s"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:626
+#, python-format
+msgid "Creating files in %s to simulate guest agent"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:637
+#, python-format
+msgid "Removing simulated guest agent files in %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/test_servers.py:2144
+#, python-format
+msgid "Quota exceeded: code=%(code)s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:57
+#, python-format
+msgid "_create: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:66
+#, python-format
+msgid "_delete: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:75
+#, python-format
+msgid "_get: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:85
+#, python-format
+msgid "_get_all: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:125
+#, python-format
+msgid "test_snapshot_create: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:134
+#, python-format
+msgid "test_snapshot_create: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:156
+#, python-format
+msgid "test_snapshot_create_force: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:165
+#, python-format
+msgid "test_snapshot_create_force: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:205
+#, python-format
+msgid "test_snapshot_show: resp=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:231
+#, python-format
+msgid "test_snapshot_detail: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/integrated/test_login.py:31
+#, python-format
+msgid "flavor: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:38
+#, python-format
+msgid ""
+"%(message)s\n"
+"Status Code: %(_status)s\n"
+"Body: %(_body)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:47
+msgid "Authentication error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:55
+msgid "Authorization error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:63
+msgid "Item not found"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:105
+#, python-format
+msgid "Doing %(method)s on %(relative_url)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:107
+#, python-format
+msgid "Body: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:125
+#, python-format
+msgid "%(auth_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:151
+#, python-format
+msgid "%(relative_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:161
+msgid "Unexpected status code"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:168
+#, python-format
+msgid "Decoding JSON: %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:133
+#, python-format
+msgid "Nested received %(queue)s, %(value)s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:142
+#, python-format
+msgid "Nested return %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:160
+msgid "RPC backend does not support timeouts"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:227 cinder/tests/rpc/common.py:233
+#, python-format
+msgid "Received %s"
+msgstr ""
+
+#: cinder/virt/connection.py:85
+msgid "Failed to open connection to the hypervisor"
+msgstr "Konnte Verbindung zum Hypervisor nicht öffnen"
+
+#: cinder/virt/fake.py:270 cinder/virt/xenapi_conn.py:396
+#: cinder/virt/baremetal/proxy.py:716 cinder/virt/libvirt/connection.py:2045
+#, python-format
+msgid "Compute_service record created for %s "
+msgstr ""
+
+#: cinder/virt/fake.py:273 cinder/virt/xenapi_conn.py:399
+#: cinder/virt/baremetal/proxy.py:720 cinder/virt/libvirt/connection.py:2048
+#, python-format
+msgid "Compute_service record updated for %s "
+msgstr ""
+
+#: cinder/virt/firewall.py:130
+#, python-format
+msgid "Attempted to unfilter instance %s which is not filtered"
+msgstr ""
+
+#: cinder/virt/firewall.py:137
+#, python-format
+msgid "Filters added to instance %s"
+msgstr ""
+
+#: cinder/virt/firewall.py:139
+msgid "Provider Firewall Rules refreshed"
+msgstr ""
+
+#: cinder/virt/firewall.py:291
+#, python-format
+msgid "Adding security group rule: %r"
+msgstr ""
+
+#: cinder/virt/firewall.py:403 cinder/virt/xenapi/firewall.py:87
+#, python-format
+msgid "Adding provider rule: %s"
+msgstr ""
+
+#: cinder/virt/images.py:86
+msgid "'qemu-img info' parsing failed."
+msgstr ""
+
+#: cinder/virt/images.py:92
+#, python-format
+msgid "fmt=%(fmt)s backed by: %(backing_file)s"
+msgstr ""
+
+#: cinder/virt/images.py:104
+#, python-format
+msgid "Converted to raw, but format is now %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:105
+msgid ""
+"Must specify vmwareapi_host_ip,vmwareapi_host_username and "
+"vmwareapi_host_password to useconnection_type=vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:276
+#, python-format
+msgid "In vmwareapi:_create_session, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:359
+#, python-format
+msgid "In vmwareapi:_call_method, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:398
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: success"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:404
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: error %(error_info)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:409
+#, python-format
+msgid "In vmwareapi:_poll_task, Got this error %s"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:140
+msgid ""
+"Must specify xenapi_connection_url, xenapi_connection_username "
+"(optionally), and xenapi_connection_password to use "
+"connection_type=xenapi"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:329 cinder/virt/libvirt/connection.py:472
+msgid "Could not determine iscsi initiator name"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:460
+msgid "Host startup on XenServer is not supported."
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:489
+msgid "Unable to log in to XenAPI (is the Dom0 disk full?)"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:527
+msgid "Host is member of a pool, but DB says otherwise"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:599 cinder/virt/xenapi_conn.py:612
+#, python-format
+msgid "Got exception: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:93
+msgid "No domains exist."
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:95
+#, python-format
+msgid "============= initial domains =========== : %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:99
+msgid "Building domain: to be removed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:103
+msgid "Not running domain: remove"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:111
+msgid "domain running on an unknown node: discarded"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:127
+#, python-format
+msgid "No such domain (%s)"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:134
+#, python-format
+msgid "Failed power down Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:143
+msgid "deactivate -> activate fails"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:153
+msgid "destroy_domain: no such domain"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:154
+#, python-format
+msgid "No such domain %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:161
+#, python-format
+msgid "Domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:163
+#, python-format
+msgid "Nodes: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:166
+#, python-format
+msgid "After storing domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:169
+msgid "deactivation/removing domain failed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:176
+msgid "===== Domain is being created ====="
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:179
+msgid "Same domain name already exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:181
+msgid "create_domain: before get_idle_node"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:198
+#, python-format
+msgid "Created new domain: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:213
+#, python-format
+msgid "Failed to boot Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:222
+msgid "No such domain exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:226
+#, python-format
+msgid "change_domain_state: to new state %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:233
+#, python-format
+msgid "Stored fake domains to the file: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:244
+msgid "domain does not exist"
+msgstr ""
+
+#: cinder/virt/baremetal/nodes.py:42
+#, python-format
+msgid "Unknown baremetal driver %(d)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:148
+#, python-format
+msgid "Error encountered when destroying instance '%(name)s': %(ex)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:162
+#, python-format
+msgid "instance %(instance_name)s: deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:189
+#, python-format
+msgid "instance %s: rebooted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:192
+msgid "_wait_for_reboot failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:222
+#, python-format
+msgid "instance %s: rescued"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:225
+msgid "_wait_for_rescue failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:242
+msgid "<============= spawn of baremetal =============>"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:255
+#, python-format
+msgid "instance %s: is building"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:260
+msgid "Key is injected but instance is not running yet"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:265
+#, python-format
+msgid "instance %s: booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:268
+#, python-format
+msgid "~~~~~~ current state = %s ~~~~~~"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:269
+#, python-format
+msgid "instance %s spawned successfully"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:272
+#, python-format
+msgid "instance %s:not booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:274
+msgid "Bremetal assignment is overcommitted."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:354
+#, python-format
+msgid "instance %s: Creating image"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:473
+#, python-format
+msgid "instance %(inst_name)s: injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:484
+#, python-format
+msgid ""
+"instance %(inst_name)s: ignoring error injecting data into image "
+"%(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:529
+#, python-format
+msgid "instance %s: starting toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:531
+#, python-format
+msgid "instance %s: finished toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:574 cinder/virt/libvirt/connection.py:1815
+msgid ""
+"Cannot get the number of cpu, because this function is not implemented "
+"for this platform. This error can be safely ignored for now."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:714
+#, python-format
+msgid "#### RLK: cpu_arch = %s "
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:746
+msgid "Updating!"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:773 cinder/virt/libvirt/connection.py:2609
+#: cinder/virt/xenapi/host.py:129
+msgid "Updating host stats"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:185
+msgid "free_node...."
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:216
+#, python-format
+msgid "deactivate_node is called for node_id = %(id)s node_ip = %(ip)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:221
+msgid "status of node is set to 0"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:232
+msgid "rootfs is already removed"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:264
+msgid "Before ping to the bare-metal node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:275
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is ready"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:279
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is not ready, out_msg=%(out_msg)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:292
+msgid "Noting to do for tilera nodes: vmlinux is in CF"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:316
+msgid "activate_node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:330
+msgid "Node is unknown error state."
+msgstr ""
+
+#: cinder/virt/disk/api.py:165
+msgid "no capable image handler configured"
+msgstr ""
+
+#: cinder/virt/disk/api.py:178
+#, python-format
+msgid "unknown disk image handler: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:189
+msgid "image already mounted"
+msgstr ""
+
+#: cinder/virt/disk/api.py:276 cinder/virt/disk/guestfs.py:64
+#: cinder/virt/disk/guestfs.py:78 cinder/virt/disk/mount.py:100
+#, python-format
+msgid "Failed to mount filesystem: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:291
+#, python-format
+msgid "Failed to remove container: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:441
+#, python-format
+msgid "User %(username)s not found in password file."
+msgstr ""
+
+#: cinder/virt/disk/api.py:457
+#, python-format
+msgid "User %(username)s not found in shadow file."
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:39
+#, python-format
+msgid "unsupported partition: %s"
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:77
+msgid "unknown guestmount error"
+msgstr ""
+
+#: cinder/virt/disk/loop.py:30
+#, python-format
+msgid "Could not attach image to loopback: %s"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:76
+msgid "no partitions found"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:77
+#, python-format
+msgid "Failed to map partitions: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:58
+msgid "nbd unavailable: module not loaded"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:63
+msgid "No free nbd devices"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:81
+#, python-format
+msgid "qemu-nbd error: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:93
+#, python-format
+msgid "nbd device %s did not show up"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:265
+#, python-format
+msgid "Connecting to libvirt: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:286
+msgid "Connection to libvirt broke"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:388
+#, python-format
+msgid "Error from libvirt during destroy. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:400
+#, python-format
+msgid ""
+"Error from libvirt during saved instance removal. Code=%(errcode)s "
+"Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:411
+#, python-format
+msgid "Error from libvirt during undefine. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:423
+msgid "Instance destroyed successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:435
+#, python-format
+msgid "Error from libvirt during unfilter. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:461
+#, python-format
+msgid "Deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:554
+msgid "attaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:567
+msgid "detaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:692
+#, fuzzy, python-format
+msgid "Instance soft rebooted successfully."
+msgstr "Volume %s: erfolgreich erstellt"
+
+#: cinder/virt/libvirt/connection.py:696
+msgid "Failed to soft reboot instance."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:725
+msgid "Instance shutdown successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:761 cinder/virt/libvirt/connection.py:905
+msgid "During reboot, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:766
+msgid "Instance rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:867 cinder/virt/xenapi/vmops.py:1358
+#, python-format
+msgid ""
+"Found %(migration_count)d unconfirmed migrations older than "
+"%(confirm_window)d seconds"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:871
+#, python-format
+msgid "Automatically confirming migration %d"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:896
+msgid "Instance is running"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:910
+msgid "Instance spawned successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:926
+#, python-format
+msgid "data: %(data)r, fpath: %(fpath)r"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:978
+msgid "Guest does not have a console available"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1020
+#, python-format
+msgid "Path '%(path)s' supports direct I/O"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1024
+#, python-format
+msgid "Path '%(path)s' does not support direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1028 cinder/virt/libvirt/connection.py:1032
+#, python-format
+msgid "Error on '%(path)s' while checking direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1153
+msgid "Creating image"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1339
+#, python-format
+msgid "Injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1349
+#, python-format
+msgid "Ignoring error injecting data into image %(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1381
+#, python-format
+msgid "block_device_list %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1658
+msgid "Starting toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1662
+msgid "Finished toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1679
+#, python-format
+msgid ""
+"Error from libvirt while looking up %(instance_name)s: [Error Code "
+"%(error_code)s] %(ex)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1920
+msgid "libvirt version is too old (does not support getVersion)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1942
+#, python-format
+msgid "'<cpu>' must be 1, but %d\n"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1969
+#, python-format
+msgid "topology (%(topology)s) must have %(ks)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2067
+#, python-format
+msgid ""
+"Instance launched has CPU info:\n"
+"%s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2079
+#, python-format
+msgid ""
+"CPU doesn't have compatibility.\n"
+"\n"
+"%(ret)s\n"
+"\n"
+"Refer to %(u)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2136
+#, python-format
+msgid "Timeout migrating for %s. nwfilter not found."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2352
+#, python-format
+msgid "skipping %(path)s since it looks like volume"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2407
+#, python-format
+msgid "Getting disk size of %(i_name)s: %(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2458
+#, python-format
+msgid "Instance %s: Starting migrate_disk_and_power_off"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2513
+msgid "During wait running, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2518
+msgid "Instance running successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2525
+#, python-format
+msgid "Instance %s: Starting finish_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2565
+#, python-format
+msgid "Instance %s: Starting finish_revert_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:42
+msgid ""
+"Libvirt module could not be loaded. NWFilterFirewall will not work "
+"correctly."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:93
+msgid "Called setup_basic_filtering in nwfilter"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:101
+msgid "Ensuring static filters"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:171
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:217
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) for%(name)s is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:233
+msgid "iptables firewall: Setup Basic Filtering"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:252
+msgid "Attempted to unfilter instance which is not filtered"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:170
+#, python-format
+msgid "%s is a valid instance name"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:173
+#, python-format
+msgid "%s has a disk file"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:175
+#, python-format
+msgid "Instance %(instance)s is backed by %(backing)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:186
+#, python-format
+msgid ""
+"Instance %(instance)s is using a backing file %(backing)s which does not "
+"appear in the image service"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:237
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification failed"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:247
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification skipped, no hash stored"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:266
+#, python-format
+msgid "Cannot remove %(base_file)s, it does not exist"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:278
+#, python-format
+msgid "Base file too young to remove: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:281
+#, python-format
+msgid "Removing base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:288
+#, python-format
+msgid "Failed to remove %(base_file)s, error was %(error)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:299
+#, python-format
+msgid "%(id)s (%(base_file)s): checking"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:318
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): in use: on this node %(local)d local, %(remote)d "
+"on other nodes"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:330
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): warning -- an absent base file is in use! "
+"instances: %(instance_list)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:338
+#, python-format
+msgid "%(id)s (%(base_file)s): in use on (%(remote)d on other nodes)"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:348
+#, python-format
+msgid "%(id)s (%(base_file)s): image is not in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:354
+#, python-format
+msgid "%(id)s (%(base_file)s): image is in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:377
+#, python-format
+msgid "Skipping verification, no base directory at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:381
+msgid "Verify base images"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:388
+#, python-format
+msgid "Image id %(id)s yields fingerprint %(fingerprint)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:406
+#, python-format
+msgid "Unknown base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:411
+#, python-format
+msgid "Active base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:414
+#, python-format
+msgid "Corrupt base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:418
+#, python-format
+msgid "Removable base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:426
+msgid "Verification complete"
+msgstr ""
+
+#: cinder/virt/libvirt/utils.py:264
+msgid "Unable to find an open port"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:90
+#, python-format
+msgid "Ensuring vlan %(vlan)s and bridge %(bridge)s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:99
+#, python-format
+msgid "Ensuring bridge %s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:165 cinder/virt/libvirt/vif.py:220
+#, python-format
+msgid "Failed while unplugging vif of instance '%s'"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:163
+#, python-format
+msgid "iSCSI device not found at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:166
+#, python-format
+msgid ""
+"ISCSI volume not yet found at: %(mount_device)s. Will rescan & retry.  "
+"Try number: %(tries)s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:178
+#, python-format
+msgid "Found iSCSI node %(mount_device)s (after %(tries)s rescans)"
+msgstr ""
+
+#: cinder/virt/vmwareapi/error_util.py:93
+#, python-format
+msgid "Error(s) %s occurred in the call to RetrieveProperties"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:44 cinder/virt/xenapi/fake.py:77
+#, python-format
+msgid "%(text)s: _db_content => %(content)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:131
+#, python-format
+msgid "Property %(attr)s not set for the managed object %(objName)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:437
+msgid "There is no VM registered"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:439 cinder/virt/vmwareapi/fake.py:609
+#, python-format
+msgid "Virtual Machine with ref %s is not there"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:502
+#, python-format
+msgid "Logging out a session that is invalid or already logged out: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:517
+msgid "Session is faulty"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:520
+msgid "Session Invalid"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:606
+msgid " No Virtual Machine has been registered yet"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:99
+#, python-format
+msgid "Glance image %s is in killed state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:107
+#, python-format
+msgid "Glance image %(image_id)s is in unknown state - %(state)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:128
+msgid ""
+"ESX SOAP server returned an empty port group for the host system in its "
+"response"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:155
+#, python-format
+msgid "Creating Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:169
+#, python-format
+msgid "Created Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/read_write_util.py:150
+#, python-format
+msgid "Exception during HTTP connection close in VMWareHTTpWrite. Exception is %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:84
+msgid "Unable to import suds."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:90
+msgid "Must specify vmwareapi_wsdl_loc"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:145
+#, python-format
+msgid "No such SOAP method '%s' provided by VI SDK"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:150
+#, python-format
+msgid "httplib error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:157
+#, python-format
+msgid "Socket error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:162
+#, python-format
+msgid "Type error in  %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:166
+#, python-format
+msgid "Exception in %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:66
+msgid "Getting list of instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:82
+#, python-format
+msgid "Got total of %s instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:126
+msgid "Couldn't get a local Datastore reference"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:196
+#, python-format
+msgid "Creating VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:205
+#, python-format
+msgid "Created VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:234
+#, python-format
+msgid ""
+"Creating Virtual Disk of size  %(vmdk_file_size_in_kb)s KB and adapter "
+"type  %(adapter_type)s on the ESX host local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:251
+#, python-format
+msgid ""
+"Created Virtual Disk of size %(vmdk_file_size_in_kb)s KB on the ESX host "
+"local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:260
+#, python-format
+msgid ""
+"Deleting the file %(flat_uploaded_vmdk_path)s on the ESX host localstore "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:272
+#, python-format
+msgid ""
+"Deleted the file %(flat_uploaded_vmdk_path)s on the ESX host local store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:283
+#, python-format
+msgid ""
+"Downloading image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:298
+#, python-format
+msgid ""
+"Downloaded image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:315
+#, python-format
+msgid "Reconfiguring VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:322
+#, python-format
+msgid "Reconfigured VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:329
+#, python-format
+msgid "Powering on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:335
+#, python-format
+msgid "Powered on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:381
+#, python-format
+msgid "Creating Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:391
+#, python-format
+msgid "Created Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:434
+#, python-format
+msgid "Copying disk data before snapshot of the VM  instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:447
+#, python-format
+msgid "Copied disk data before snapshot of the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:456
+#, python-format
+msgid "Uploading image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:469
+#, python-format
+msgid "Uploaded image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:479
+#, python-format
+msgid "Deleting temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:488
+#, python-format
+msgid "Deleted temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:520
+msgid "instance is not powered on"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:527
+#, python-format
+msgid "Rebooting guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:530
+#, python-format
+msgid "Rebooted guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:532
+#, python-format
+msgid "Doing hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:536
+#, python-format
+msgid "Did hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:548
+#, python-format
+msgid "instance - %s not present"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:567
+#, python-format
+msgid "Powering off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:572
+#, python-format
+msgid "Powered off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:576
+#, python-format
+msgid "Unregistering the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:579
+#, python-format
+msgid "Unregistered the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:581
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while un-registering the "
+"VM: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:592
+#, python-format
+msgid "Deleting contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:602
+#, python-format
+msgid "Deleted contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:607
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while deleting the VM "
+"contents from the disk: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:615
+msgid "pause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:619
+msgid "unpause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:633
+#, python-format
+msgid "Suspending the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:637
+#, python-format
+msgid "Suspended the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:640
+msgid "instance is powered off and can not be suspended."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:643
+#, python-format
+msgid "VM %s was already in suspended state. So returning without doing anything"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:656
+#, python-format
+msgid "Resuming the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:661
+#, python-format
+msgid "Resumed the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:663
+msgid "instance is not in a suspended state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:699
+msgid "get_diagnostics not implemented for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:757
+#, python-format
+msgid ""
+"Reconfiguring VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:765
+#, python-format
+msgid ""
+"Reconfigured VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:802
+#, python-format
+msgid "Creating directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:806
+#, python-format
+msgid "Created directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:89
+#, python-format
+msgid "Downloading image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:103
+#, python-format
+msgid "Downloaded image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:108
+#, python-format
+msgid "Uploading image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:129
+#, python-format
+msgid "Uploaded image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:139
+#, python-format
+msgid "Getting image size for the image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:143
+#, python-format
+msgid "Got image size of %(size)s for the image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:553 cinder/virt/xenapi/fake.py:652
+#: cinder/virt/xenapi/fake.py:670 cinder/virt/xenapi/fake.py:732
+msgid "Raising NotImplemented"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:555
+#, python-format
+msgid "xenapi.fake does not have an implementation for %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:589
+#, python-format
+msgid "Calling %(localname)s %(impl)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:594
+#, python-format
+msgid "Calling getter %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:654
+#, python-format
+msgid ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:67
+#, python-format
+msgid ""
+"Instance %(name)s running on %(host)s could not be found in the database:"
+" assuming it is a worker VM and skipping migration to a new host"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:137
+#, python-format
+msgid "Unable to get SR for this host: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:169
+msgid "Unable to get updated status"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:172
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:37
+#, python-format
+msgid "Found non-unique network for name_label %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:55
+#, python-format
+msgid "Found non-unique network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:58
+#, python-format
+msgid "Found no network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:111
+#, python-format
+msgid "Unable to eject %(host)s from the pool; pool not empty"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:126
+#, python-format
+msgid "Unable to eject %(host)s from the pool; No master found"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:143
+#, python-format
+msgid "Pool-Join failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:146
+#, python-format
+msgid "Unable to join %(host)s in the pool"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:162
+#, python-format
+msgid "Pool-eject failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:174
+#, python-format
+msgid "Unable to set up pool: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:185
+#, python-format
+msgid "Pool-set_name_label failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:103
+#, python-format
+msgid "Found no PIF for device %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:122
+#, python-format
+msgid ""
+"PIF %(pif_rec['uuid'])s for network %(bridge)s has VLAN id %(pif_vlan)d. "
+"Expected %(vlan_num)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:218
+msgid "Created VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:245
+#, python-format
+msgid "VBD not found in instance %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:262
+#, python-format
+msgid "VBD %s already detached"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:265
+#, python-format
+msgid "VBD %(vbd_ref)s detach rejected, attempt %(num_attempt)d/%(max_attempts)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:270
+#, python-format
+msgid "Unable to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:275
+#, python-format
+msgid "Reached maximum number of retries trying to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:286
+#, python-format
+msgid "Unable to destroy VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:305
+#, python-format
+msgid "Creating %(vbd_type)s-type VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:308
+#, python-format
+msgid "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:319
+#, python-format
+msgid "Unable to destroy VDI %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:336
+#, python-format
+msgid ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:345
+#, python-format
+msgid "Copied VDI %(vdi_ref)s from VDI %(vdi_to_copy_ref)s on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:353
+#, python-format
+msgid "Cloned VDI %(vdi_ref)s from VDI %(vdi_to_clone_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:372
+#, python-format
+msgid "No primary VDI found for %(vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:379
+#, python-format
+msgid "Snapshotting with label '%(label)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:392
+#, python-format
+msgid "Created snapshot %(template_vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:431
+#, python-format
+msgid "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:583
+#, python-format
+msgid "Creating blank HD of size %(req_size)d gigs"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:634
+#, python-format
+msgid ""
+"Fast cloning is only supported on default local SR of type ext. SR on "
+"this system was found to be of type %(sr_type)s. Ignoring the cow flag."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:724
+#, python-format
+msgid ""
+"download_vhd %(image)s attempt %(attempt_num)d/%(max_attempts)d from "
+"%(glance_host)s:%(glance_port)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:734
+#, python-format
+msgid "download_vhd failed: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:750
+#, python-format
+msgid "Asking xapi to fetch vhd image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:760
+#, python-format
+msgid ""
+"xapi 'download_vhd' returned VDI of type '%(vdi_type)s' with UUID "
+"'%(vdi_uuid)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:789
+#, python-format
+msgid "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:805
+#, python-format
+msgid "image_size_bytes=%(size_bytes)d, allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:809
+#, python-format
+msgid ""
+"Image size %(size_bytes)d exceeded instance_type allowed size "
+"%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:831
+#, python-format
+msgid "Fetching image %(image)s, type %(image_type_str)"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:844
+#, python-format
+msgid "Size for image %(image)s: %(virtual_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:853
+#, python-format
+msgid ""
+"Kernel/Ramdisk image is too large: %(vdi_size)d bytes, max %(max_size)d "
+"bytes"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:870
+#, python-format
+msgid "Copying VDI %s to /boot/guest on dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:884
+#, python-format
+msgid "Kernel/Ramdisk VDI %s destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:895
+msgid "Failed to fetch glance image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:934
+#, python-format
+msgid "Detected %(image_type_str)s format for image %(image_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:955
+#, python-format
+msgid "Looking up vdi %s for PV kernel"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:973
+#, python-format
+msgid "Unknown image format %(disk_image_type)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1016
+#, python-format
+msgid "VDI %s is still available"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1059
+#, python-format
+msgid "(VM_UTILS) xenserver vm state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1061
+#, python-format
+msgid "(VM_UTILS) xenapi power_state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1088
+#, python-format
+msgid "Unable to parse rrd of %(vm_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1108
+#, python-format
+msgid "Re-scanning SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1136
+#, python-format
+msgid "Flag sr_matching_filter '%s' does not respect formatting convention"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1154
+msgid ""
+"XenAPI is unable to find a Storage Repository to install guest instances "
+"on. Please check your configuration and/or configure the flag "
+"'sr_matching_filter'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1167
+msgid "Cannot find SR of content-type ISO"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1175
+#, python-format
+msgid "ISO: looking at SR %(sr_rec)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1177
+msgid "ISO: not iso content"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1180
+msgid "ISO: iso content_type, no 'i18n-key' key"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1183
+msgid "ISO: iso content_type, i18n-key value not 'local-storage-iso'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1187
+msgid "ISO: SR MATCHing our criteria"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1189
+msgid "ISO: ISO, looking to see if it is host local"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1192
+#, python-format
+msgid "ISO: PBD %(pbd_ref)s disappeared"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1195
+#, python-format
+msgid "ISO: PBD matching, want %(pbd_rec)s, have %(host)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1198
+msgid "ISO: SR with local PBD"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1220
+#, python-format
+msgid ""
+"Unable to obtain RRD XML for VM %(vm_uuid)s with server details: "
+"%(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1236
+#, python-format
+msgid "Unable to obtain RRD XML updates with server details: %(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1290
+#, python-format
+msgid "Invalid statistics data from Xenserver: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1343
+#, python-format
+msgid "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1417
+#, python-format
+msgid ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1427
+#, python-format
+msgid "VHD coalesce attempts exceeded (%(max_attempts)d), giving up..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1462
+#, python-format
+msgid "Timeout waiting for device %s to be created"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1473
+#, python-format
+msgid "Plugging VBD %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1476
+#, python-format
+msgid "Plugging VBD %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1478
+#, python-format
+msgid "VBD %(vbd_ref)s plugged as %(orig_dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1481
+#, python-format
+msgid "VBD %(vbd_ref)s plugged into wrong dev, remapping to %(dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1490
+#, python-format
+msgid "Destroying VBD for VDI %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1498
+#, python-format
+msgid "Destroying VBD for VDI %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1511
+#, python-format
+msgid "Running pygrub against %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1518
+#, python-format
+msgid "Found Xen kernel %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1520
+msgid "No Xen kernel found.  Booting HVM."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1533
+msgid "Partitions:"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1539
+#, python-format
+msgid "  %(num)s: %(ptype)s %(size)d sectors"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1565
+#, python-format
+msgid ""
+"Writing partition table %(primary_first)d %(primary_last)d to "
+"%(dev_path)s..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1578
+#, python-format
+msgid "Writing partition table %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1632
+#, python-format
+msgid ""
+"Starting sparse_copy src=%(src_path)s dst=%(dst_path)s "
+"virtual_size=%(virtual_size)d block_size=%(block_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1664
+#, python-format
+msgid ""
+"Finished sparse_copy in %(duration).2f secs, %(compression_pct).2f%% "
+"reduction in size"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1714
+msgid ""
+"XenServer tools installed in this image are capable of network injection."
+"  Networking files will not bemanipulated"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1722
+msgid ""
+"XenServer tools are present in this image but are not capable of network "
+"injection"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1726
+msgid "XenServer tools are not installed in this image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1742
+msgid "Manipulating interface files directly"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1751
+#, python-format
+msgid "Failed to mount filesystem (expected for non-linux instances): %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:131 cinder/virt/xenapi/vmops.py:722
+#, python-format
+msgid "Updating progress to %(progress)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:231
+#, python-format
+msgid "Attempted to power on non-existent instance bad instance id %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:233
+msgid "Starting instance"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:303
+msgid "Removing kernel/ramdisk files from dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:358
+msgid "Failed to spawn, rolling back"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:443
+msgid "Detected ISO image type, creating blank VM for install"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:462
+msgid "Auto configuring disk, attempting to resize partition..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:515
+#, python-format
+msgid "Invalid value for injected_files: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:520
+#, python-format
+msgid "Injecting file path: '%s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:527
+msgid "Setting admin password"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:531
+msgid "Resetting network"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:538
+msgid "Setting VCPU weight"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:544
+msgid "Starting VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:551
+#, python-format
+msgid ""
+"Latest agent build for %(hypervisor)s/%(os)s/%(architecture)s is "
+"%(version)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:554
+#, python-format
+msgid "No agent build found for %(hypervisor)s/%(os)s/%(architecture)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:561
+msgid "Waiting for instance state to become running"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:573
+msgid "Querying agent version"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:576
+#, python-format
+msgid "Instance agent version: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:581
+#, python-format
+msgid "Updating Agent to %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:616
+#, python-format
+msgid "No opaque_ref could be determined for '%s'."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:670
+msgid "Finished snapshot and upload for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:677
+msgid "Starting snapshot for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:686
+#, fuzzy, python-format
+msgid "Unable to Snapshot instance: %(exc)s"
+msgstr "Nicht möglich Volumen zur Instanze %s hinzuzufügen"
+
+#: cinder/virt/xenapi/vmops.py:702
+msgid "Failed to transfer vhd to new host"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:770
+#, python-format
+msgid "Resizing down VDI %(cow_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:893
+#, python-format
+msgid "Resizing up VDI %(vdi_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:901
+msgid "Resize complete"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:928
+#, python-format
+msgid "Failed to query agent version: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:949
+#, python-format
+msgid "domid changed from %(domid)s to %(newdomid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:962
+#, python-format
+msgid "Failed to update agent: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:983
+#, python-format
+msgid "Failed to exchange keys: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:998
+#, python-format
+msgid "Failed to update password: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1023
+#, python-format
+msgid "Failed to inject file: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1032
+msgid "VM already halted, skipping shutdown..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1036
+msgid "Shutting down VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1054
+msgid "Unable to find VBD for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1097
+msgid "Using RAW or VHD, skipping kernel and ramdisk deletion"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1104
+msgid "instance has a kernel or ramdisk but not both"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1111
+msgid "kernel/ramdisk files removed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1121
+msgid "VM destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1147
+msgid "Destroying VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1169
+msgid "VM is not present, skipping destroy..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1222
+#, python-format
+msgid "Instance is already in Rescue Mode: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1296
+#, python-format
+msgid "Found %(instance_count)d hung reboots older than %(timeout)d seconds"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1300
+msgid "Automatically hard rebooting"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1363
+#, python-format
+msgid "Setting migration %(migration_id)s to error: %(reason)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1374
+#, python-format
+msgid ""
+"Automatically confirming migration %(migration_id)s for instance "
+"%(instance_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1379
+#, python-format
+msgid "Instance %(instance_uuid)s not found"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1383
+msgid "In ERROR state"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1389
+#, python-format
+msgid "In %(task_state)s task_state, not RESIZE_VERIFY"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1396
+#, python-format
+msgid "Error auto-confirming resize: %(e)s. Will retry later."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1418
+msgid "Could not get bandwidth info."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1469
+msgid "Injecting network info to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1483
+msgid "Creating vifs"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1492
+#, python-format
+msgid "Creating VIF for network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1495
+#, python-format
+msgid "Created VIF %(vif_ref)s, network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1520
+msgid "Injecting hostname to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1545
+#, python-format
+msgid ""
+"The agent call to %(method)s returned an invalid response: %(ret)r. "
+"path=%(path)s; args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1566
+#, python-format
+msgid "TIMEOUT: The call to %(method)s timed out. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1570
+#, python-format
+msgid ""
+"NOT IMPLEMENTED: The call to %(method)s is not supported by the agent. "
+"args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1575
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1661
+#, python-format
+msgid "OpenSSL error: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:52
+msgid "creating sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:55 cinder/virt/xenapi/volume_utils.py:83
+#, python-format
+msgid "type is = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:58 cinder/virt/xenapi/volume_utils.py:86
+#, python-format
+msgid "name = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:71
+#, python-format
+msgid "Created %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:76 cinder/virt/xenapi/volume_utils.py:174
+msgid "Unable to create Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:80
+msgid "introducing sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:103 cinder/virt/xenapi/volume_utils.py:170
+#: cinder/virt/xenapi/volumeops.py:156
+#, python-format
+msgid "Introduced %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:106
+msgid "Creating pbd for SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:108
+msgid "Plugging SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:116 cinder/virt/xenapi/volumeops.py:160
+msgid "Unable to introduce Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:127 cinder/virt/xenapi/volumeops.py:50
+msgid "Unable to get SR using uuid"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:129
+#, python-format
+msgid "Forgetting SR %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:137
+msgid "Unable to forget Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:157
+#, python-format
+msgid "Introducing %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:186
+#, python-format
+msgid "Unable to find SR from VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:204
+#, python-format
+msgid "Ignoring exception %(exc)s when getting PBDs for %(sr_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:210
+#, python-format
+msgid "Ignoring exception %(exc)s when unplugging PBD %(pbd)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:234
+#, python-format
+msgid "Unable to introduce VDI on SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:242
+#, python-format
+msgid "Unable to get record of VDI %s on"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:264
+#, python-format
+msgid "Unable to introduce VDI for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:274
+#, python-format
+msgid "Error finding vdis in SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:281
+#, python-format
+msgid "Unable to find vbd for vdi %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:315
+#, python-format
+msgid "Unable to obtain target information %(data)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:341
+#, python-format
+msgid "Mountpoint cannot be translated: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:64
+msgid "Could not find VDI ref"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:69
+#, python-format
+msgid "Creating SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:73
+msgid "Could not create SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:76
+msgid "Could not retrieve SR record"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:81
+#, python-format
+msgid "Introducing SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:85
+msgid "SR found in xapi database. No need to introduce"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:90
+msgid "Could not introduce SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:94
+#, python-format
+msgid "Checking for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:106
+#, python-format
+msgid "SR %s not found in the xapi database"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:112
+msgid "Could not forget SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:121
+#, python-format
+msgid "Attach_volume: %(connection_info)s, %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:178
+#, python-format
+msgid "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:189
+#, python-format
+msgid "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:197
+#, python-format
+msgid "Unable to attach volume to instance %s"
+msgstr "Nicht möglich Volumen zur Instanze %s hinzuzufügen"
+
+#: cinder/virt/xenapi/volumeops.py:200
+#, python-format
+msgid "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+msgstr "Einhängepunkt%(mountpoint)s  zur Instanze %(instance_name)s hinzugefügt"
+
+#: cinder/virt/xenapi/volumeops.py:210
+#, python-format
+msgid "Detach_volume: %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:219
+#, python-format
+msgid "Unable to locate volume %s"
+msgstr "Nicht möglich volume %s zufinden"
+
+#: cinder/virt/xenapi/volumeops.py:227
+#, python-format
+msgid "Unable to detach volume %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:232
+#, python-format
+msgid "Unable to destroy vbd %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:239
+#, python-format
+msgid "Error purging SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:241
+#, python-format
+msgid "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:98 cinder/vnc/xvp_proxy.py:103
+#, python-format
+msgid "Error in handshake: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:119
+#, python-format
+msgid "Invalid request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:139
+#, python-format
+msgid "Request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:142
+#, python-format
+msgid "Request made with missing token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:153
+#, python-format
+msgid "Request made with invalid token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:160
+#, python-format
+msgid "Unexpected error: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:180
+#, python-format
+msgid "Starting cinder-xvpvncproxy node (version %s)"
+msgstr ""
+
+#: cinder/volume/api.py:74 cinder/volume/api.py:220
+msgid "status must be available"
+msgstr ""
+
+#: cinder/volume/api.py:85
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to create %(size)sG volume"
+msgstr ""
+
+#: cinder/volume/api.py:137
+msgid "Volume status must be available or error"
+msgstr ""
+
+#: cinder/volume/api.py:142
+#, python-format
+msgid "Volume still has %d dependent snapshots"
+msgstr ""
+
+#: cinder/volume/api.py:223
+msgid "already attached"
+msgstr ""
+
+#: cinder/volume/api.py:230
+msgid "already detached"
+msgstr ""
+
+#: cinder/volume/api.py:292
+msgid "must be available"
+msgstr ""
+
+#: cinder/volume/api.py:325
+msgid "Volume Snapshot status must be available or error"
+msgstr ""
+
+#: cinder/volume/driver.py:96
+#, python-format
+msgid "Recovering from a failed execute.  Try number %s"
+msgstr ""
+
+#: cinder/volume/driver.py:106
+#, python-format
+msgid "volume group %s doesn't exist"
+msgstr ""
+
+#: cinder/volume/driver.py:270
+#, python-format
+msgid "Skipping ensure_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:318
+#, python-format
+msgid "Skipping remove_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:327
+#, python-format
+msgid ""
+"Skipping remove_export. No iscsi_target is presently exported for volume:"
+" %d"
+msgstr ""
+
+#: cinder/volume/driver.py:337
+msgid "ISCSI provider_location not stored, using discovery"
+msgstr ""
+
+#: cinder/volume/driver.py:384
+#, python-format
+msgid "Could not find iSCSI export  for volume %s"
+msgstr ""
+
+#: cinder/volume/driver.py:388
+#, python-format
+msgid "ISCSI Discovery: Found %s"
+msgstr ""
+
+#: cinder/volume/driver.py:466
+#, python-format
+msgid "Cannot confirm exported volume id:%(volume_id)s."
+msgstr ""
+
+#: cinder/volume/driver.py:493
+#, python-format
+msgid "FAKE ISCSI: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:505
+#, python-format
+msgid "rbd has no pool %s"
+msgstr ""
+
+#: cinder/volume/driver.py:579
+#, python-format
+msgid "Sheepdog is not working: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:581
+msgid "Sheepdog is not working"
+msgstr ""
+
+#: cinder/volume/driver.py:680 cinder/volume/driver.py:685
+#, python-format
+msgid "LoggingVolumeDriver: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:96
+#, python-format
+msgid "Re-exporting %s volumes"
+msgstr ""
+
+#: cinder/volume/manager.py:101
+#, python-format
+msgid "volume %s: skipping export"
+msgstr ""
+
+#: cinder/volume/manager.py:107
+#, python-format
+msgid "volume %s: creating"
+msgstr "Volume %s: wird erstellt"
+
+#: cinder/volume/manager.py:119
+#, python-format
+msgid "volume %(vol_name)s: creating lv of size %(vol_size)sG"
+msgstr ""
+
+#: cinder/volume/manager.py:131
+#, python-format
+msgid "volume %s: creating export"
+msgstr "Volume %s: erstelle Export"
+
+#: cinder/volume/manager.py:144
+#, python-format
+msgid "volume %s: created successfully"
+msgstr "Volume %s: erfolgreich erstellt"
+
+#: cinder/volume/manager.py:153
+msgid "Volume is still attached"
+msgstr ""
+
+#: cinder/volume/manager.py:155
+msgid "Volume is not local to this node"
+msgstr ""
+
+#: cinder/volume/manager.py:159
+#, python-format
+msgid "volume %s: removing export"
+msgstr "Volume %s: entferne Export"
+
+#: cinder/volume/manager.py:161
+#, python-format
+msgid "volume %s: deleting"
+msgstr "Volume %s: wird entfernt"
+
+#: cinder/volume/manager.py:164
+#, python-format
+msgid "volume %s: volume is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:176
+#, python-format
+msgid "volume %s: deleted successfully"
+msgstr "Volume %s: erfolgreich entfernt"
+
+#: cinder/volume/manager.py:183
+#, python-format
+msgid "snapshot %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:187
+#, python-format
+msgid "snapshot %(snap_name)s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:202
+#, python-format
+msgid "snapshot %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:211
+#, python-format
+msgid "snapshot %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:214
+#, python-format
+msgid "snapshot %s: snapshot is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:226
+#, python-format
+msgid "snapshot %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:310
+msgid "Checking volume capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:314
+#, python-format
+msgid "New capabilities found: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:325
+msgid "Clear capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:329
+#, python-format
+msgid "Notification {%s} received"
+msgstr ""
+
+#: cinder/volume/netapp.py:79
+#, python-format
+msgid "API %(name)sfailed: %(reason)s"
+msgstr ""
+
+#: cinder/volume/netapp.py:109
+#, python-format
+msgid "%s is not set"
+msgstr ""
+
+#: cinder/volume/netapp.py:128
+msgid "Connected to DFM server"
+msgstr ""
+
+#: cinder/volume/netapp.py:159
+#, python-format
+msgid "Job failed: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:240
+msgid "Failed to provision dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:252
+msgid "No LUN was created by the provision job"
+msgstr ""
+
+#: cinder/volume/netapp.py:261 cinder/volume/netapp.py:433
+#, fuzzy, python-format
+msgid "Failed to find LUN ID for volume %s"
+msgstr "Nicht möglich volume %s zufinden"
+
+#: cinder/volume/netapp.py:280
+msgid "Failed to remove and delete dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:603 cinder/volume/netapp.py:657
+#, fuzzy, python-format
+msgid "No LUN ID for volume %s"
+msgstr "Nicht möglich volume %s zufinden"
+
+#: cinder/volume/netapp.py:607 cinder/volume/netapp.py:661
+#, python-format
+msgid "Failed to get LUN details for LUN ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:614
+#, python-format
+msgid "Failed to get host details for host ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:620
+#, python-format
+msgid "Failed to get target portal for filer: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:625
+#, python-format
+msgid "Failed to get target IQN for filer: %s"
+msgstr ""
+
+#: cinder/volume/san.py:113 cinder/volume/san.py:151
+msgid "Specify san_password or san_private_key"
+msgstr ""
+
+#: cinder/volume/san.py:156
+msgid "san_ip must be set"
+msgstr ""
+
+#: cinder/volume/san.py:320
+#, python-format
+msgid "LUID not found for %(zfs_poolname)s. Output=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:452
+#, python-format
+msgid "CLIQ command returned %s"
+msgstr ""
+
+#: cinder/volume/san.py:458
+#, python-format
+msgid "Malformed response to CLIQ command %(verb)s %(cliq_args)s. Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:466
+#, python-format
+msgid "Error running CLIQ command %(verb)s %(cliq_args)s.  Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:496
+#, python-format
+msgid ""
+"Unexpected number of virtual ips for cluster  %(cluster_name)s. "
+"Result=%(_xml)s"
+msgstr ""
+
+#: cinder/volume/san.py:549
+#, python-format
+msgid "Volume info: %(volume_name)s => %(volume_attributes)s"
+msgstr ""
+
+#: cinder/volume/san.py:594
+msgid "local_path not supported"
+msgstr ""
+
+#: cinder/volume/san.py:626
+#, python-format
+msgid "Could not determine project for volume %s, can't export"
+msgstr ""
+
+#: cinder/volume/san.py:696
+#, python-format
+msgid "Payload for SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:713
+#, python-format
+msgid "Call to json.loads() raised an exception: %s"
+msgstr ""
+
+#: cinder/volume/san.py:718
+#, python-format
+msgid "Results of SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:732
+#, python-format
+msgid "Found solidfire account: %s"
+msgstr ""
+
+#: cinder/volume/san.py:746
+#, python-format
+msgid "solidfire account: %s does not exist, create it..."
+msgstr ""
+
+#: cinder/volume/san.py:804
+msgid "Enter SolidFire create_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:846
+msgid "Leaving SolidFire create_volume"
+msgstr ""
+
+#: cinder/volume/san.py:861
+msgid "Enter SolidFire delete_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:880
+#, python-format
+msgid "Deleting volumeID: %s "
+msgstr ""
+
+#: cinder/volume/san.py:888
+msgid "Leaving SolidFire delete_volume"
+msgstr ""
+
+#: cinder/volume/san.py:891
+msgid "Executing SolidFire ensure_export..."
+msgstr ""
+
+#: cinder/volume/san.py:895
+msgid "Executing SolidFire create_export..."
+msgstr ""
+
+#: cinder/volume/volume_types.py:49 cinder/volume/volume_types.py:108
+msgid "name cannot be None"
+msgstr ""
+
+#: cinder/volume/volume_types.py:96
+msgid "id cannot be None"
+msgstr ""
+
+#: cinder/volume/xensm.py:55
+#, python-format
+msgid "SR name = %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:56
+#, python-format
+msgid "Params: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:60
+#, python-format
+msgid "Failed to create sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:62
+msgid "Create failed"
+msgstr ""
+
+#: cinder/volume/xensm.py:64
+#, python-format
+msgid "SR UUID of new SR is: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:71
+msgid "Failed to update db"
+msgstr ""
+
+#: cinder/volume/xensm.py:80
+#, python-format
+msgid "Failed to introduce sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:91
+#, python-format
+msgid "Failed to reach backend %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:100
+msgid "XenSMDriver requires xenapi connection"
+msgstr ""
+
+#: cinder/volume/xensm.py:110
+msgid "Failed to initiate session"
+msgstr ""
+
+#: cinder/volume/xensm.py:142
+#, python-format
+msgid "Volume will be created in backend - %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:154
+msgid "Failed to update volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:157
+msgid "Unable to create volume"
+msgstr ""
+
+#: cinder/volume/xensm.py:171
+msgid "Failed to delete vdi"
+msgstr ""
+
+#: cinder/volume/xensm.py:177
+msgid "Failed to delete volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:210
+msgid "Failed to find volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:221
+msgid "Failed to find backend in db"
+msgstr ""
+
+#: cinder/volume/nexenta/__init__.py:27
+msgid "Nexenta SA returned the error"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:64
+#, python-format
+msgid "Sending JSON data: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:69
+#, python-format
+msgid "Auto switching to HTTPS connection to %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:75
+msgid "No headers in server response"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:76
+msgid "Bad response from server"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:79
+#, python-format
+msgid "Got response: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:96
+#, python-format
+msgid "Volume %s does not exist in Nexenta SA"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:180
+msgid ""
+"Call to local_path should not happen. Verify that use_local_volumes flag "
+"is turned off."
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:202
+#, python-format
+msgid "Ignored target creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:210
+#, python-format
+msgid "Ignored target group creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:219
+#, python-format
+msgid "Ignored target group member addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:227
+#, python-format
+msgid "Ignored LU creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:237
+#, python-format
+msgid "Ignored LUN mapping entry addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:273
+#, python-format
+msgid ""
+"Got error trying to destroy target group %(target_group)s, assuming it is"
+" already gone: %(exc)s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:280
+#, python-format
+msgid ""
+"Got error trying to delete target %(target)s, assuming it is already "
+"gone: %(exc)s"
+msgstr ""
+
+#~ msgid "Unable to locate account %(account_name) on Solidfire device"
+#~ msgstr ""
+
+#~ msgid "Zone %(zone_id)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Cinder access parameters were not specified."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(id)d could not be found."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(name)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Detected more than one volume with name %(vol_name)"
+#~ msgstr ""
+
+#~ msgid "Detected existing vlan with id %(vlan)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab semaphore \"%(lock)s\" "
+#~ "for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab file lock "
+#~ "\"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Parent group id and group id cannot be same"
+#~ msgstr ""
+
+#~ msgid "No body provided"
+#~ msgstr ""
+
+#~ msgid "Create VSA %(display_name)s of type %(vc_type)s"
+#~ msgstr ""
+
+#~ msgid "Delete VSA with id: %s"
+#~ msgstr ""
+
+#~ msgid "Associate address %(ip)s to VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "Disassociate address from VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "%(obj)s with ID %(id)s not found"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(obj)s with ID %(id)s belongs to "
+#~ "VSA %(own_vsa_id)s and not to VSA "
+#~ "%(vsa_id)s."
+#~ msgstr ""
+
+#~ msgid "Index. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Detail. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Create. vsa_id=%(vsa_id)s, body=%(body)s"
+#~ msgstr ""
+
+#~ msgid "Create volume of %(size)s GB from VSA ID %(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Update %(obj)s with id: %(id)s, changes: %(changes)s"
+#~ msgstr ""
+
+#~ msgid "Delete. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Show. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Index instances for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You cannot run"
+#~ " any more instances of this type."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You can only"
+#~ " run %s more instances of this "
+#~ "type."
+#~ msgstr ""
+
+#~ msgid "Going to try to soft delete %s"
+#~ msgstr ""
+
+#~ msgid "No host for instance %s, deleting immediately"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to stop %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to start %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Going to force the deletion of the"
+#~ " vm %(instance_uuid)s, even if it is"
+#~ " deleted"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s did not exist "
+#~ "in the DB, but I will shut "
+#~ "it down anyway using a special "
+#~ "context"
+#~ msgstr ""
+
+#~ msgid "exception terminating the instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "trying to destroy already destroyed instance: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(name)s found in database but"
+#~ " not known by hypervisor. Setting "
+#~ "power state to NOSTATE"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Detected instance  with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Destroying instance with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid "SQL connection failed (%(connstring)s). %(attempts)d attempts left."
+#~ msgstr ""
+
+#~ msgid "Can't downgrade without losing data"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_id)s not found"
+#~ msgstr ""
+
+#~ msgid "Network %s has active ports, cannot delete"
+#~ msgstr ""
+
+#~ msgid "No fixed IPs to deallocate for vif %sid"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "AMQP server on %(fl_host)s:%(fl_port)d is "
+#~ "unreachable: %(e)s. Trying again in "
+#~ "%(fl_intv)d seconds."
+#~ msgstr ""
+
+#~ msgid "Unable to connect to AMQP server after %(tries)d tries. Shutting down."
+#~ msgstr ""
+
+#~ msgid "Reconnected to queue"
+#~ msgstr ""
+
+#~ msgid "Failed to fetch message from queue: %s"
+#~ msgstr ""
+
+#~ msgid "Initing the Adapter Consumer for %s"
+#~ msgstr ""
+
+#~ msgid "Created \"%(exchange)s\" fanout exchange with \"%(key)s\" routing key"
+#~ msgstr ""
+
+#~ msgid "Exception while processing consumer"
+#~ msgstr ""
+
+#~ msgid "Creating \"%(exchange)s\" fanout exchange"
+#~ msgstr ""
+
+#~ msgid "response %s"
+#~ msgstr ""
+
+#~ msgid "topic is %s"
+#~ msgstr "Betreff ist %s"
+
+#~ msgid "message %s"
+#~ msgstr "Nachricht %s"
+
+#~ msgid ""
+#~ "Cannot confirm tmpfile at %(ipath)s is"
+#~ " on same shared storage between "
+#~ "%(src)s and %(dest)s."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of memory(host:%(avail)s <= "
+#~ "instance:%(mem_inst)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of disk(host:%(available)s <="
+#~ " instance:%(necessary)s)"
+#~ msgstr ""
+
+#~ msgid "Driver Method %(driver_method)s missing: %(e)s.Reverting to schedule()"
+#~ msgstr ""
+
+#~ msgid "Setting instance %(instance_uuid)s to ERROR state."
+#~ msgstr ""
+
+#~ msgid "_filter_hosts: %(request_spec)s"
+#~ msgstr ""
+
+#~ msgid "Filter hosts for drive type %s"
+#~ msgstr ""
+
+#~ msgid "Host %s has no free capacity. Skip"
+#~ msgstr ""
+
+#~ msgid "Filter hosts: %s"
+#~ msgstr ""
+
+#~ msgid "Must implement host selection mechanism"
+#~ msgstr ""
+
+#~ msgid "Maximum number of hosts selected (%d)"
+#~ msgstr ""
+
+#~ msgid "Selected excessive host %(host)s"
+#~ msgstr ""
+
+#~ msgid "Provision volume %(name)s of size %(size)s GB on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "volume_params %(volume_params)s"
+#~ msgstr ""
+
+#~ msgid "%(i)d: Volume %(name)s"
+#~ msgstr ""
+
+#~ msgid "Attempting to spawn %(num_volumes)d volume(s)"
+#~ msgstr ""
+
+#~ msgid "Error creating volumes"
+#~ msgstr ""
+
+#~ msgid "Non-VSA volume %d"
+#~ msgstr ""
+
+#~ msgid "Spawning volume %(volume_id)s with drive type %(drive_type)s"
+#~ msgstr ""
+
+#~ msgid "Error creating volume"
+#~ msgstr ""
+
+#~ msgid "No capability selected for volume of size %(size)s"
+#~ msgstr ""
+
+#~ msgid "Host %s:"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\tDrive %(qosgrp)-25s: total %(total)2s, "
+#~ "used %(used)2s, free %(free)2s. Available "
+#~ "capacity %(avail)-5s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t LeastUsedHost: Best host: %(best_host)s."
+#~ " (used capacity %(min_used)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t MostAvailCap: Best host: %(best_host)s. "
+#~ "(available %(max_avail)s %(type_str)s)"
+#~ msgstr ""
+
+#~ msgid "(%(nm)s) publish (key: %(routing_key)s) %(message)s"
+#~ msgstr ""
+
+#~ msgid "Publishing to route %s"
+#~ msgstr ""
+
+#~ msgid "Declaring queue %s"
+#~ msgstr ""
+
+#~ msgid "Declaring exchange %s"
+#~ msgstr ""
+
+#~ msgid "Binding %(queue)s to %(exchange)s with key %(routing_key)s"
+#~ msgstr ""
+
+#~ msgid "Getting from %(queue)s: %(message)s"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate wrong VSA name. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate DB error. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: user_data = %s"
+#~ msgstr ""
+
+#~ msgid "_create: param=%s"
+#~ msgstr ""
+
+#~ msgid "Host %s"
+#~ msgstr ""
+
+#~ msgid "Test: provision vol %(name)s on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "\t vol=%(vol)s"
+#~ msgstr ""
+
+#~ msgid "Test: VSA update request: vsa_id=%(vsa_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume create: %s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get request: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume update request: id=%(volume_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: success    %(result)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: %(status)s    %(error_info)s"
+#~ msgstr ""
+
+#~ msgid "Unable to get updated status: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "deactivate_node is called for                "
+#~ "node_id = %(id)s node_ip = %(ip)s"
+#~ msgstr ""
+
+#~ msgid "virsh said: %r"
+#~ msgstr ""
+
+#~ msgid "cool, it's a device"
+#~ msgstr ""
+
+#~ msgid "Unable to read LXC console"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "to xml...\n"
+#~ ":%s "
+#~ msgstr ""
+
+#~ msgid "During wait running, %s disappeared."
+#~ msgstr ""
+
+#~ msgid "Instance %s running successfully."
+#~ msgstr ""
+
+#~ msgid "The nwfilter(%(instance_secgroup_filter_name)s) is not found."
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image verification failed"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): image "
+#~ "verification skipped, no hash stored"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): checking"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in use:"
+#~ " on this node %(local)d local, "
+#~ "%(remote)d on other nodes"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): warning "
+#~ "-- an absent base file is in "
+#~ "use! instances: %(instance_list)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in: on"
+#~ " other nodes (%(remote)d on other "
+#~ "nodes)"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is not in use"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is in use"
+#~ msgstr ""
+
+#~ msgid "Created VM %s..."
+#~ msgstr ""
+
+#~ msgid "Created VM %(instance_name)s as %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Creating a CDROM-specific VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Created a CDROM-specific VBD %(vbd_ref)s"
+#~ "  for VM %(vm_ref)s, VDI %(vdi_ref)s."
+#~ msgstr ""
+
+#~ msgid "No primary VDI found for%(vm_ref)s"
+#~ msgstr ""
+
+#~ msgid "Snapshotting VM %(vm_ref)s with label '%(label)s'..."
+#~ msgstr ""
+
+#~ msgid "Created snapshot %(template_vm_ref)s from VM %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Fetching image %(image)s"
+#~ msgstr ""
+
+#~ msgid "Image Type: %s"
+#~ msgstr ""
+
+#~ msgid "ISO: Found sr possibly containing the ISO image"
+#~ msgstr ""
+
+#~ msgid "Size for image %(image)s:%(virtual_size)d"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to fetch glance image"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s ... "
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s done."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful first time."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug rejected: retrying..."
+#~ msgstr ""
+
+#~ msgid "Not sleeping anymore!"
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful eventually."
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure in VBD.unplug: %s"
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure %s"
+#~ msgstr ""
+
+#~ msgid "Starting instance %s"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn"
+#~ msgstr ""
+
+#~ msgid "Instance %s failed to spawn - performing clean-up"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn - Unable to create VM"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Auto configuring disk for instance "
+#~ "%(instance_uuid)s, attempting to resize "
+#~ "partition..."
+#~ msgstr ""
+
+#~ msgid "Invalid value for injected_files: '%s'"
+#~ msgstr ""
+
+#~ msgid "Starting VM %s..."
+#~ msgstr ""
+
+#~ msgid "Spawning VM %(instance_uuid)s created %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Instance %s: waiting for running"
+#~ msgstr ""
+
+#~ msgid "Instance %s: running"
+#~ msgstr ""
+
+#~ msgid "Resources to remove:%s"
+#~ msgstr ""
+
+#~ msgid "Removing VDI %(vdi_ref)s(uuid:%(vdi_to_remove)s)"
+#~ msgstr ""
+
+#~ msgid "Skipping VDI destroy for %s"
+#~ msgstr ""
+
+#~ msgid "Finished snapshot and upload for VM %s"
+#~ msgstr ""
+
+#~ msgid "Starting snapshot for VM %s"
+#~ msgstr ""
+
+#~ msgid "Unable to Snapshot instance %(instance_uuid)s: %(exc)s"
+#~ msgstr ""
+
+#~ msgid "Updating instance '%(instance_uuid)s' progress to %(progress)d"
+#~ msgstr ""
+
+#~ msgid "Resize instance %s complete"
+#~ msgstr ""
+
+#~ msgid "domid changed from %(olddomid)s to %(newdomid)s"
+#~ msgstr ""
+
+#~ msgid "VM %(instance_uuid)s already halted,skipping shutdown..."
+#~ msgstr ""
+
+#~ msgid "Shutting down VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Destroying VDIs for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s using RAW or "
+#~ "VHD, skipping kernel and ramdisk "
+#~ "deletion"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_uuid)s VM destroyed"
+#~ msgstr ""
+
+#~ msgid "Destroying VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Automatically hard rebooting %d"
+#~ msgstr ""
+
+#~ msgid "Instance for migration %d not found, skipping"
+#~ msgstr ""
+
+#~ msgid "injecting network info to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "creating vif(s) for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "Creating VIF for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr ""
+
+#~ msgid "Created VIF %(vif_ref)s for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr ""
+
+#~ msgid "injecting hostname to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The agent call to %(method)s returned"
+#~ " an invalid response: %(ret)r. VM "
+#~ "id=%(instance_uuid)s; path=%(path)s; args=%(addl_args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "TIMEOUT: The call to %(method)s timed"
+#~ " out. VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "NOT IMPLEMENTED: The call to %(method)s"
+#~ " is not supported by the agent. "
+#~ "VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The call to %(method)s returned an "
+#~ "error: %(e)s. VM id=%(instance_uuid)s; "
+#~ "args=%(args)r"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid "Error destroying VDI"
+#~ msgstr ""
+
+#~ msgid "Volume status must be available"
+#~ msgstr ""
+
+#~ msgid "\tVolume %s is NOT VSA volume"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s creation - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s succeeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s deletion - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s suceeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s local path call - call discover"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s ensure export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s create export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s remove export - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE remove_export for %s failed"
+#~ msgstr ""
+
+#~ msgid "Failed to retrieve QoS info"
+#~ msgstr ""
+
+#~ msgid "invalid drive data"
+#~ msgstr ""
+
+#~ msgid "drive_name not defined"
+#~ msgstr ""
+
+#~ msgid "invalid drive type name %s"
+#~ msgstr ""
+
+#~ msgid "*** Experimental VSA code ***"
+#~ msgstr ""
+
+#~ msgid "Requested number of VCs (%d) is too high. Setting to default"
+#~ msgstr ""
+
+#~ msgid "Creating VSA: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d %(vsa_name)s: Create "
+#~ "volume %(vol_name)s, %(vol_size)d GB, type "
+#~ "%(vol_type_id)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA status to %(status)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA call"
+#~ msgstr ""
+
+#~ msgid "Adding %(add_cnt)s VCs to VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "Deleting %(del_cnt)s VCs from VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Deleting %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Unable to delete volume %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Forced delete. %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate VSA ID %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Delete instance %(name)s"
+#~ msgstr ""
+
+#~ msgid "Create call received for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Failed to find VSA %(vsa_id)d"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Drive %(vol_id)s created. Status %(status)s"
+#~ msgstr ""
+
+#~ msgid "Drive %(vol_name)s (%(vol_disp_name)s) still in creating phase - wait"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Not all volumes "
+#~ "are created (%(cvol_real)d of %(cvol_exp)d)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Drive %(vol_name)s "
+#~ "(%(vol_disp_name)s) is in %(status)s state"
+#~ msgstr ""
+
+#~ msgid "Failed to update attach status for volume %(vol_name)s. %(ex)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Delete all BE volumes"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Start %(vc_count)d instances"
+#~ msgstr ""
+
diff --git a/cinder/locale/en_AU/LC_MESSAGES/nova.po b/cinder/locale/en_AU/LC_MESSAGES/nova.po
new file mode 100644
index 000000000..b9709b317
--- /dev/null
+++ b/cinder/locale/en_AU/LC_MESSAGES/nova.po
@@ -0,0 +1,8209 @@
+# English (Australia) translation for cinder
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the cinder package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version:  cinder\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-04-08 23:04+0000\n"
+"PO-Revision-Date: 2011-10-21 11:27+0000\n"
+"Last-Translator: Tom Fifield <Unknown>\n"
+"Language-Team: English (Australia) <en_AU@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: cinder/context.py:59
+#, python-format
+msgid "Arguments dropped when creating context: %s"
+msgstr ""
+
+#: cinder/context.py:90
+#, python-format
+msgid "read_deleted can only be one of 'no', 'yes' or 'only', not %r"
+msgstr ""
+
+#: cinder/crypto.py:48
+msgid "Filename of root CA"
+msgstr "Filename of root CA"
+
+#: cinder/crypto.py:51
+msgid "Filename of private key"
+msgstr "Filename of private key"
+
+#: cinder/crypto.py:54
+msgid "Filename of root Certificate Revocation List"
+msgstr ""
+
+#: cinder/crypto.py:57
+msgid "Where we keep our keys"
+msgstr "Where we keep our keys"
+
+#: cinder/crypto.py:60
+msgid "Where we keep our root CA"
+msgstr "Where we keep our root CA"
+
+#: cinder/crypto.py:63
+msgid "Should we use a CA for each project?"
+msgstr "Should we use a CA for each project?"
+
+#: cinder/crypto.py:67
+#, python-format
+msgid "Subject for certificate for users, %s for project, user, timestamp"
+msgstr "Subject for certificate for users, %s for project, user, timestamp"
+
+#: cinder/crypto.py:72
+#, python-format
+msgid "Subject for certificate for projects, %s for project, timestamp"
+msgstr "Subject for certificate for projects, %s for project, timestamp"
+
+#: cinder/crypto.py:292
+#, python-format
+msgid "Flags path: %s"
+msgstr "Flags path: %s"
+
+#: cinder/exception.py:56
+msgid "Unexpected error while running command."
+msgstr "Unexpected error while running command."
+
+#: cinder/exception.py:59
+#, python-format
+msgid ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+msgstr ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+
+#: cinder/exception.py:94
+msgid "DB exception wrapped."
+msgstr ""
+
+#: cinder/exception.py:155
+msgid "An unknown exception occurred."
+msgstr ""
+
+#: cinder/exception.py:178
+msgid "Failed to decrypt text"
+msgstr ""
+
+#: cinder/exception.py:182
+msgid "Failed to paginate through images from image service"
+msgstr ""
+
+#: cinder/exception.py:186
+msgid "Virtual Interface creation failed"
+msgstr ""
+
+#: cinder/exception.py:190
+msgid "5 attempts to create virtual interfacewith unique mac address failed"
+msgstr ""
+
+#: cinder/exception.py:195
+msgid "Connection to glance failed"
+msgstr ""
+
+#: cinder/exception.py:199
+msgid "Connection to melange failed"
+msgstr ""
+
+#: cinder/exception.py:203
+msgid "Not authorized."
+msgstr ""
+
+#: cinder/exception.py:208
+msgid "User does not have admin privileges"
+msgstr ""
+
+#: cinder/exception.py:212
+#, python-format
+msgid "Policy doesn't allow %(action)s to be performed."
+msgstr ""
+
+#: cinder/exception.py:216
+#, fuzzy, python-format
+msgid "Not authorized for image %(image_id)s."
+msgstr "no method for message: %s"
+
+#: cinder/exception.py:220
+msgid "Unacceptable parameters."
+msgstr ""
+
+#: cinder/exception.py:225
+msgid "Invalid snapshot"
+msgstr ""
+
+#: cinder/exception.py:229
+#, python-format
+msgid "Volume %(volume_id)s is not attached to anything"
+msgstr ""
+
+#: cinder/exception.py:233 cinder/api/openstack/compute/contrib/keypairs.py:113
+msgid "Keypair data is invalid"
+msgstr ""
+
+#: cinder/exception.py:237
+msgid "Failed to load data into json format"
+msgstr ""
+
+#: cinder/exception.py:241
+msgid "The request is invalid."
+msgstr ""
+
+#: cinder/exception.py:245
+#, python-format
+msgid "Invalid signature %(signature)s for user %(user)s."
+msgstr ""
+
+#: cinder/exception.py:249
+msgid "Invalid input received"
+msgstr ""
+
+#: cinder/exception.py:253
+#, python-format
+msgid "Invalid instance type %(instance_type)s."
+msgstr ""
+
+#: cinder/exception.py:257
+msgid "Invalid volume type"
+msgstr ""
+
+#: cinder/exception.py:261
+msgid "Invalid volume"
+msgstr ""
+
+#: cinder/exception.py:265
+#, python-format
+msgid "Invalid port range %(from_port)s:%(to_port)s. %(msg)s"
+msgstr ""
+
+#: cinder/exception.py:269
+#, python-format
+msgid "Invalid IP protocol %(protocol)s."
+msgstr ""
+
+#: cinder/exception.py:273
+#, python-format
+msgid "Invalid content type %(content_type)s."
+msgstr ""
+
+#: cinder/exception.py:277
+#, python-format
+msgid "Invalid cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:281
+msgid "Invalid reuse of an RPC connection."
+msgstr ""
+
+#: cinder/exception.py:285
+msgid "Invalid Parameter: Unicode is not supported by the current database."
+msgstr ""
+
+#: cinder/exception.py:292
+#, python-format
+msgid "%(err)s"
+msgstr ""
+
+#: cinder/exception.py:296
+#, python-format
+msgid ""
+"Cannot perform action '%(action)s' on aggregate %(aggregate_id)s. Reason:"
+" %(reason)s."
+msgstr ""
+
+#: cinder/exception.py:301
+#, python-format
+msgid "Group not valid. Reason: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:305
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot %(method)s while"
+" the instance is in this state."
+msgstr ""
+
+#: cinder/exception.py:310
+#, python-format
+msgid "Instance %(instance_id)s is not running."
+msgstr ""
+
+#: cinder/exception.py:314
+#, python-format
+msgid "Instance %(instance_id)s is not suspended."
+msgstr ""
+
+#: cinder/exception.py:318
+#, python-format
+msgid "Instance %(instance_id)s is not in rescue mode"
+msgstr ""
+
+#: cinder/exception.py:322
+msgid "Failed to suspend instance"
+msgstr ""
+
+#: cinder/exception.py:326
+msgid "Failed to resume server"
+msgstr ""
+
+#: cinder/exception.py:330
+msgid "Failed to reboot instance"
+msgstr ""
+
+#: cinder/exception.py:334
+#, fuzzy
+msgid "Failed to terminate instance"
+msgstr "Going to start terminating instances"
+
+#: cinder/exception.py:338
+msgid "Service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:342
+msgid "Volume service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:346
+msgid "Compute service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:350
+#, python-format
+msgid "Unable to migrate instance (%(instance_id)s) to current host (%(host)s)."
+msgstr ""
+
+#: cinder/exception.py:355
+msgid "Destination compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:359
+msgid "Original compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:363
+msgid "The supplied hypervisor type of is invalid."
+msgstr ""
+
+#: cinder/exception.py:367
+msgid "The instance requires a newer hypervisor version than has been provided."
+msgstr ""
+
+#: cinder/exception.py:372
+#, python-format
+msgid ""
+"The supplied disk path (%(path)s) already exists, it is expected not to "
+"exist."
+msgstr ""
+
+#: cinder/exception.py:377
+#, python-format
+msgid "The supplied device path (%(path)s) is invalid."
+msgstr ""
+
+#: cinder/exception.py:381
+#, python-format
+msgid "The supplied device (%(device)s) is busy."
+msgstr ""
+
+#: cinder/exception.py:385
+msgid "Unacceptable CPU info"
+msgstr ""
+
+#: cinder/exception.py:389
+#, python-format
+msgid "%(address)s is not a valid IP v4/6 address."
+msgstr ""
+
+#: cinder/exception.py:393
+#, python-format
+msgid ""
+"VLAN tag is not appropriate for the port group %(bridge)s. Expected VLAN "
+"tag is %(tag)s, but the one associated with the port group is %(pgroup)s."
+msgstr ""
+
+#: cinder/exception.py:399
+#, python-format
+msgid ""
+"vSwitch which contains the port group %(bridge)s is not associated with "
+"the desired physical adapter. Expected vSwitch is %(expected)s, but the "
+"one associated is %(actual)s."
+msgstr ""
+
+#: cinder/exception.py:406
+#, python-format
+msgid "Disk format %(disk_format)s is not acceptable"
+msgstr ""
+
+#: cinder/exception.py:410
+#, python-format
+msgid "Image %(image_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:414
+#, python-format
+msgid "Instance %(instance_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:418
+#, python-format
+msgid "Ec2 id %(ec2_id)s is unacceptable."
+msgstr ""
+
+#: cinder/exception.py:422
+msgid "Resource could not be found."
+msgstr ""
+
+#: cinder/exception.py:427
+#, python-format
+msgid "Required flag %(flag)s not set."
+msgstr ""
+
+#: cinder/exception.py:431
+#, python-format
+msgid "Volume %(volume_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:435
+#, python-format
+msgid "Unable to locate account %(account_name)s on Solidfire device"
+msgstr ""
+
+#: cinder/exception.py:440
+#, python-format
+msgid "Volume not found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:444
+#, python-format
+msgid "Volume %(volume_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:449
+msgid "Zero volume types found."
+msgstr ""
+
+#: cinder/exception.py:453
+#, python-format
+msgid "Volume type %(volume_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:457
+#, python-format
+msgid "Volume type with name %(volume_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:462
+#, python-format
+msgid ""
+"Volume Type %(volume_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:467
+#, python-format
+msgid "Snapshot %(snapshot_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:471
+#, python-format
+msgid "deleting volume %(volume_name)s that has snapshot"
+msgstr ""
+
+#: cinder/exception.py:475
+#, python-format
+msgid "deleting snapshot %(snapshot_name)s that has dependent volumes"
+msgstr ""
+
+#: cinder/exception.py:480
+#, python-format
+msgid "No target id found for volume %(volume_id)s."
+msgstr ""
+
+#: cinder/exception.py:484
+#, python-format
+msgid "No disk at %(location)s"
+msgstr ""
+
+#: cinder/exception.py:488
+#, python-format
+msgid "Could not find a handler for %(driver_type)s volume."
+msgstr ""
+
+#: cinder/exception.py:492
+#, python-format
+msgid "Invalid image href %(image_href)s."
+msgstr ""
+
+#: cinder/exception.py:496
+msgid ""
+"Some images have been stored via hrefs. This version of the api does not "
+"support displaying image hrefs."
+msgstr ""
+
+#: cinder/exception.py:501
+#, python-format
+msgid "Image %(image_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:505
+#, python-format
+msgid "Kernel not found for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:509
+#, python-format
+msgid "User %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:513
+#, python-format
+msgid "Project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:517
+#, python-format
+msgid "User %(user_id)s is not a member of project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:521
+#, python-format
+msgid "Role %(role_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:525
+msgid "Cannot find SR to read/write VDI."
+msgstr ""
+
+#: cinder/exception.py:529
+#, python-format
+msgid "%(req)s is required to create a network."
+msgstr ""
+
+#: cinder/exception.py:533
+#, python-format
+msgid "Network %(network_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:537
+#, python-format
+msgid "Network could not be found for bridge %(bridge)s"
+msgstr ""
+
+#: cinder/exception.py:541
+#, python-format
+msgid "Network could not be found for uuid %(uuid)s"
+msgstr ""
+
+#: cinder/exception.py:545
+#, python-format
+msgid "Network could not be found with cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:549
+#, python-format
+msgid "Network could not be found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:553
+msgid "No networks defined."
+msgstr ""
+
+#: cinder/exception.py:557
+#, python-format
+msgid ""
+"Either Network uuid %(network_uuid)s is not present or is not assigned to"
+" the project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:562
+#, python-format
+msgid "Host is not set to the network (%(network_id)s)."
+msgstr ""
+
+#: cinder/exception.py:566
+#, python-format
+msgid "Network %(network)s has active ports, cannot delete."
+msgstr ""
+
+#: cinder/exception.py:570
+msgid "Could not find the datastore reference(s) which the VM uses."
+msgstr ""
+
+#: cinder/exception.py:574
+#, python-format
+msgid "No fixed IP associated with id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:578
+#, python-format
+msgid "Fixed ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:582
+#, python-format
+msgid "Instance %(instance_id)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:586
+#, python-format
+msgid "Network host %(host)s has zero fixed ips in network %(network_id)s."
+msgstr ""
+
+#: cinder/exception.py:591
+#, python-format
+msgid "Instance %(instance_id)s doesn't have fixed ip '%(ip)s'."
+msgstr ""
+
+#: cinder/exception.py:595
+#, python-format
+msgid "Host %(host)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:599
+#, python-format
+msgid ""
+"Fixed IP address (%(address)s) does not exist in network "
+"(%(network_uuid)s)."
+msgstr ""
+
+#: cinder/exception.py:604
+#, python-format
+msgid "Fixed IP address %(address)s is already in use."
+msgstr ""
+
+#: cinder/exception.py:608
+#, python-format
+msgid "Fixed IP address %(address)s is invalid."
+msgstr ""
+
+#: cinder/exception.py:612
+msgid "Zero fixed ips available."
+msgstr ""
+
+#: cinder/exception.py:616
+msgid "Zero fixed ips could be found."
+msgstr ""
+
+#: cinder/exception.py:620
+#, python-format
+msgid "Floating ip not found for id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:624
+#, python-format
+msgid "The DNS entry %(name)s already exists in domain %(domain)s."
+msgstr ""
+
+#: cinder/exception.py:628
+#, python-format
+msgid "Floating ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:632
+#, python-format
+msgid "Floating ip not found for host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:636
+msgid "Zero floating ips available."
+msgstr ""
+
+#: cinder/exception.py:640
+#, python-format
+msgid "Floating ip %(address)s is associated."
+msgstr ""
+
+#: cinder/exception.py:644
+#, python-format
+msgid "Floating ip %(address)s is not associated."
+msgstr ""
+
+#: cinder/exception.py:648
+msgid "Zero floating ips exist."
+msgstr ""
+
+#: cinder/exception.py:652
+#, python-format
+msgid "Interface %(interface)s not found."
+msgstr ""
+
+#: cinder/exception.py:656
+#, python-format
+msgid "Keypair %(name)s not found for user %(user_id)s"
+msgstr ""
+
+#: cinder/exception.py:660
+#, python-format
+msgid "Certificate %(certificate_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:664
+#, python-format
+msgid "Service %(service_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:668
+#, python-format
+msgid "Host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:672
+#, python-format
+msgid "Compute host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:676
+#, python-format
+msgid "Could not find binary %(binary)s on host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:680
+#, python-format
+msgid "Auth token %(token)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:684
+#, python-format
+msgid "Access Key %(access_key)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:688
+msgid "Quota could not be found"
+msgstr ""
+
+#: cinder/exception.py:692
+#, python-format
+msgid "Quota for project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:696
+#, python-format
+msgid "Quota class %(class_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:700
+#, python-format
+msgid "Security group %(security_group_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:704
+#, python-format
+msgid "Security group %(security_group_id)s not found for project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:709
+#, python-format
+msgid "Security group with rule %(rule_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:713
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is already associated with the "
+"instance %(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:718
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is not associated with the instance "
+"%(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:723
+#, python-format
+msgid "Migration %(migration_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:727
+#, python-format
+msgid "Migration not found for instance %(instance_id)s with status %(status)s."
+msgstr ""
+
+#: cinder/exception.py:732
+#, python-format
+msgid "Console pool %(pool_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:736
+#, python-format
+msgid ""
+"Console pool of type %(console_type)s for compute host %(compute_host)s "
+"on proxy host %(host)s not found."
+msgstr ""
+
+#: cinder/exception.py:742
+#, python-format
+msgid "Console %(console_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:746
+#, python-format
+msgid "Console for instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:750
+#, python-format
+msgid ""
+"Console for instance %(instance_id)s in pool %(pool_id)s could not be "
+"found."
+msgstr ""
+
+#: cinder/exception.py:755
+#, python-format
+msgid "Invalid console type %(console_type)s "
+msgstr ""
+
+#: cinder/exception.py:759
+msgid "Zero instance types found."
+msgstr ""
+
+#: cinder/exception.py:763
+#, python-format
+msgid "Instance type %(instance_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:767
+#, python-format
+msgid "Instance type with name %(instance_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:772
+#, python-format
+msgid "Flavor %(flavor_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:776
+#, python-format
+msgid "Cell %(cell_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:780
+#, python-format
+msgid "Scheduler Host Filter %(filter_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:784
+#, python-format
+msgid "Scheduler cost function %(cost_fn_str)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:789
+#, python-format
+msgid "Scheduler weight flag not found: %(flag_name)s"
+msgstr ""
+
+#: cinder/exception.py:793
+#, python-format
+msgid "Instance %(instance_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:798
+#, python-format
+msgid ""
+"Instance Type %(instance_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:803
+msgid "LDAP object could not be found"
+msgstr ""
+
+#: cinder/exception.py:807
+#, python-format
+msgid "LDAP user %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:811
+#, python-format
+msgid "LDAP group %(group_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:815
+#, python-format
+msgid "LDAP user %(user_id)s is not a member of group %(group_id)s."
+msgstr ""
+
+#: cinder/exception.py:819
+#, python-format
+msgid "File %(file_path)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:823
+msgid "Zero files could be found."
+msgstr ""
+
+#: cinder/exception.py:827
+#, python-format
+msgid "Virtual switch associated with the network adapter %(adapter)s not found."
+msgstr ""
+
+#: cinder/exception.py:832
+#, python-format
+msgid "Network adapter %(adapter)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:836
+#, python-format
+msgid "Class %(class_name)s could not be found: %(exception)s"
+msgstr ""
+
+#: cinder/exception.py:840
+msgid "Action not allowed."
+msgstr ""
+
+#: cinder/exception.py:844
+#, python-format
+msgid "Unable to use global role %(role_id)s"
+msgstr ""
+
+#: cinder/exception.py:848
+msgid "Rotation is not allowed for snapshots"
+msgstr ""
+
+#: cinder/exception.py:852
+msgid "Rotation param is required for backup image_type"
+msgstr ""
+
+#: cinder/exception.py:861
+#, python-format
+msgid "Key pair %(key_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:865
+#, python-format
+msgid "User %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:869
+#, python-format
+msgid "LDAP user %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:873
+#, python-format
+msgid "LDAP group %(group)s already exists."
+msgstr ""
+
+#: cinder/exception.py:877
+#, python-format
+msgid "User %(uid)s is already a member of the group %(group_dn)s"
+msgstr "User %(uid)s is already a member of the group %(group_dn)s"
+
+#: cinder/exception.py:882
+#, python-format
+msgid "Project %(project)s already exists."
+msgstr ""
+
+#: cinder/exception.py:886
+#, python-format
+msgid "Instance %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:890
+#, python-format
+msgid "Instance Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:894
+#, python-format
+msgid "Volume Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:898
+#, python-format
+msgid "%(path)s is on shared storage: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:902
+msgid "Migration error"
+msgstr ""
+
+#: cinder/exception.py:906
+#, python-format
+msgid "Malformed message body: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:910
+#, python-format
+msgid "Could not find config at %(path)s"
+msgstr ""
+
+#: cinder/exception.py:914
+#, python-format
+msgid "Could not load paste app '%(name)s' from %(path)s"
+msgstr ""
+
+#: cinder/exception.py:918
+msgid "When resizing, instances must change size!"
+msgstr ""
+
+#: cinder/exception.py:922
+msgid "Image is larger than instance type allows"
+msgstr ""
+
+#: cinder/exception.py:926
+msgid "1 or more Zones could not complete the request"
+msgstr ""
+
+#: cinder/exception.py:930
+msgid "Instance type's memory is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:934
+msgid "Instance type's disk is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:938
+#, python-format
+msgid "Insufficient free memory on compute node to start %(uuid)s."
+msgstr ""
+
+#: cinder/exception.py:942
+msgid "Could not fetch bandwidth/cpu/disk metrics for this host."
+msgstr ""
+
+#: cinder/exception.py:946
+#, python-format
+msgid "No valid host was found. %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:950
+#, python-format
+msgid "Host %(host)s is not up or doesn't exist."
+msgstr ""
+
+#: cinder/exception.py:954
+msgid "Quota exceeded"
+msgstr ""
+
+#: cinder/exception.py:958
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: action '%(action)s' caused an error: "
+"%(reason)s."
+msgstr ""
+
+#: cinder/exception.py:963
+#, python-format
+msgid "Aggregate %(aggregate_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:967
+#, python-format
+msgid "Aggregate %(aggregate_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:971
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:975
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:980
+#, python-format
+msgid "Host %(host)s already member of another aggregate."
+msgstr ""
+
+#: cinder/exception.py:984
+#, python-format
+msgid "Aggregate %(aggregate_id)s already has host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:988
+#, python-format
+msgid "Detected more than one volume with name %(vol_name)s"
+msgstr ""
+
+#: cinder/exception.py:992
+#, python-format
+msgid "Cannot create volume_type with name %(name)s and specs %(extra_specs)s"
+msgstr ""
+
+#: cinder/exception.py:997
+msgid "Unable to create instance type"
+msgstr ""
+
+#: cinder/exception.py:1001
+msgid "Bad response from SolidFire API"
+msgstr ""
+
+#: cinder/exception.py:1005
+#, python-format
+msgid "Error in SolidFire API response: status=%(status)s"
+msgstr ""
+
+#: cinder/exception.py:1009
+#, python-format
+msgid "Error in SolidFire API response: data=%(data)s"
+msgstr ""
+
+#: cinder/exception.py:1013
+#, python-format
+msgid "Detected existing vlan with id %(vlan)d"
+msgstr ""
+
+#: cinder/exception.py:1017
+#, python-format
+msgid "Instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:1021
+#, python-format
+msgid "Invalid id: %(val)s (expecting \"i-...\")."
+msgstr ""
+
+#: cinder/exception.py:1025
+#, fuzzy, python-format
+msgid "Could not fetch image %(image)s"
+msgstr "Could not attach image to loopback: %s"
+
+#: cinder/log.py:315
+#, python-format
+msgid "syslog facility must be one of: %s"
+msgstr ""
+
+#: cinder/manager.py:146
+#, python-format
+msgid "Skipping %(full_task_name)s, %(ticks_to_skip)s ticks left until next run"
+msgstr ""
+
+#: cinder/manager.py:152
+#, python-format
+msgid "Running periodic task %(full_task_name)s"
+msgstr ""
+
+#: cinder/manager.py:159
+#, python-format
+msgid "Error during %(full_task_name)s: %(e)s"
+msgstr ""
+
+#: cinder/manager.py:203
+msgid "Notifying Schedulers of capabilities ..."
+msgstr ""
+
+#: cinder/policy.py:30
+msgid "JSON file representing policy"
+msgstr ""
+
+#: cinder/policy.py:33
+msgid "Rule checked when requested rule is not found"
+msgstr ""
+
+#: cinder/service.py:137
+msgid "SIGTERM received"
+msgstr ""
+
+#: cinder/service.py:177
+#, python-format
+msgid "Starting %(topic)s node (version %(vcs_string)s)"
+msgstr "Starting %(topic)s node (version %(vcs_string)s)"
+
+#: cinder/service.py:195
+#, python-format
+msgid "Creating Consumer connection for Service %s"
+msgstr ""
+
+#: cinder/service.py:282
+msgid "Service killed that has no database entry"
+msgstr "Service killed that has no database entry"
+
+#: cinder/service.py:319
+msgid "The service database object disappeared, Recreating it."
+msgstr "The service database object disappeared, Recreating it."
+
+#: cinder/service.py:334
+msgid "Recovered model server connection!"
+msgstr "Recovered model server connection!"
+
+#: cinder/service.py:340
+msgid "model server went away"
+msgstr "model server went away"
+
+#: cinder/service.py:433
+msgid "Full set of FLAGS:"
+msgstr ""
+
+#: cinder/service.py:440
+#, python-format
+msgid "%(flag)s : FLAG SET "
+msgstr ""
+
+#: cinder/utils.py:79
+#, python-format
+msgid "Inner Exception: %s"
+msgstr "Inner Exception: %s"
+
+#: cinder/utils.py:165
+#, python-format
+msgid "Fetching %s"
+msgstr "Fetching %s"
+
+#: cinder/utils.py:210
+#, python-format
+msgid "Got unknown keyword args to utils.execute: %r"
+msgstr ""
+
+#: cinder/utils.py:220
+#, python-format
+msgid "Running cmd (subprocess): %s"
+msgstr "Running cmd (subprocess): %s"
+
+#: cinder/utils.py:236 cinder/utils.py:315
+#, python-format
+msgid "Result was %s"
+msgstr "Result was %s"
+
+#: cinder/utils.py:249
+#, python-format
+msgid "%r failed. Retrying."
+msgstr ""
+
+#: cinder/utils.py:291
+#, python-format
+msgid "Running cmd (SSH): %s"
+msgstr "Running cmd (SSH): %s"
+
+#: cinder/utils.py:293
+msgid "Environment not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:297
+msgid "process_input not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:352
+#, python-format
+msgid "debug in callback: %s"
+msgstr "debug in callback: %s"
+
+#: cinder/utils.py:534
+#, python-format
+msgid "Link Local address is not found.:%s"
+msgstr "Link Local address is not found.:%s"
+
+#: cinder/utils.py:537
+#, python-format
+msgid "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+msgstr "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+
+#: cinder/utils.py:648
+#, python-format
+msgid "Invalid backend: %s"
+msgstr "Invalid backend: %s"
+
+#: cinder/utils.py:659
+#, python-format
+msgid "backend %s"
+msgstr "backend %s"
+
+#: cinder/utils.py:709
+msgid "in looping call"
+msgstr ""
+
+#: cinder/utils.py:927
+#, python-format
+msgid "Attempting to grab semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:931
+#, python-format
+msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:935
+#, python-format
+msgid "Attempting to grab file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:942
+#, python-format
+msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:1001
+#, python-format
+msgid "Found sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1008
+#, python-format
+msgid "Cleaned sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1023
+#, python-format
+msgid "Found lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1028
+#, python-format
+msgid "Cleaned lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1138
+#, python-format
+msgid "Expected object of type: %s"
+msgstr ""
+
+#: cinder/utils.py:1169
+#, python-format
+msgid "Invalid server_string: %s"
+msgstr ""
+
+#: cinder/utils.py:1298
+#, python-format
+msgid "timefunc: '%(name)s' took %(total_time).2f secs"
+msgstr ""
+
+#: cinder/utils.py:1330
+msgid "Original exception being dropped"
+msgstr ""
+
+#: cinder/utils.py:1461
+#, python-format
+msgid "Class %(fullname)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1463
+#, python-format
+msgid "Class %(fullname)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1495
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1497
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1681
+#, python-format
+msgid "Could not remove tmpdir: %s"
+msgstr ""
+
+#: cinder/wsgi.py:97
+#, python-format
+msgid "Started %(name)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:108
+msgid "Stopping WSGI server."
+msgstr ""
+
+#: cinder/wsgi.py:111
+msgid "Stopping raw TCP server."
+msgstr ""
+
+#: cinder/wsgi.py:117
+#, python-format
+msgid "Starting TCP server %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:133
+msgid "WSGI server has stopped."
+msgstr ""
+
+#: cinder/wsgi.py:211
+msgid "You must implement __call__"
+msgstr "You must implement __call__"
+
+#: cinder/api/direct.py:218
+msgid "not available"
+msgstr "not available"
+
+#: cinder/api/direct.py:299
+#, python-format
+msgid "Returned non-serializeable type: %s"
+msgstr ""
+
+#: cinder/api/sizelimit.py:51
+msgid "Request is too large."
+msgstr ""
+
+#: cinder/api/validator.py:142
+#, python-format
+msgid "%(key)s with value %(value)s failed validator  %(validator)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:73
+#, python-format
+msgid "%(code)s: %(message)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:95
+#, python-format
+msgid "FaultWrapper: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:170
+msgid "Too many failed authentications."
+msgstr "Too many failed authentications."
+
+#: cinder/api/ec2/__init__.py:180
+#, python-format
+msgid ""
+"Access key %(access_key)s has had %(failures)d failed authentications and"
+" will be locked out for %(lock_mins)d minutes."
+msgstr ""
+"Access key %(access_key)s has had %(failures)d failed authentications and"
+" will be locked out for %(lock_mins)d minutes."
+
+#: cinder/api/ec2/__init__.py:267
+msgid "Signature not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:271
+msgid "Access key not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:306 cinder/api/ec2/__init__.py:319
+msgid "Failure communicating with keystone"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:388
+#, python-format
+msgid "Authentication Failure: %s"
+msgstr "Authentication Failure: %s"
+
+#: cinder/api/ec2/__init__.py:404
+#, python-format
+msgid "Authenticated Request For %(uname)s:%(pname)s)"
+msgstr "Authenticated Request For %(uname)s:%(pname)s)"
+
+#: cinder/api/ec2/__init__.py:435
+#, python-format
+msgid "action: %s"
+msgstr "action: %s"
+
+#: cinder/api/ec2/__init__.py:437
+#, python-format
+msgid "arg: %(key)s\t\tval: %(value)s"
+msgstr "arg: %(key)s\t\tval: %(value)s"
+
+#: cinder/api/ec2/__init__.py:512
+#, python-format
+msgid "Unauthorized request for controller=%(controller)s and action=%(action)s"
+msgstr "Unauthorised request for controller=%(controller)s and action=%(action)s"
+
+#: cinder/api/ec2/__init__.py:584
+#, python-format
+msgid "InstanceNotFound raised: %s"
+msgstr "InstanceNotFound raised: %s"
+
+#: cinder/api/ec2/__init__.py:590
+#, python-format
+msgid "VolumeNotFound raised: %s"
+msgstr "VolumeNotFound raised: %s"
+
+#: cinder/api/ec2/__init__.py:596
+#, python-format
+msgid "SnapshotNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:602
+#, python-format
+msgid "NotFound raised: %s"
+msgstr "NotFound raised: %s"
+
+#: cinder/api/ec2/__init__.py:605
+#, python-format
+msgid "EC2APIError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:613
+#, python-format
+msgid "KeyPairExists raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:617
+#, python-format
+msgid "InvalidParameterValue raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:621
+#, python-format
+msgid "InvalidPortRange raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:625
+#, python-format
+msgid "NotAuthorized raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:629
+#, python-format
+msgid "InvalidRequest raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:633
+#, fuzzy, python-format
+msgid "QuotaError raised: %s"
+msgstr "Unexpected error raised: %s"
+
+#: cinder/api/ec2/__init__.py:637
+#, python-format
+msgid "Invalid id: bogus (expecting \"i-...\"): %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:646
+#, python-format
+msgid "Unexpected error raised: %s"
+msgstr "Unexpected error raised: %s"
+
+#: cinder/api/ec2/__init__.py:647
+#, python-format
+msgid "Environment: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:649 cinder/api/metadata/handler.py:248
+msgid "An unknown error has occurred. Please try your request again."
+msgstr "An unknown error has occurred. Please try your request again."
+
+#: cinder/api/ec2/apirequest.py:64
+#, python-format
+msgid "Unsupported API request: controller = %(controller)s, action = %(action)s"
+msgstr "Unsupported API request: controller = %(controller)s, action = %(action)s"
+
+#: cinder/api/ec2/cloud.py:336
+#, python-format
+msgid "Create snapshot of volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:372
+#, python-format
+msgid ""
+"Value (%s) for KeyName is invalid. Content limited to Alphanumeric "
+"character, spaces, dashes, and underscore."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:378
+#, python-format
+msgid "Value (%s) for Keyname is invalid. Length exceeds maximum of 255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:382
+#, python-format
+msgid "Create key pair %s"
+msgstr "Create key pair %s"
+
+#: cinder/api/ec2/cloud.py:391
+#, python-format
+msgid "Import key %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:409
+#, python-format
+msgid "Delete key pair %s"
+msgstr "Delete key pair %s"
+
+#: cinder/api/ec2/cloud.py:551
+msgid "Invalid CIDR"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:639 cinder/api/ec2/cloud.py:693
+#: cinder/api/ec2/cloud.py:800
+msgid "Not enough parameters, need group_name or group_id"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:654
+#: cinder/api/openstack/compute/contrib/security_groups.py:517
+#, python-format
+msgid "Revoke security group ingress %s"
+msgstr "Revoke security group ingress %s"
+
+#: cinder/api/ec2/cloud.py:666 cinder/api/ec2/cloud.py:719
+#, fuzzy, python-format
+msgid "%s Not enough parameters to build a valid rule"
+msgstr "Not enough parameters to build a valid rule."
+
+#: cinder/api/ec2/cloud.py:684 cinder/api/ec2/cloud.py:744
+msgid "No rule for the specified parameters."
+msgstr "No rule for the specified parameters."
+
+#: cinder/api/ec2/cloud.py:708
+#: cinder/api/openstack/compute/contrib/security_groups.py:354
+#, python-format
+msgid "Authorize security group ingress %s"
+msgstr "Authorise security group ingress %s"
+
+#: cinder/api/ec2/cloud.py:725
+#, fuzzy, python-format
+msgid "%s - This rule already exists in group"
+msgstr "This rule already exists in group %s"
+
+#: cinder/api/ec2/cloud.py:769
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Content limited to "
+"Alphanumeric characters, spaces, dashes, and underscores."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:776
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Length exceeds maximum of "
+"255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:780
+#: cinder/api/openstack/compute/contrib/security_groups.py:292
+#, python-format
+msgid "Create Security Group %s"
+msgstr "Create Security Group %s"
+
+#: cinder/api/ec2/cloud.py:783
+#, python-format
+msgid "group %s already exists"
+msgstr "group %s already exists"
+
+#: cinder/api/ec2/cloud.py:815
+#: cinder/api/openstack/compute/contrib/security_groups.py:245
+#, python-format
+msgid "Delete security group %s"
+msgstr "Delete security group %s"
+
+#: cinder/api/ec2/cloud.py:823 cinder/compute/manager.py:1630
+#, python-format
+msgid "Get console output for instance %s"
+msgstr "Get console output for instance %s"
+
+#: cinder/api/ec2/cloud.py:894
+#, python-format
+msgid "Create volume from snapshot %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:898 cinder/api/openstack/compute/contrib/volumes.py:186
+#: cinder/api/openstack/volume/volumes.py:222
+#, python-format
+msgid "Create volume of %s GB"
+msgstr "Create volume of %s GB"
+
+#: cinder/api/ec2/cloud.py:921
+msgid "Delete Failed"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:931
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(instance_id)s at %(device)s"
+msgstr "Attach volume %(volume_id)s to instance %(instance_id)s at %(device)s"
+
+#: cinder/api/ec2/cloud.py:939
+msgid "Attach Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:952 cinder/api/openstack/compute/contrib/volumes.py:366
+#, python-format
+msgid "Detach volume %s"
+msgstr "Detach volume %s"
+
+#: cinder/api/ec2/cloud.py:959
+#, fuzzy, python-format
+msgid "Detach Volume Failed."
+msgstr "Detach volume %s"
+
+#: cinder/api/ec2/cloud.py:984 cinder/api/ec2/cloud.py:1041
+#: cinder/api/ec2/cloud.py:1518 cinder/api/ec2/cloud.py:1533
+#, python-format
+msgid "attribute not supported: %s"
+msgstr "attribute not supported: %s"
+
+#: cinder/api/ec2/cloud.py:1107
+#, python-format
+msgid "vol = %s\n"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1255
+msgid "Allocate address"
+msgstr "Allocate address"
+
+#: cinder/api/ec2/cloud.py:1267
+#, python-format
+msgid "Release address %s"
+msgstr "Release address %s"
+
+#: cinder/api/ec2/cloud.py:1272
+#, python-format
+msgid "Associate address %(public_ip)s to instance %(instance_id)s"
+msgstr "Associate address %(public_ip)s to instance %(instance_id)s"
+
+#: cinder/api/ec2/cloud.py:1282
+#, python-format
+msgid "Disassociate address %s"
+msgstr "Disassociate address %s"
+
+#: cinder/api/ec2/cloud.py:1308
+msgid "Image must be available"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1329
+msgid "Going to start terminating instances"
+msgstr "Going to start terminating instances"
+
+#: cinder/api/ec2/cloud.py:1343
+#, python-format
+msgid "Reboot instance %r"
+msgstr "Reboot instance %r"
+
+#: cinder/api/ec2/cloud.py:1354
+msgid "Going to stop instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1365
+msgid "Going to start instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1455
+#, python-format
+msgid "De-registering image %s"
+msgstr "De-registering image %s"
+
+#: cinder/api/ec2/cloud.py:1471
+msgid "imageLocation is required"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1490
+#, python-format
+msgid "Registered image %(image_location)s with id %(image_id)s"
+msgstr "Registered image %(image_location)s with id %(image_id)s"
+
+#: cinder/api/ec2/cloud.py:1536
+msgid "user or group not specified"
+msgstr "user or group not specified"
+
+#: cinder/api/ec2/cloud.py:1538
+msgid "only group \"all\" is supported"
+msgstr "only group \"all\" is supported"
+
+#: cinder/api/ec2/cloud.py:1540
+msgid "operation_type must be add or remove"
+msgstr "operation_type must be add or remove"
+
+#: cinder/api/ec2/cloud.py:1542
+#, python-format
+msgid "Updating image %s publicity"
+msgstr "Updating image %s publicity"
+
+#: cinder/api/ec2/cloud.py:1555
+#, python-format
+msgid "Not allowed to modify attributes for image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1603
+#, python-format
+msgid "Couldn't stop instance with in %d sec"
+msgstr ""
+
+#: cinder/api/metadata/handler.py:246 cinder/api/metadata/handler.py:253
+#, python-format
+msgid "Failed to get metadata for ip: %s"
+msgstr "Failed to get metadata for ip: %s"
+
+#: cinder/api/openstack/__init__.py:43
+#, python-format
+msgid "Caught error: %s"
+msgstr "Caught error: %s"
+
+#: cinder/api/openstack/__init__.py:45 cinder/api/openstack/wsgi.py:886
+#, python-format
+msgid "%(url)s returned with HTTP %(status)d"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:94
+msgid "Must specify an ExtensionManager class"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:105
+#, python-format
+msgid "Extended resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:130
+#, python-format
+msgid ""
+"Extension %(ext_name)s: Cannot extend resource %(collection)s: No such "
+"resource"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:135
+#, python-format
+msgid "Extension %(ext_name)s extending resource: %(collection)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:90
+#, python-format
+msgid "%(user_id)s could not be found with token '%(token)s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:134
+#, python-format
+msgid "%(user_id)s must be an admin or a member of %(project_id)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:152
+msgid "Authentication requests must be made against a version root (e.g. /v2)."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:167
+#, python-format
+msgid "Could not find %s in request."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:191
+#, python-format
+msgid "Successfully authenticated '%s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:241
+msgid "User not found with provided API key."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:258
+#, python-format
+msgid "Provided API key is valid, but not for user '%(username)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:133 cinder/api/openstack/common.py:167
+msgid "limit param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:136 cinder/api/openstack/common.py:171
+msgid "limit param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:161
+msgid "offset param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:175
+msgid "offset param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:203
+#, python-format
+msgid "marker [%s] not found"
+msgstr ""
+
+#: cinder/api/openstack/common.py:243
+#, python-format
+msgid "href %s does not contain version"
+msgstr ""
+
+#: cinder/api/openstack/common.py:278
+msgid "Image metadata limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/common.py:295
+#, python-format
+msgid "Converting nw_info: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:305
+#, python-format
+msgid "Converted networks: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:338
+#, python-format
+msgid "Cannot '%(action)s' while instance is in %(attr)s %(state)s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:341
+#, python-format
+msgid "Instance is in an invalid state for '%(action)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:421
+msgid "Rejecting snapshot request, snapshots currently disabled"
+msgstr ""
+
+#: cinder/api/openstack/common.py:423
+msgid "Instance snapshots are not permitted at this time."
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:188
+#, python-format
+msgid "Loaded extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:225
+#, python-format
+msgid "Ext name: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:226
+#, python-format
+msgid "Ext alias: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:227
+#, python-format
+msgid "Ext description: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:229
+#, python-format
+msgid "Ext namespace: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:230
+#, python-format
+msgid "Ext updated: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:232
+#, python-format
+msgid "Exception loading extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:246
+#, python-format
+msgid "Loading extension %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:252
+#, python-format
+msgid "Calling extension factory %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:264
+#, python-format
+msgid "Failed to load extension %(ext_factory)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:344
+#, python-format
+msgid "Failed to load extension %(classpath)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:368
+#, python-format
+msgid "Failed to load extension %(ext_name)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:135 cinder/api/openstack/wsgi.py:538
+msgid "cannot understand JSON"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:159
+#: cinder/api/openstack/compute/contrib/hosts.py:86
+msgid "cannot understand XML"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:543
+msgid "too many body keys"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:582
+#, python-format
+msgid "Exception handling resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:586
+#, python-format
+msgid "Fault thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:589
+#, python-format
+msgid "HTTP exception thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:697
+msgid "Unrecognized Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:701
+msgid "No Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:705
+msgid "Empty body provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:816
+#, python-format
+msgid "There is no such action: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:819 cinder/api/openstack/wsgi.py:832
+#: cinder/api/openstack/compute/server_metadata.py:58
+#: cinder/api/openstack/compute/server_metadata.py:76
+#: cinder/api/openstack/compute/server_metadata.py:101
+#: cinder/api/openstack/compute/server_metadata.py:126
+#: cinder/api/openstack/compute/contrib/admin_actions.py:211
+#: cinder/api/openstack/compute/contrib/console_output.py:52
+msgid "Malformed request body"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:829
+msgid "Unsupported Content-Type"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:841
+msgid "Malformed request url"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:889
+#, python-format
+msgid "%(url)s returned a fault: %(e)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:265
+msgid "element is not a child"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:414
+msgid "root element selecting a list"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:739
+#, python-format
+msgid "Template tree mismatch; adding slave %(slavetag)s to master %(mastertag)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:858
+msgid "subclasses must implement construct()!"
+msgstr ""
+
+#: cinder/api/openstack/compute/extensions.py:29
+#: cinder/api/openstack/volume/extensions.py:29
+msgid "Initializing extension manager."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:40
+#: cinder/api/openstack/compute/images.py:146
+#: cinder/api/openstack/compute/images.py:161
+msgid "Image not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:79
+msgid "Incorrect request body format"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:83
+#: cinder/api/openstack/compute/server_metadata.py:80
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:79
+#: cinder/api/openstack/compute/contrib/volumetypes.py:188
+msgid "Request body and URI mismatch"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:86
+#: cinder/api/openstack/compute/server_metadata.py:84
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:82
+#: cinder/api/openstack/compute/contrib/volumetypes.py:191
+msgid "Request body contains too many items"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:111
+msgid "Invalid metadata key"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:74
+msgid "Instance does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:97
+msgid "Instance is not a member of specified network"
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:140
+#, python-format
+msgid ""
+"Only %(value)s %(verb)s request(s) can be made to %(uri)s every "
+"%(unit_string)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:266
+msgid "This request was rate-limited."
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:38
+#: cinder/api/openstack/compute/server_metadata.py:122
+#: cinder/api/openstack/compute/server_metadata.py:159
+msgid "Server does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:141
+#: cinder/api/openstack/compute/server_metadata.py:152
+msgid "Metadata item was not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:425
+#, python-format
+msgid "Invalid server status: %(status)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:433
+msgid "Invalid changes-since value"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:483
+msgid "Personality file limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:485
+msgid "Personality file path too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:487
+msgid "Personality file content too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:501
+msgid "Server name is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:505
+msgid "Server name is an empty string"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:509
+msgid "Server name must be less than 256 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:527
+#, python-format
+msgid "Bad personality format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:530
+msgid "Bad personality format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:535
+#, python-format
+msgid "Personality content for %s cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:550
+#, python-format
+msgid "Bad networks format: network uuid is not in proper format (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:559
+#, python-format
+msgid "Invalid fixed IP address (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:566
+#, python-format
+msgid "Duplicate networks (%s) are not allowed"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:572
+#, python-format
+msgid "Bad network format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:575
+msgid "Bad networks format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:587
+msgid "Userdata content cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:594
+msgid "accessIPv4 is not proper IPv4 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:601
+msgid "accessIPv6 is not proper IPv6 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:633
+msgid "Server name is not defined"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:675
+#: cinder/api/openstack/compute/servers.py:740
+msgid "Invalid flavorRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:737
+msgid "Can not find requested image"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:743
+msgid "Invalid key_name provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:829
+#: cinder/api/openstack/compute/servers.py:849
+msgid "Instance has not been resized."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:835
+#, python-format
+msgid "Error in confirm-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:855
+#, python-format
+msgid "Error in revert-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:868
+msgid "Argument 'type' for reboot is not HARD or SOFT"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:872
+msgid "Missing argument 'type' for reboot"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:885
+#, python-format
+msgid "Error in reboot %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:897
+msgid "Unable to locate requested flavor."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:900
+msgid "Resize requires a change in size."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:924
+msgid "Malformed server entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:931
+msgid "Missing imageRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:940
+msgid "Invalid imageRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:949
+msgid "Missing flavorRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:962
+msgid "No adminPass was specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:966
+#: cinder/api/openstack/compute/servers.py:1144
+msgid "Invalid adminPass"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:980
+msgid "Unable to parse metadata key/value pairs."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:993
+msgid "Resize request has invalid 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:996
+msgid "Resize requests require 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1014
+#: cinder/api/openstack/compute/contrib/aggregates.py:142
+#: cinder/api/openstack/compute/contrib/networks.py:65
+msgid "Invalid request body"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1019
+msgid "Could not parse imageRef from request."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1071
+msgid "Instance could not be found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1074
+msgid "Cannot find image for rebuild"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1103
+msgid "createImage entity requires name attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1112
+#: cinder/api/openstack/compute/contrib/admin_actions.py:238
+msgid "Invalid metadata"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1167
+#, python-format
+msgid "Removing options '%(unk_opt_str)s' from query"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:60
+#, python-format
+msgid "Compute.api::pause %s"
+msgstr "Compute.api::pause %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:77
+#, python-format
+msgid "Compute.api::unpause %s"
+msgstr "Compute.api::unpause %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:94
+#, python-format
+msgid "compute.api::suspend %s"
+msgstr "compute.api::suspend %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:111
+#, python-format
+msgid "compute.api::resume %s"
+msgstr "compute.api::resume %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:127
+#, python-format
+msgid "Error in migrate %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:141
+#, python-format
+msgid "Compute.api::reset_network %s"
+msgstr "Compute.api::reset_network %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:154
+#: cinder/api/openstack/compute/contrib/admin_actions.py:170
+#: cinder/api/openstack/compute/contrib/admin_actions.py:186
+#: cinder/api/openstack/compute/contrib/multinic.py:41
+#: cinder/api/openstack/compute/contrib/rescue.py:44
+msgid "Server not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:157
+#, python-format
+msgid "Compute.api::inject_network_info %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:173
+#, python-format
+msgid "Compute.api::lock %s"
+msgstr "Compute.api::lock %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:189
+#, python-format
+msgid "Compute.api::unlock %s"
+msgstr "Compute.api::unlock %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:219
+#, python-format
+msgid "createBackup entity requires %s attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:223
+msgid "Malformed createBackup entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:229
+msgid "createBackup attribute 'rotation' must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:244
+#: cinder/api/openstack/compute/contrib/console_output.py:47
+#: cinder/api/openstack/compute/contrib/console_output.py:59
+#: cinder/api/openstack/compute/contrib/consoles.py:49
+#: cinder/api/openstack/compute/contrib/consoles.py:60
+#: cinder/api/openstack/compute/contrib/server_action_list.py:49
+#: cinder/api/openstack/compute/contrib/server_diagnostics.py:47
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:38
+msgid "Instance not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:272
+msgid "host and block_migration must be specified."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:284
+#, python-format
+msgid "Live migration of instance %(id)s to host %(host)s failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:76
+#, python-format
+msgid ""
+"Cannot create aggregate with name %(name)s and availability zone "
+"%(avail_zone)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:88
+#, python-format
+msgid "Cannot show aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:114
+#, python-format
+msgid "Cannot update aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:126
+#, python-format
+msgid "Cannot delete aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:139
+#, python-format
+msgid "Aggregates does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:152
+#: cinder/api/openstack/compute/contrib/aggregates.py:158
+#, python-format
+msgid "Cannot add host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:171
+#: cinder/api/openstack/compute/contrib/aggregates.py:175
+#, python-format
+msgid "Cannot remove host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:195
+#, python-format
+msgid "Cannot set metadata %(metadata)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/certificates.py:75
+msgid "Only root certificate can be retrieved."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/cloudpipe.py:146
+msgid ""
+"Unable to claim IP for VPN instances, ensure it isn't running, and try "
+"again in a few minutes"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:44
+msgid "Missing type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:56
+msgid "Invalid type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/disk_config.py:44
+#, python-format
+msgid "%s must be either 'MANUAL' or 'AUTO'."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/extended_server_attributes.py:77
+#: cinder/api/openstack/compute/contrib/extended_status.py:61
+msgid "Server not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:61
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:91
+msgid "Flavor not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:49
+#: cinder/api/openstack/compute/contrib/volumetypes.py:158
+msgid "No Request Body"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:159
+#, python-format
+msgid "No more floating ips in pool %s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:161
+msgid "No more floating ips available."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:201
+#: cinder/api/openstack/compute/contrib/floating_ips.py:230
+#: cinder/api/openstack/compute/contrib/security_groups.py:571
+#: cinder/api/openstack/compute/contrib/security_groups.py:604
+msgid "Missing parameter dict"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:204
+#: cinder/api/openstack/compute/contrib/floating_ips.py:233
+msgid "Address not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:213
+msgid "No fixed ips associated to instance"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:216
+msgid "Associate floating ip failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:144
+#, python-format
+msgid "Invalid status: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:148
+#, fuzzy, python-format
+msgid "Invalid mode: '%s'"
+msgstr "Invalid backend: %s"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:152
+#, python-format
+msgid "Invalid update setting: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:170
+#, python-format
+msgid "Putting host %(host)s in maintenance mode %(mode)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:181
+#, python-format
+msgid "Setting host %(host)s to %(state)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:230
+msgid "Describe-resource is admin only functionality"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:238
+msgid "Host not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:70
+msgid "Keypair name contains unsafe characters"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:95
+msgid "Keypair name must be between 1 and 255 characters long"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:100
+#, python-format
+msgid "Key pair '%s' already exists."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:52
+msgid "Missing 'networkId' argument for addFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:68
+msgid "Missing 'address' argument for removeFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:77
+#, python-format
+msgid "Unable to find address %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:62
+#, python-format
+msgid "Network does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:70
+#, python-format
+msgid "Disassociating network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:74
+#: cinder/api/openstack/compute/contrib/networks.py:91
+#: cinder/api/openstack/compute/contrib/networks.py:101
+msgid "Network not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:87
+#, python-format
+msgid "Showing network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:97
+#, python-format
+msgid "Deleting network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/scheduler_hints.py:41
+msgid "Malformed scheduler_hints attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:222
+msgid "Security group id should be integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:243
+#, fuzzy, python-format
+msgid "Security group is still in use"
+msgstr "Revoke security group ingress %s"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:295
+#, python-format
+msgid "Security group %s already exists"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:315
+#, python-format
+msgid "Security group %s is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:318
+#, python-format
+msgid "Security group %s cannot be empty."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:321
+#, python-format
+msgid "Security group %s should not be greater than 255 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:348
+msgid "Parent group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:351
+#, python-format
+msgid "Security group (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:369
+msgid "Not enough parameters to build a valid rule."
+msgstr "Not enough parameters to build a valid rule."
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:376
+#, python-format
+msgid "This rule already exists in group %s"
+msgstr "This rule already exists in group %s"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:414
+msgid "Parent or group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:507
+msgid "Rule id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:510
+#, python-format
+msgid "Rule (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:574
+#: cinder/api/openstack/compute/contrib/security_groups.py:607
+msgid "Security group not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:578
+#: cinder/api/openstack/compute/contrib/security_groups.py:611
+msgid "Security group name cannot be empty"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:45
+#, python-format
+msgid "start instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:54
+#, python-format
+msgid "stop instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:73
+#: cinder/api/openstack/volume/volumes.py:106
+#, python-format
+msgid "vol=%s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:146
+#: cinder/api/openstack/volume/volumes.py:184
+#, python-format
+msgid "Delete volume with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:329
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(server_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:481
+#: cinder/api/openstack/volume/snapshots.py:110
+#, python-format
+msgid "Delete snapshot with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:524
+#: cinder/api/openstack/volume/snapshots.py:150
+#, python-format
+msgid "Create snapshot from volume %s"
+msgstr ""
+
+#: cinder/auth/fakeldap.py:33
+msgid "Attempted to instantiate singleton"
+msgstr "Attempted to instantiate singleton"
+
+#: cinder/auth/ldapdriver.py:650
+#, python-format
+msgid ""
+"Attempted to remove the last member of a group. Deleting the group at %s "
+"instead."
+msgstr ""
+"Attempted to remove the last member of a group. Deleting the group at %s "
+"instead."
+
+#: cinder/auth/manager.py:298
+#, python-format
+msgid "Looking up user: %r"
+msgstr "Looking up user: %r"
+
+#: cinder/auth/manager.py:302
+#, python-format
+msgid "Failed authorization for access key %s"
+msgstr "Failed authorisation for access key %s"
+
+#: cinder/auth/manager.py:308
+#, python-format
+msgid "Using project name = user name (%s)"
+msgstr "Using project name = user name (%s)"
+
+#: cinder/auth/manager.py:315
+#, python-format
+msgid "failed authorization: no project named %(pjid)s (user=%(uname)s)"
+msgstr "failed authorisation: no project named %(pjid)s (user=%(uname)s)"
+
+#: cinder/auth/manager.py:324
+#, python-format
+msgid ""
+"Failed authorization: user %(uname)s not admin and not member of project "
+"%(pjname)s"
+msgstr ""
+"Failed authorisation: user %(uname)s not admin and not member of project "
+"%(pjname)s"
+
+#: cinder/auth/manager.py:331 cinder/auth/manager.py:343
+#, python-format
+msgid "user.secret: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:332 cinder/auth/manager.py:344
+#, python-format
+msgid "expected_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:333 cinder/auth/manager.py:345
+#, python-format
+msgid "signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:335 cinder/auth/manager.py:357
+#, python-format
+msgid "Invalid signature for user %s"
+msgstr "Invalid signature for user %s"
+
+#: cinder/auth/manager.py:353
+#, python-format
+msgid "host_only_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:449
+msgid "Must specify project"
+msgstr "Must specify project"
+
+#: cinder/auth/manager.py:490
+#, python-format
+msgid "Adding role %(role)s to user %(uid)s in project %(pid)s"
+msgstr "Adding role %(role)s to user %(uid)s in project %(pid)s"
+
+#: cinder/auth/manager.py:493
+#, python-format
+msgid "Adding sitewide role %(role)s to user %(uid)s"
+msgstr "Adding sitewide role %(role)s to user %(uid)s"
+
+#: cinder/auth/manager.py:519
+#, python-format
+msgid "Removing role %(role)s from user %(uid)s on project %(pid)s"
+msgstr "Removing role %(role)s from user %(uid)s on project %(pid)s"
+
+#: cinder/auth/manager.py:522
+#, python-format
+msgid "Removing sitewide role %(role)s from user %(uid)s"
+msgstr "Removing sitewide role %(role)s from user %(uid)s"
+
+#: cinder/auth/manager.py:595
+#, python-format
+msgid "Created project %(name)s with manager %(manager_user)s"
+msgstr "Created project %(name)s with manager %(manager_user)s"
+
+#: cinder/auth/manager.py:613
+#, python-format
+msgid "modifying project %s"
+msgstr "modifying project %s"
+
+#: cinder/auth/manager.py:625
+#, python-format
+msgid "Adding user %(uid)s to project %(pid)s"
+msgstr "Adding user %(uid)s to project %(pid)s"
+
+#: cinder/auth/manager.py:646
+#, python-format
+msgid "Remove user %(uid)s from project %(pid)s"
+msgstr "Remove user %(uid)s from project %(pid)s"
+
+#: cinder/auth/manager.py:676
+#, python-format
+msgid "Deleting project %s"
+msgstr "Deleting project %s"
+
+#: cinder/auth/manager.py:734
+#, python-format
+msgid "Created user %(rvname)s (admin: %(rvadmin)r)"
+msgstr "Created user %(rvname)s (admin: %(rvadmin)r)"
+
+#: cinder/auth/manager.py:743
+#, python-format
+msgid "Deleting user %s"
+msgstr "Deleting user %s"
+
+#: cinder/auth/manager.py:753
+#, python-format
+msgid "Access Key change for user %s"
+msgstr "Access Key change for user %s"
+
+#: cinder/auth/manager.py:755
+#, python-format
+msgid "Secret Key change for user %s"
+msgstr "Secret Key change for user %s"
+
+#: cinder/auth/manager.py:757
+#, python-format
+msgid "Admin status set to %(admin)r for user %(uid)s"
+msgstr "Admin status set to %(admin)r for user %(uid)s"
+
+#: cinder/auth/manager.py:802
+#, python-format
+msgid "No vpn data for project %s"
+msgstr "No vpn data for project %s"
+
+#: cinder/cloudpipe/pipelib.py:46
+#, fuzzy, python-format
+msgid "Instance type for vpn instances"
+msgstr "Get console output for instance %s"
+
+#: cinder/cloudpipe/pipelib.py:49
+msgid "Template for cloudpipe instance boot script"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:52
+msgid "Network to push into openvpn config"
+msgstr "Network to push into openvpn config"
+
+#: cinder/cloudpipe/pipelib.py:55
+msgid "Netmask to push into openvpn config"
+msgstr "Netmask to push into openvpn config"
+
+#: cinder/cloudpipe/pipelib.py:107
+#, python-format
+msgid "Launching VPN for %s"
+msgstr "Launching VPN for %s"
+
+#: cinder/compute/api.py:141
+msgid "No compute host specified"
+msgstr ""
+
+#: cinder/compute/api.py:144
+#, python-format
+msgid "Unable to find host for Instance %s"
+msgstr ""
+
+#: cinder/compute/api.py:192
+#, python-format
+msgid ""
+"Quota exceeded for %(pid)s, tried to set %(num_metadata)s metadata "
+"properties"
+msgstr ""
+
+#: cinder/compute/api.py:203
+#, python-format
+msgid "Quota exceeded for %(pid)s, metadata property key or value too long"
+msgstr ""
+
+#: cinder/compute/api.py:257
+#, fuzzy, python-format
+msgid "Cannot run any more instances of this type."
+msgstr "Instance quota exceeded. You can only run %s more instances of this type."
+
+#: cinder/compute/api.py:259
+#, fuzzy, python-format
+msgid "Can only run %s more instances of this type."
+msgstr "Instance quota exceeded. You can only run %s more instances of this type."
+
+#: cinder/compute/api.py:261
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances. "
+msgstr ""
+
+#: cinder/compute/api.py:310
+msgid "Creating a raw instance"
+msgstr "Creating a raw instance"
+
+#: cinder/compute/api.py:312
+#, python-format
+msgid "Using Kernel=%(kernel_id)s, Ramdisk=%(ramdisk_id)s"
+msgstr ""
+
+#: cinder/compute/api.py:383
+#, python-format
+msgid "Going to run %s instances..."
+msgstr "Going to run %s instances..."
+
+#: cinder/compute/api.py:447
+#, python-format
+msgid "bdm %s"
+msgstr ""
+
+#: cinder/compute/api.py:474
+#, python-format
+msgid "block_device_mapping %s"
+msgstr ""
+
+#: cinder/compute/api.py:591
+#, python-format
+msgid "Sending create to scheduler for %(pid)s/%(uid)s's"
+msgstr ""
+
+#: cinder/compute/api.py:871
+#, fuzzy, python-format
+msgid "Going to try to soft delete instance"
+msgstr "Going to try to terminate %s"
+
+#: cinder/compute/api.py:891
+msgid "No host for instance, deleting immediately"
+msgstr ""
+
+#: cinder/compute/api.py:939
+#, fuzzy, python-format
+msgid "Going to try to terminate instance"
+msgstr "Going to try to terminate %s"
+
+#: cinder/compute/api.py:977
+#, fuzzy, python-format
+msgid "Going to try to stop instance"
+msgstr "Going to try to terminate %s"
+
+#: cinder/compute/api.py:996
+#, fuzzy, python-format
+msgid "Going to try to start instance"
+msgstr "Going to try to terminate %s"
+
+#: cinder/compute/api.py:1000
+#, python-format
+msgid "Instance %(instance_uuid)s is not stopped. (%(vm_state)s"
+msgstr ""
+
+#: cinder/compute/api.py:1071 cinder/volume/api.py:173
+#: cinder/volume/volume_types.py:64
+#, python-format
+msgid "Searching by: %s"
+msgstr ""
+
+#: cinder/compute/api.py:1201
+#, python-format
+msgid "Image type not recognized %s"
+msgstr ""
+
+#: cinder/compute/api.py:1369
+msgid "flavor_id is None. Assuming migration."
+msgstr ""
+
+#: cinder/compute/api.py:1377
+#, python-format
+msgid ""
+"Old instance type %(current_instance_type_name)s,  new instance type "
+"%(new_instance_type_name)s"
+msgstr ""
+
+#: cinder/compute/api.py:1644
+#, python-format
+msgid "multiple fixedips exist, using the first: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:57 cinder/compute/instance_types.py:65
+msgid "create arguments must be positive integers"
+msgstr ""
+
+#: cinder/compute/instance_types.py:76 cinder/volume/volume_types.py:41
+#, python-format
+msgid "DB error: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:86
+#, python-format
+msgid "Instance type %s not found for deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:138
+#, python-format
+msgid "check_instance_lock: decorating: |%s|"
+msgstr "check_instance_lock: decorating: |%s|"
+
+#: cinder/compute/manager.py:140
+#, python-format
+msgid ""
+"check_instance_lock: arguments: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+msgstr ""
+
+#: cinder/compute/manager.py:144
+#, python-format
+msgid "check_instance_lock: locked: |%s|"
+msgstr "check_instance_lock: locked: |%s|"
+
+#: cinder/compute/manager.py:146
+#, python-format
+msgid "check_instance_lock: admin: |%s|"
+msgstr "check_instance_lock: admin: |%s|"
+
+#: cinder/compute/manager.py:151
+#, python-format
+msgid "check_instance_lock: executing: |%s|"
+msgstr "check_instance_lock: executing: |%s|"
+
+#: cinder/compute/manager.py:155
+#, python-format
+msgid "check_instance_lock: not executing |%s|"
+msgstr "check_instance_lock: not executing |%s|"
+
+#: cinder/compute/manager.py:201
+#, python-format
+msgid "Unable to load the virtualization driver: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:223
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s has been destroyed from under us while trying "
+"to set it to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:240
+#, python-format
+msgid "Current state is %(drv_state)s, state in DB is %(db_state)s."
+msgstr ""
+
+#: cinder/compute/manager.py:245
+msgid "Rebooting instance after cinder-compute restart."
+msgstr ""
+
+#: cinder/compute/manager.py:255
+msgid "Hypervisor driver does not support firewall rules"
+msgstr ""
+
+#: cinder/compute/manager.py:260
+msgid "Checking state"
+msgstr ""
+
+#: cinder/compute/manager.py:329
+#, python-format
+msgid "Setting up bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:400
+#, python-format
+msgid "Instance %s already deleted from database. Attempting forceful vm deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:406
+#, fuzzy, python-format
+msgid "Exception encountered while terminating the instance %s"
+msgstr "After terminating instances: %s"
+
+#: cinder/compute/manager.py:444
+#, python-format
+msgid "Instance %s not found."
+msgstr ""
+
+#: cinder/compute/manager.py:480
+msgid "Instance has already been created"
+msgstr "Instance has already been created"
+
+#: cinder/compute/manager.py:523
+#, python-format
+msgid ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:528
+#, python-format
+msgid ""
+"Image '%(image_id)s' size %(size_bytes)d exceeded instance_type allowed "
+"size %(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:538
+msgid "Starting instance..."
+msgstr ""
+
+#: cinder/compute/manager.py:548
+msgid "Skipping network allocation for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:561
+msgid "Instance failed network setup"
+msgstr ""
+
+#: cinder/compute/manager.py:565
+#, python-format
+msgid "Instance network_info: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:578
+msgid "Instance failed block device setup"
+msgstr ""
+
+#: cinder/compute/manager.py:594
+msgid "Instance failed to spawn"
+msgstr ""
+
+#: cinder/compute/manager.py:615
+msgid "Deallocating network for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:672
+#, python-format
+msgid "%(action_str)s instance"
+msgstr ""
+
+#: cinder/compute/manager.py:699
+#, python-format
+msgid "Ignoring DiskNotFound: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:708
+#, python-format
+msgid "terminating bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:742 cinder/compute/manager.py:1328
+#: cinder/compute/manager.py:1416 cinder/compute/manager.py:2501
+#, python-format
+msgid "%s. Setting instance vm_state to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:811
+#, python-format
+msgid ""
+"Cannot rebuild instance [%(instance_uuid)s], because the given image does"
+" not exist."
+msgstr ""
+
+#: cinder/compute/manager.py:816
+#, python-format
+msgid "Cannot rebuild instance [%(instance_uuid)s]: %(exc)s"
+msgstr ""
+
+#: cinder/compute/manager.py:823
+#, python-format
+msgid "Rebuilding instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:876
+#, python-format
+msgid "Rebooting instance %s"
+msgstr "Rebooting instance %s"
+
+#: cinder/compute/manager.py:891
+#, python-format
+msgid ""
+"trying to reboot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:933
+#, python-format
+msgid "instance %s: snapshotting"
+msgstr "instance %s: snapshotting"
+
+#: cinder/compute/manager.py:939
+#, python-format
+msgid ""
+"trying to snapshot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:995
+#, python-format
+msgid "Found %(num_images)d images (rotation: %(rotation)d)"
+msgstr ""
+
+#: cinder/compute/manager.py:1001
+#, python-format
+msgid "Rotating out %d backups"
+msgstr ""
+
+#: cinder/compute/manager.py:1005
+#, python-format
+msgid "Deleting image %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1035
+#, python-format
+msgid "Failed to set admin password. Instance %s is not running"
+msgstr ""
+
+#: cinder/compute/manager.py:1041
+#, python-format
+msgid "Instance %s: Root password set"
+msgstr ""
+
+#: cinder/compute/manager.py:1050
+msgid "set_admin_password is not implemented by this driver."
+msgstr ""
+
+#: cinder/compute/manager.py:1064
+msgid "Error setting admin password"
+msgstr ""
+
+#: cinder/compute/manager.py:1079
+#, python-format
+msgid ""
+"trying to inject a file into a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1084
+#, python-format
+msgid "instance %(instance_uuid)s: injecting file to %(path)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1098
+#, python-format
+msgid ""
+"trying to update agent on a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1103
+#, python-format
+msgid "instance %(instance_uuid)s: updating agent to %(url)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1116
+#, python-format
+msgid "instance %s: rescuing"
+msgstr "instance %s: rescuing"
+
+#: cinder/compute/manager.py:1141
+#, python-format
+msgid "instance %s: unrescuing"
+msgstr "instance %s: unrescuing"
+
+#: cinder/compute/manager.py:1270
+msgid "destination same as source!"
+msgstr ""
+
+#: cinder/compute/manager.py:1287
+#, python-format
+msgid "instance %s: migrating"
+msgstr ""
+
+#: cinder/compute/manager.py:1471
+#, python-format
+msgid "instance %s: pausing"
+msgstr "instance %s: pausing"
+
+#: cinder/compute/manager.py:1489
+#, python-format
+msgid "instance %s: unpausing"
+msgstr "instance %s: unpausing"
+
+#: cinder/compute/manager.py:1525
+#, python-format
+msgid "instance %s: retrieving diagnostics"
+msgstr "instance %s: retrieving diagnostics"
+
+#: cinder/compute/manager.py:1534
+#, python-format
+msgid "instance %s: suspending"
+msgstr "instance %s: suspending"
+
+#: cinder/compute/manager.py:1556
+#, python-format
+msgid "instance %s: resuming"
+msgstr "instance %s: resuming"
+
+#: cinder/compute/manager.py:1579
+#, python-format
+msgid "instance %s: locking"
+msgstr "instance %s: locking"
+
+#: cinder/compute/manager.py:1588
+#, python-format
+msgid "instance %s: unlocking"
+msgstr "instance %s: unlocking"
+
+#: cinder/compute/manager.py:1596
+#, python-format
+msgid "instance %s: getting locked state"
+msgstr "instance %s: getting locked state"
+
+#: cinder/compute/manager.py:1606
+#, python-format
+msgid "instance %s: reset network"
+msgstr "instance %s: reset network"
+
+#: cinder/compute/manager.py:1614
+#, python-format
+msgid "instance %s: inject network info"
+msgstr ""
+
+#: cinder/compute/manager.py:1618
+#, python-format
+msgid "network_info to inject: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:1655
+#, python-format
+msgid "instance %s: getting vnc console"
+msgstr ""
+
+#: cinder/compute/manager.py:1685
+#, python-format
+msgid "Booting with volume %(volume_id)s at %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1703
+#, python-format
+msgid ""
+"instance %(instance_uuid)s: attaching volume %(volume_id)s to "
+"%(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1705
+#, python-format
+msgid "Attaching volume %(volume_id)s to %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1714
+#, python-format
+msgid "instance %(instance_uuid)s: attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1724
+#, python-format
+msgid "Attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1752
+#, python-format
+msgid "Detach volume %(volume_id)s from mountpoint %(mp)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1756
+#, python-format
+msgid "Detaching volume from unknown instance %s"
+msgstr "Detaching volume from unknown instance %s"
+
+#: cinder/compute/manager.py:1822
+#, python-format
+msgid ""
+"Creating tmpfile %s to notify to other compute nodes that they should "
+"mount the same storage."
+msgstr ""
+
+#: cinder/compute/manager.py:1884
+msgid "Instance has no volume."
+msgstr ""
+
+#: cinder/compute/manager.py:1916
+#, python-format
+msgid "plug_vifs() failed %(cnt)d.Retry up to %(max_retry)d for %(hostname)s."
+msgstr ""
+
+#: cinder/compute/manager.py:1973
+#, python-format
+msgid "Pre live migration failed at  %(dest)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2000
+msgid "post_live_migration() is started.."
+msgstr ""
+
+#: cinder/compute/manager.py:2030
+msgid "No floating_ip found"
+msgstr ""
+
+#: cinder/compute/manager.py:2038
+msgid "No floating_ip found."
+msgstr ""
+
+#: cinder/compute/manager.py:2040
+#, python-format
+msgid ""
+"Live migration: Unexpected error: cannot inherit floating ip.\n"
+"%(e)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2073
+#, python-format
+msgid "Migrating instance to %(dest)s finished successfully."
+msgstr ""
+
+#: cinder/compute/manager.py:2075
+msgid ""
+"You may see the error \"libvirt: QEMU error: Domain not found: no domain "
+"with matching name.\" This error can be safely ignored."
+msgstr ""
+
+#: cinder/compute/manager.py:2090
+msgid "Post operation of migraton started"
+msgstr ""
+
+#: cinder/compute/manager.py:2226
+#, python-format
+msgid "Updated the info_cache for instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:2255
+msgid "Updating bandwidth usage cache"
+msgstr ""
+
+#: cinder/compute/manager.py:2277
+msgid "Updating host status"
+msgstr ""
+
+#: cinder/compute/manager.py:2305
+#, python-format
+msgid ""
+"Found %(num_db_instances)s in the database and %(num_vm_instances)s on "
+"the hypervisor."
+msgstr ""
+
+#: cinder/compute/manager.py:2331
+#, python-format
+msgid ""
+"During the sync_power process the instance %(uuid)s has moved from host "
+"%(src)s to host %(dst)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2344
+#, python-format
+msgid ""
+"Instance %s is in the process of migrating to this host. Wait next "
+"sync_power cycle before setting power state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2350
+msgid ""
+"Instance found in database but not known by hypervisor. Setting power "
+"state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2380
+msgid "FLAGS.reclaim_instance_interval <= 0, skipping..."
+msgstr ""
+
+#: cinder/compute/manager.py:2392
+msgid "Reclaiming deleted instance"
+msgstr ""
+
+#: cinder/compute/manager.py:2458
+#, python-format
+msgid ""
+"Detected instance with name label '%(name)s' which is marked as DELETED "
+"but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2465
+#, python-format
+msgid ""
+"Destroying instance with name label '%(name)s' which is marked as DELETED"
+" but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2472
+#, python-format
+msgid "Unrecognized value '%(action)s' for FLAGS.running_deleted_instance_action"
+msgstr ""
+
+#: cinder/compute/manager.py:2542
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: unrecoverable state during operation on "
+"%(host)s"
+msgstr ""
+
+#: cinder/compute/utils.py:142
+msgid "v4 subnets are required for legacy nw_info"
+msgstr ""
+
+#: cinder/console/manager.py:77 cinder/console/vmrc_manager.py:70
+msgid "Adding console"
+msgstr "Adding console"
+
+#: cinder/console/manager.py:97
+#, python-format
+msgid "Tried to remove non-existant console %(console_id)s."
+msgstr "Tried to remove non-existent console %(console_id)s."
+
+#: cinder/console/vmrc_manager.py:122
+#, python-format
+msgid "Tried to remove non-existent console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:125
+#, python-format
+msgid "Removing console %(console_id)s."
+msgstr ""
+
+#: cinder/console/xvp.py:98
+msgid "Rebuilding xvp conf"
+msgstr "Rebuilding xvp conf"
+
+#: cinder/console/xvp.py:116
+#, python-format
+msgid "Re-wrote %s"
+msgstr "Re-wrote %s"
+
+#: cinder/console/xvp.py:121
+msgid "Stopping xvp"
+msgstr "Stopping xvp"
+
+#: cinder/console/xvp.py:134
+msgid "Starting xvp"
+msgstr "Starting xvp"
+
+#: cinder/console/xvp.py:141
+#, python-format
+msgid "Error starting xvp: %s"
+msgstr "Error starting xvp: %s"
+
+#: cinder/console/xvp.py:144
+msgid "Restarting xvp"
+msgstr "Restarting xvp"
+
+#: cinder/console/xvp.py:146
+msgid "xvp not running..."
+msgstr "xvp not running..."
+
+#: cinder/consoleauth/manager.py:63
+#, python-format
+msgid "Deleting Expired Token: (%s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:75
+#, python-format
+msgid "Received Token: %(token)s, %(token_dict)s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:79
+#, python-format
+msgid "Checking Token: %(token)s, %(token_valid)s)"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:57
+msgid "Use of empty request context is deprecated"
+msgstr "Use of empty request context is deprecated"
+
+#: cinder/db/sqlalchemy/api.py:198
+#, python-format
+msgid "Unrecognized read_deleted value '%s'"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:516 cinder/db/sqlalchemy/api.py:551
+#, python-format
+msgid "No ComputeNode for %(host)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4019 cinder/db/sqlalchemy/api.py:4045
+#, python-format
+msgid "No backend config with id %(sm_backend_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4103
+#, python-format
+msgid "No sm_flavor called %(sm_flavor)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4147
+#, python-format
+msgid "No sm_volume with id %(volume_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:66
+msgid "python-migrate is not installed. Exiting."
+msgstr "python-migrate is not installed. Exiting."
+
+#: cinder/db/sqlalchemy/migration.py:78
+msgid "version should be an integer"
+msgstr ""
+
+#: cinder/db/sqlalchemy/session.py:137
+#, python-format
+msgid "SQL connection failed. %s attempts left."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:48
+msgid "interface column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:80
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:54
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:48
+#, python-format
+msgid "Table |%s| not created!"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:87
+msgid "VIF column not added to fixed_ips table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:97
+#, python-format
+msgid "join list for moving mac_addresses |%s|"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:39
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:60
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:99
+msgid "foreign key constraint couldn't be added"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:58
+msgid "foreign key constraint couldn't be dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py:34
+msgid "priority column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:41
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:42
+#: cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py:56
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:68
+msgid "foreign key constraint couldn't be removed"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py:34
+msgid "progress column not added to instances table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py:97
+#, python-format
+msgid ""
+"Could not cast flavorid to integer: %s. Set flavorid to an integer-like "
+"string to downgrade."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:69
+msgid "instance_info_caches tables not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py:41
+msgid "progress column not added to compute_nodes table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:76
+msgid "dns_domains table not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:60
+msgid "quota_classes table not dropped"
+msgstr ""
+
+#: cinder/image/glance.py:147
+msgid "Connection error contacting glance server, retrying"
+msgstr ""
+
+#: cinder/image/glance.py:153 cinder/network/quantum/melange_connection.py:104
+msgid "Maximum attempts reached"
+msgstr ""
+
+#: cinder/image/glance.py:278
+#, python-format
+msgid "Creating image in Glance. Metadata passed in %s"
+msgstr ""
+
+#: cinder/image/glance.py:281
+#, python-format
+msgid "Metadata after formatting for Glance %s"
+msgstr ""
+
+#: cinder/image/glance.py:289
+#, python-format
+msgid "Metadata returned from Glance formatted for Base %s"
+msgstr ""
+
+#: cinder/image/glance.py:331 cinder/image/glance.py:335
+msgid "Not the image owner"
+msgstr ""
+
+#: cinder/image/glance.py:410
+#, python-format
+msgid "%(timestamp)s does not follow any of the signatures: %(iso_formats)s"
+msgstr ""
+
+#: cinder/image/s3.py:309
+#, python-format
+msgid "Failed to download %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:328
+#, python-format
+msgid "Failed to decrypt %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:340
+#, python-format
+msgid "Failed to untar %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:353
+#, python-format
+msgid "Failed to upload %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:379
+#, python-format
+msgid "Failed to decrypt private key: %s"
+msgstr "Failed to decrypt private key: %s"
+
+#: cinder/image/s3.py:387
+#, python-format
+msgid "Failed to decrypt initialization vector: %s"
+msgstr "Failed to decrypt initialisation vector: %s"
+
+#: cinder/image/s3.py:398
+#, python-format
+msgid "Failed to decrypt image file %(image_file)s: %(err)s"
+msgstr "Failed to decrypt image file %(image_file)s: %(err)s"
+
+#: cinder/image/s3.py:410
+msgid "Unsafe filenames in image"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:38 cinder/ipv6/rfc2462.py:34
+#, python-format
+msgid "Bad mac for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:40 cinder/ipv6/rfc2462.py:36
+#, python-format
+msgid "Bad prefix for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:42
+#, python-format
+msgid "Bad project_id for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/network/ldapdns.py:321
+msgid "This driver only supports type 'a' entries."
+msgstr ""
+
+#: cinder/network/linux_net.py:166
+#, python-format
+msgid "Attempted to remove chain %s which does not exist"
+msgstr ""
+
+#: cinder/network/linux_net.py:192
+#, python-format
+msgid "Unknown chain: %r"
+msgstr ""
+
+#: cinder/network/linux_net.py:215
+#, python-format
+msgid ""
+"Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r "
+"%(top)r"
+msgstr ""
+
+#: cinder/network/linux_net.py:335
+msgid "IPTablesManager.apply completed with success"
+msgstr ""
+
+#: cinder/network/linux_net.py:694
+#, python-format
+msgid "Hupping dnsmasq threw %s"
+msgstr "Hupping dnsmasq threw %s"
+
+#: cinder/network/linux_net.py:696
+#, python-format
+msgid "Pid %d is stale, relaunching dnsmasq"
+msgstr "Pid %d is stale, relaunching dnsmasq"
+
+#: cinder/network/linux_net.py:756
+#, python-format
+msgid "killing radvd threw %s"
+msgstr "killing radvd threw %s"
+
+#: cinder/network/linux_net.py:758
+#, python-format
+msgid "Pid %d is stale, relaunching radvd"
+msgstr "Pid %d is stale, relaunching radvd"
+
+#: cinder/network/linux_net.py:967
+#, python-format
+msgid "Starting VLAN inteface %s"
+msgstr "Starting VLAN inteface %s"
+
+#: cinder/network/linux_net.py:999
+#, python-format
+msgid "Starting Bridge interface for %s"
+msgstr "Starting Bridge interface for %s"
+
+#: cinder/network/linux_net.py:1142
+#, fuzzy, python-format
+msgid "Starting bridge %s "
+msgstr "Starting Bridge interface for %s"
+
+#: cinder/network/linux_net.py:1149
+#, fuzzy, python-format
+msgid "Done starting bridge %s"
+msgstr "Error starting xvp: %s"
+
+#: cinder/network/linux_net.py:1167
+#, python-format
+msgid "Failed unplugging gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/linux_net.py:1170
+#, python-format
+msgid "Unplugged gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/manager.py:291
+#, python-format
+msgid "Fixed ip %(fixed_ip_id)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:300 cinder/network/manager.py:496
+#, python-format
+msgid "Interface %(interface)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:315
+#, python-format
+msgid "floating IP allocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:353
+#, python-format
+msgid "floating IP deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:386
+#, python-format
+msgid "Address |%(address)s| is not allocated"
+msgstr ""
+
+#: cinder/network/manager.py:390
+#, python-format
+msgid "Address |%(address)s| is not allocated to your project |%(project)s|"
+msgstr ""
+
+#: cinder/network/manager.py:402
+#, python-format
+msgid "Quota exceeded for %s, tried to allocate address"
+msgstr ""
+
+#: cinder/network/manager.py:614
+#, python-format
+msgid ""
+"Database inconsistency: DNS domain |%s| is registered in the Cinder db but "
+"not visible to either the floating or instance DNS driver. It will be "
+"ignored."
+msgstr ""
+
+#: cinder/network/manager.py:660
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing zone to |%(av_zone)s|."
+msgstr ""
+
+#: cinder/network/manager.py:670
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing project to |%(project)s|."
+msgstr ""
+
+#: cinder/network/manager.py:778
+#, python-format
+msgid "Disassociated %s stale fixed ip(s)"
+msgstr ""
+
+#: cinder/network/manager.py:782
+msgid "setting network host"
+msgstr "setting network host"
+
+#: cinder/network/manager.py:896
+#, python-format
+msgid "network allocations for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:901
+#, python-format
+msgid "networks retrieved for instance |%(instance_id)s|: |%(networks)s|"
+msgstr ""
+
+#: cinder/network/manager.py:930
+#, python-format
+msgid "network deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:1152
+#, python-format
+msgid ""
+"instance-dns-zone is |%(domain)s|, which is in availability zone "
+"|%(zone)s|. Instance |%(instance)s| is in zone |%(zone2)s|. No DNS record"
+" will be created."
+msgstr ""
+
+#: cinder/network/manager.py:1227
+#, python-format
+msgid "Unable to release %s because vif doesn't exist."
+msgstr ""
+
+#: cinder/network/manager.py:1244
+#, python-format
+msgid "Leased IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1248
+#, python-format
+msgid "IP %s leased that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1256
+#, python-format
+msgid "IP |%s| leased that isn't allocated"
+msgstr ""
+
+#: cinder/network/manager.py:1261
+#, python-format
+msgid "Released IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1265
+#, python-format
+msgid "IP %s released that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1268
+#, python-format
+msgid "IP %s released that was not leased"
+msgstr "IP %s released that was not leased"
+
+#: cinder/network/manager.py:1331
+msgid "cidr already in use"
+msgstr ""
+
+#: cinder/network/manager.py:1334
+#, python-format
+msgid "requested cidr (%(cidr)s) conflicts with existing supernet (%(super)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1345
+#, python-format
+msgid ""
+"requested cidr (%(cidr)s) conflicts with existing smaller cidr "
+"(%(smaller)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1404
+msgid "Network already exists!"
+msgstr ""
+
+#: cinder/network/manager.py:1423
+#, python-format
+msgid "Network must be disassociated from project %s before delete"
+msgstr ""
+
+#: cinder/network/manager.py:1832
+msgid ""
+"The sum between the number of networks and the vlan start cannot be "
+"greater than 4094"
+msgstr ""
+"The sum between the number of networks and the vlan start cannot be "
+"greater than 4094"
+
+#: cinder/network/manager.py:1839
+#, python-format
+msgid ""
+"The network range is not big enough to fit %(num_networks)s. Network size"
+" is %(network_size)s"
+msgstr ""
+
+#: cinder/network/minidns.py:65
+msgid "This driver only supports type 'a'"
+msgstr ""
+
+#: cinder/network/quantum/client.py:154
+msgid "Tenant ID not set"
+msgstr ""
+
+#: cinder/network/quantum/client.py:180
+#, python-format
+msgid "Quantum Client Request: %(method)s %(action)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:196
+#, python-format
+msgid "Quantum entity not found: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:206
+#, python-format
+msgid "Server %(status_code)s error: %(data)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:210
+#, python-format
+msgid "Unable to connect to server. Got error: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:228
+#, python-format
+msgid "unable to deserialize object of type = '%s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:162
+msgid "QuantumManager does not use 'multi_host' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:166
+msgid "QuantumManager requires that only one network is created per call"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:176
+msgid "QuantumManager does not use 'vlan_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:182
+msgid "QuantumManager does not use 'vpn_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:186
+msgid "QuantumManager does not use 'bridge' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:190
+msgid "QuantumManager does not use 'bridge_interface' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:195
+msgid "QuantumManager requires a valid (.1) gateway address."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:204
+#, python-format
+msgid ""
+"Unable to find existing quantum network for tenant '%(q_tenant_id)s' with"
+" net-id '%(quantum_net_id)s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:301
+#, python-format
+msgid "network allocations for instance %s"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:588
+#, python-format
+msgid ""
+"port deallocation failed for instance: |%(instance_id)s|, port_id: "
+"|%(port_id)s|"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:606
+#, python-format
+msgid ""
+"ipam deallocation failed for instance: |%(instance_id)s|, vif_uuid: "
+"|%(vif_uuid)s|"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:96
+#, python-format
+msgid "Server returned error: %s"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:98
+msgid "Connection error contacting melange service, retrying"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:108
+#, python-format
+msgid ""
+"allocate IP on network |%(network_id)s| belonging to "
+"|%(network_tenant_id)s| to this vif |%(vif_id)s| with mac "
+"|%(mac_address)s| belonging to |%(project_id)s| "
+msgstr ""
+
+#: cinder/network/quantum/melange_ipam_lib.py:133
+msgid "get_project_and_global_net_ids must be called with a non-null project_id"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:75
+msgid "Error creating network entry"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:90
+#, python-format
+msgid "No network with net_id = %s"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:221
+#, python-format
+msgid "No fixed IPs to deallocate for vif %s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:99
+#, python-format
+msgid "Connecting interface %(interface_id)s to net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:113
+#, python-format
+msgid "Deleting port %(port_id)s on net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/notifier/api.py:115
+#, python-format
+msgid "%s not in valid priorities"
+msgstr ""
+
+#: cinder/notifier/api.py:130
+#, python-format
+msgid ""
+"Problem '%(e)s' attempting to send to notification system. "
+"Payload=%(payload)s"
+msgstr ""
+
+#: cinder/notifier/list_notifier.py:65
+#, python-format
+msgid "Problem '%(e)s' attempting to send to notification driver %(driver)s."
+msgstr ""
+
+#: cinder/notifier/rabbit_notifier.py:46
+#, python-format
+msgid "Could not send notification to %(topic)s. Payload=%(message)s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:146
+#, python-format
+msgid "Returning exception %s to caller"
+msgstr "Returning exception %s to caller"
+
+#: cinder/rpc/amqp.py:188
+#, python-format
+msgid "unpacked context: %s"
+msgstr "unpacked context: %s"
+
+#: cinder/rpc/amqp.py:231
+#, python-format
+msgid "received %s"
+msgstr "received %s"
+
+#: cinder/rpc/amqp.py:236
+#, python-format
+msgid "no method for message: %s"
+msgstr "no method for message: %s"
+
+#: cinder/rpc/amqp.py:237
+#, python-format
+msgid "No method for message: %s"
+msgstr "No method for message: %s"
+
+#: cinder/rpc/amqp.py:321
+#, python-format
+msgid "Making asynchronous call on %s ..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:324
+#, python-format
+msgid "MSG_ID is %s"
+msgstr "MSG_ID is %s"
+
+#: cinder/rpc/amqp.py:346
+#, python-format
+msgid "Making asynchronous cast on %s..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:354
+msgid "Making asynchronous fanout cast..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:379
+#, python-format
+msgid "Sending notification on %s..."
+msgstr ""
+
+#: cinder/rpc/common.py:54
+#, python-format
+msgid ""
+"Remote error: %(exc_type)s %(value)s\n"
+"%(traceback)s."
+msgstr ""
+
+#: cinder/rpc/common.py:71
+msgid "Timeout while waiting on RPC response."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:111
+msgid "Failed to process message... skipping it."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:407
+#, python-format
+msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:430
+#, python-format
+msgid "Connected to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:466
+#, python-format
+msgid ""
+"Unable to connect to AMQP server on %(hostname)s:%(port)d after "
+"%(max_retries)d tries: %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:482
+#, python-format
+msgid ""
+"AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying "
+"again in %(sleep_time)d seconds."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:533 cinder/rpc/impl_qpid.py:385
+#, python-format
+msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:551 cinder/rpc/impl_qpid.py:400
+#, python-format
+msgid "Timed out waiting for RPC response: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:555 cinder/rpc/impl_qpid.py:404
+#, python-format
+msgid "Failed to consume message from queue: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:589 cinder/rpc/impl_qpid.py:434
+#, python-format
+msgid "Failed to publish message to topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:341
+#, python-format
+msgid "Unable to connect to AMQP server: %s "
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:346
+#, python-format
+msgid "Connected to AMQP server on %s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:354
+msgid "Re-established AMQP queues"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:412
+msgid "Error processing message.  Skipping it."
+msgstr ""
+
+#: cinder/scheduler/chance.py:47 cinder/scheduler/simple.py:91
+#: cinder/scheduler/simple.py:143
+msgid "Is the appropriate service running?"
+msgstr ""
+
+#: cinder/scheduler/chance.py:52
+msgid "Could not find another compute"
+msgstr ""
+
+#: cinder/scheduler/driver.py:63
+#, python-format
+msgid "Casted '%(method)s' to volume '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:80
+#, python-format
+msgid "Casted '%(method)s' to compute '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:89
+#, python-format
+msgid "Casted '%(method)s' to network '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:107
+#, python-format
+msgid "Casted '%(method)s' to %(topic)s '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:181
+msgid "Must implement a fallback schedule"
+msgstr "Must implement a fallback schedule"
+
+#: cinder/scheduler/driver.py:185
+msgid "Driver must implement schedule_prep_resize"
+msgstr ""
+
+#: cinder/scheduler/driver.py:190
+msgid "Driver must implement schedule_run_instance"
+msgstr ""
+
+#: cinder/scheduler/driver.py:325
+msgid "Block migration can not be used with shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:330
+msgid "Live migration can not be used without shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:367 cinder/scheduler/driver.py:457
+#, python-format
+msgid "host %(dest)s is not compatible with original host %(src)s."
+msgstr ""
+
+#: cinder/scheduler/driver.py:416
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"memory(host:%(avail)s <= instance:%(mem_inst)s)"
+msgstr ""
+
+#: cinder/scheduler/driver.py:472
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"disk(host:%(available)s <= instance:%(necessary)s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:51
+#, python-format
+msgid "No host selection for %s defined."
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:64
+#, python-format
+msgid "Attempting to build %(num_instances)d instance(s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:157
+msgid "Scheduler only understands Compute nodes (for now)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:199
+#, python-format
+msgid "Filtered %(hosts)s"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:209
+#, python-format
+msgid "Weighted %(weighted_host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:144
+#, python-format
+msgid "Host filter fails for ignored host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:151
+#, python-format
+msgid "Host filter fails for non-forced host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:157
+#, python-format
+msgid "Host filter function %(func)s failed for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:163
+#, python-format
+msgid "Host filter passes for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:272
+#, python-format
+msgid "Received %(service_name)s service update from %(host)s."
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:313
+msgid "host_manager only implemented for 'compute'"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:323
+#, python-format
+msgid "No service for compute ID %s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:85
+#, python-format
+msgid ""
+"Driver Method %(driver_method_name)s missing: %(e)s. Reverting to "
+"schedule()"
+msgstr ""
+
+#: cinder/scheduler/manager.py:150
+#, python-format
+msgid "Failed to schedule_%(method)s: %(ex)s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:159
+#, python-format
+msgid "Setting instance %(instance_uuid)s to %(state)s state."
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:66
+#, python-format
+msgid "Could not stat scheduler options file %(filename)s: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:75
+#, python-format
+msgid "Could not decode scheduler options: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/simple.py:87
+msgid "Not enough allocatable CPU cores remaining"
+msgstr ""
+
+#: cinder/scheduler/simple.py:137
+msgid "Not enough allocatable volume gigabytes remaining"
+msgstr ""
+
+#: cinder/scheduler/filters/core_filter.py:45
+msgid "VCPUs not set; assuming CPU collection broken"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:72
+#, python-format
+msgid "Faking execution of cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:80
+#, python-format
+msgid "Faked command matched %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:96
+#, python-format
+msgid "Faked command raised an exception %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:101
+#, python-format
+msgid "Reply to faked command is stdout='%(stdout)s' stderr='%(stderr)s'"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:784
+msgid "Please extend mock libvirt module to support flags"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:790
+msgid "Please extend fake libvirt module to support this auth method"
+msgstr ""
+
+#: cinder/tests/test_compute.py:365 cinder/tests/test_compute.py:1419
+#, python-format
+msgid "Running instances: %s"
+msgstr "Running instances: %s"
+
+#: cinder/tests/test_compute.py:371
+#, python-format
+msgid "After terminating instances: %s"
+msgstr "After terminating instances: %s"
+
+#: cinder/tests/test_compute.py:589
+msgid "Internal error"
+msgstr ""
+
+#: cinder/tests/test_compute.py:1430
+#, python-format
+msgid "After force-killing instances: %s"
+msgstr ""
+
+#: cinder/tests/test_misc.py:92
+#, python-format
+msgid ""
+"The following migrations are missing a downgrade:\n"
+"\t%s"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:169
+msgid "id"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:170
+msgid "IPv4"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:171
+msgid "IPv6"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:172
+msgid "start address"
+msgstr "start address"
+
+#: cinder/tests/test_cinder_manage.py:173
+msgid "DNS1"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:174
+msgid "DNS2"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:175
+msgid "VlanID"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:176
+msgid "project"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:177
+msgid "uuid"
+msgstr ""
+
+#: cinder/tests/test_volume.py:216
+#, python-format
+msgid "Target %s allocated"
+msgstr "Target %s allocated"
+
+#: cinder/tests/test_volume.py:468
+#, python-format
+msgid "Cannot confirm exported volume id:%s."
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:58
+#, python-format
+msgid "Given data: %s"
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:59
+#, python-format
+msgid "Result data: %s"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:626
+#, python-format
+msgid "Creating files in %s to simulate guest agent"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:637
+#, python-format
+msgid "Removing simulated guest agent files in %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/test_servers.py:2144
+#, python-format
+msgid "Quota exceeded: code=%(code)s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:57
+#, python-format
+msgid "_create: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:66
+#, python-format
+msgid "_delete: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:75
+#, python-format
+msgid "_get: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:85
+#, python-format
+msgid "_get_all: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:125
+#, python-format
+msgid "test_snapshot_create: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:134
+#, python-format
+msgid "test_snapshot_create: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:156
+#, python-format
+msgid "test_snapshot_create_force: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:165
+#, python-format
+msgid "test_snapshot_create_force: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:205
+#, python-format
+msgid "test_snapshot_show: resp=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:231
+#, python-format
+msgid "test_snapshot_detail: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/integrated/test_login.py:31
+#, python-format
+msgid "flavor: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:38
+#, python-format
+msgid ""
+"%(message)s\n"
+"Status Code: %(_status)s\n"
+"Body: %(_body)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:47
+msgid "Authentication error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:55
+msgid "Authorization error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:63
+msgid "Item not found"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:105
+#, python-format
+msgid "Doing %(method)s on %(relative_url)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:107
+#, python-format
+msgid "Body: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:125
+#, python-format
+msgid "%(auth_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:151
+#, python-format
+msgid "%(relative_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:161
+msgid "Unexpected status code"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:168
+#, python-format
+msgid "Decoding JSON: %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:133
+#, python-format
+msgid "Nested received %(queue)s, %(value)s"
+msgstr "Nested received %(queue)s, %(value)s"
+
+#: cinder/tests/rpc/common.py:142
+#, python-format
+msgid "Nested return %s"
+msgstr "Nested return %s"
+
+#: cinder/tests/rpc/common.py:160
+msgid "RPC backend does not support timeouts"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:227 cinder/tests/rpc/common.py:233
+#, python-format
+msgid "Received %s"
+msgstr "Received %s"
+
+#: cinder/virt/connection.py:85
+msgid "Failed to open connection to the hypervisor"
+msgstr "Failed to open connection to the hypervisor"
+
+#: cinder/virt/fake.py:270 cinder/virt/xenapi_conn.py:396
+#: cinder/virt/baremetal/proxy.py:716 cinder/virt/libvirt/connection.py:2045
+#, python-format
+msgid "Compute_service record created for %s "
+msgstr ""
+
+#: cinder/virt/fake.py:273 cinder/virt/xenapi_conn.py:399
+#: cinder/virt/baremetal/proxy.py:720 cinder/virt/libvirt/connection.py:2048
+#, python-format
+msgid "Compute_service record updated for %s "
+msgstr ""
+
+#: cinder/virt/firewall.py:130
+#, python-format
+msgid "Attempted to unfilter instance %s which is not filtered"
+msgstr "Attempted to unfilter instance %s which is not filtered"
+
+#: cinder/virt/firewall.py:137
+#, python-format
+msgid "Filters added to instance %s"
+msgstr ""
+
+#: cinder/virt/firewall.py:139
+msgid "Provider Firewall Rules refreshed"
+msgstr ""
+
+#: cinder/virt/firewall.py:291
+#, python-format
+msgid "Adding security group rule: %r"
+msgstr ""
+
+#: cinder/virt/firewall.py:403 cinder/virt/xenapi/firewall.py:87
+#, python-format
+msgid "Adding provider rule: %s"
+msgstr ""
+
+#: cinder/virt/images.py:86
+msgid "'qemu-img info' parsing failed."
+msgstr ""
+
+#: cinder/virt/images.py:92
+#, python-format
+msgid "fmt=%(fmt)s backed by: %(backing_file)s"
+msgstr ""
+
+#: cinder/virt/images.py:104
+#, python-format
+msgid "Converted to raw, but format is now %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:105
+msgid ""
+"Must specify vmwareapi_host_ip,vmwareapi_host_username and "
+"vmwareapi_host_password to useconnection_type=vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:276
+#, python-format
+msgid "In vmwareapi:_create_session, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:359
+#, python-format
+msgid "In vmwareapi:_call_method, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:398
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: success"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:404
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: error %(error_info)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:409
+#, python-format
+msgid "In vmwareapi:_poll_task, Got this error %s"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:140
+msgid ""
+"Must specify xenapi_connection_url, xenapi_connection_username "
+"(optionally), and xenapi_connection_password to use "
+"connection_type=xenapi"
+msgstr ""
+"Must specify xenapi_connection_url, xenapi_connection_username "
+"(optionally), and xenapi_connection_password to use "
+"connection_type=xenapi"
+
+#: cinder/virt/xenapi_conn.py:329 cinder/virt/libvirt/connection.py:472
+msgid "Could not determine iscsi initiator name"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:460
+msgid "Host startup on XenServer is not supported."
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:489
+msgid "Unable to log in to XenAPI (is the Dom0 disk full?)"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:527
+msgid "Host is member of a pool, but DB says otherwise"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:599 cinder/virt/xenapi_conn.py:612
+#, python-format
+msgid "Got exception: %s"
+msgstr "Got exception: %s"
+
+#: cinder/virt/baremetal/dom.py:93
+msgid "No domains exist."
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:95
+#, python-format
+msgid "============= initial domains =========== : %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:99
+msgid "Building domain: to be removed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:103
+msgid "Not running domain: remove"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:111
+msgid "domain running on an unknown node: discarded"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:127
+#, python-format
+msgid "No such domain (%s)"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:134
+#, python-format
+msgid "Failed power down Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:143
+msgid "deactivate -> activate fails"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:153
+msgid "destroy_domain: no such domain"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:154
+#, python-format
+msgid "No such domain %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:161
+#, python-format
+msgid "Domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:163
+#, python-format
+msgid "Nodes: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:166
+#, python-format
+msgid "After storing domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:169
+msgid "deactivation/removing domain failed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:176
+msgid "===== Domain is being created ====="
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:179
+msgid "Same domain name already exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:181
+msgid "create_domain: before get_idle_node"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:198
+#, python-format
+msgid "Created new domain: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:213
+#, python-format
+msgid "Failed to boot Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:222
+msgid "No such domain exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:226
+#, python-format
+msgid "change_domain_state: to new state %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:233
+#, python-format
+msgid "Stored fake domains to the file: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:244
+msgid "domain does not exist"
+msgstr ""
+
+#: cinder/virt/baremetal/nodes.py:42
+#, python-format
+msgid "Unknown baremetal driver %(d)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:148
+#, python-format
+msgid "Error encountered when destroying instance '%(name)s': %(ex)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:162
+#, python-format
+msgid "instance %(instance_name)s: deleting instance files %(target)s"
+msgstr "instance %(instance_name)s: deleting instance files %(target)s"
+
+#: cinder/virt/baremetal/proxy.py:189
+#, python-format
+msgid "instance %s: rebooted"
+msgstr "instance %s: rebooted"
+
+#: cinder/virt/baremetal/proxy.py:192
+msgid "_wait_for_reboot failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:222
+#, python-format
+msgid "instance %s: rescued"
+msgstr "instance %s: rescued"
+
+#: cinder/virt/baremetal/proxy.py:225
+msgid "_wait_for_rescue failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:242
+msgid "<============= spawn of baremetal =============>"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:255
+#, python-format
+msgid "instance %s: is building"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:260
+msgid "Key is injected but instance is not running yet"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:265
+#, python-format
+msgid "instance %s: booted"
+msgstr "instance %s: booted"
+
+#: cinder/virt/baremetal/proxy.py:268
+#, python-format
+msgid "~~~~~~ current state = %s ~~~~~~"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:269
+#, python-format
+msgid "instance %s spawned successfully"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:272
+#, python-format
+msgid "instance %s:not booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:274
+msgid "Bremetal assignment is overcommitted."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:354
+#, python-format
+msgid "instance %s: Creating image"
+msgstr "instance %s: Creating image"
+
+#: cinder/virt/baremetal/proxy.py:473
+#, python-format
+msgid "instance %(inst_name)s: injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:484
+#, python-format
+msgid ""
+"instance %(inst_name)s: ignoring error injecting data into image "
+"%(img_id)s (%(e)s)"
+msgstr ""
+"instance %(inst_name)s: ignoring error injecting data into image "
+"%(img_id)s (%(e)s)"
+
+#: cinder/virt/baremetal/proxy.py:529
+#, python-format
+msgid "instance %s: starting toXML method"
+msgstr "instance %s: starting toXML method"
+
+#: cinder/virt/baremetal/proxy.py:531
+#, python-format
+msgid "instance %s: finished toXML method"
+msgstr "instance %s: finished toXML method"
+
+#: cinder/virt/baremetal/proxy.py:574 cinder/virt/libvirt/connection.py:1815
+msgid ""
+"Cannot get the number of cpu, because this function is not implemented "
+"for this platform. This error can be safely ignored for now."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:714
+#, python-format
+msgid "#### RLK: cpu_arch = %s "
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:746
+msgid "Updating!"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:773 cinder/virt/libvirt/connection.py:2609
+#: cinder/virt/xenapi/host.py:129
+msgid "Updating host stats"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:185
+msgid "free_node...."
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:216
+#, python-format
+msgid "deactivate_node is called for node_id = %(id)s node_ip = %(ip)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:221
+msgid "status of node is set to 0"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:232
+msgid "rootfs is already removed"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:264
+msgid "Before ping to the bare-metal node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:275
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is ready"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:279
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is not ready, out_msg=%(out_msg)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:292
+msgid "Noting to do for tilera nodes: vmlinux is in CF"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:316
+msgid "activate_node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:330
+msgid "Node is unknown error state."
+msgstr ""
+
+#: cinder/virt/disk/api.py:165
+msgid "no capable image handler configured"
+msgstr ""
+
+#: cinder/virt/disk/api.py:178
+#, python-format
+msgid "unknown disk image handler: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:189
+msgid "image already mounted"
+msgstr ""
+
+#: cinder/virt/disk/api.py:276 cinder/virt/disk/guestfs.py:64
+#: cinder/virt/disk/guestfs.py:78 cinder/virt/disk/mount.py:100
+#, python-format
+msgid "Failed to mount filesystem: %s"
+msgstr "Failed to mount filesystem: %s"
+
+#: cinder/virt/disk/api.py:291
+#, python-format
+msgid "Failed to remove container: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:441
+#, python-format
+msgid "User %(username)s not found in password file."
+msgstr ""
+
+#: cinder/virt/disk/api.py:457
+#, python-format
+msgid "User %(username)s not found in shadow file."
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:39
+#, python-format
+msgid "unsupported partition: %s"
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:77
+msgid "unknown guestmount error"
+msgstr ""
+
+#: cinder/virt/disk/loop.py:30
+#, python-format
+msgid "Could not attach image to loopback: %s"
+msgstr "Could not attach image to loopback: %s"
+
+#: cinder/virt/disk/mount.py:76
+msgid "no partitions found"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:77
+#, python-format
+msgid "Failed to map partitions: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:58
+msgid "nbd unavailable: module not loaded"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:63
+msgid "No free nbd devices"
+msgstr "No free nbd devices"
+
+#: cinder/virt/disk/nbd.py:81
+#, python-format
+msgid "qemu-nbd error: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:93
+#, python-format
+msgid "nbd device %s did not show up"
+msgstr "nbd device %s did not show up"
+
+#: cinder/virt/libvirt/connection.py:265
+#, python-format
+msgid "Connecting to libvirt: %s"
+msgstr "Connecting to libvirt: %s"
+
+#: cinder/virt/libvirt/connection.py:286
+msgid "Connection to libvirt broke"
+msgstr "Connection to libvirt broke"
+
+#: cinder/virt/libvirt/connection.py:388
+#, python-format
+msgid "Error from libvirt during destroy. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:400
+#, python-format
+msgid ""
+"Error from libvirt during saved instance removal. Code=%(errcode)s "
+"Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:411
+#, python-format
+msgid "Error from libvirt during undefine. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:423
+msgid "Instance destroyed successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:435
+#, python-format
+msgid "Error from libvirt during unfilter. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:461
+#, python-format
+msgid "Deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:554
+msgid "attaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:567
+msgid "detaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:692
+#, fuzzy, python-format
+msgid "Instance soft rebooted successfully."
+msgstr "instance %s: rebooted"
+
+#: cinder/virt/libvirt/connection.py:696
+msgid "Failed to soft reboot instance."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:725
+msgid "Instance shutdown successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:761 cinder/virt/libvirt/connection.py:905
+msgid "During reboot, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:766
+msgid "Instance rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:867 cinder/virt/xenapi/vmops.py:1358
+#, python-format
+msgid ""
+"Found %(migration_count)d unconfirmed migrations older than "
+"%(confirm_window)d seconds"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:871
+#, python-format
+msgid "Automatically confirming migration %d"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:896
+msgid "Instance is running"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:910
+msgid "Instance spawned successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:926
+#, python-format
+msgid "data: %(data)r, fpath: %(fpath)r"
+msgstr "data: %(data)r, fpath: %(fpath)r"
+
+#: cinder/virt/libvirt/connection.py:978
+msgid "Guest does not have a console available"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1020
+#, python-format
+msgid "Path '%(path)s' supports direct I/O"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1024
+#, python-format
+msgid "Path '%(path)s' does not support direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1028 cinder/virt/libvirt/connection.py:1032
+#, python-format
+msgid "Error on '%(path)s' while checking direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1153
+msgid "Creating image"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1339
+#, python-format
+msgid "Injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1349
+#, python-format
+msgid "Ignoring error injecting data into image %(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1381
+#, python-format
+msgid "block_device_list %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1658
+msgid "Starting toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1662
+msgid "Finished toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1679
+#, python-format
+msgid ""
+"Error from libvirt while looking up %(instance_name)s: [Error Code "
+"%(error_code)s] %(ex)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1920
+msgid "libvirt version is too old (does not support getVersion)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1942
+#, python-format
+msgid "'<cpu>' must be 1, but %d\n"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1969
+#, python-format
+msgid "topology (%(topology)s) must have %(ks)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2067
+#, python-format
+msgid ""
+"Instance launched has CPU info:\n"
+"%s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2079
+#, python-format
+msgid ""
+"CPU doesn't have compatibility.\n"
+"\n"
+"%(ret)s\n"
+"\n"
+"Refer to %(u)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2136
+#, python-format
+msgid "Timeout migrating for %s. nwfilter not found."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2352
+#, python-format
+msgid "skipping %(path)s since it looks like volume"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2407
+#, python-format
+msgid "Getting disk size of %(i_name)s: %(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2458
+#, python-format
+msgid "Instance %s: Starting migrate_disk_and_power_off"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2513
+msgid "During wait running, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2518
+msgid "Instance running successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2525
+#, python-format
+msgid "Instance %s: Starting finish_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2565
+#, python-format
+msgid "Instance %s: Starting finish_revert_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:42
+msgid ""
+"Libvirt module could not be loaded. NWFilterFirewall will not work "
+"correctly."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:93
+msgid "Called setup_basic_filtering in nwfilter"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:101
+msgid "Ensuring static filters"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:171
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:217
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) for%(name)s is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:233
+msgid "iptables firewall: Setup Basic Filtering"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:252
+msgid "Attempted to unfilter instance which is not filtered"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:170
+#, python-format
+msgid "%s is a valid instance name"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:173
+#, python-format
+msgid "%s has a disk file"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:175
+#, python-format
+msgid "Instance %(instance)s is backed by %(backing)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:186
+#, python-format
+msgid ""
+"Instance %(instance)s is using a backing file %(backing)s which does not "
+"appear in the image service"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:237
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification failed"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:247
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification skipped, no hash stored"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:266
+#, python-format
+msgid "Cannot remove %(base_file)s, it does not exist"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:278
+#, python-format
+msgid "Base file too young to remove: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:281
+#, python-format
+msgid "Removing base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:288
+#, python-format
+msgid "Failed to remove %(base_file)s, error was %(error)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:299
+#, python-format
+msgid "%(id)s (%(base_file)s): checking"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:318
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): in use: on this node %(local)d local, %(remote)d "
+"on other nodes"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:330
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): warning -- an absent base file is in use! "
+"instances: %(instance_list)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:338
+#, python-format
+msgid "%(id)s (%(base_file)s): in use on (%(remote)d on other nodes)"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:348
+#, python-format
+msgid "%(id)s (%(base_file)s): image is not in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:354
+#, python-format
+msgid "%(id)s (%(base_file)s): image is in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:377
+#, python-format
+msgid "Skipping verification, no base directory at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:381
+msgid "Verify base images"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:388
+#, python-format
+msgid "Image id %(id)s yields fingerprint %(fingerprint)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:406
+#, python-format
+msgid "Unknown base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:411
+#, python-format
+msgid "Active base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:414
+#, python-format
+msgid "Corrupt base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:418
+#, python-format
+msgid "Removable base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:426
+msgid "Verification complete"
+msgstr ""
+
+#: cinder/virt/libvirt/utils.py:264
+msgid "Unable to find an open port"
+msgstr "Unable to find an open port"
+
+#: cinder/virt/libvirt/vif.py:90
+#, python-format
+msgid "Ensuring vlan %(vlan)s and bridge %(bridge)s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:99
+#, python-format
+msgid "Ensuring bridge %s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:165 cinder/virt/libvirt/vif.py:220
+#, python-format
+msgid "Failed while unplugging vif of instance '%s'"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:163
+#, python-format
+msgid "iSCSI device not found at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:166
+#, python-format
+msgid ""
+"ISCSI volume not yet found at: %(mount_device)s. Will rescan & retry.  "
+"Try number: %(tries)s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:178
+#, python-format
+msgid "Found iSCSI node %(mount_device)s (after %(tries)s rescans)"
+msgstr ""
+
+#: cinder/virt/vmwareapi/error_util.py:93
+#, python-format
+msgid "Error(s) %s occurred in the call to RetrieveProperties"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:44 cinder/virt/xenapi/fake.py:77
+#, python-format
+msgid "%(text)s: _db_content => %(content)s"
+msgstr "%(text)s: _db_content => %(content)s"
+
+#: cinder/virt/vmwareapi/fake.py:131
+#, python-format
+msgid "Property %(attr)s not set for the managed object %(objName)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:437
+msgid "There is no VM registered"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:439 cinder/virt/vmwareapi/fake.py:609
+#, python-format
+msgid "Virtual Machine with ref %s is not there"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:502
+#, python-format
+msgid "Logging out a session that is invalid or already logged out: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:517
+msgid "Session is faulty"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:520
+msgid "Session Invalid"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:606
+msgid " No Virtual Machine has been registered yet"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:99
+#, python-format
+msgid "Glance image %s is in killed state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:107
+#, python-format
+msgid "Glance image %(image_id)s is in unknown state - %(state)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:128
+msgid ""
+"ESX SOAP server returned an empty port group for the host system in its "
+"response"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:155
+#, python-format
+msgid "Creating Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:169
+#, python-format
+msgid "Created Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/read_write_util.py:150
+#, python-format
+msgid "Exception during HTTP connection close in VMWareHTTpWrite. Exception is %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:84
+msgid "Unable to import suds."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:90
+msgid "Must specify vmwareapi_wsdl_loc"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:145
+#, python-format
+msgid "No such SOAP method '%s' provided by VI SDK"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:150
+#, python-format
+msgid "httplib error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:157
+#, python-format
+msgid "Socket error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:162
+#, python-format
+msgid "Type error in  %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:166
+#, python-format
+msgid "Exception in %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:66
+msgid "Getting list of instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:82
+#, python-format
+msgid "Got total of %s instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:126
+msgid "Couldn't get a local Datastore reference"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:196
+#, python-format
+msgid "Creating VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:205
+#, python-format
+msgid "Created VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:234
+#, python-format
+msgid ""
+"Creating Virtual Disk of size  %(vmdk_file_size_in_kb)s KB and adapter "
+"type  %(adapter_type)s on the ESX host local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:251
+#, python-format
+msgid ""
+"Created Virtual Disk of size %(vmdk_file_size_in_kb)s KB on the ESX host "
+"local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:260
+#, python-format
+msgid ""
+"Deleting the file %(flat_uploaded_vmdk_path)s on the ESX host localstore "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:272
+#, python-format
+msgid ""
+"Deleted the file %(flat_uploaded_vmdk_path)s on the ESX host local store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:283
+#, python-format
+msgid ""
+"Downloading image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:298
+#, python-format
+msgid ""
+"Downloaded image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:315
+#, python-format
+msgid "Reconfiguring VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:322
+#, python-format
+msgid "Reconfigured VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:329
+#, python-format
+msgid "Powering on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:335
+#, python-format
+msgid "Powered on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:381
+#, python-format
+msgid "Creating Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:391
+#, python-format
+msgid "Created Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:434
+#, python-format
+msgid "Copying disk data before snapshot of the VM  instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:447
+#, python-format
+msgid "Copied disk data before snapshot of the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:456
+#, python-format
+msgid "Uploading image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:469
+#, python-format
+msgid "Uploaded image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:479
+#, python-format
+msgid "Deleting temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:488
+#, python-format
+msgid "Deleted temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:520
+msgid "instance is not powered on"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:527
+#, python-format
+msgid "Rebooting guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:530
+#, python-format
+msgid "Rebooted guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:532
+#, python-format
+msgid "Doing hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:536
+#, python-format
+msgid "Did hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:548
+#, python-format
+msgid "instance - %s not present"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:567
+#, python-format
+msgid "Powering off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:572
+#, python-format
+msgid "Powered off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:576
+#, python-format
+msgid "Unregistering the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:579
+#, python-format
+msgid "Unregistered the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:581
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while un-registering the "
+"VM: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:592
+#, python-format
+msgid "Deleting contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:602
+#, python-format
+msgid "Deleted contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:607
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while deleting the VM "
+"contents from the disk: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:615
+msgid "pause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:619
+msgid "unpause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:633
+#, python-format
+msgid "Suspending the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:637
+#, python-format
+msgid "Suspended the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:640
+msgid "instance is powered off and can not be suspended."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:643
+#, python-format
+msgid "VM %s was already in suspended state. So returning without doing anything"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:656
+#, python-format
+msgid "Resuming the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:661
+#, python-format
+msgid "Resumed the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:663
+msgid "instance is not in a suspended state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:699
+msgid "get_diagnostics not implemented for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:757
+#, python-format
+msgid ""
+"Reconfiguring VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:765
+#, python-format
+msgid ""
+"Reconfigured VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:802
+#, python-format
+msgid "Creating directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:806
+#, python-format
+msgid "Created directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:89
+#, python-format
+msgid "Downloading image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:103
+#, python-format
+msgid "Downloaded image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:108
+#, python-format
+msgid "Uploading image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:129
+#, python-format
+msgid "Uploaded image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:139
+#, python-format
+msgid "Getting image size for the image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:143
+#, python-format
+msgid "Got image size of %(size)s for the image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:553 cinder/virt/xenapi/fake.py:652
+#: cinder/virt/xenapi/fake.py:670 cinder/virt/xenapi/fake.py:732
+msgid "Raising NotImplemented"
+msgstr "Raising NotImplemented"
+
+#: cinder/virt/xenapi/fake.py:555
+#, python-format
+msgid "xenapi.fake does not have an implementation for %s"
+msgstr "xenapi.fake does not have an implementation for %s"
+
+#: cinder/virt/xenapi/fake.py:589
+#, python-format
+msgid "Calling %(localname)s %(impl)s"
+msgstr "Calling %(localname)s %(impl)s"
+
+#: cinder/virt/xenapi/fake.py:594
+#, python-format
+msgid "Calling getter %s"
+msgstr "Calling getter %s"
+
+#: cinder/virt/xenapi/fake.py:654
+#, python-format
+msgid ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+msgstr ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+
+#: cinder/virt/xenapi/host.py:67
+#, python-format
+msgid ""
+"Instance %(name)s running on %(host)s could not be found in the database:"
+" assuming it is a worker VM and skipping migration to a new host"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:137
+#, python-format
+msgid "Unable to get SR for this host: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:169
+msgid "Unable to get updated status"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:172
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:37
+#, python-format
+msgid "Found non-unique network for name_label %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:55
+#, python-format
+msgid "Found non-unique network for bridge %s"
+msgstr "Found non-unique network for bridge %s"
+
+#: cinder/virt/xenapi/network_utils.py:58
+#, python-format
+msgid "Found no network for bridge %s"
+msgstr "Found no network for bridge %s"
+
+#: cinder/virt/xenapi/pool.py:111
+#, python-format
+msgid "Unable to eject %(host)s from the pool; pool not empty"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:126
+#, python-format
+msgid "Unable to eject %(host)s from the pool; No master found"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:143
+#, python-format
+msgid "Pool-Join failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:146
+#, python-format
+msgid "Unable to join %(host)s in the pool"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:162
+#, python-format
+msgid "Pool-eject failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:174
+#, fuzzy, python-format
+msgid "Unable to set up pool: %(e)s."
+msgstr "Unable to detach volume %s"
+
+#: cinder/virt/xenapi/pool.py:185
+#, python-format
+msgid "Pool-set_name_label failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:103
+#, python-format
+msgid "Found no PIF for device %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:122
+#, python-format
+msgid ""
+"PIF %(pif_rec['uuid'])s for network %(bridge)s has VLAN id %(pif_vlan)d. "
+"Expected %(vlan_num)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:218
+msgid "Created VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:245
+#, python-format
+msgid "VBD not found in instance %s"
+msgstr "VBD not found in instance %s"
+
+#: cinder/virt/xenapi/vm_utils.py:262
+#, fuzzy, python-format
+msgid "VBD %s already detached"
+msgstr "group %s already exists"
+
+#: cinder/virt/xenapi/vm_utils.py:265
+#, python-format
+msgid "VBD %(vbd_ref)s detach rejected, attempt %(num_attempt)d/%(max_attempts)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:270
+#, python-format
+msgid "Unable to unplug VBD %s"
+msgstr "Unable to unplug VBD %s"
+
+#: cinder/virt/xenapi/vm_utils.py:275
+#, python-format
+msgid "Reached maximum number of retries trying to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:286
+#, python-format
+msgid "Unable to destroy VBD %s"
+msgstr "Unable to destroy VBD %s"
+
+#: cinder/virt/xenapi/vm_utils.py:305
+#, fuzzy, python-format
+msgid "Creating %(vbd_type)s-type VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+msgstr "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:308
+#, python-format
+msgid "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+msgstr "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:319
+#, python-format
+msgid "Unable to destroy VDI %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:336
+#, python-format
+msgid ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+msgstr ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:345
+#, python-format
+msgid "Copied VDI %(vdi_ref)s from VDI %(vdi_to_copy_ref)s on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:353
+#, python-format
+msgid "Cloned VDI %(vdi_ref)s from VDI %(vdi_to_clone_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:372
+#, python-format
+msgid "No primary VDI found for %(vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:379
+#, fuzzy, python-format
+msgid "Snapshotting with label '%(label)s'"
+msgstr "Snapshotting VM %(vm_ref)s with label '%(label)s'..."
+
+#: cinder/virt/xenapi/vm_utils.py:392
+#, fuzzy, python-format
+msgid "Created snapshot %(template_vm_ref)s"
+msgstr "Created snapshot %(template_vm_ref)s from VM %(vm_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:431
+#, python-format
+msgid "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+msgstr "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+
+#: cinder/virt/xenapi/vm_utils.py:583
+#, python-format
+msgid "Creating blank HD of size %(req_size)d gigs"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:634
+#, python-format
+msgid ""
+"Fast cloning is only supported on default local SR of type ext. SR on "
+"this system was found to be of type %(sr_type)s. Ignoring the cow flag."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:724
+#, python-format
+msgid ""
+"download_vhd %(image)s attempt %(attempt_num)d/%(max_attempts)d from "
+"%(glance_host)s:%(glance_port)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:734
+#, python-format
+msgid "download_vhd failed: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:750
+#, python-format
+msgid "Asking xapi to fetch vhd image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:760
+#, python-format
+msgid ""
+"xapi 'download_vhd' returned VDI of type '%(vdi_type)s' with UUID "
+"'%(vdi_uuid)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:789
+#, python-format
+msgid "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:805
+#, python-format
+msgid "image_size_bytes=%(size_bytes)d, allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:809
+#, python-format
+msgid ""
+"Image size %(size_bytes)d exceeded instance_type allowed size "
+"%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:831
+#, python-format
+msgid "Fetching image %(image)s, type %(image_type_str)"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:844
+#, fuzzy, python-format
+msgid "Size for image %(image)s: %(virtual_size)d"
+msgstr "Size for image %(image)s:%(virtual_size)d"
+
+#: cinder/virt/xenapi/vm_utils.py:853
+#, python-format
+msgid ""
+"Kernel/Ramdisk image is too large: %(vdi_size)d bytes, max %(max_size)d "
+"bytes"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:870
+#, python-format
+msgid "Copying VDI %s to /boot/guest on dom0"
+msgstr "Copying VDI %s to /boot/guest on dom0"
+
+#: cinder/virt/xenapi/vm_utils.py:884
+#, python-format
+msgid "Kernel/Ramdisk VDI %s destroyed"
+msgstr "Kernel/Ramdisk VDI %s destroyed"
+
+#: cinder/virt/xenapi/vm_utils.py:895
+msgid "Failed to fetch glance image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:934
+#, python-format
+msgid "Detected %(image_type_str)s format for image %(image_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:955
+#, python-format
+msgid "Looking up vdi %s for PV kernel"
+msgstr "Looking up vdi %s for PV kernel"
+
+#: cinder/virt/xenapi/vm_utils.py:973
+#, python-format
+msgid "Unknown image format %(disk_image_type)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1016
+#, python-format
+msgid "VDI %s is still available"
+msgstr "VDI %s is still available"
+
+#: cinder/virt/xenapi/vm_utils.py:1059
+#, python-format
+msgid "(VM_UTILS) xenserver vm state -> |%s|"
+msgstr "(VM_UTILS) xenserver vm state -> |%s|"
+
+#: cinder/virt/xenapi/vm_utils.py:1061
+#, python-format
+msgid "(VM_UTILS) xenapi power_state -> |%s|"
+msgstr "(VM_UTILS) xenapi power_state -> |%s|"
+
+#: cinder/virt/xenapi/vm_utils.py:1088
+#, python-format
+msgid "Unable to parse rrd of %(vm_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1108
+#, python-format
+msgid "Re-scanning SR %s"
+msgstr "Re-scanning SR %s"
+
+#: cinder/virt/xenapi/vm_utils.py:1136
+#, python-format
+msgid "Flag sr_matching_filter '%s' does not respect formatting convention"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1154
+msgid ""
+"XenAPI is unable to find a Storage Repository to install guest instances "
+"on. Please check your configuration and/or configure the flag "
+"'sr_matching_filter'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1167
+msgid "Cannot find SR of content-type ISO"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1175
+#, python-format
+msgid "ISO: looking at SR %(sr_rec)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1177
+msgid "ISO: not iso content"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1180
+msgid "ISO: iso content_type, no 'i18n-key' key"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1183
+msgid "ISO: iso content_type, i18n-key value not 'local-storage-iso'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1187
+msgid "ISO: SR MATCHing our criteria"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1189
+msgid "ISO: ISO, looking to see if it is host local"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1192
+#, python-format
+msgid "ISO: PBD %(pbd_ref)s disappeared"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1195
+#, python-format
+msgid "ISO: PBD matching, want %(pbd_rec)s, have %(host)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1198
+msgid "ISO: SR with local PBD"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1220
+#, python-format
+msgid ""
+"Unable to obtain RRD XML for VM %(vm_uuid)s with server details: "
+"%(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1236
+#, python-format
+msgid "Unable to obtain RRD XML updates with server details: %(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1290
+#, python-format
+msgid "Invalid statistics data from Xenserver: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1343
+#, python-format
+msgid "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+msgstr "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+
+#: cinder/virt/xenapi/vm_utils.py:1417
+#, python-format
+msgid ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+msgstr ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+
+#: cinder/virt/xenapi/vm_utils.py:1427
+#, python-format
+msgid "VHD coalesce attempts exceeded (%(max_attempts)d), giving up..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1462
+#, python-format
+msgid "Timeout waiting for device %s to be created"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1473
+#, python-format
+msgid "Plugging VBD %s ... "
+msgstr "Plugging VBD %s ... "
+
+#: cinder/virt/xenapi/vm_utils.py:1476
+#, python-format
+msgid "Plugging VBD %s done."
+msgstr "Plugging VBD %s done."
+
+#: cinder/virt/xenapi/vm_utils.py:1478
+#, python-format
+msgid "VBD %(vbd_ref)s plugged as %(orig_dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1481
+#, python-format
+msgid "VBD %(vbd_ref)s plugged into wrong dev, remapping to %(dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1490
+#, python-format
+msgid "Destroying VBD for VDI %s ... "
+msgstr "Destroying VBD for VDI %s ... "
+
+#: cinder/virt/xenapi/vm_utils.py:1498
+#, python-format
+msgid "Destroying VBD for VDI %s done."
+msgstr "Destroying VBD for VDI %s done."
+
+#: cinder/virt/xenapi/vm_utils.py:1511
+#, python-format
+msgid "Running pygrub against %s"
+msgstr "Running pygrub against %s"
+
+#: cinder/virt/xenapi/vm_utils.py:1518
+#, python-format
+msgid "Found Xen kernel %s"
+msgstr "Found Xen kernel %s"
+
+#: cinder/virt/xenapi/vm_utils.py:1520
+msgid "No Xen kernel found.  Booting HVM."
+msgstr "No Xen kernel found.  Booting HVM."
+
+#: cinder/virt/xenapi/vm_utils.py:1533
+msgid "Partitions:"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1539
+#, python-format
+msgid "  %(num)s: %(ptype)s %(size)d sectors"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1565
+#, python-format
+msgid ""
+"Writing partition table %(primary_first)d %(primary_last)d to "
+"%(dev_path)s..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1578
+#, python-format
+msgid "Writing partition table %s done."
+msgstr "Writing partition table %s done."
+
+#: cinder/virt/xenapi/vm_utils.py:1632
+#, python-format
+msgid ""
+"Starting sparse_copy src=%(src_path)s dst=%(dst_path)s "
+"virtual_size=%(virtual_size)d block_size=%(block_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1664
+#, python-format
+msgid ""
+"Finished sparse_copy in %(duration).2f secs, %(compression_pct).2f%% "
+"reduction in size"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1714
+msgid ""
+"XenServer tools installed in this image are capable of network injection."
+"  Networking files will not bemanipulated"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1722
+msgid ""
+"XenServer tools are present in this image but are not capable of network "
+"injection"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1726
+msgid "XenServer tools are not installed in this image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1742
+msgid "Manipulating interface files directly"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1751
+#, python-format
+msgid "Failed to mount filesystem (expected for non-linux instances): %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:131 cinder/virt/xenapi/vmops.py:722
+#, python-format
+msgid "Updating progress to %(progress)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:231
+#, python-format
+msgid "Attempted to power on non-existent instance bad instance id %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:233
+#, fuzzy
+msgid "Starting instance"
+msgstr "Creating a raw instance"
+
+#: cinder/virt/xenapi/vmops.py:303
+msgid "Removing kernel/ramdisk files from dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:358
+msgid "Failed to spawn, rolling back"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:443
+msgid "Detected ISO image type, creating blank VM for install"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:462
+msgid "Auto configuring disk, attempting to resize partition..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:515
+#, python-format
+msgid "Invalid value for injected_files: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:520
+#, python-format
+msgid "Injecting file path: '%s'"
+msgstr "Injecting file path: '%s'"
+
+#: cinder/virt/xenapi/vmops.py:527
+msgid "Setting admin password"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:531
+msgid "Resetting network"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:538
+msgid "Setting VCPU weight"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:544
+#, fuzzy
+msgid "Starting VM"
+msgstr "Restarting xvp"
+
+#: cinder/virt/xenapi/vmops.py:551
+#, python-format
+msgid ""
+"Latest agent build for %(hypervisor)s/%(os)s/%(architecture)s is "
+"%(version)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:554
+#, python-format
+msgid "No agent build found for %(hypervisor)s/%(os)s/%(architecture)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:561
+msgid "Waiting for instance state to become running"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:573
+msgid "Querying agent version"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:576
+#, python-format
+msgid "Instance agent version: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:581
+#, python-format
+msgid "Updating Agent to %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:616
+#, python-format
+msgid "No opaque_ref could be determined for '%s'."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:670
+#, fuzzy, python-format
+msgid "Finished snapshot and upload for VM"
+msgstr "Finished snapshot and upload for VM %s"
+
+#: cinder/virt/xenapi/vmops.py:677
+#, fuzzy, python-format
+msgid "Starting snapshot for VM"
+msgstr "Starting snapshot for VM %s"
+
+#: cinder/virt/xenapi/vmops.py:686
+#, fuzzy, python-format
+msgid "Unable to Snapshot instance: %(exc)s"
+msgstr "Unable to attach volume to instance %s"
+
+#: cinder/virt/xenapi/vmops.py:702
+msgid "Failed to transfer vhd to new host"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:770
+#, python-format
+msgid "Resizing down VDI %(cow_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:893
+#, python-format
+msgid "Resizing up VDI %(vdi_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:901
+msgid "Resize complete"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:928
+#, python-format
+msgid "Failed to query agent version: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:949
+#, python-format
+msgid "domid changed from %(domid)s to %(newdomid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:962
+#, python-format
+msgid "Failed to update agent: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:983
+#, python-format
+msgid "Failed to exchange keys: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:998
+#, python-format
+msgid "Failed to update password: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1023
+#, python-format
+msgid "Failed to inject file: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1032
+msgid "VM already halted, skipping shutdown..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1036
+msgid "Shutting down VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1054
+msgid "Unable to find VBD for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1097
+msgid "Using RAW or VHD, skipping kernel and ramdisk deletion"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1104
+msgid "instance has a kernel or ramdisk but not both"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1111
+msgid "kernel/ramdisk files removed"
+msgstr "kernel/ramdisk files removed"
+
+#: cinder/virt/xenapi/vmops.py:1121
+msgid "VM destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1147
+#, fuzzy
+msgid "Destroying VM"
+msgstr "Restarting xvp"
+
+#: cinder/virt/xenapi/vmops.py:1169
+msgid "VM is not present, skipping destroy..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1222
+#, python-format
+msgid "Instance is already in Rescue Mode: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1296
+#, python-format
+msgid "Found %(instance_count)d hung reboots older than %(timeout)d seconds"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1300
+msgid "Automatically hard rebooting"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1363
+#, python-format
+msgid "Setting migration %(migration_id)s to error: %(reason)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1374
+#, python-format
+msgid ""
+"Automatically confirming migration %(migration_id)s for instance "
+"%(instance_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1379
+#, python-format
+msgid "Instance %(instance_uuid)s not found"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1383
+msgid "In ERROR state"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1389
+#, python-format
+msgid "In %(task_state)s task_state, not RESIZE_VERIFY"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1396
+#, python-format
+msgid "Error auto-confirming resize: %(e)s. Will retry later."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1418
+msgid "Could not get bandwidth info."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1469
+#, fuzzy
+msgid "Injecting network info to xenstore"
+msgstr "setting network host"
+
+#: cinder/virt/xenapi/vmops.py:1483
+msgid "Creating vifs"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1492
+#, fuzzy, python-format
+msgid "Creating VIF for network %(network_ref)s"
+msgstr "Creating VIF for VM %(vm_ref)s, network %(network_ref)s."
+
+#: cinder/virt/xenapi/vmops.py:1495
+#, fuzzy, python-format
+msgid "Created VIF %(vif_ref)s, network %(network_ref)s"
+msgstr "Creating VIF for VM %(vm_ref)s, network %(network_ref)s."
+
+#: cinder/virt/xenapi/vmops.py:1520
+msgid "Injecting hostname to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1545
+#, python-format
+msgid ""
+"The agent call to %(method)s returned an invalid response: %(ret)r. "
+"path=%(path)s; args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1566
+#, python-format
+msgid "TIMEOUT: The call to %(method)s timed out. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1570
+#, python-format
+msgid ""
+"NOT IMPLEMENTED: The call to %(method)s is not supported by the agent. "
+"args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1575
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1661
+#, python-format
+msgid "OpenSSL error: %s"
+msgstr "OpenSSL error: %s"
+
+#: cinder/virt/xenapi/volume_utils.py:52
+msgid "creating sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:55 cinder/virt/xenapi/volume_utils.py:83
+#, python-format
+msgid "type is = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:58 cinder/virt/xenapi/volume_utils.py:86
+#, python-format
+msgid "name = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:71
+#, python-format
+msgid "Created %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:76 cinder/virt/xenapi/volume_utils.py:174
+msgid "Unable to create Storage Repository"
+msgstr "Unable to create Storage Repository"
+
+#: cinder/virt/xenapi/volume_utils.py:80
+msgid "introducing sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:103 cinder/virt/xenapi/volume_utils.py:170
+#: cinder/virt/xenapi/volumeops.py:156
+#, python-format
+msgid "Introduced %(label)s as %(sr_ref)s."
+msgstr "Introduced %(label)s as %(sr_ref)s."
+
+#: cinder/virt/xenapi/volume_utils.py:106
+msgid "Creating pbd for SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:108
+msgid "Plugging SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:116 cinder/virt/xenapi/volumeops.py:160
+msgid "Unable to introduce Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:127 cinder/virt/xenapi/volumeops.py:50
+msgid "Unable to get SR using uuid"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:129
+#, python-format
+msgid "Forgetting SR %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:137
+msgid "Unable to forget Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:157
+#, python-format
+msgid "Introducing %s..."
+msgstr "Introducing %s..."
+
+#: cinder/virt/xenapi/volume_utils.py:186
+#, python-format
+msgid "Unable to find SR from VBD %s"
+msgstr "Unable to find SR from VBD %s"
+
+#: cinder/virt/xenapi/volume_utils.py:204
+#, python-format
+msgid "Ignoring exception %(exc)s when getting PBDs for %(sr_ref)s"
+msgstr "Ignoring exception %(exc)s when getting PBDs for %(sr_ref)s"
+
+#: cinder/virt/xenapi/volume_utils.py:210
+#, python-format
+msgid "Ignoring exception %(exc)s when unplugging PBD %(pbd)s"
+msgstr "Ignoring exception %(exc)s when unplugging PBD %(pbd)s"
+
+#: cinder/virt/xenapi/volume_utils.py:234
+#, python-format
+msgid "Unable to introduce VDI on SR %s"
+msgstr "Unable to introduce VDI on SR %s"
+
+#: cinder/virt/xenapi/volume_utils.py:242
+#, python-format
+msgid "Unable to get record of VDI %s on"
+msgstr "Unable to get record of VDI %s on"
+
+#: cinder/virt/xenapi/volume_utils.py:264
+#, python-format
+msgid "Unable to introduce VDI for SR %s"
+msgstr "Unable to introduce VDI for SR %s"
+
+#: cinder/virt/xenapi/volume_utils.py:274
+#, python-format
+msgid "Error finding vdis in SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:281
+#, python-format
+msgid "Unable to find vbd for vdi %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:315
+#, python-format
+msgid "Unable to obtain target information %(data)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:341
+#, python-format
+msgid "Mountpoint cannot be translated: %s"
+msgstr "Mountpoint cannot be translated: %s"
+
+#: cinder/virt/xenapi/volumeops.py:64
+msgid "Could not find VDI ref"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:69
+#, python-format
+msgid "Creating SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:73
+msgid "Could not create SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:76
+msgid "Could not retrieve SR record"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:81
+#, python-format
+msgid "Introducing SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:85
+msgid "SR found in xapi database. No need to introduce"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:90
+msgid "Could not introduce SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:94
+#, python-format
+msgid "Checking for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:106
+#, python-format
+msgid "SR %s not found in the xapi database"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:112
+msgid "Could not forget SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:121
+#, python-format
+msgid "Attach_volume: %(connection_info)s, %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:178
+#, python-format
+msgid "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+msgstr "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:189
+#, python-format
+msgid "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+msgstr "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:197
+#, python-format
+msgid "Unable to attach volume to instance %s"
+msgstr "Unable to attach volume to instance %s"
+
+#: cinder/virt/xenapi/volumeops.py:200
+#, python-format
+msgid "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+msgstr "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:210
+#, python-format
+msgid "Detach_volume: %(instance_name)s, %(mountpoint)s"
+msgstr "Detach_volume: %(instance_name)s, %(mountpoint)s"
+
+#: cinder/virt/xenapi/volumeops.py:219
+#, python-format
+msgid "Unable to locate volume %s"
+msgstr "Unable to locate volume %s"
+
+#: cinder/virt/xenapi/volumeops.py:227
+#, python-format
+msgid "Unable to detach volume %s"
+msgstr "Unable to detach volume %s"
+
+#: cinder/virt/xenapi/volumeops.py:232
+#, python-format
+msgid "Unable to destroy vbd %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:239
+#, python-format
+msgid "Error purging SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:241
+#, python-format
+msgid "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+msgstr "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+
+#: cinder/vnc/xvp_proxy.py:98 cinder/vnc/xvp_proxy.py:103
+#, python-format
+msgid "Error in handshake: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:119
+#, python-format
+msgid "Invalid request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:139
+#, python-format
+msgid "Request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:142
+#, python-format
+msgid "Request made with missing token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:153
+#, python-format
+msgid "Request made with invalid token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:160
+#, python-format
+msgid "Unexpected error: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:180
+#, python-format
+msgid "Starting cinder-xvpvncproxy node (version %s)"
+msgstr ""
+
+#: cinder/volume/api.py:74 cinder/volume/api.py:220
+msgid "status must be available"
+msgstr ""
+
+#: cinder/volume/api.py:85
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to create %(size)sG volume"
+msgstr ""
+
+#: cinder/volume/api.py:137
+#, fuzzy
+msgid "Volume status must be available or error"
+msgstr "Volume status must be available"
+
+#: cinder/volume/api.py:142
+#, python-format
+msgid "Volume still has %d dependent snapshots"
+msgstr ""
+
+#: cinder/volume/api.py:223
+msgid "already attached"
+msgstr ""
+
+#: cinder/volume/api.py:230
+msgid "already detached"
+msgstr ""
+
+#: cinder/volume/api.py:292
+msgid "must be available"
+msgstr ""
+
+#: cinder/volume/api.py:325
+#, fuzzy
+msgid "Volume Snapshot status must be available or error"
+msgstr "Volume status must be available"
+
+#: cinder/volume/driver.py:96
+#, python-format
+msgid "Recovering from a failed execute.  Try number %s"
+msgstr "Recovering from a failed execute.  Try number %s"
+
+#: cinder/volume/driver.py:106
+#, python-format
+msgid "volume group %s doesn't exist"
+msgstr "volume group %s doesn't exist"
+
+#: cinder/volume/driver.py:270
+#, python-format
+msgid "Skipping ensure_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:318
+#, python-format
+msgid "Skipping remove_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:327
+#, python-format
+msgid ""
+"Skipping remove_export. No iscsi_target is presently exported for volume:"
+" %d"
+msgstr ""
+
+#: cinder/volume/driver.py:337
+msgid "ISCSI provider_location not stored, using discovery"
+msgstr ""
+
+#: cinder/volume/driver.py:384
+#, python-format
+msgid "Could not find iSCSI export  for volume %s"
+msgstr "Could not find iSCSI export  for volume %s"
+
+#: cinder/volume/driver.py:388
+#, python-format
+msgid "ISCSI Discovery: Found %s"
+msgstr ""
+
+#: cinder/volume/driver.py:466
+#, python-format
+msgid "Cannot confirm exported volume id:%(volume_id)s."
+msgstr ""
+
+#: cinder/volume/driver.py:493
+#, python-format
+msgid "FAKE ISCSI: %s"
+msgstr "FAKE ISCSI: %s"
+
+#: cinder/volume/driver.py:505
+#, python-format
+msgid "rbd has no pool %s"
+msgstr "rbd has no pool %s"
+
+#: cinder/volume/driver.py:579
+#, python-format
+msgid "Sheepdog is not working: %s"
+msgstr "Sheepdog is not working: %s"
+
+#: cinder/volume/driver.py:581
+msgid "Sheepdog is not working"
+msgstr "Sheepdog is not working"
+
+#: cinder/volume/driver.py:680 cinder/volume/driver.py:685
+#, python-format
+msgid "LoggingVolumeDriver: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:96
+#, python-format
+msgid "Re-exporting %s volumes"
+msgstr "Re-exporting %s volumes"
+
+#: cinder/volume/manager.py:101
+#, python-format
+msgid "volume %s: skipping export"
+msgstr "volume %s: skipping export"
+
+#: cinder/volume/manager.py:107
+#, python-format
+msgid "volume %s: creating"
+msgstr "volume %s: creating"
+
+#: cinder/volume/manager.py:119
+#, python-format
+msgid "volume %(vol_name)s: creating lv of size %(vol_size)sG"
+msgstr "volume %(vol_name)s: creating logical volume of size %(vol_size)sG"
+
+#: cinder/volume/manager.py:131
+#, python-format
+msgid "volume %s: creating export"
+msgstr "volume %s: creating export"
+
+#: cinder/volume/manager.py:144
+#, python-format
+msgid "volume %s: created successfully"
+msgstr "volume %s: created successfully"
+
+#: cinder/volume/manager.py:153
+msgid "Volume is still attached"
+msgstr "Volume is still attached"
+
+#: cinder/volume/manager.py:155
+msgid "Volume is not local to this node"
+msgstr "Volume is not local to this node"
+
+#: cinder/volume/manager.py:159
+#, python-format
+msgid "volume %s: removing export"
+msgstr "volume %s: removing export"
+
+#: cinder/volume/manager.py:161
+#, python-format
+msgid "volume %s: deleting"
+msgstr "volume %s: deleting"
+
+#: cinder/volume/manager.py:164
+#, python-format
+msgid "volume %s: volume is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:176
+#, python-format
+msgid "volume %s: deleted successfully"
+msgstr "volume %s: deleted successfully"
+
+#: cinder/volume/manager.py:183
+#, python-format
+msgid "snapshot %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:187
+#, python-format
+msgid "snapshot %(snap_name)s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:202
+#, python-format
+msgid "snapshot %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:211
+#, python-format
+msgid "snapshot %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:214
+#, fuzzy, python-format
+msgid "snapshot %s: snapshot is busy"
+msgstr "instance %s: snapshotting"
+
+#: cinder/volume/manager.py:226
+#, python-format
+msgid "snapshot %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:310
+msgid "Checking volume capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:314
+#, python-format
+msgid "New capabilities found: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:325
+msgid "Clear capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:329
+#, python-format
+msgid "Notification {%s} received"
+msgstr ""
+
+#: cinder/volume/netapp.py:79
+#, python-format
+msgid "API %(name)sfailed: %(reason)s"
+msgstr ""
+
+#: cinder/volume/netapp.py:109
+#, python-format
+msgid "%s is not set"
+msgstr ""
+
+#: cinder/volume/netapp.py:128
+#, fuzzy
+msgid "Connected to DFM server"
+msgstr "Reconnected to queue"
+
+#: cinder/volume/netapp.py:159
+#, fuzzy, python-format
+msgid "Job failed: %s"
+msgstr "NotFound raised: %s"
+
+#: cinder/volume/netapp.py:240
+msgid "Failed to provision dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:252
+msgid "No LUN was created by the provision job"
+msgstr ""
+
+#: cinder/volume/netapp.py:261 cinder/volume/netapp.py:433
+#, fuzzy, python-format
+msgid "Failed to find LUN ID for volume %s"
+msgstr "Could not find iSCSI export  for volume %s"
+
+#: cinder/volume/netapp.py:280
+msgid "Failed to remove and delete dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:603 cinder/volume/netapp.py:657
+#, fuzzy, python-format
+msgid "No LUN ID for volume %s"
+msgstr "Could not find iSCSI export  for volume %s"
+
+#: cinder/volume/netapp.py:607 cinder/volume/netapp.py:661
+#, fuzzy, python-format
+msgid "Failed to get LUN details for LUN ID %s"
+msgstr "Failed to get metadata for ip: %s"
+
+#: cinder/volume/netapp.py:614
+#, fuzzy, python-format
+msgid "Failed to get host details for host ID %s"
+msgstr "Failed to get metadata for ip: %s"
+
+#: cinder/volume/netapp.py:620
+#, fuzzy, python-format
+msgid "Failed to get target portal for filer: %s"
+msgstr "Failed to get metadata for ip: %s"
+
+#: cinder/volume/netapp.py:625
+#, fuzzy, python-format
+msgid "Failed to get target IQN for filer: %s"
+msgstr "Failed to get metadata for ip: %s"
+
+#: cinder/volume/san.py:113 cinder/volume/san.py:151
+msgid "Specify san_password or san_private_key"
+msgstr ""
+
+#: cinder/volume/san.py:156
+msgid "san_ip must be set"
+msgstr ""
+
+#: cinder/volume/san.py:320
+#, python-format
+msgid "LUID not found for %(zfs_poolname)s. Output=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:452
+#, python-format
+msgid "CLIQ command returned %s"
+msgstr ""
+
+#: cinder/volume/san.py:458
+#, python-format
+msgid "Malformed response to CLIQ command %(verb)s %(cliq_args)s. Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:466
+#, python-format
+msgid "Error running CLIQ command %(verb)s %(cliq_args)s.  Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:496
+#, python-format
+msgid ""
+"Unexpected number of virtual ips for cluster  %(cluster_name)s. "
+"Result=%(_xml)s"
+msgstr ""
+
+#: cinder/volume/san.py:549
+#, python-format
+msgid "Volume info: %(volume_name)s => %(volume_attributes)s"
+msgstr ""
+
+#: cinder/volume/san.py:594
+msgid "local_path not supported"
+msgstr ""
+
+#: cinder/volume/san.py:626
+#, python-format
+msgid "Could not determine project for volume %s, can't export"
+msgstr ""
+
+#: cinder/volume/san.py:696
+#, python-format
+msgid "Payload for SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:713
+#, python-format
+msgid "Call to json.loads() raised an exception: %s"
+msgstr ""
+
+#: cinder/volume/san.py:718
+#, python-format
+msgid "Results of SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:732
+#, python-format
+msgid "Found solidfire account: %s"
+msgstr ""
+
+#: cinder/volume/san.py:746
+#, python-format
+msgid "solidfire account: %s does not exist, create it..."
+msgstr ""
+
+#: cinder/volume/san.py:804
+msgid "Enter SolidFire create_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:846
+msgid "Leaving SolidFire create_volume"
+msgstr ""
+
+#: cinder/volume/san.py:861
+msgid "Enter SolidFire delete_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:880
+#, python-format
+msgid "Deleting volumeID: %s "
+msgstr ""
+
+#: cinder/volume/san.py:888
+msgid "Leaving SolidFire delete_volume"
+msgstr ""
+
+#: cinder/volume/san.py:891
+msgid "Executing SolidFire ensure_export..."
+msgstr ""
+
+#: cinder/volume/san.py:895
+msgid "Executing SolidFire create_export..."
+msgstr ""
+
+#: cinder/volume/volume_types.py:49 cinder/volume/volume_types.py:108
+msgid "name cannot be None"
+msgstr ""
+
+#: cinder/volume/volume_types.py:96
+msgid "id cannot be None"
+msgstr ""
+
+#: cinder/volume/xensm.py:55
+#, python-format
+msgid "SR name = %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:56
+#, python-format
+msgid "Params: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:60
+#, python-format
+msgid "Failed to create sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:62
+msgid "Create failed"
+msgstr ""
+
+#: cinder/volume/xensm.py:64
+#, python-format
+msgid "SR UUID of new SR is: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:71
+msgid "Failed to update db"
+msgstr ""
+
+#: cinder/volume/xensm.py:80
+#, python-format
+msgid "Failed to introduce sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:91
+#, python-format
+msgid "Failed to reach backend %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:100
+msgid "XenSMDriver requires xenapi connection"
+msgstr ""
+
+#: cinder/volume/xensm.py:110
+msgid "Failed to initiate session"
+msgstr ""
+
+#: cinder/volume/xensm.py:142
+#, python-format
+msgid "Volume will be created in backend - %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:154
+msgid "Failed to update volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:157
+msgid "Unable to create volume"
+msgstr ""
+
+#: cinder/volume/xensm.py:171
+msgid "Failed to delete vdi"
+msgstr ""
+
+#: cinder/volume/xensm.py:177
+msgid "Failed to delete volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:210
+msgid "Failed to find volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:221
+msgid "Failed to find backend in db"
+msgstr ""
+
+#: cinder/volume/nexenta/__init__.py:27
+msgid "Nexenta SA returned the error"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:64
+#, python-format
+msgid "Sending JSON data: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:69
+#, python-format
+msgid "Auto switching to HTTPS connection to %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:75
+msgid "No headers in server response"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:76
+msgid "Bad response from server"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:79
+#, fuzzy, python-format
+msgid "Got response: %s"
+msgstr "response %s"
+
+#: cinder/volume/nexenta/volume.py:96
+#, fuzzy, python-format
+msgid "Volume %s does not exist in Nexenta SA"
+msgstr "volume group %s doesn't exist"
+
+#: cinder/volume/nexenta/volume.py:180
+msgid ""
+"Call to local_path should not happen. Verify that use_local_volumes flag "
+"is turned off."
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:202
+#, python-format
+msgid "Ignored target creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:210
+#, python-format
+msgid "Ignored target group creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:219
+#, python-format
+msgid "Ignored target group member addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:227
+#, python-format
+msgid "Ignored LU creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:237
+#, python-format
+msgid "Ignored LUN mapping entry addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:273
+#, python-format
+msgid ""
+"Got error trying to destroy target group %(target_group)s, assuming it is"
+" already gone: %(exc)s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:280
+#, python-format
+msgid ""
+"Got error trying to delete target %(target)s, assuming it is already "
+"gone: %(exc)s"
+msgstr ""
+
+#~ msgid "Unable to locate account %(account_name) on Solidfire device"
+#~ msgstr ""
+
+#~ msgid "Zone %(zone_id)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Cinder access parameters were not specified."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(id)d could not be found."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(name)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Detected more than one volume with name %(vol_name)"
+#~ msgstr ""
+
+#~ msgid "Detected existing vlan with id %(vlan)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab semaphore \"%(lock)s\" "
+#~ "for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab file lock "
+#~ "\"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Parent group id and group id cannot be same"
+#~ msgstr ""
+
+#~ msgid "No body provided"
+#~ msgstr ""
+
+#~ msgid "Create VSA %(display_name)s of type %(vc_type)s"
+#~ msgstr ""
+
+#~ msgid "Delete VSA with id: %s"
+#~ msgstr ""
+
+#~ msgid "Associate address %(ip)s to VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "Disassociate address from VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "%(obj)s with ID %(id)s not found"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(obj)s with ID %(id)s belongs to "
+#~ "VSA %(own_vsa_id)s and not to VSA "
+#~ "%(vsa_id)s."
+#~ msgstr ""
+
+#~ msgid "Index. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Detail. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Create. vsa_id=%(vsa_id)s, body=%(body)s"
+#~ msgstr ""
+
+#~ msgid "Create volume of %(size)s GB from VSA ID %(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Update %(obj)s with id: %(id)s, changes: %(changes)s"
+#~ msgstr ""
+
+#~ msgid "Delete. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Show. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Index instances for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You cannot run"
+#~ " any more instances of this type."
+#~ msgstr ""
+
+#~ msgid "Going to try to soft delete %s"
+#~ msgstr ""
+
+#~ msgid "No host for instance %s, deleting immediately"
+#~ msgstr ""
+
+#~ msgid "Going to try to stop %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to start %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Going to force the deletion of the"
+#~ " vm %(instance_uuid)s, even if it is"
+#~ " deleted"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s did not exist "
+#~ "in the DB, but I will shut "
+#~ "it down anyway using a special "
+#~ "context"
+#~ msgstr ""
+
+#~ msgid "exception terminating the instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "trying to destroy already destroyed instance: %s"
+#~ msgstr "trying to destroy already destroyed instance: %s"
+
+#~ msgid ""
+#~ "Instance %(name)s found in database but"
+#~ " not known by hypervisor. Setting "
+#~ "power state to NOSTATE"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Detected instance  with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Destroying instance with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid "SQL connection failed (%(connstring)s). %(attempts)d attempts left."
+#~ msgstr ""
+
+#~ msgid "Can't downgrade without losing data"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_id)s not found"
+#~ msgstr ""
+
+#~ msgid "Network %s has active ports, cannot delete"
+#~ msgstr ""
+
+#~ msgid "No fixed IPs to deallocate for vif %sid"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "AMQP server on %(fl_host)s:%(fl_port)d is "
+#~ "unreachable: %(e)s. Trying again in "
+#~ "%(fl_intv)d seconds."
+#~ msgstr ""
+
+#~ msgid "Unable to connect to AMQP server after %(tries)d tries. Shutting down."
+#~ msgstr ""
+
+#~ msgid "Failed to fetch message from queue: %s"
+#~ msgstr ""
+
+#~ msgid "Initing the Adapter Consumer for %s"
+#~ msgstr "Initing the Adapter Consumer for %s"
+
+#~ msgid "Created \"%(exchange)s\" fanout exchange with \"%(key)s\" routing key"
+#~ msgstr ""
+
+#~ msgid "Exception while processing consumer"
+#~ msgstr ""
+
+#~ msgid "Creating \"%(exchange)s\" fanout exchange"
+#~ msgstr ""
+
+#~ msgid "topic is %s"
+#~ msgstr "topic is %s"
+
+#~ msgid "message %s"
+#~ msgstr "message %s"
+
+#~ msgid ""
+#~ "Cannot confirm tmpfile at %(ipath)s is"
+#~ " on same shared storage between "
+#~ "%(src)s and %(dest)s."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of memory(host:%(avail)s <= "
+#~ "instance:%(mem_inst)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of disk(host:%(available)s <="
+#~ " instance:%(necessary)s)"
+#~ msgstr ""
+
+#~ msgid "Driver Method %(driver_method)s missing: %(e)s.Reverting to schedule()"
+#~ msgstr ""
+
+#~ msgid "Setting instance %(instance_uuid)s to ERROR state."
+#~ msgstr ""
+
+#~ msgid "_filter_hosts: %(request_spec)s"
+#~ msgstr ""
+
+#~ msgid "Filter hosts for drive type %s"
+#~ msgstr ""
+
+#~ msgid "Host %s has no free capacity. Skip"
+#~ msgstr ""
+
+#~ msgid "Filter hosts: %s"
+#~ msgstr ""
+
+#~ msgid "Must implement host selection mechanism"
+#~ msgstr ""
+
+#~ msgid "Maximum number of hosts selected (%d)"
+#~ msgstr ""
+
+#~ msgid "Selected excessive host %(host)s"
+#~ msgstr ""
+
+#~ msgid "Provision volume %(name)s of size %(size)s GB on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "volume_params %(volume_params)s"
+#~ msgstr ""
+
+#~ msgid "%(i)d: Volume %(name)s"
+#~ msgstr ""
+
+#~ msgid "Attempting to spawn %(num_volumes)d volume(s)"
+#~ msgstr ""
+
+#~ msgid "Error creating volumes"
+#~ msgstr ""
+
+#~ msgid "Non-VSA volume %d"
+#~ msgstr ""
+
+#~ msgid "Spawning volume %(volume_id)s with drive type %(drive_type)s"
+#~ msgstr ""
+
+#~ msgid "Error creating volume"
+#~ msgstr ""
+
+#~ msgid "No capability selected for volume of size %(size)s"
+#~ msgstr ""
+
+#~ msgid "Host %s:"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\tDrive %(qosgrp)-25s: total %(total)2s, "
+#~ "used %(used)2s, free %(free)2s. Available "
+#~ "capacity %(avail)-5s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t LeastUsedHost: Best host: %(best_host)s."
+#~ " (used capacity %(min_used)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t MostAvailCap: Best host: %(best_host)s. "
+#~ "(available %(max_avail)s %(type_str)s)"
+#~ msgstr ""
+
+#~ msgid "(%(nm)s) publish (key: %(routing_key)s) %(message)s"
+#~ msgstr "(%(nm)s) publish (key: %(routing_key)s) %(message)s"
+
+#~ msgid "Publishing to route %s"
+#~ msgstr "Publishing to route %s"
+
+#~ msgid "Declaring queue %s"
+#~ msgstr "Declaring queue %s"
+
+#~ msgid "Declaring exchange %s"
+#~ msgstr "Declaring exchange %s"
+
+#~ msgid "Binding %(queue)s to %(exchange)s with key %(routing_key)s"
+#~ msgstr "Binding %(queue)s to %(exchange)s with key %(routing_key)s"
+
+#~ msgid "Getting from %(queue)s: %(message)s"
+#~ msgstr "Getting from %(queue)s: %(message)s"
+
+#~ msgid "Test: Emulate wrong VSA name. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate DB error. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: user_data = %s"
+#~ msgstr ""
+
+#~ msgid "_create: param=%s"
+#~ msgstr ""
+
+#~ msgid "Host %s"
+#~ msgstr ""
+
+#~ msgid "Test: provision vol %(name)s on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "\t vol=%(vol)s"
+#~ msgstr ""
+
+#~ msgid "Test: VSA update request: vsa_id=%(vsa_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume create: %s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get request: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume update request: id=%(volume_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: success    %(result)s"
+#~ msgstr "Task [%(name)s] %(task)s status: success    %(result)s"
+
+#~ msgid "Task [%(name)s] %(task)s status: %(status)s    %(error_info)s"
+#~ msgstr "Task [%(name)s] %(task)s status: %(status)s    %(error_info)s"
+
+#~ msgid "Unable to get updated status: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "deactivate_node is called for                "
+#~ "node_id = %(id)s node_ip = %(ip)s"
+#~ msgstr ""
+
+#~ msgid "virsh said: %r"
+#~ msgstr "virsh said: %r"
+
+#~ msgid "cool, it's a device"
+#~ msgstr "cool, it's a device"
+
+#~ msgid "Unable to read LXC console"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "to xml...\n"
+#~ ":%s "
+#~ msgstr ""
+
+#~ msgid "During wait running, %s disappeared."
+#~ msgstr ""
+
+#~ msgid "Instance %s running successfully."
+#~ msgstr ""
+
+#~ msgid "The nwfilter(%(instance_secgroup_filter_name)s) is not found."
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image verification failed"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): image "
+#~ "verification skipped, no hash stored"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): checking"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in use:"
+#~ " on this node %(local)d local, "
+#~ "%(remote)d on other nodes"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): warning "
+#~ "-- an absent base file is in "
+#~ "use! instances: %(instance_list)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in: on"
+#~ " other nodes (%(remote)d on other "
+#~ "nodes)"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is not in use"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is in use"
+#~ msgstr ""
+
+#~ msgid "Created VM %s..."
+#~ msgstr "Created VM %s..."
+
+#~ msgid "Created VM %(instance_name)s as %(vm_ref)s."
+#~ msgstr "Created VM %(instance_name)s as %(vm_ref)s."
+
+#~ msgid "Creating a CDROM-specific VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Created a CDROM-specific VBD %(vbd_ref)s"
+#~ "  for VM %(vm_ref)s, VDI %(vdi_ref)s."
+#~ msgstr ""
+
+#~ msgid "No primary VDI found for%(vm_ref)s"
+#~ msgstr ""
+
+#~ msgid "Fetching image %(image)s"
+#~ msgstr ""
+
+#~ msgid "Image Type: %s"
+#~ msgstr ""
+
+#~ msgid "ISO: Found sr possibly containing the ISO image"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to fetch glance image"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s ... "
+#~ msgstr "Creating VBD for VDI %s ... "
+
+#~ msgid "Creating VBD for VDI %s done."
+#~ msgstr "Creating VBD for VDI %s done."
+
+#~ msgid "VBD.unplug successful first time."
+#~ msgstr "VBD.unplug successful first time."
+
+#~ msgid "VBD.unplug rejected: retrying..."
+#~ msgstr "VBD.unplug rejected: retrying..."
+
+#~ msgid "Not sleeping anymore!"
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful eventually."
+#~ msgstr "VBD.unplug successful eventually."
+
+#~ msgid "Ignoring XenAPI.Failure in VBD.unplug: %s"
+#~ msgstr "Ignoring XenAPI.Failure in VBD.unplug: %s"
+
+#~ msgid "Ignoring XenAPI.Failure %s"
+#~ msgstr "Ignoring XenAPI.Failure %s"
+
+#~ msgid "Starting instance %s"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn"
+#~ msgstr "instance %s: Failed to spawn"
+
+#~ msgid "Instance %s failed to spawn - performing clean-up"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn - Unable to create VM"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Auto configuring disk for instance "
+#~ "%(instance_uuid)s, attempting to resize "
+#~ "partition..."
+#~ msgstr ""
+
+#~ msgid "Invalid value for injected_files: '%s'"
+#~ msgstr ""
+
+#~ msgid "Starting VM %s..."
+#~ msgstr "Starting VM %s..."
+
+#~ msgid "Spawning VM %(instance_uuid)s created %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Instance %s: waiting for running"
+#~ msgstr ""
+
+#~ msgid "Instance %s: running"
+#~ msgstr ""
+
+#~ msgid "Resources to remove:%s"
+#~ msgstr ""
+
+#~ msgid "Removing VDI %(vdi_ref)s(uuid:%(vdi_to_remove)s)"
+#~ msgstr ""
+
+#~ msgid "Skipping VDI destroy for %s"
+#~ msgstr ""
+
+#~ msgid "Unable to Snapshot instance %(instance_uuid)s: %(exc)s"
+#~ msgstr ""
+
+#~ msgid "Updating instance '%(instance_uuid)s' progress to %(progress)d"
+#~ msgstr ""
+
+#~ msgid "Resize instance %s complete"
+#~ msgstr ""
+
+#~ msgid "domid changed from %(olddomid)s to %(newdomid)s"
+#~ msgstr ""
+
+#~ msgid "VM %(instance_uuid)s already halted,skipping shutdown..."
+#~ msgstr ""
+
+#~ msgid "Shutting down VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Destroying VDIs for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s using RAW or "
+#~ "VHD, skipping kernel and ramdisk "
+#~ "deletion"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_uuid)s VM destroyed"
+#~ msgstr ""
+
+#~ msgid "Destroying VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Automatically hard rebooting %d"
+#~ msgstr ""
+
+#~ msgid "Instance for migration %d not found, skipping"
+#~ msgstr ""
+
+#~ msgid "injecting network info to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "creating vif(s) for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "Created VIF %(vif_ref)s for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr "Created VIF %(vif_ref)s for VM %(vm_ref)s, network %(network_ref)s."
+
+#~ msgid "injecting hostname to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The agent call to %(method)s returned"
+#~ " an invalid response: %(ret)r. VM "
+#~ "id=%(instance_uuid)s; path=%(path)s; args=%(addl_args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "TIMEOUT: The call to %(method)s timed"
+#~ " out. VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "NOT IMPLEMENTED: The call to %(method)s"
+#~ " is not supported by the agent. "
+#~ "VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The call to %(method)s returned an "
+#~ "error: %(e)s. VM id=%(instance_uuid)s; "
+#~ "args=%(args)r"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr "Creating VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+
+#~ msgid "Error destroying VDI"
+#~ msgstr ""
+
+#~ msgid "\tVolume %s is NOT VSA volume"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s creation - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s succeeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s deletion - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s suceeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s local path call - call discover"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s ensure export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s create export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s remove export - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE remove_export for %s failed"
+#~ msgstr ""
+
+#~ msgid "Failed to retrieve QoS info"
+#~ msgstr ""
+
+#~ msgid "invalid drive data"
+#~ msgstr ""
+
+#~ msgid "drive_name not defined"
+#~ msgstr ""
+
+#~ msgid "invalid drive type name %s"
+#~ msgstr ""
+
+#~ msgid "*** Experimental VSA code ***"
+#~ msgstr ""
+
+#~ msgid "Requested number of VCs (%d) is too high. Setting to default"
+#~ msgstr ""
+
+#~ msgid "Creating VSA: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d %(vsa_name)s: Create "
+#~ "volume %(vol_name)s, %(vol_size)d GB, type "
+#~ "%(vol_type_id)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA status to %(status)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA call"
+#~ msgstr ""
+
+#~ msgid "Adding %(add_cnt)s VCs to VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "Deleting %(del_cnt)s VCs from VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Deleting %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Unable to delete volume %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Forced delete. %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate VSA ID %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Delete instance %(name)s"
+#~ msgstr ""
+
+#~ msgid "Create call received for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Failed to find VSA %(vsa_id)d"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Drive %(vol_id)s created. Status %(status)s"
+#~ msgstr ""
+
+#~ msgid "Drive %(vol_name)s (%(vol_disp_name)s) still in creating phase - wait"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Not all volumes "
+#~ "are created (%(cvol_real)d of %(cvol_exp)d)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Drive %(vol_name)s "
+#~ "(%(vol_disp_name)s) is in %(status)s state"
+#~ msgstr ""
+
+#~ msgid "Failed to update attach status for volume %(vol_name)s. %(ex)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Delete all BE volumes"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Start %(vc_count)d instances"
+#~ msgstr ""
+
diff --git a/cinder/locale/en_GB/LC_MESSAGES/nova.po b/cinder/locale/en_GB/LC_MESSAGES/nova.po
new file mode 100644
index 000000000..cb8d062f3
--- /dev/null
+++ b/cinder/locale/en_GB/LC_MESSAGES/nova.po
@@ -0,0 +1,8209 @@
+# English (United Kingdom) translation for cinder
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the cinder package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version:  cinder\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-04-08 23:04+0000\n"
+"PO-Revision-Date: 2012-03-30 11:10+0000\n"
+"Last-Translator: Anthony Harrington <untaintableangel@hotmail.co.uk>\n"
+"Language-Team: English (United Kingdom) <en_GB@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: cinder/context.py:59
+#, python-format
+msgid "Arguments dropped when creating context: %s"
+msgstr ""
+
+#: cinder/context.py:90
+#, python-format
+msgid "read_deleted can only be one of 'no', 'yes' or 'only', not %r"
+msgstr ""
+
+#: cinder/crypto.py:48
+msgid "Filename of root CA"
+msgstr "Filename of root CA"
+
+#: cinder/crypto.py:51
+msgid "Filename of private key"
+msgstr "Filename of private key"
+
+#: cinder/crypto.py:54
+msgid "Filename of root Certificate Revocation List"
+msgstr "Filename of root Certificate Revocation List"
+
+#: cinder/crypto.py:57
+msgid "Where we keep our keys"
+msgstr "Where we keep our keys"
+
+#: cinder/crypto.py:60
+msgid "Where we keep our root CA"
+msgstr "Where we keep our root CA"
+
+#: cinder/crypto.py:63
+msgid "Should we use a CA for each project?"
+msgstr "Should we use a CA for each project?"
+
+#: cinder/crypto.py:67
+#, python-format
+msgid "Subject for certificate for users, %s for project, user, timestamp"
+msgstr "Subject for certificate for users, %s for project, user, timestamp"
+
+#: cinder/crypto.py:72
+#, python-format
+msgid "Subject for certificate for projects, %s for project, timestamp"
+msgstr "Subject for certificate for projects, %s for project, timestamp"
+
+#: cinder/crypto.py:292
+#, python-format
+msgid "Flags path: %s"
+msgstr "Flags path: %s"
+
+#: cinder/exception.py:56
+msgid "Unexpected error while running command."
+msgstr "Unexpected error while running command."
+
+#: cinder/exception.py:59
+#, python-format
+msgid ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+msgstr ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+
+#: cinder/exception.py:94
+msgid "DB exception wrapped."
+msgstr "DB exception wrapped."
+
+#: cinder/exception.py:155
+msgid "An unknown exception occurred."
+msgstr "An unknown exception occurred."
+
+#: cinder/exception.py:178
+msgid "Failed to decrypt text"
+msgstr "Failed to decrypt text"
+
+#: cinder/exception.py:182
+msgid "Failed to paginate through images from image service"
+msgstr "Failed to paginate through images from image service"
+
+#: cinder/exception.py:186
+msgid "Virtual Interface creation failed"
+msgstr "Virtual Interface creation failed"
+
+#: cinder/exception.py:190
+msgid "5 attempts to create virtual interfacewith unique mac address failed"
+msgstr "5 attempts to create virtual interface with unique mac address failed"
+
+#: cinder/exception.py:195
+msgid "Connection to glance failed"
+msgstr "Connection to glance failed"
+
+#: cinder/exception.py:199
+msgid "Connection to melange failed"
+msgstr "Connection to melange failed"
+
+#: cinder/exception.py:203
+msgid "Not authorized."
+msgstr "Not authorised."
+
+#: cinder/exception.py:208
+msgid "User does not have admin privileges"
+msgstr "User does not have admin privileges"
+
+#: cinder/exception.py:212
+#, python-format
+msgid "Policy doesn't allow %(action)s to be performed."
+msgstr "Policy doesn't allow %(action)s to be performed."
+
+#: cinder/exception.py:216
+#, python-format
+msgid "Not authorized for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:220
+msgid "Unacceptable parameters."
+msgstr "Unacceptable parameters."
+
+#: cinder/exception.py:225
+msgid "Invalid snapshot"
+msgstr "Invalid snapshot"
+
+#: cinder/exception.py:229
+#, python-format
+msgid "Volume %(volume_id)s is not attached to anything"
+msgstr "Volume %(volume_id)s is not attached to anything"
+
+#: cinder/exception.py:233 cinder/api/openstack/compute/contrib/keypairs.py:113
+msgid "Keypair data is invalid"
+msgstr "Keypair data is invalid"
+
+#: cinder/exception.py:237
+msgid "Failed to load data into json format"
+msgstr "Failed to load data into json format"
+
+#: cinder/exception.py:241
+msgid "The request is invalid."
+msgstr "The request is invalid."
+
+#: cinder/exception.py:245
+#, python-format
+msgid "Invalid signature %(signature)s for user %(user)s."
+msgstr "Invalid signature %(signature)s for user %(user)s."
+
+#: cinder/exception.py:249
+msgid "Invalid input received"
+msgstr "Invalid input received"
+
+#: cinder/exception.py:253
+#, python-format
+msgid "Invalid instance type %(instance_type)s."
+msgstr "Invalid instance type %(instance_type)s."
+
+#: cinder/exception.py:257
+msgid "Invalid volume type"
+msgstr "Invalid volume type"
+
+#: cinder/exception.py:261
+msgid "Invalid volume"
+msgstr "Invalid volume"
+
+#: cinder/exception.py:265
+#, python-format
+msgid "Invalid port range %(from_port)s:%(to_port)s. %(msg)s"
+msgstr "Invalid port range %(from_port)s:%(to_port)s. %(msg)s"
+
+#: cinder/exception.py:269
+#, python-format
+msgid "Invalid IP protocol %(protocol)s."
+msgstr "Invalid IP protocol %(protocol)s."
+
+#: cinder/exception.py:273
+#, python-format
+msgid "Invalid content type %(content_type)s."
+msgstr "Invalid content type %(content_type)s."
+
+#: cinder/exception.py:277
+#, python-format
+msgid "Invalid cidr %(cidr)s."
+msgstr "Invalid cidr %(cidr)s."
+
+#: cinder/exception.py:281
+msgid "Invalid reuse of an RPC connection."
+msgstr "Invalid reuse of an RPC connection."
+
+#: cinder/exception.py:285
+msgid "Invalid Parameter: Unicode is not supported by the current database."
+msgstr ""
+
+#: cinder/exception.py:292
+#, python-format
+msgid "%(err)s"
+msgstr "%(err)s"
+
+#: cinder/exception.py:296
+#, python-format
+msgid ""
+"Cannot perform action '%(action)s' on aggregate %(aggregate_id)s. Reason:"
+" %(reason)s."
+msgstr ""
+"Cannot perform action '%(action)s' on aggregate %(aggregate_id)s. Reason:"
+" %(reason)s."
+
+#: cinder/exception.py:301
+#, python-format
+msgid "Group not valid. Reason: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:305
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot %(method)s while"
+" the instance is in this state."
+msgstr ""
+"Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot %(method)s while"
+" the instance is in this state."
+
+#: cinder/exception.py:310
+#, python-format
+msgid "Instance %(instance_id)s is not running."
+msgstr "Instance %(instance_id)s is not running."
+
+#: cinder/exception.py:314
+#, python-format
+msgid "Instance %(instance_id)s is not suspended."
+msgstr ""
+
+#: cinder/exception.py:318
+#, python-format
+msgid "Instance %(instance_id)s is not in rescue mode"
+msgstr ""
+
+#: cinder/exception.py:322
+msgid "Failed to suspend instance"
+msgstr ""
+
+#: cinder/exception.py:326
+msgid "Failed to resume server"
+msgstr ""
+
+#: cinder/exception.py:330
+msgid "Failed to reboot instance"
+msgstr ""
+
+#: cinder/exception.py:334
+msgid "Failed to terminate instance"
+msgstr ""
+
+#: cinder/exception.py:338
+msgid "Service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:342
+msgid "Volume service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:346
+msgid "Compute service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:350
+#, python-format
+msgid "Unable to migrate instance (%(instance_id)s) to current host (%(host)s)."
+msgstr ""
+
+#: cinder/exception.py:355
+msgid "Destination compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:359
+msgid "Original compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:363
+msgid "The supplied hypervisor type of is invalid."
+msgstr ""
+
+#: cinder/exception.py:367
+msgid "The instance requires a newer hypervisor version than has been provided."
+msgstr ""
+
+#: cinder/exception.py:372
+#, python-format
+msgid ""
+"The supplied disk path (%(path)s) already exists, it is expected not to "
+"exist."
+msgstr ""
+
+#: cinder/exception.py:377
+#, python-format
+msgid "The supplied device path (%(path)s) is invalid."
+msgstr ""
+
+#: cinder/exception.py:381
+#, python-format
+msgid "The supplied device (%(device)s) is busy."
+msgstr ""
+
+#: cinder/exception.py:385
+msgid "Unacceptable CPU info"
+msgstr ""
+
+#: cinder/exception.py:389
+#, python-format
+msgid "%(address)s is not a valid IP v4/6 address."
+msgstr ""
+
+#: cinder/exception.py:393
+#, python-format
+msgid ""
+"VLAN tag is not appropriate for the port group %(bridge)s. Expected VLAN "
+"tag is %(tag)s, but the one associated with the port group is %(pgroup)s."
+msgstr ""
+
+#: cinder/exception.py:399
+#, python-format
+msgid ""
+"vSwitch which contains the port group %(bridge)s is not associated with "
+"the desired physical adapter. Expected vSwitch is %(expected)s, but the "
+"one associated is %(actual)s."
+msgstr ""
+
+#: cinder/exception.py:406
+#, python-format
+msgid "Disk format %(disk_format)s is not acceptable"
+msgstr ""
+
+#: cinder/exception.py:410
+#, python-format
+msgid "Image %(image_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:414
+#, python-format
+msgid "Instance %(instance_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:418
+#, python-format
+msgid "Ec2 id %(ec2_id)s is unacceptable."
+msgstr ""
+
+#: cinder/exception.py:422
+msgid "Resource could not be found."
+msgstr ""
+
+#: cinder/exception.py:427
+#, python-format
+msgid "Required flag %(flag)s not set."
+msgstr ""
+
+#: cinder/exception.py:431
+#, python-format
+msgid "Volume %(volume_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:435
+#, python-format
+msgid "Unable to locate account %(account_name)s on Solidfire device"
+msgstr ""
+
+#: cinder/exception.py:440
+#, python-format
+msgid "Volume not found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:444
+#, python-format
+msgid "Volume %(volume_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:449
+msgid "Zero volume types found."
+msgstr ""
+
+#: cinder/exception.py:453
+#, python-format
+msgid "Volume type %(volume_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:457
+#, python-format
+msgid "Volume type with name %(volume_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:462
+#, python-format
+msgid ""
+"Volume Type %(volume_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:467
+#, python-format
+msgid "Snapshot %(snapshot_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:471
+#, python-format
+msgid "deleting volume %(volume_name)s that has snapshot"
+msgstr ""
+
+#: cinder/exception.py:475
+#, python-format
+msgid "deleting snapshot %(snapshot_name)s that has dependent volumes"
+msgstr ""
+
+#: cinder/exception.py:480
+#, python-format
+msgid "No target id found for volume %(volume_id)s."
+msgstr ""
+
+#: cinder/exception.py:484
+#, python-format
+msgid "No disk at %(location)s"
+msgstr ""
+
+#: cinder/exception.py:488
+#, python-format
+msgid "Could not find a handler for %(driver_type)s volume."
+msgstr ""
+
+#: cinder/exception.py:492
+#, python-format
+msgid "Invalid image href %(image_href)s."
+msgstr ""
+
+#: cinder/exception.py:496
+msgid ""
+"Some images have been stored via hrefs. This version of the api does not "
+"support displaying image hrefs."
+msgstr ""
+
+#: cinder/exception.py:501
+#, python-format
+msgid "Image %(image_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:505
+#, python-format
+msgid "Kernel not found for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:509
+#, python-format
+msgid "User %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:513
+#, python-format
+msgid "Project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:517
+#, python-format
+msgid "User %(user_id)s is not a member of project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:521
+#, python-format
+msgid "Role %(role_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:525
+msgid "Cannot find SR to read/write VDI."
+msgstr ""
+
+#: cinder/exception.py:529
+#, python-format
+msgid "%(req)s is required to create a network."
+msgstr ""
+
+#: cinder/exception.py:533
+#, python-format
+msgid "Network %(network_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:537
+#, python-format
+msgid "Network could not be found for bridge %(bridge)s"
+msgstr ""
+
+#: cinder/exception.py:541
+#, python-format
+msgid "Network could not be found for uuid %(uuid)s"
+msgstr ""
+
+#: cinder/exception.py:545
+#, python-format
+msgid "Network could not be found with cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:549
+#, python-format
+msgid "Network could not be found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:553
+msgid "No networks defined."
+msgstr ""
+
+#: cinder/exception.py:557
+#, python-format
+msgid ""
+"Either Network uuid %(network_uuid)s is not present or is not assigned to"
+" the project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:562
+#, python-format
+msgid "Host is not set to the network (%(network_id)s)."
+msgstr ""
+
+#: cinder/exception.py:566
+#, python-format
+msgid "Network %(network)s has active ports, cannot delete."
+msgstr ""
+
+#: cinder/exception.py:570
+msgid "Could not find the datastore reference(s) which the VM uses."
+msgstr ""
+
+#: cinder/exception.py:574
+#, python-format
+msgid "No fixed IP associated with id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:578
+#, python-format
+msgid "Fixed ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:582
+#, python-format
+msgid "Instance %(instance_id)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:586
+#, python-format
+msgid "Network host %(host)s has zero fixed ips in network %(network_id)s."
+msgstr ""
+
+#: cinder/exception.py:591
+#, python-format
+msgid "Instance %(instance_id)s doesn't have fixed ip '%(ip)s'."
+msgstr ""
+
+#: cinder/exception.py:595
+#, python-format
+msgid "Host %(host)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:599
+#, python-format
+msgid ""
+"Fixed IP address (%(address)s) does not exist in network "
+"(%(network_uuid)s)."
+msgstr ""
+
+#: cinder/exception.py:604
+#, python-format
+msgid "Fixed IP address %(address)s is already in use."
+msgstr ""
+
+#: cinder/exception.py:608
+#, python-format
+msgid "Fixed IP address %(address)s is invalid."
+msgstr ""
+
+#: cinder/exception.py:612
+msgid "Zero fixed ips available."
+msgstr ""
+
+#: cinder/exception.py:616
+msgid "Zero fixed ips could be found."
+msgstr ""
+
+#: cinder/exception.py:620
+#, python-format
+msgid "Floating ip not found for id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:624
+#, python-format
+msgid "The DNS entry %(name)s already exists in domain %(domain)s."
+msgstr ""
+
+#: cinder/exception.py:628
+#, python-format
+msgid "Floating ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:632
+#, python-format
+msgid "Floating ip not found for host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:636
+msgid "Zero floating ips available."
+msgstr ""
+
+#: cinder/exception.py:640
+#, python-format
+msgid "Floating ip %(address)s is associated."
+msgstr ""
+
+#: cinder/exception.py:644
+#, python-format
+msgid "Floating ip %(address)s is not associated."
+msgstr ""
+
+#: cinder/exception.py:648
+msgid "Zero floating ips exist."
+msgstr ""
+
+#: cinder/exception.py:652
+#, python-format
+msgid "Interface %(interface)s not found."
+msgstr ""
+
+#: cinder/exception.py:656
+#, python-format
+msgid "Keypair %(name)s not found for user %(user_id)s"
+msgstr ""
+
+#: cinder/exception.py:660
+#, python-format
+msgid "Certificate %(certificate_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:664
+#, python-format
+msgid "Service %(service_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:668
+#, python-format
+msgid "Host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:672
+#, python-format
+msgid "Compute host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:676
+#, python-format
+msgid "Could not find binary %(binary)s on host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:680
+#, python-format
+msgid "Auth token %(token)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:684
+#, python-format
+msgid "Access Key %(access_key)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:688
+msgid "Quota could not be found"
+msgstr ""
+
+#: cinder/exception.py:692
+#, python-format
+msgid "Quota for project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:696
+#, python-format
+msgid "Quota class %(class_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:700
+#, python-format
+msgid "Security group %(security_group_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:704
+#, python-format
+msgid "Security group %(security_group_id)s not found for project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:709
+#, python-format
+msgid "Security group with rule %(rule_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:713
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is already associated with the "
+"instance %(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:718
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is not associated with the instance "
+"%(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:723
+#, python-format
+msgid "Migration %(migration_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:727
+#, python-format
+msgid "Migration not found for instance %(instance_id)s with status %(status)s."
+msgstr ""
+
+#: cinder/exception.py:732
+#, python-format
+msgid "Console pool %(pool_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:736
+#, python-format
+msgid ""
+"Console pool of type %(console_type)s for compute host %(compute_host)s "
+"on proxy host %(host)s not found."
+msgstr ""
+
+#: cinder/exception.py:742
+#, python-format
+msgid "Console %(console_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:746
+#, python-format
+msgid "Console for instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:750
+#, python-format
+msgid ""
+"Console for instance %(instance_id)s in pool %(pool_id)s could not be "
+"found."
+msgstr ""
+
+#: cinder/exception.py:755
+#, python-format
+msgid "Invalid console type %(console_type)s "
+msgstr ""
+
+#: cinder/exception.py:759
+msgid "Zero instance types found."
+msgstr ""
+
+#: cinder/exception.py:763
+#, python-format
+msgid "Instance type %(instance_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:767
+#, python-format
+msgid "Instance type with name %(instance_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:772
+#, python-format
+msgid "Flavor %(flavor_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:776
+#, python-format
+msgid "Cell %(cell_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:780
+#, python-format
+msgid "Scheduler Host Filter %(filter_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:784
+#, python-format
+msgid "Scheduler cost function %(cost_fn_str)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:789
+#, python-format
+msgid "Scheduler weight flag not found: %(flag_name)s"
+msgstr ""
+
+#: cinder/exception.py:793
+#, python-format
+msgid "Instance %(instance_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:798
+#, python-format
+msgid ""
+"Instance Type %(instance_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:803
+msgid "LDAP object could not be found"
+msgstr ""
+
+#: cinder/exception.py:807
+#, python-format
+msgid "LDAP user %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:811
+#, python-format
+msgid "LDAP group %(group_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:815
+#, python-format
+msgid "LDAP user %(user_id)s is not a member of group %(group_id)s."
+msgstr ""
+
+#: cinder/exception.py:819
+#, python-format
+msgid "File %(file_path)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:823
+msgid "Zero files could be found."
+msgstr ""
+
+#: cinder/exception.py:827
+#, python-format
+msgid "Virtual switch associated with the network adapter %(adapter)s not found."
+msgstr ""
+
+#: cinder/exception.py:832
+#, python-format
+msgid "Network adapter %(adapter)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:836
+#, python-format
+msgid "Class %(class_name)s could not be found: %(exception)s"
+msgstr ""
+
+#: cinder/exception.py:840
+msgid "Action not allowed."
+msgstr ""
+
+#: cinder/exception.py:844
+#, python-format
+msgid "Unable to use global role %(role_id)s"
+msgstr ""
+
+#: cinder/exception.py:848
+msgid "Rotation is not allowed for snapshots"
+msgstr ""
+
+#: cinder/exception.py:852
+msgid "Rotation param is required for backup image_type"
+msgstr ""
+
+#: cinder/exception.py:861
+#, python-format
+msgid "Key pair %(key_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:865
+#, python-format
+msgid "User %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:869
+#, python-format
+msgid "LDAP user %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:873
+#, python-format
+msgid "LDAP group %(group)s already exists."
+msgstr ""
+
+#: cinder/exception.py:877
+#, python-format
+msgid "User %(uid)s is already a member of the group %(group_dn)s"
+msgstr ""
+
+#: cinder/exception.py:882
+#, python-format
+msgid "Project %(project)s already exists."
+msgstr ""
+
+#: cinder/exception.py:886
+#, python-format
+msgid "Instance %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:890
+#, python-format
+msgid "Instance Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:894
+#, python-format
+msgid "Volume Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:898
+#, python-format
+msgid "%(path)s is on shared storage: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:902
+msgid "Migration error"
+msgstr ""
+
+#: cinder/exception.py:906
+#, python-format
+msgid "Malformed message body: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:910
+#, python-format
+msgid "Could not find config at %(path)s"
+msgstr ""
+
+#: cinder/exception.py:914
+#, python-format
+msgid "Could not load paste app '%(name)s' from %(path)s"
+msgstr ""
+
+#: cinder/exception.py:918
+msgid "When resizing, instances must change size!"
+msgstr ""
+
+#: cinder/exception.py:922
+msgid "Image is larger than instance type allows"
+msgstr ""
+
+#: cinder/exception.py:926
+msgid "1 or more Zones could not complete the request"
+msgstr ""
+
+#: cinder/exception.py:930
+msgid "Instance type's memory is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:934
+msgid "Instance type's disk is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:938
+#, python-format
+msgid "Insufficient free memory on compute node to start %(uuid)s."
+msgstr ""
+
+#: cinder/exception.py:942
+msgid "Could not fetch bandwidth/cpu/disk metrics for this host."
+msgstr ""
+
+#: cinder/exception.py:946
+#, python-format
+msgid "No valid host was found. %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:950
+#, python-format
+msgid "Host %(host)s is not up or doesn't exist."
+msgstr ""
+
+#: cinder/exception.py:954
+msgid "Quota exceeded"
+msgstr ""
+
+#: cinder/exception.py:958
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: action '%(action)s' caused an error: "
+"%(reason)s."
+msgstr ""
+
+#: cinder/exception.py:963
+#, python-format
+msgid "Aggregate %(aggregate_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:967
+#, python-format
+msgid "Aggregate %(aggregate_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:971
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:975
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:980
+#, python-format
+msgid "Host %(host)s already member of another aggregate."
+msgstr ""
+
+#: cinder/exception.py:984
+#, python-format
+msgid "Aggregate %(aggregate_id)s already has host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:988
+#, python-format
+msgid "Detected more than one volume with name %(vol_name)s"
+msgstr ""
+
+#: cinder/exception.py:992
+#, python-format
+msgid "Cannot create volume_type with name %(name)s and specs %(extra_specs)s"
+msgstr ""
+
+#: cinder/exception.py:997
+msgid "Unable to create instance type"
+msgstr ""
+
+#: cinder/exception.py:1001
+msgid "Bad response from SolidFire API"
+msgstr ""
+
+#: cinder/exception.py:1005
+#, python-format
+msgid "Error in SolidFire API response: status=%(status)s"
+msgstr ""
+
+#: cinder/exception.py:1009
+#, python-format
+msgid "Error in SolidFire API response: data=%(data)s"
+msgstr ""
+
+#: cinder/exception.py:1013
+#, python-format
+msgid "Detected existing vlan with id %(vlan)d"
+msgstr ""
+
+#: cinder/exception.py:1017
+#, python-format
+msgid "Instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:1021
+#, python-format
+msgid "Invalid id: %(val)s (expecting \"i-...\")."
+msgstr ""
+
+#: cinder/exception.py:1025
+#, python-format
+msgid "Could not fetch image %(image)s"
+msgstr ""
+
+#: cinder/log.py:315
+#, python-format
+msgid "syslog facility must be one of: %s"
+msgstr ""
+
+#: cinder/manager.py:146
+#, python-format
+msgid "Skipping %(full_task_name)s, %(ticks_to_skip)s ticks left until next run"
+msgstr ""
+
+#: cinder/manager.py:152
+#, python-format
+msgid "Running periodic task %(full_task_name)s"
+msgstr ""
+
+#: cinder/manager.py:159
+#, python-format
+msgid "Error during %(full_task_name)s: %(e)s"
+msgstr ""
+
+#: cinder/manager.py:203
+msgid "Notifying Schedulers of capabilities ..."
+msgstr ""
+
+#: cinder/policy.py:30
+msgid "JSON file representing policy"
+msgstr ""
+
+#: cinder/policy.py:33
+msgid "Rule checked when requested rule is not found"
+msgstr ""
+
+#: cinder/service.py:137
+msgid "SIGTERM received"
+msgstr ""
+
+#: cinder/service.py:177
+#, python-format
+msgid "Starting %(topic)s node (version %(vcs_string)s)"
+msgstr ""
+
+#: cinder/service.py:195
+#, python-format
+msgid "Creating Consumer connection for Service %s"
+msgstr ""
+
+#: cinder/service.py:282
+msgid "Service killed that has no database entry"
+msgstr ""
+
+#: cinder/service.py:319
+msgid "The service database object disappeared, Recreating it."
+msgstr ""
+
+#: cinder/service.py:334
+msgid "Recovered model server connection!"
+msgstr ""
+
+#: cinder/service.py:340
+msgid "model server went away"
+msgstr ""
+
+#: cinder/service.py:433
+msgid "Full set of FLAGS:"
+msgstr "Full set of FLAGS:"
+
+#: cinder/service.py:440
+#, python-format
+msgid "%(flag)s : FLAG SET "
+msgstr ""
+
+#: cinder/utils.py:79
+#, python-format
+msgid "Inner Exception: %s"
+msgstr "Inner Exception: %s"
+
+#: cinder/utils.py:165
+#, python-format
+msgid "Fetching %s"
+msgstr "Fetching %s"
+
+#: cinder/utils.py:210
+#, python-format
+msgid "Got unknown keyword args to utils.execute: %r"
+msgstr ""
+
+#: cinder/utils.py:220
+#, python-format
+msgid "Running cmd (subprocess): %s"
+msgstr "Running cmd (subprocess): %s"
+
+#: cinder/utils.py:236 cinder/utils.py:315
+#, python-format
+msgid "Result was %s"
+msgstr "Result was %s"
+
+#: cinder/utils.py:249
+#, python-format
+msgid "%r failed. Retrying."
+msgstr ""
+
+#: cinder/utils.py:291
+#, python-format
+msgid "Running cmd (SSH): %s"
+msgstr "Running cmd (SSH): %s"
+
+#: cinder/utils.py:293
+msgid "Environment not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:297
+msgid "process_input not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:352
+#, python-format
+msgid "debug in callback: %s"
+msgstr "debug in callback: %s"
+
+#: cinder/utils.py:534
+#, python-format
+msgid "Link Local address is not found.:%s"
+msgstr "Link Local address is not found.:%s"
+
+#: cinder/utils.py:537
+#, python-format
+msgid "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+msgstr "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+
+#: cinder/utils.py:648
+#, python-format
+msgid "Invalid backend: %s"
+msgstr "Invalid backend: %s"
+
+#: cinder/utils.py:659
+#, python-format
+msgid "backend %s"
+msgstr "backend %s"
+
+#: cinder/utils.py:709
+msgid "in looping call"
+msgstr ""
+
+#: cinder/utils.py:927
+#, python-format
+msgid "Attempting to grab semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:931
+#, python-format
+msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:935
+#, python-format
+msgid "Attempting to grab file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:942
+#, python-format
+msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:1001
+#, python-format
+msgid "Found sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1008
+#, python-format
+msgid "Cleaned sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1023
+#, python-format
+msgid "Found lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1028
+#, python-format
+msgid "Cleaned lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1138
+#, python-format
+msgid "Expected object of type: %s"
+msgstr ""
+
+#: cinder/utils.py:1169
+#, python-format
+msgid "Invalid server_string: %s"
+msgstr ""
+
+#: cinder/utils.py:1298
+#, python-format
+msgid "timefunc: '%(name)s' took %(total_time).2f secs"
+msgstr ""
+
+#: cinder/utils.py:1330
+msgid "Original exception being dropped"
+msgstr ""
+
+#: cinder/utils.py:1461
+#, python-format
+msgid "Class %(fullname)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1463
+#, python-format
+msgid "Class %(fullname)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1495
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1497
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1681
+#, python-format
+msgid "Could not remove tmpdir: %s"
+msgstr ""
+
+#: cinder/wsgi.py:97
+#, python-format
+msgid "Started %(name)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:108
+msgid "Stopping WSGI server."
+msgstr ""
+
+#: cinder/wsgi.py:111
+msgid "Stopping raw TCP server."
+msgstr ""
+
+#: cinder/wsgi.py:117
+#, python-format
+msgid "Starting TCP server %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:133
+msgid "WSGI server has stopped."
+msgstr ""
+
+#: cinder/wsgi.py:211
+msgid "You must implement __call__"
+msgstr ""
+
+#: cinder/api/direct.py:218
+msgid "not available"
+msgstr ""
+
+#: cinder/api/direct.py:299
+#, python-format
+msgid "Returned non-serializeable type: %s"
+msgstr ""
+
+#: cinder/api/sizelimit.py:51
+msgid "Request is too large."
+msgstr ""
+
+#: cinder/api/validator.py:142
+#, python-format
+msgid "%(key)s with value %(value)s failed validator  %(validator)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:73
+#, python-format
+msgid "%(code)s: %(message)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:95
+#, python-format
+msgid "FaultWrapper: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:170
+msgid "Too many failed authentications."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:180
+#, python-format
+msgid ""
+"Access key %(access_key)s has had %(failures)d failed authentications and"
+" will be locked out for %(lock_mins)d minutes."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:267
+msgid "Signature not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:271
+msgid "Access key not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:306 cinder/api/ec2/__init__.py:319
+msgid "Failure communicating with keystone"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:388
+#, python-format
+msgid "Authentication Failure: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:404
+#, python-format
+msgid "Authenticated Request For %(uname)s:%(pname)s)"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:435
+#, python-format
+msgid "action: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:437
+#, python-format
+msgid "arg: %(key)s\t\tval: %(value)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:512
+#, python-format
+msgid "Unauthorized request for controller=%(controller)s and action=%(action)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:584
+#, python-format
+msgid "InstanceNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:590
+#, python-format
+msgid "VolumeNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:596
+#, python-format
+msgid "SnapshotNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:602
+#, python-format
+msgid "NotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:605
+#, python-format
+msgid "EC2APIError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:613
+#, python-format
+msgid "KeyPairExists raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:617
+#, python-format
+msgid "InvalidParameterValue raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:621
+#, python-format
+msgid "InvalidPortRange raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:625
+#, python-format
+msgid "NotAuthorized raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:629
+#, python-format
+msgid "InvalidRequest raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:633
+#, python-format
+msgid "QuotaError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:637
+#, python-format
+msgid "Invalid id: bogus (expecting \"i-...\"): %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:646
+#, python-format
+msgid "Unexpected error raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:647
+#, python-format
+msgid "Environment: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:649 cinder/api/metadata/handler.py:248
+msgid "An unknown error has occurred. Please try your request again."
+msgstr ""
+
+#: cinder/api/ec2/apirequest.py:64
+#, python-format
+msgid "Unsupported API request: controller = %(controller)s, action = %(action)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:336
+#, python-format
+msgid "Create snapshot of volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:372
+#, python-format
+msgid ""
+"Value (%s) for KeyName is invalid. Content limited to Alphanumeric "
+"character, spaces, dashes, and underscore."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:378
+#, python-format
+msgid "Value (%s) for Keyname is invalid. Length exceeds maximum of 255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:382
+#, python-format
+msgid "Create key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:391
+#, python-format
+msgid "Import key %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:409
+#, python-format
+msgid "Delete key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:551
+#, fuzzy, python-format
+msgid "Invalid CIDR"
+msgstr "Invalid cidr %(cidr)s."
+
+#: cinder/api/ec2/cloud.py:639 cinder/api/ec2/cloud.py:693
+#: cinder/api/ec2/cloud.py:800
+msgid "Not enough parameters, need group_name or group_id"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:654
+#: cinder/api/openstack/compute/contrib/security_groups.py:517
+#, python-format
+msgid "Revoke security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:666 cinder/api/ec2/cloud.py:719
+#, python-format
+msgid "%s Not enough parameters to build a valid rule"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:684 cinder/api/ec2/cloud.py:744
+msgid "No rule for the specified parameters."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:708
+#: cinder/api/openstack/compute/contrib/security_groups.py:354
+#, python-format
+msgid "Authorize security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:725
+#, python-format
+msgid "%s - This rule already exists in group"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:769
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Content limited to "
+"Alphanumeric characters, spaces, dashes, and underscores."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:776
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Length exceeds maximum of "
+"255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:780
+#: cinder/api/openstack/compute/contrib/security_groups.py:292
+#, python-format
+msgid "Create Security Group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:783
+#, python-format
+msgid "group %s already exists"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:815
+#: cinder/api/openstack/compute/contrib/security_groups.py:245
+#, python-format
+msgid "Delete security group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:823 cinder/compute/manager.py:1630
+#, python-format
+msgid "Get console output for instance %s"
+msgstr "Get console output for instance %s"
+
+#: cinder/api/ec2/cloud.py:894
+#, python-format
+msgid "Create volume from snapshot %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:898 cinder/api/openstack/compute/contrib/volumes.py:186
+#: cinder/api/openstack/volume/volumes.py:222
+#, python-format
+msgid "Create volume of %s GB"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:921
+msgid "Delete Failed"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:931
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(instance_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:939
+msgid "Attach Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:952 cinder/api/openstack/compute/contrib/volumes.py:366
+#, python-format
+msgid "Detach volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:959
+msgid "Detach Volume Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:984 cinder/api/ec2/cloud.py:1041
+#: cinder/api/ec2/cloud.py:1518 cinder/api/ec2/cloud.py:1533
+#, python-format
+msgid "attribute not supported: %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1107
+#, python-format
+msgid "vol = %s\n"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1255
+msgid "Allocate address"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1267
+#, python-format
+msgid "Release address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1272
+#, python-format
+msgid "Associate address %(public_ip)s to instance %(instance_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1282
+#, python-format
+msgid "Disassociate address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1308
+msgid "Image must be available"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1329
+msgid "Going to start terminating instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1343
+#, python-format
+msgid "Reboot instance %r"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1354
+msgid "Going to stop instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1365
+msgid "Going to start instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1455
+#, python-format
+msgid "De-registering image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1471
+msgid "imageLocation is required"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1490
+#, python-format
+msgid "Registered image %(image_location)s with id %(image_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1536
+msgid "user or group not specified"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1538
+msgid "only group \"all\" is supported"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1540
+msgid "operation_type must be add or remove"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1542
+#, python-format
+msgid "Updating image %s publicity"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1555
+#, python-format
+msgid "Not allowed to modify attributes for image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1603
+#, python-format
+msgid "Couldn't stop instance with in %d sec"
+msgstr ""
+
+#: cinder/api/metadata/handler.py:246 cinder/api/metadata/handler.py:253
+#, python-format
+msgid "Failed to get metadata for ip: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:43
+#, python-format
+msgid "Caught error: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:45 cinder/api/openstack/wsgi.py:886
+#, python-format
+msgid "%(url)s returned with HTTP %(status)d"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:94
+msgid "Must specify an ExtensionManager class"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:105
+#, python-format
+msgid "Extended resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:130
+#, python-format
+msgid ""
+"Extension %(ext_name)s: Cannot extend resource %(collection)s: No such "
+"resource"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:135
+#, python-format
+msgid "Extension %(ext_name)s extending resource: %(collection)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:90
+#, python-format
+msgid "%(user_id)s could not be found with token '%(token)s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:134
+#, python-format
+msgid "%(user_id)s must be an admin or a member of %(project_id)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:152
+msgid "Authentication requests must be made against a version root (e.g. /v2)."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:167
+#, python-format
+msgid "Could not find %s in request."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:191
+#, python-format
+msgid "Successfully authenticated '%s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:241
+msgid "User not found with provided API key."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:258
+#, python-format
+msgid "Provided API key is valid, but not for user '%(username)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:133 cinder/api/openstack/common.py:167
+msgid "limit param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:136 cinder/api/openstack/common.py:171
+msgid "limit param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:161
+msgid "offset param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:175
+msgid "offset param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:203
+#, python-format
+msgid "marker [%s] not found"
+msgstr ""
+
+#: cinder/api/openstack/common.py:243
+#, python-format
+msgid "href %s does not contain version"
+msgstr ""
+
+#: cinder/api/openstack/common.py:278
+msgid "Image metadata limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/common.py:295
+#, python-format
+msgid "Converting nw_info: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:305
+#, python-format
+msgid "Converted networks: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:338
+#, python-format
+msgid "Cannot '%(action)s' while instance is in %(attr)s %(state)s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:341
+#, python-format
+msgid "Instance is in an invalid state for '%(action)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:421
+msgid "Rejecting snapshot request, snapshots currently disabled"
+msgstr ""
+
+#: cinder/api/openstack/common.py:423
+msgid "Instance snapshots are not permitted at this time."
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:188
+#, python-format
+msgid "Loaded extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:225
+#, python-format
+msgid "Ext name: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:226
+#, python-format
+msgid "Ext alias: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:227
+#, python-format
+msgid "Ext description: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:229
+#, python-format
+msgid "Ext namespace: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:230
+#, python-format
+msgid "Ext updated: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:232
+#, python-format
+msgid "Exception loading extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:246
+#, python-format
+msgid "Loading extension %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:252
+#, python-format
+msgid "Calling extension factory %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:264
+#, python-format
+msgid "Failed to load extension %(ext_factory)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:344
+#, python-format
+msgid "Failed to load extension %(classpath)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:368
+#, python-format
+msgid "Failed to load extension %(ext_name)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:135 cinder/api/openstack/wsgi.py:538
+msgid "cannot understand JSON"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:159
+#: cinder/api/openstack/compute/contrib/hosts.py:86
+msgid "cannot understand XML"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:543
+msgid "too many body keys"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:582
+#, python-format
+msgid "Exception handling resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:586
+#, python-format
+msgid "Fault thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:589
+#, python-format
+msgid "HTTP exception thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:697
+msgid "Unrecognized Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:701
+msgid "No Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:705
+msgid "Empty body provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:816
+#, python-format
+msgid "There is no such action: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:819 cinder/api/openstack/wsgi.py:832
+#: cinder/api/openstack/compute/server_metadata.py:58
+#: cinder/api/openstack/compute/server_metadata.py:76
+#: cinder/api/openstack/compute/server_metadata.py:101
+#: cinder/api/openstack/compute/server_metadata.py:126
+#: cinder/api/openstack/compute/contrib/admin_actions.py:211
+#: cinder/api/openstack/compute/contrib/console_output.py:52
+msgid "Malformed request body"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:829
+msgid "Unsupported Content-Type"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:841
+msgid "Malformed request url"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:889
+#, python-format
+msgid "%(url)s returned a fault: %(e)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:265
+msgid "element is not a child"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:414
+msgid "root element selecting a list"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:739
+#, python-format
+msgid "Template tree mismatch; adding slave %(slavetag)s to master %(mastertag)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:858
+msgid "subclasses must implement construct()!"
+msgstr ""
+
+#: cinder/api/openstack/compute/extensions.py:29
+#: cinder/api/openstack/volume/extensions.py:29
+msgid "Initializing extension manager."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:40
+#: cinder/api/openstack/compute/images.py:146
+#: cinder/api/openstack/compute/images.py:161
+msgid "Image not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:79
+msgid "Incorrect request body format"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:83
+#: cinder/api/openstack/compute/server_metadata.py:80
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:79
+#: cinder/api/openstack/compute/contrib/volumetypes.py:188
+msgid "Request body and URI mismatch"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:86
+#: cinder/api/openstack/compute/server_metadata.py:84
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:82
+#: cinder/api/openstack/compute/contrib/volumetypes.py:191
+msgid "Request body contains too many items"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:111
+msgid "Invalid metadata key"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:74
+msgid "Instance does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:97
+msgid "Instance is not a member of specified network"
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:140
+#, python-format
+msgid ""
+"Only %(value)s %(verb)s request(s) can be made to %(uri)s every "
+"%(unit_string)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:266
+msgid "This request was rate-limited."
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:38
+#: cinder/api/openstack/compute/server_metadata.py:122
+#: cinder/api/openstack/compute/server_metadata.py:159
+msgid "Server does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:141
+#: cinder/api/openstack/compute/server_metadata.py:152
+msgid "Metadata item was not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:425
+#, python-format
+msgid "Invalid server status: %(status)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:433
+msgid "Invalid changes-since value"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:483
+msgid "Personality file limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:485
+msgid "Personality file path too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:487
+msgid "Personality file content too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:501
+msgid "Server name is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:505
+msgid "Server name is an empty string"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:509
+msgid "Server name must be less than 256 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:527
+#, python-format
+msgid "Bad personality format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:530
+msgid "Bad personality format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:535
+#, python-format
+msgid "Personality content for %s cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:550
+#, python-format
+msgid "Bad networks format: network uuid is not in proper format (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:559
+#, python-format
+msgid "Invalid fixed IP address (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:566
+#, python-format
+msgid "Duplicate networks (%s) are not allowed"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:572
+#, python-format
+msgid "Bad network format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:575
+msgid "Bad networks format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:587
+msgid "Userdata content cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:594
+msgid "accessIPv4 is not proper IPv4 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:601
+msgid "accessIPv6 is not proper IPv6 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:633
+msgid "Server name is not defined"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:675
+#: cinder/api/openstack/compute/servers.py:740
+msgid "Invalid flavorRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:737
+msgid "Can not find requested image"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:743
+msgid "Invalid key_name provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:829
+#: cinder/api/openstack/compute/servers.py:849
+msgid "Instance has not been resized."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:835
+#, python-format
+msgid "Error in confirm-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:855
+#, python-format
+msgid "Error in revert-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:868
+msgid "Argument 'type' for reboot is not HARD or SOFT"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:872
+msgid "Missing argument 'type' for reboot"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:885
+#, python-format
+msgid "Error in reboot %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:897
+msgid "Unable to locate requested flavor."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:900
+msgid "Resize requires a change in size."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:924
+msgid "Malformed server entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:931
+msgid "Missing imageRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:940
+msgid "Invalid imageRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:949
+msgid "Missing flavorRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:962
+msgid "No adminPass was specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:966
+#: cinder/api/openstack/compute/servers.py:1144
+msgid "Invalid adminPass"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:980
+msgid "Unable to parse metadata key/value pairs."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:993
+msgid "Resize request has invalid 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:996
+msgid "Resize requests require 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1014
+#: cinder/api/openstack/compute/contrib/aggregates.py:142
+#: cinder/api/openstack/compute/contrib/networks.py:65
+msgid "Invalid request body"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1019
+msgid "Could not parse imageRef from request."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1071
+msgid "Instance could not be found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1074
+msgid "Cannot find image for rebuild"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1103
+msgid "createImage entity requires name attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1112
+#: cinder/api/openstack/compute/contrib/admin_actions.py:238
+msgid "Invalid metadata"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1167
+#, python-format
+msgid "Removing options '%(unk_opt_str)s' from query"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:60
+#, python-format
+msgid "Compute.api::pause %s"
+msgstr "Compute.api::pause %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:77
+#, python-format
+msgid "Compute.api::unpause %s"
+msgstr "Compute.api::unpause %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:94
+#, python-format
+msgid "compute.api::suspend %s"
+msgstr "compute.api::suspend %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:111
+#, python-format
+msgid "compute.api::resume %s"
+msgstr "compute.api::resume %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:127
+#, python-format
+msgid "Error in migrate %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:141
+#, python-format
+msgid "Compute.api::reset_network %s"
+msgstr "Compute.api::reset_network %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:154
+#: cinder/api/openstack/compute/contrib/admin_actions.py:170
+#: cinder/api/openstack/compute/contrib/admin_actions.py:186
+#: cinder/api/openstack/compute/contrib/multinic.py:41
+#: cinder/api/openstack/compute/contrib/rescue.py:44
+msgid "Server not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:157
+#, python-format
+msgid "Compute.api::inject_network_info %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:173
+#, python-format
+msgid "Compute.api::lock %s"
+msgstr "Compute.api::lock %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:189
+#, python-format
+msgid "Compute.api::unlock %s"
+msgstr "Compute.api::unlock %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:219
+#, python-format
+msgid "createBackup entity requires %s attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:223
+msgid "Malformed createBackup entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:229
+msgid "createBackup attribute 'rotation' must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:244
+#: cinder/api/openstack/compute/contrib/console_output.py:47
+#: cinder/api/openstack/compute/contrib/console_output.py:59
+#: cinder/api/openstack/compute/contrib/consoles.py:49
+#: cinder/api/openstack/compute/contrib/consoles.py:60
+#: cinder/api/openstack/compute/contrib/server_action_list.py:49
+#: cinder/api/openstack/compute/contrib/server_diagnostics.py:47
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:38
+msgid "Instance not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:272
+msgid "host and block_migration must be specified."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:284
+#, python-format
+msgid "Live migration of instance %(id)s to host %(host)s failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:76
+#, python-format
+msgid ""
+"Cannot create aggregate with name %(name)s and availability zone "
+"%(avail_zone)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:88
+#, python-format
+msgid "Cannot show aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:114
+#, python-format
+msgid "Cannot update aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:126
+#, python-format
+msgid "Cannot delete aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:139
+#, python-format
+msgid "Aggregates does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:152
+#: cinder/api/openstack/compute/contrib/aggregates.py:158
+#, python-format
+msgid "Cannot add host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:171
+#: cinder/api/openstack/compute/contrib/aggregates.py:175
+#, python-format
+msgid "Cannot remove host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:195
+#, python-format
+msgid "Cannot set metadata %(metadata)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/certificates.py:75
+msgid "Only root certificate can be retrieved."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/cloudpipe.py:146
+msgid ""
+"Unable to claim IP for VPN instances, ensure it isn't running, and try "
+"again in a few minutes"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:44
+msgid "Missing type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:56
+msgid "Invalid type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/disk_config.py:44
+#, python-format
+msgid "%s must be either 'MANUAL' or 'AUTO'."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/extended_server_attributes.py:77
+#: cinder/api/openstack/compute/contrib/extended_status.py:61
+msgid "Server not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:61
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:91
+msgid "Flavor not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:49
+#: cinder/api/openstack/compute/contrib/volumetypes.py:158
+msgid "No Request Body"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:159
+#, python-format
+msgid "No more floating ips in pool %s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:161
+msgid "No more floating ips available."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:201
+#: cinder/api/openstack/compute/contrib/floating_ips.py:230
+#: cinder/api/openstack/compute/contrib/security_groups.py:571
+#: cinder/api/openstack/compute/contrib/security_groups.py:604
+msgid "Missing parameter dict"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:204
+#: cinder/api/openstack/compute/contrib/floating_ips.py:233
+msgid "Address not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:213
+msgid "No fixed ips associated to instance"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:216
+msgid "Associate floating ip failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:144
+#, python-format
+msgid "Invalid status: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:148
+#, fuzzy, python-format
+msgid "Invalid mode: '%s'"
+msgstr "Invalid backend: %s"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:152
+#, python-format
+msgid "Invalid update setting: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:170
+#, python-format
+msgid "Putting host %(host)s in maintenance mode %(mode)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:181
+#, python-format
+msgid "Setting host %(host)s to %(state)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:230
+msgid "Describe-resource is admin only functionality"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:238
+msgid "Host not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:70
+msgid "Keypair name contains unsafe characters"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:95
+msgid "Keypair name must be between 1 and 255 characters long"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:100
+#, python-format
+msgid "Key pair '%s' already exists."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:52
+msgid "Missing 'networkId' argument for addFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:68
+msgid "Missing 'address' argument for removeFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:77
+#, python-format
+msgid "Unable to find address %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:62
+#, python-format
+msgid "Network does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:70
+#, python-format
+msgid "Disassociating network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:74
+#: cinder/api/openstack/compute/contrib/networks.py:91
+#: cinder/api/openstack/compute/contrib/networks.py:101
+msgid "Network not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:87
+#, python-format
+msgid "Showing network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:97
+#, python-format
+msgid "Deleting network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/scheduler_hints.py:41
+msgid "Malformed scheduler_hints attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:222
+msgid "Security group id should be integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:243
+msgid "Security group is still in use"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:295
+#, python-format
+msgid "Security group %s already exists"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:315
+#, python-format
+msgid "Security group %s is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:318
+#, python-format
+msgid "Security group %s cannot be empty."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:321
+#, python-format
+msgid "Security group %s should not be greater than 255 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:348
+msgid "Parent group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:351
+#, python-format
+msgid "Security group (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:369
+msgid "Not enough parameters to build a valid rule."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:376
+#, python-format
+msgid "This rule already exists in group %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:414
+msgid "Parent or group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:507
+msgid "Rule id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:510
+#, python-format
+msgid "Rule (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:574
+#: cinder/api/openstack/compute/contrib/security_groups.py:607
+msgid "Security group not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:578
+#: cinder/api/openstack/compute/contrib/security_groups.py:611
+msgid "Security group name cannot be empty"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:45
+#, python-format
+msgid "start instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:54
+#, python-format
+msgid "stop instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:73
+#: cinder/api/openstack/volume/volumes.py:106
+#, python-format
+msgid "vol=%s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:146
+#: cinder/api/openstack/volume/volumes.py:184
+#, python-format
+msgid "Delete volume with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:329
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(server_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:481
+#: cinder/api/openstack/volume/snapshots.py:110
+#, python-format
+msgid "Delete snapshot with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:524
+#: cinder/api/openstack/volume/snapshots.py:150
+#, python-format
+msgid "Create snapshot from volume %s"
+msgstr ""
+
+#: cinder/auth/fakeldap.py:33
+msgid "Attempted to instantiate singleton"
+msgstr ""
+
+#: cinder/auth/ldapdriver.py:650
+#, python-format
+msgid ""
+"Attempted to remove the last member of a group. Deleting the group at %s "
+"instead."
+msgstr ""
+
+#: cinder/auth/manager.py:298
+#, python-format
+msgid "Looking up user: %r"
+msgstr ""
+
+#: cinder/auth/manager.py:302
+#, python-format
+msgid "Failed authorization for access key %s"
+msgstr ""
+
+#: cinder/auth/manager.py:308
+#, python-format
+msgid "Using project name = user name (%s)"
+msgstr ""
+
+#: cinder/auth/manager.py:315
+#, python-format
+msgid "failed authorization: no project named %(pjid)s (user=%(uname)s)"
+msgstr ""
+
+#: cinder/auth/manager.py:324
+#, python-format
+msgid ""
+"Failed authorization: user %(uname)s not admin and not member of project "
+"%(pjname)s"
+msgstr ""
+
+#: cinder/auth/manager.py:331 cinder/auth/manager.py:343
+#, python-format
+msgid "user.secret: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:332 cinder/auth/manager.py:344
+#, python-format
+msgid "expected_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:333 cinder/auth/manager.py:345
+#, python-format
+msgid "signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:335 cinder/auth/manager.py:357
+#, python-format
+msgid "Invalid signature for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:353
+#, python-format
+msgid "host_only_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:449
+msgid "Must specify project"
+msgstr ""
+
+#: cinder/auth/manager.py:490
+#, python-format
+msgid "Adding role %(role)s to user %(uid)s in project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:493
+#, python-format
+msgid "Adding sitewide role %(role)s to user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:519
+#, python-format
+msgid "Removing role %(role)s from user %(uid)s on project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:522
+#, python-format
+msgid "Removing sitewide role %(role)s from user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:595
+#, python-format
+msgid "Created project %(name)s with manager %(manager_user)s"
+msgstr ""
+
+#: cinder/auth/manager.py:613
+#, python-format
+msgid "modifying project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:625
+#, python-format
+msgid "Adding user %(uid)s to project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:646
+#, python-format
+msgid "Remove user %(uid)s from project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:676
+#, python-format
+msgid "Deleting project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:734
+#, python-format
+msgid "Created user %(rvname)s (admin: %(rvadmin)r)"
+msgstr ""
+
+#: cinder/auth/manager.py:743
+#, python-format
+msgid "Deleting user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:753
+#, python-format
+msgid "Access Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:755
+#, python-format
+msgid "Secret Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:757
+#, python-format
+msgid "Admin status set to %(admin)r for user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:802
+#, python-format
+msgid "No vpn data for project %s"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:46
+#, fuzzy, python-format
+msgid "Instance type for vpn instances"
+msgstr "Invalid instance type %(instance_type)s."
+
+#: cinder/cloudpipe/pipelib.py:49
+msgid "Template for cloudpipe instance boot script"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:52
+msgid "Network to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:55
+msgid "Netmask to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:107
+#, python-format
+msgid "Launching VPN for %s"
+msgstr ""
+
+#: cinder/compute/api.py:141
+msgid "No compute host specified"
+msgstr ""
+
+#: cinder/compute/api.py:144
+#, python-format
+msgid "Unable to find host for Instance %s"
+msgstr ""
+
+#: cinder/compute/api.py:192
+#, python-format
+msgid ""
+"Quota exceeded for %(pid)s, tried to set %(num_metadata)s metadata "
+"properties"
+msgstr ""
+
+#: cinder/compute/api.py:203
+#, python-format
+msgid "Quota exceeded for %(pid)s, metadata property key or value too long"
+msgstr ""
+
+#: cinder/compute/api.py:257
+msgid "Cannot run any more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:259
+#, python-format
+msgid "Can only run %s more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:261
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances. "
+msgstr ""
+
+#: cinder/compute/api.py:310
+msgid "Creating a raw instance"
+msgstr ""
+
+#: cinder/compute/api.py:312
+#, python-format
+msgid "Using Kernel=%(kernel_id)s, Ramdisk=%(ramdisk_id)s"
+msgstr ""
+
+#: cinder/compute/api.py:383
+#, python-format
+msgid "Going to run %s instances..."
+msgstr ""
+
+#: cinder/compute/api.py:447
+#, python-format
+msgid "bdm %s"
+msgstr ""
+
+#: cinder/compute/api.py:474
+#, python-format
+msgid "block_device_mapping %s"
+msgstr ""
+
+#: cinder/compute/api.py:591
+#, python-format
+msgid "Sending create to scheduler for %(pid)s/%(uid)s's"
+msgstr ""
+
+#: cinder/compute/api.py:871
+msgid "Going to try to soft delete instance"
+msgstr ""
+
+#: cinder/compute/api.py:891
+msgid "No host for instance, deleting immediately"
+msgstr ""
+
+#: cinder/compute/api.py:939
+msgid "Going to try to terminate instance"
+msgstr ""
+
+#: cinder/compute/api.py:977
+msgid "Going to try to stop instance"
+msgstr ""
+
+#: cinder/compute/api.py:996
+msgid "Going to try to start instance"
+msgstr ""
+
+#: cinder/compute/api.py:1000
+#, python-format
+msgid "Instance %(instance_uuid)s is not stopped. (%(vm_state)s"
+msgstr ""
+
+#: cinder/compute/api.py:1071 cinder/volume/api.py:173
+#: cinder/volume/volume_types.py:64
+#, python-format
+msgid "Searching by: %s"
+msgstr ""
+
+#: cinder/compute/api.py:1201
+#, python-format
+msgid "Image type not recognized %s"
+msgstr ""
+
+#: cinder/compute/api.py:1369
+msgid "flavor_id is None. Assuming migration."
+msgstr ""
+
+#: cinder/compute/api.py:1377
+#, python-format
+msgid ""
+"Old instance type %(current_instance_type_name)s,  new instance type "
+"%(new_instance_type_name)s"
+msgstr ""
+
+#: cinder/compute/api.py:1644
+#, python-format
+msgid "multiple fixedips exist, using the first: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:57 cinder/compute/instance_types.py:65
+msgid "create arguments must be positive integers"
+msgstr ""
+
+#: cinder/compute/instance_types.py:76 cinder/volume/volume_types.py:41
+#, python-format
+msgid "DB error: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:86
+#, python-format
+msgid "Instance type %s not found for deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:138
+#, python-format
+msgid "check_instance_lock: decorating: |%s|"
+msgstr "check_instance_lock: decorating: |%s|"
+
+#: cinder/compute/manager.py:140
+#, python-format
+msgid ""
+"check_instance_lock: arguments: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+msgstr ""
+
+#: cinder/compute/manager.py:144
+#, python-format
+msgid "check_instance_lock: locked: |%s|"
+msgstr "check_instance_lock: locked: |%s|"
+
+#: cinder/compute/manager.py:146
+#, python-format
+msgid "check_instance_lock: admin: |%s|"
+msgstr "check_instance_lock: admin: |%s|"
+
+#: cinder/compute/manager.py:151
+#, python-format
+msgid "check_instance_lock: executing: |%s|"
+msgstr "check_instance_lock: executing: |%s|"
+
+#: cinder/compute/manager.py:155
+#, python-format
+msgid "check_instance_lock: not executing |%s|"
+msgstr "check_instance_lock: not executing |%s|"
+
+#: cinder/compute/manager.py:201
+#, python-format
+msgid "Unable to load the virtualization driver: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:223
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s has been destroyed from under us while trying "
+"to set it to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:240
+#, python-format
+msgid "Current state is %(drv_state)s, state in DB is %(db_state)s."
+msgstr ""
+
+#: cinder/compute/manager.py:245
+msgid "Rebooting instance after cinder-compute restart."
+msgstr ""
+
+#: cinder/compute/manager.py:255
+msgid "Hypervisor driver does not support firewall rules"
+msgstr ""
+
+#: cinder/compute/manager.py:260
+msgid "Checking state"
+msgstr ""
+
+#: cinder/compute/manager.py:329
+#, python-format
+msgid "Setting up bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:400
+#, python-format
+msgid "Instance %s already deleted from database. Attempting forceful vm deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:406
+#, python-format
+msgid "Exception encountered while terminating the instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:444
+#, python-format
+msgid "Instance %s not found."
+msgstr ""
+
+#: cinder/compute/manager.py:480
+msgid "Instance has already been created"
+msgstr "Instance has already been created"
+
+#: cinder/compute/manager.py:523
+#, python-format
+msgid ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:528
+#, python-format
+msgid ""
+"Image '%(image_id)s' size %(size_bytes)d exceeded instance_type allowed "
+"size %(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:538
+msgid "Starting instance..."
+msgstr ""
+
+#: cinder/compute/manager.py:548
+msgid "Skipping network allocation for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:561
+msgid "Instance failed network setup"
+msgstr ""
+
+#: cinder/compute/manager.py:565
+#, python-format
+msgid "Instance network_info: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:578
+msgid "Instance failed block device setup"
+msgstr ""
+
+#: cinder/compute/manager.py:594
+msgid "Instance failed to spawn"
+msgstr ""
+
+#: cinder/compute/manager.py:615
+msgid "Deallocating network for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:672
+#, python-format
+msgid "%(action_str)s instance"
+msgstr ""
+
+#: cinder/compute/manager.py:699
+#, python-format
+msgid "Ignoring DiskNotFound: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:708
+#, python-format
+msgid "terminating bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:742 cinder/compute/manager.py:1328
+#: cinder/compute/manager.py:1416 cinder/compute/manager.py:2501
+#, python-format
+msgid "%s. Setting instance vm_state to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:811
+#, python-format
+msgid ""
+"Cannot rebuild instance [%(instance_uuid)s], because the given image does"
+" not exist."
+msgstr ""
+
+#: cinder/compute/manager.py:816
+#, python-format
+msgid "Cannot rebuild instance [%(instance_uuid)s]: %(exc)s"
+msgstr ""
+
+#: cinder/compute/manager.py:823
+#, python-format
+msgid "Rebuilding instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:876
+#, python-format
+msgid "Rebooting instance %s"
+msgstr "Rebooting instance %s"
+
+#: cinder/compute/manager.py:891
+#, python-format
+msgid ""
+"trying to reboot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:933
+#, python-format
+msgid "instance %s: snapshotting"
+msgstr "instance %s: snapshotting"
+
+#: cinder/compute/manager.py:939
+#, python-format
+msgid ""
+"trying to snapshot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:995
+#, python-format
+msgid "Found %(num_images)d images (rotation: %(rotation)d)"
+msgstr ""
+
+#: cinder/compute/manager.py:1001
+#, python-format
+msgid "Rotating out %d backups"
+msgstr ""
+
+#: cinder/compute/manager.py:1005
+#, python-format
+msgid "Deleting image %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1035
+#, python-format
+msgid "Failed to set admin password. Instance %s is not running"
+msgstr ""
+
+#: cinder/compute/manager.py:1041
+#, python-format
+msgid "Instance %s: Root password set"
+msgstr ""
+
+#: cinder/compute/manager.py:1050
+msgid "set_admin_password is not implemented by this driver."
+msgstr ""
+
+#: cinder/compute/manager.py:1064
+msgid "Error setting admin password"
+msgstr ""
+
+#: cinder/compute/manager.py:1079
+#, python-format
+msgid ""
+"trying to inject a file into a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1084
+#, python-format
+msgid "instance %(instance_uuid)s: injecting file to %(path)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1098
+#, python-format
+msgid ""
+"trying to update agent on a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1103
+#, python-format
+msgid "instance %(instance_uuid)s: updating agent to %(url)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1116
+#, python-format
+msgid "instance %s: rescuing"
+msgstr "instance %s: rescuing"
+
+#: cinder/compute/manager.py:1141
+#, python-format
+msgid "instance %s: unrescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1270
+msgid "destination same as source!"
+msgstr ""
+
+#: cinder/compute/manager.py:1287
+#, python-format
+msgid "instance %s: migrating"
+msgstr ""
+
+#: cinder/compute/manager.py:1471
+#, python-format
+msgid "instance %s: pausing"
+msgstr "instance %s: pausing"
+
+#: cinder/compute/manager.py:1489
+#, python-format
+msgid "instance %s: unpausing"
+msgstr ""
+
+#: cinder/compute/manager.py:1525
+#, python-format
+msgid "instance %s: retrieving diagnostics"
+msgstr "instance %s: retrieving diagnostics"
+
+#: cinder/compute/manager.py:1534
+#, python-format
+msgid "instance %s: suspending"
+msgstr "instance %s: suspending"
+
+#: cinder/compute/manager.py:1556
+#, python-format
+msgid "instance %s: resuming"
+msgstr "instance %s: resuming"
+
+#: cinder/compute/manager.py:1579
+#, python-format
+msgid "instance %s: locking"
+msgstr "instance %s: locking"
+
+#: cinder/compute/manager.py:1588
+#, python-format
+msgid "instance %s: unlocking"
+msgstr "instance %s: unlocking"
+
+#: cinder/compute/manager.py:1596
+#, python-format
+msgid "instance %s: getting locked state"
+msgstr "instance %s: getting locked state"
+
+#: cinder/compute/manager.py:1606
+#, python-format
+msgid "instance %s: reset network"
+msgstr "instance %s: reset network"
+
+#: cinder/compute/manager.py:1614
+#, python-format
+msgid "instance %s: inject network info"
+msgstr ""
+
+#: cinder/compute/manager.py:1618
+#, python-format
+msgid "network_info to inject: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:1655
+#, python-format
+msgid "instance %s: getting vnc console"
+msgstr ""
+
+#: cinder/compute/manager.py:1685
+#, python-format
+msgid "Booting with volume %(volume_id)s at %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1703
+#, python-format
+msgid ""
+"instance %(instance_uuid)s: attaching volume %(volume_id)s to "
+"%(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1705
+#, python-format
+msgid "Attaching volume %(volume_id)s to %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1714
+#, python-format
+msgid "instance %(instance_uuid)s: attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1724
+#, python-format
+msgid "Attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1752
+#, python-format
+msgid "Detach volume %(volume_id)s from mountpoint %(mp)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1756
+#, python-format
+msgid "Detaching volume from unknown instance %s"
+msgstr "Detaching volume from unknown instance %s"
+
+#: cinder/compute/manager.py:1822
+#, python-format
+msgid ""
+"Creating tmpfile %s to notify to other compute nodes that they should "
+"mount the same storage."
+msgstr ""
+
+#: cinder/compute/manager.py:1884
+msgid "Instance has no volume."
+msgstr ""
+
+#: cinder/compute/manager.py:1916
+#, python-format
+msgid "plug_vifs() failed %(cnt)d.Retry up to %(max_retry)d for %(hostname)s."
+msgstr ""
+
+#: cinder/compute/manager.py:1973
+#, python-format
+msgid "Pre live migration failed at  %(dest)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2000
+msgid "post_live_migration() is started.."
+msgstr ""
+
+#: cinder/compute/manager.py:2030
+msgid "No floating_ip found"
+msgstr ""
+
+#: cinder/compute/manager.py:2038
+msgid "No floating_ip found."
+msgstr ""
+
+#: cinder/compute/manager.py:2040
+#, python-format
+msgid ""
+"Live migration: Unexpected error: cannot inherit floating ip.\n"
+"%(e)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2073
+#, python-format
+msgid "Migrating instance to %(dest)s finished successfully."
+msgstr ""
+
+#: cinder/compute/manager.py:2075
+msgid ""
+"You may see the error \"libvirt: QEMU error: Domain not found: no domain "
+"with matching name.\" This error can be safely ignored."
+msgstr ""
+
+#: cinder/compute/manager.py:2090
+msgid "Post operation of migraton started"
+msgstr ""
+
+#: cinder/compute/manager.py:2226
+#, python-format
+msgid "Updated the info_cache for instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:2255
+msgid "Updating bandwidth usage cache"
+msgstr ""
+
+#: cinder/compute/manager.py:2277
+msgid "Updating host status"
+msgstr ""
+
+#: cinder/compute/manager.py:2305
+#, python-format
+msgid ""
+"Found %(num_db_instances)s in the database and %(num_vm_instances)s on "
+"the hypervisor."
+msgstr ""
+
+#: cinder/compute/manager.py:2331
+#, python-format
+msgid ""
+"During the sync_power process the instance %(uuid)s has moved from host "
+"%(src)s to host %(dst)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2344
+#, python-format
+msgid ""
+"Instance %s is in the process of migrating to this host. Wait next "
+"sync_power cycle before setting power state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2350
+msgid ""
+"Instance found in database but not known by hypervisor. Setting power "
+"state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2380
+msgid "FLAGS.reclaim_instance_interval <= 0, skipping..."
+msgstr ""
+
+#: cinder/compute/manager.py:2392
+msgid "Reclaiming deleted instance"
+msgstr ""
+
+#: cinder/compute/manager.py:2458
+#, python-format
+msgid ""
+"Detected instance with name label '%(name)s' which is marked as DELETED "
+"but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2465
+#, python-format
+msgid ""
+"Destroying instance with name label '%(name)s' which is marked as DELETED"
+" but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2472
+#, python-format
+msgid "Unrecognized value '%(action)s' for FLAGS.running_deleted_instance_action"
+msgstr ""
+
+#: cinder/compute/manager.py:2542
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: unrecoverable state during operation on "
+"%(host)s"
+msgstr ""
+
+#: cinder/compute/utils.py:142
+msgid "v4 subnets are required for legacy nw_info"
+msgstr ""
+
+#: cinder/console/manager.py:77 cinder/console/vmrc_manager.py:70
+msgid "Adding console"
+msgstr ""
+
+#: cinder/console/manager.py:97
+#, python-format
+msgid "Tried to remove non-existant console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:122
+#, python-format
+msgid "Tried to remove non-existent console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:125
+#, python-format
+msgid "Removing console %(console_id)s."
+msgstr ""
+
+#: cinder/console/xvp.py:98
+msgid "Rebuilding xvp conf"
+msgstr ""
+
+#: cinder/console/xvp.py:116
+#, python-format
+msgid "Re-wrote %s"
+msgstr ""
+
+#: cinder/console/xvp.py:121
+msgid "Stopping xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:134
+msgid "Starting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:141
+#, python-format
+msgid "Error starting xvp: %s"
+msgstr ""
+
+#: cinder/console/xvp.py:144
+msgid "Restarting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:146
+msgid "xvp not running..."
+msgstr ""
+
+#: cinder/consoleauth/manager.py:63
+#, python-format
+msgid "Deleting Expired Token: (%s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:75
+#, python-format
+msgid "Received Token: %(token)s, %(token_dict)s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:79
+#, python-format
+msgid "Checking Token: %(token)s, %(token_valid)s)"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:57
+msgid "Use of empty request context is deprecated"
+msgstr "Use of empty request context is deprecated"
+
+#: cinder/db/sqlalchemy/api.py:198
+#, python-format
+msgid "Unrecognized read_deleted value '%s'"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:516 cinder/db/sqlalchemy/api.py:551
+#, python-format
+msgid "No ComputeNode for %(host)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4019 cinder/db/sqlalchemy/api.py:4045
+#, python-format
+msgid "No backend config with id %(sm_backend_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4103
+#, python-format
+msgid "No sm_flavor called %(sm_flavor)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4147
+#, python-format
+msgid "No sm_volume with id %(volume_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:66
+msgid "python-migrate is not installed. Exiting."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:78
+msgid "version should be an integer"
+msgstr ""
+
+#: cinder/db/sqlalchemy/session.py:137
+#, python-format
+msgid "SQL connection failed. %s attempts left."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:48
+msgid "interface column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:80
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:54
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:48
+#, python-format
+msgid "Table |%s| not created!"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:87
+msgid "VIF column not added to fixed_ips table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:97
+#, python-format
+msgid "join list for moving mac_addresses |%s|"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:39
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:60
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:99
+msgid "foreign key constraint couldn't be added"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:58
+msgid "foreign key constraint couldn't be dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py:34
+msgid "priority column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:41
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:42
+#: cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py:56
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:68
+msgid "foreign key constraint couldn't be removed"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py:34
+msgid "progress column not added to instances table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py:97
+#, python-format
+msgid ""
+"Could not cast flavorid to integer: %s. Set flavorid to an integer-like "
+"string to downgrade."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:69
+msgid "instance_info_caches tables not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py:41
+msgid "progress column not added to compute_nodes table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:76
+msgid "dns_domains table not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:60
+msgid "quota_classes table not dropped"
+msgstr ""
+
+#: cinder/image/glance.py:147
+msgid "Connection error contacting glance server, retrying"
+msgstr ""
+
+#: cinder/image/glance.py:153 cinder/network/quantum/melange_connection.py:104
+msgid "Maximum attempts reached"
+msgstr ""
+
+#: cinder/image/glance.py:278
+#, python-format
+msgid "Creating image in Glance. Metadata passed in %s"
+msgstr ""
+
+#: cinder/image/glance.py:281
+#, python-format
+msgid "Metadata after formatting for Glance %s"
+msgstr ""
+
+#: cinder/image/glance.py:289
+#, python-format
+msgid "Metadata returned from Glance formatted for Base %s"
+msgstr ""
+
+#: cinder/image/glance.py:331 cinder/image/glance.py:335
+msgid "Not the image owner"
+msgstr ""
+
+#: cinder/image/glance.py:410
+#, python-format
+msgid "%(timestamp)s does not follow any of the signatures: %(iso_formats)s"
+msgstr ""
+
+#: cinder/image/s3.py:309
+#, python-format
+msgid "Failed to download %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:328
+#, python-format
+msgid "Failed to decrypt %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:340
+#, python-format
+msgid "Failed to untar %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:353
+#, python-format
+msgid "Failed to upload %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:379
+#, python-format
+msgid "Failed to decrypt private key: %s"
+msgstr ""
+
+#: cinder/image/s3.py:387
+#, python-format
+msgid "Failed to decrypt initialization vector: %s"
+msgstr ""
+
+#: cinder/image/s3.py:398
+#, python-format
+msgid "Failed to decrypt image file %(image_file)s: %(err)s"
+msgstr ""
+
+#: cinder/image/s3.py:410
+msgid "Unsafe filenames in image"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:38 cinder/ipv6/rfc2462.py:34
+#, python-format
+msgid "Bad mac for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:40 cinder/ipv6/rfc2462.py:36
+#, python-format
+msgid "Bad prefix for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:42
+#, python-format
+msgid "Bad project_id for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/network/ldapdns.py:321
+msgid "This driver only supports type 'a' entries."
+msgstr ""
+
+#: cinder/network/linux_net.py:166
+#, python-format
+msgid "Attempted to remove chain %s which does not exist"
+msgstr ""
+
+#: cinder/network/linux_net.py:192
+#, python-format
+msgid "Unknown chain: %r"
+msgstr ""
+
+#: cinder/network/linux_net.py:215
+#, python-format
+msgid ""
+"Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r "
+"%(top)r"
+msgstr ""
+
+#: cinder/network/linux_net.py:335
+msgid "IPTablesManager.apply completed with success"
+msgstr ""
+
+#: cinder/network/linux_net.py:694
+#, python-format
+msgid "Hupping dnsmasq threw %s"
+msgstr "Hupping dnsmasq threw %s"
+
+#: cinder/network/linux_net.py:696
+#, python-format
+msgid "Pid %d is stale, relaunching dnsmasq"
+msgstr "Pid %d is stale, relaunching dnsmasq"
+
+#: cinder/network/linux_net.py:756
+#, python-format
+msgid "killing radvd threw %s"
+msgstr "killing radvd threw %s"
+
+#: cinder/network/linux_net.py:758
+#, python-format
+msgid "Pid %d is stale, relaunching radvd"
+msgstr "Pid %d is stale, relaunching radvd"
+
+#: cinder/network/linux_net.py:967
+#, python-format
+msgid "Starting VLAN inteface %s"
+msgstr "Starting VLAN inteface %s"
+
+#: cinder/network/linux_net.py:999
+#, python-format
+msgid "Starting Bridge interface for %s"
+msgstr "Starting Bridge interface for %s"
+
+#: cinder/network/linux_net.py:1142
+#, fuzzy, python-format
+msgid "Starting bridge %s "
+msgstr "Starting Bridge interface for %s"
+
+#: cinder/network/linux_net.py:1149
+#, python-format
+msgid "Done starting bridge %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1167
+#, python-format
+msgid "Failed unplugging gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/linux_net.py:1170
+#, python-format
+msgid "Unplugged gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/manager.py:291
+#, python-format
+msgid "Fixed ip %(fixed_ip_id)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:300 cinder/network/manager.py:496
+#, python-format
+msgid "Interface %(interface)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:315
+#, python-format
+msgid "floating IP allocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:353
+#, python-format
+msgid "floating IP deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:386
+#, python-format
+msgid "Address |%(address)s| is not allocated"
+msgstr ""
+
+#: cinder/network/manager.py:390
+#, python-format
+msgid "Address |%(address)s| is not allocated to your project |%(project)s|"
+msgstr ""
+
+#: cinder/network/manager.py:402
+#, python-format
+msgid "Quota exceeded for %s, tried to allocate address"
+msgstr ""
+
+#: cinder/network/manager.py:614
+#, python-format
+msgid ""
+"Database inconsistency: DNS domain |%s| is registered in the Cinder db but "
+"not visible to either the floating or instance DNS driver. It will be "
+"ignored."
+msgstr ""
+
+#: cinder/network/manager.py:660
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing zone to |%(av_zone)s|."
+msgstr ""
+
+#: cinder/network/manager.py:670
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing project to |%(project)s|."
+msgstr ""
+
+#: cinder/network/manager.py:778
+#, python-format
+msgid "Disassociated %s stale fixed ip(s)"
+msgstr ""
+
+#: cinder/network/manager.py:782
+msgid "setting network host"
+msgstr ""
+
+#: cinder/network/manager.py:896
+#, python-format
+msgid "network allocations for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:901
+#, python-format
+msgid "networks retrieved for instance |%(instance_id)s|: |%(networks)s|"
+msgstr ""
+
+#: cinder/network/manager.py:930
+#, python-format
+msgid "network deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:1152
+#, python-format
+msgid ""
+"instance-dns-zone is |%(domain)s|, which is in availability zone "
+"|%(zone)s|. Instance |%(instance)s| is in zone |%(zone2)s|. No DNS record"
+" will be created."
+msgstr ""
+
+#: cinder/network/manager.py:1227
+#, python-format
+msgid "Unable to release %s because vif doesn't exist."
+msgstr ""
+
+#: cinder/network/manager.py:1244
+#, python-format
+msgid "Leased IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1248
+#, python-format
+msgid "IP %s leased that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1256
+#, python-format
+msgid "IP |%s| leased that isn't allocated"
+msgstr ""
+
+#: cinder/network/manager.py:1261
+#, python-format
+msgid "Released IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1265
+#, python-format
+msgid "IP %s released that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1268
+#, python-format
+msgid "IP %s released that was not leased"
+msgstr ""
+
+#: cinder/network/manager.py:1331
+msgid "cidr already in use"
+msgstr ""
+
+#: cinder/network/manager.py:1334
+#, python-format
+msgid "requested cidr (%(cidr)s) conflicts with existing supernet (%(super)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1345
+#, python-format
+msgid ""
+"requested cidr (%(cidr)s) conflicts with existing smaller cidr "
+"(%(smaller)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1404
+msgid "Network already exists!"
+msgstr ""
+
+#: cinder/network/manager.py:1423
+#, python-format
+msgid "Network must be disassociated from project %s before delete"
+msgstr ""
+
+#: cinder/network/manager.py:1832
+msgid ""
+"The sum between the number of networks and the vlan start cannot be "
+"greater than 4094"
+msgstr ""
+
+#: cinder/network/manager.py:1839
+#, python-format
+msgid ""
+"The network range is not big enough to fit %(num_networks)s. Network size"
+" is %(network_size)s"
+msgstr ""
+
+#: cinder/network/minidns.py:65
+msgid "This driver only supports type 'a'"
+msgstr ""
+
+#: cinder/network/quantum/client.py:154
+msgid "Tenant ID not set"
+msgstr ""
+
+#: cinder/network/quantum/client.py:180
+#, python-format
+msgid "Quantum Client Request: %(method)s %(action)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:196
+#, python-format
+msgid "Quantum entity not found: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:206
+#, python-format
+msgid "Server %(status_code)s error: %(data)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:210
+#, python-format
+msgid "Unable to connect to server. Got error: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:228
+#, python-format
+msgid "unable to deserialize object of type = '%s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:162
+msgid "QuantumManager does not use 'multi_host' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:166
+msgid "QuantumManager requires that only one network is created per call"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:176
+msgid "QuantumManager does not use 'vlan_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:182
+msgid "QuantumManager does not use 'vpn_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:186
+msgid "QuantumManager does not use 'bridge' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:190
+msgid "QuantumManager does not use 'bridge_interface' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:195
+msgid "QuantumManager requires a valid (.1) gateway address."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:204
+#, python-format
+msgid ""
+"Unable to find existing quantum network for tenant '%(q_tenant_id)s' with"
+" net-id '%(quantum_net_id)s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:301
+#, python-format
+msgid "network allocations for instance %s"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:588
+#, python-format
+msgid ""
+"port deallocation failed for instance: |%(instance_id)s|, port_id: "
+"|%(port_id)s|"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:606
+#, python-format
+msgid ""
+"ipam deallocation failed for instance: |%(instance_id)s|, vif_uuid: "
+"|%(vif_uuid)s|"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:96
+#, python-format
+msgid "Server returned error: %s"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:98
+msgid "Connection error contacting melange service, retrying"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:108
+#, python-format
+msgid ""
+"allocate IP on network |%(network_id)s| belonging to "
+"|%(network_tenant_id)s| to this vif |%(vif_id)s| with mac "
+"|%(mac_address)s| belonging to |%(project_id)s| "
+msgstr ""
+
+#: cinder/network/quantum/melange_ipam_lib.py:133
+msgid "get_project_and_global_net_ids must be called with a non-null project_id"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:75
+msgid "Error creating network entry"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:90
+#, python-format
+msgid "No network with net_id = %s"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:221
+#, python-format
+msgid "No fixed IPs to deallocate for vif %s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:99
+#, python-format
+msgid "Connecting interface %(interface_id)s to net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:113
+#, python-format
+msgid "Deleting port %(port_id)s on net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/notifier/api.py:115
+#, python-format
+msgid "%s not in valid priorities"
+msgstr ""
+
+#: cinder/notifier/api.py:130
+#, python-format
+msgid ""
+"Problem '%(e)s' attempting to send to notification system. "
+"Payload=%(payload)s"
+msgstr ""
+
+#: cinder/notifier/list_notifier.py:65
+#, python-format
+msgid "Problem '%(e)s' attempting to send to notification driver %(driver)s."
+msgstr ""
+
+#: cinder/notifier/rabbit_notifier.py:46
+#, python-format
+msgid "Could not send notification to %(topic)s. Payload=%(message)s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:146
+#, python-format
+msgid "Returning exception %s to caller"
+msgstr ""
+
+#: cinder/rpc/amqp.py:188
+#, python-format
+msgid "unpacked context: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:231
+#, python-format
+msgid "received %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:236
+#, python-format
+msgid "no method for message: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:237
+#, python-format
+msgid "No method for message: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:321
+#, python-format
+msgid "Making asynchronous call on %s ..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:324
+#, python-format
+msgid "MSG_ID is %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:346
+#, python-format
+msgid "Making asynchronous cast on %s..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:354
+msgid "Making asynchronous fanout cast..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:379
+#, python-format
+msgid "Sending notification on %s..."
+msgstr ""
+
+#: cinder/rpc/common.py:54
+#, python-format
+msgid ""
+"Remote error: %(exc_type)s %(value)s\n"
+"%(traceback)s."
+msgstr ""
+
+#: cinder/rpc/common.py:71
+msgid "Timeout while waiting on RPC response."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:111
+msgid "Failed to process message... skipping it."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:407
+#, python-format
+msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:430
+#, python-format
+msgid "Connected to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:466
+#, python-format
+msgid ""
+"Unable to connect to AMQP server on %(hostname)s:%(port)d after "
+"%(max_retries)d tries: %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:482
+#, python-format
+msgid ""
+"AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying "
+"again in %(sleep_time)d seconds."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:533 cinder/rpc/impl_qpid.py:385
+#, python-format
+msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:551 cinder/rpc/impl_qpid.py:400
+#, python-format
+msgid "Timed out waiting for RPC response: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:555 cinder/rpc/impl_qpid.py:404
+#, python-format
+msgid "Failed to consume message from queue: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:589 cinder/rpc/impl_qpid.py:434
+#, python-format
+msgid "Failed to publish message to topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:341
+#, python-format
+msgid "Unable to connect to AMQP server: %s "
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:346
+#, python-format
+msgid "Connected to AMQP server on %s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:354
+msgid "Re-established AMQP queues"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:412
+msgid "Error processing message.  Skipping it."
+msgstr ""
+
+#: cinder/scheduler/chance.py:47 cinder/scheduler/simple.py:91
+#: cinder/scheduler/simple.py:143
+msgid "Is the appropriate service running?"
+msgstr ""
+
+#: cinder/scheduler/chance.py:52
+msgid "Could not find another compute"
+msgstr ""
+
+#: cinder/scheduler/driver.py:63
+#, python-format
+msgid "Casted '%(method)s' to volume '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:80
+#, python-format
+msgid "Casted '%(method)s' to compute '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:89
+#, python-format
+msgid "Casted '%(method)s' to network '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:107
+#, python-format
+msgid "Casted '%(method)s' to %(topic)s '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:181
+msgid "Must implement a fallback schedule"
+msgstr ""
+
+#: cinder/scheduler/driver.py:185
+msgid "Driver must implement schedule_prep_resize"
+msgstr ""
+
+#: cinder/scheduler/driver.py:190
+msgid "Driver must implement schedule_run_instance"
+msgstr ""
+
+#: cinder/scheduler/driver.py:325
+msgid "Block migration can not be used with shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:330
+msgid "Live migration can not be used without shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:367 cinder/scheduler/driver.py:457
+#, python-format
+msgid "host %(dest)s is not compatible with original host %(src)s."
+msgstr ""
+
+#: cinder/scheduler/driver.py:416
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"memory(host:%(avail)s <= instance:%(mem_inst)s)"
+msgstr ""
+
+#: cinder/scheduler/driver.py:472
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"disk(host:%(available)s <= instance:%(necessary)s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:51
+#, python-format
+msgid "No host selection for %s defined."
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:64
+#, python-format
+msgid "Attempting to build %(num_instances)d instance(s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:157
+msgid "Scheduler only understands Compute nodes (for now)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:199
+#, python-format
+msgid "Filtered %(hosts)s"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:209
+#, python-format
+msgid "Weighted %(weighted_host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:144
+#, python-format
+msgid "Host filter fails for ignored host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:151
+#, python-format
+msgid "Host filter fails for non-forced host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:157
+#, python-format
+msgid "Host filter function %(func)s failed for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:163
+#, python-format
+msgid "Host filter passes for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:272
+#, python-format
+msgid "Received %(service_name)s service update from %(host)s."
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:313
+msgid "host_manager only implemented for 'compute'"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:323
+#, python-format
+msgid "No service for compute ID %s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:85
+#, python-format
+msgid ""
+"Driver Method %(driver_method_name)s missing: %(e)s. Reverting to "
+"schedule()"
+msgstr ""
+
+#: cinder/scheduler/manager.py:150
+#, python-format
+msgid "Failed to schedule_%(method)s: %(ex)s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:159
+#, python-format
+msgid "Setting instance %(instance_uuid)s to %(state)s state."
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:66
+#, python-format
+msgid "Could not stat scheduler options file %(filename)s: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:75
+#, python-format
+msgid "Could not decode scheduler options: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/simple.py:87
+msgid "Not enough allocatable CPU cores remaining"
+msgstr ""
+
+#: cinder/scheduler/simple.py:137
+msgid "Not enough allocatable volume gigabytes remaining"
+msgstr ""
+
+#: cinder/scheduler/filters/core_filter.py:45
+msgid "VCPUs not set; assuming CPU collection broken"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:72
+#, python-format
+msgid "Faking execution of cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:80
+#, python-format
+msgid "Faked command matched %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:96
+#, python-format
+msgid "Faked command raised an exception %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:101
+#, python-format
+msgid "Reply to faked command is stdout='%(stdout)s' stderr='%(stderr)s'"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:784
+msgid "Please extend mock libvirt module to support flags"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:790
+msgid "Please extend fake libvirt module to support this auth method"
+msgstr ""
+
+#: cinder/tests/test_compute.py:365 cinder/tests/test_compute.py:1419
+#, python-format
+msgid "Running instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:371
+#, python-format
+msgid "After terminating instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:589
+msgid "Internal error"
+msgstr ""
+
+#: cinder/tests/test_compute.py:1430
+#, python-format
+msgid "After force-killing instances: %s"
+msgstr ""
+
+#: cinder/tests/test_misc.py:92
+#, python-format
+msgid ""
+"The following migrations are missing a downgrade:\n"
+"\t%s"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:169
+msgid "id"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:170
+msgid "IPv4"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:171
+msgid "IPv6"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:172
+msgid "start address"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:173
+msgid "DNS1"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:174
+msgid "DNS2"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:175
+msgid "VlanID"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:176
+msgid "project"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:177
+msgid "uuid"
+msgstr ""
+
+#: cinder/tests/test_volume.py:216
+#, python-format
+msgid "Target %s allocated"
+msgstr ""
+
+#: cinder/tests/test_volume.py:468
+#, python-format
+msgid "Cannot confirm exported volume id:%s."
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:58
+#, python-format
+msgid "Given data: %s"
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:59
+#, python-format
+msgid "Result data: %s"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:626
+#, python-format
+msgid "Creating files in %s to simulate guest agent"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:637
+#, python-format
+msgid "Removing simulated guest agent files in %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/test_servers.py:2144
+#, python-format
+msgid "Quota exceeded: code=%(code)s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:57
+#, python-format
+msgid "_create: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:66
+#, python-format
+msgid "_delete: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:75
+#, python-format
+msgid "_get: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:85
+#, python-format
+msgid "_get_all: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:125
+#, python-format
+msgid "test_snapshot_create: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:134
+#, python-format
+msgid "test_snapshot_create: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:156
+#, python-format
+msgid "test_snapshot_create_force: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:165
+#, python-format
+msgid "test_snapshot_create_force: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:205
+#, python-format
+msgid "test_snapshot_show: resp=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:231
+#, python-format
+msgid "test_snapshot_detail: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/integrated/test_login.py:31
+#, python-format
+msgid "flavor: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:38
+#, python-format
+msgid ""
+"%(message)s\n"
+"Status Code: %(_status)s\n"
+"Body: %(_body)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:47
+msgid "Authentication error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:55
+msgid "Authorization error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:63
+msgid "Item not found"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:105
+#, python-format
+msgid "Doing %(method)s on %(relative_url)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:107
+#, python-format
+msgid "Body: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:125
+#, python-format
+msgid "%(auth_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:151
+#, python-format
+msgid "%(relative_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:161
+msgid "Unexpected status code"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:168
+#, python-format
+msgid "Decoding JSON: %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:133
+#, python-format
+msgid "Nested received %(queue)s, %(value)s"
+msgstr "Nested received %(queue)s, %(value)s"
+
+#: cinder/tests/rpc/common.py:142
+#, python-format
+msgid "Nested return %s"
+msgstr "Nested return %s"
+
+#: cinder/tests/rpc/common.py:160
+msgid "RPC backend does not support timeouts"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:227 cinder/tests/rpc/common.py:233
+#, python-format
+msgid "Received %s"
+msgstr "Received %s"
+
+#: cinder/virt/connection.py:85
+msgid "Failed to open connection to the hypervisor"
+msgstr "Failed to open connection to the hypervisor"
+
+#: cinder/virt/fake.py:270 cinder/virt/xenapi_conn.py:396
+#: cinder/virt/baremetal/proxy.py:716 cinder/virt/libvirt/connection.py:2045
+#, python-format
+msgid "Compute_service record created for %s "
+msgstr ""
+
+#: cinder/virt/fake.py:273 cinder/virt/xenapi_conn.py:399
+#: cinder/virt/baremetal/proxy.py:720 cinder/virt/libvirt/connection.py:2048
+#, python-format
+msgid "Compute_service record updated for %s "
+msgstr ""
+
+#: cinder/virt/firewall.py:130
+#, python-format
+msgid "Attempted to unfilter instance %s which is not filtered"
+msgstr ""
+
+#: cinder/virt/firewall.py:137
+#, python-format
+msgid "Filters added to instance %s"
+msgstr ""
+
+#: cinder/virt/firewall.py:139
+msgid "Provider Firewall Rules refreshed"
+msgstr ""
+
+#: cinder/virt/firewall.py:291
+#, python-format
+msgid "Adding security group rule: %r"
+msgstr ""
+
+#: cinder/virt/firewall.py:403 cinder/virt/xenapi/firewall.py:87
+#, python-format
+msgid "Adding provider rule: %s"
+msgstr ""
+
+#: cinder/virt/images.py:86
+msgid "'qemu-img info' parsing failed."
+msgstr ""
+
+#: cinder/virt/images.py:92
+#, python-format
+msgid "fmt=%(fmt)s backed by: %(backing_file)s"
+msgstr ""
+
+#: cinder/virt/images.py:104
+#, python-format
+msgid "Converted to raw, but format is now %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:105
+msgid ""
+"Must specify vmwareapi_host_ip,vmwareapi_host_username and "
+"vmwareapi_host_password to useconnection_type=vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:276
+#, python-format
+msgid "In vmwareapi:_create_session, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:359
+#, python-format
+msgid "In vmwareapi:_call_method, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:398
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: success"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:404
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: error %(error_info)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:409
+#, python-format
+msgid "In vmwareapi:_poll_task, Got this error %s"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:140
+msgid ""
+"Must specify xenapi_connection_url, xenapi_connection_username "
+"(optionally), and xenapi_connection_password to use "
+"connection_type=xenapi"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:329 cinder/virt/libvirt/connection.py:472
+msgid "Could not determine iscsi initiator name"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:460
+msgid "Host startup on XenServer is not supported."
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:489
+msgid "Unable to log in to XenAPI (is the Dom0 disk full?)"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:527
+msgid "Host is member of a pool, but DB says otherwise"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:599 cinder/virt/xenapi_conn.py:612
+#, python-format
+msgid "Got exception: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:93
+msgid "No domains exist."
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:95
+#, python-format
+msgid "============= initial domains =========== : %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:99
+msgid "Building domain: to be removed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:103
+msgid "Not running domain: remove"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:111
+msgid "domain running on an unknown node: discarded"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:127
+#, python-format
+msgid "No such domain (%s)"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:134
+#, python-format
+msgid "Failed power down Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:143
+msgid "deactivate -> activate fails"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:153
+msgid "destroy_domain: no such domain"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:154
+#, python-format
+msgid "No such domain %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:161
+#, python-format
+msgid "Domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:163
+#, python-format
+msgid "Nodes: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:166
+#, python-format
+msgid "After storing domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:169
+msgid "deactivation/removing domain failed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:176
+msgid "===== Domain is being created ====="
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:179
+msgid "Same domain name already exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:181
+msgid "create_domain: before get_idle_node"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:198
+#, python-format
+msgid "Created new domain: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:213
+#, python-format
+msgid "Failed to boot Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:222
+msgid "No such domain exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:226
+#, python-format
+msgid "change_domain_state: to new state %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:233
+#, python-format
+msgid "Stored fake domains to the file: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:244
+msgid "domain does not exist"
+msgstr ""
+
+#: cinder/virt/baremetal/nodes.py:42
+#, python-format
+msgid "Unknown baremetal driver %(d)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:148
+#, python-format
+msgid "Error encountered when destroying instance '%(name)s': %(ex)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:162
+#, python-format
+msgid "instance %(instance_name)s: deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:189
+#, python-format
+msgid "instance %s: rebooted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:192
+msgid "_wait_for_reboot failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:222
+#, python-format
+msgid "instance %s: rescued"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:225
+msgid "_wait_for_rescue failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:242
+msgid "<============= spawn of baremetal =============>"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:255
+#, python-format
+msgid "instance %s: is building"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:260
+msgid "Key is injected but instance is not running yet"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:265
+#, python-format
+msgid "instance %s: booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:268
+#, python-format
+msgid "~~~~~~ current state = %s ~~~~~~"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:269
+#, python-format
+msgid "instance %s spawned successfully"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:272
+#, python-format
+msgid "instance %s:not booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:274
+msgid "Bremetal assignment is overcommitted."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:354
+#, python-format
+msgid "instance %s: Creating image"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:473
+#, python-format
+msgid "instance %(inst_name)s: injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:484
+#, python-format
+msgid ""
+"instance %(inst_name)s: ignoring error injecting data into image "
+"%(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:529
+#, python-format
+msgid "instance %s: starting toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:531
+#, python-format
+msgid "instance %s: finished toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:574 cinder/virt/libvirt/connection.py:1815
+msgid ""
+"Cannot get the number of cpu, because this function is not implemented "
+"for this platform. This error can be safely ignored for now."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:714
+#, python-format
+msgid "#### RLK: cpu_arch = %s "
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:746
+msgid "Updating!"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:773 cinder/virt/libvirt/connection.py:2609
+#: cinder/virt/xenapi/host.py:129
+msgid "Updating host stats"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:185
+msgid "free_node...."
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:216
+#, python-format
+msgid "deactivate_node is called for node_id = %(id)s node_ip = %(ip)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:221
+msgid "status of node is set to 0"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:232
+msgid "rootfs is already removed"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:264
+msgid "Before ping to the bare-metal node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:275
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is ready"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:279
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is not ready, out_msg=%(out_msg)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:292
+msgid "Noting to do for tilera nodes: vmlinux is in CF"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:316
+msgid "activate_node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:330
+msgid "Node is unknown error state."
+msgstr ""
+
+#: cinder/virt/disk/api.py:165
+msgid "no capable image handler configured"
+msgstr ""
+
+#: cinder/virt/disk/api.py:178
+#, python-format
+msgid "unknown disk image handler: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:189
+msgid "image already mounted"
+msgstr ""
+
+#: cinder/virt/disk/api.py:276 cinder/virt/disk/guestfs.py:64
+#: cinder/virt/disk/guestfs.py:78 cinder/virt/disk/mount.py:100
+#, python-format
+msgid "Failed to mount filesystem: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:291
+#, python-format
+msgid "Failed to remove container: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:441
+#, python-format
+msgid "User %(username)s not found in password file."
+msgstr ""
+
+#: cinder/virt/disk/api.py:457
+#, python-format
+msgid "User %(username)s not found in shadow file."
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:39
+#, python-format
+msgid "unsupported partition: %s"
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:77
+msgid "unknown guestmount error"
+msgstr ""
+
+#: cinder/virt/disk/loop.py:30
+#, python-format
+msgid "Could not attach image to loopback: %s"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:76
+msgid "no partitions found"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:77
+#, python-format
+msgid "Failed to map partitions: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:58
+msgid "nbd unavailable: module not loaded"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:63
+msgid "No free nbd devices"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:81
+#, python-format
+msgid "qemu-nbd error: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:93
+#, python-format
+msgid "nbd device %s did not show up"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:265
+#, python-format
+msgid "Connecting to libvirt: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:286
+msgid "Connection to libvirt broke"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:388
+#, python-format
+msgid "Error from libvirt during destroy. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:400
+#, python-format
+msgid ""
+"Error from libvirt during saved instance removal. Code=%(errcode)s "
+"Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:411
+#, python-format
+msgid "Error from libvirt during undefine. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:423
+msgid "Instance destroyed successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:435
+#, python-format
+msgid "Error from libvirt during unfilter. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:461
+#, python-format
+msgid "Deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:554
+msgid "attaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:567
+msgid "detaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:692
+#, fuzzy, python-format
+msgid "Instance soft rebooted successfully."
+msgstr "volume %s: created successfully"
+
+#: cinder/virt/libvirt/connection.py:696
+msgid "Failed to soft reboot instance."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:725
+msgid "Instance shutdown successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:761 cinder/virt/libvirt/connection.py:905
+msgid "During reboot, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:766
+msgid "Instance rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:867 cinder/virt/xenapi/vmops.py:1358
+#, python-format
+msgid ""
+"Found %(migration_count)d unconfirmed migrations older than "
+"%(confirm_window)d seconds"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:871
+#, python-format
+msgid "Automatically confirming migration %d"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:896
+msgid "Instance is running"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:910
+msgid "Instance spawned successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:926
+#, python-format
+msgid "data: %(data)r, fpath: %(fpath)r"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:978
+#, fuzzy
+msgid "Guest does not have a console available"
+msgstr "User does not have admin privileges"
+
+#: cinder/virt/libvirt/connection.py:1020
+#, python-format
+msgid "Path '%(path)s' supports direct I/O"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1024
+#, python-format
+msgid "Path '%(path)s' does not support direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1028 cinder/virt/libvirt/connection.py:1032
+#, python-format
+msgid "Error on '%(path)s' while checking direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1153
+msgid "Creating image"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1339
+#, python-format
+msgid "Injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1349
+#, python-format
+msgid "Ignoring error injecting data into image %(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1381
+#, python-format
+msgid "block_device_list %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1658
+msgid "Starting toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1662
+msgid "Finished toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1679
+#, python-format
+msgid ""
+"Error from libvirt while looking up %(instance_name)s: [Error Code "
+"%(error_code)s] %(ex)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1920
+msgid "libvirt version is too old (does not support getVersion)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1942
+#, python-format
+msgid "'<cpu>' must be 1, but %d\n"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1969
+#, python-format
+msgid "topology (%(topology)s) must have %(ks)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2067
+#, python-format
+msgid ""
+"Instance launched has CPU info:\n"
+"%s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2079
+#, python-format
+msgid ""
+"CPU doesn't have compatibility.\n"
+"\n"
+"%(ret)s\n"
+"\n"
+"Refer to %(u)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2136
+#, python-format
+msgid "Timeout migrating for %s. nwfilter not found."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2352
+#, python-format
+msgid "skipping %(path)s since it looks like volume"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2407
+#, python-format
+msgid "Getting disk size of %(i_name)s: %(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2458
+#, python-format
+msgid "Instance %s: Starting migrate_disk_and_power_off"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2513
+msgid "During wait running, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2518
+msgid "Instance running successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2525
+#, python-format
+msgid "Instance %s: Starting finish_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2565
+#, python-format
+msgid "Instance %s: Starting finish_revert_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:42
+msgid ""
+"Libvirt module could not be loaded. NWFilterFirewall will not work "
+"correctly."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:93
+msgid "Called setup_basic_filtering in nwfilter"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:101
+msgid "Ensuring static filters"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:171
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:217
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) for%(name)s is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:233
+msgid "iptables firewall: Setup Basic Filtering"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:252
+msgid "Attempted to unfilter instance which is not filtered"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:170
+#, python-format
+msgid "%s is a valid instance name"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:173
+#, python-format
+msgid "%s has a disk file"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:175
+#, python-format
+msgid "Instance %(instance)s is backed by %(backing)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:186
+#, python-format
+msgid ""
+"Instance %(instance)s is using a backing file %(backing)s which does not "
+"appear in the image service"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:237
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification failed"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:247
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification skipped, no hash stored"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:266
+#, python-format
+msgid "Cannot remove %(base_file)s, it does not exist"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:278
+#, python-format
+msgid "Base file too young to remove: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:281
+#, python-format
+msgid "Removing base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:288
+#, python-format
+msgid "Failed to remove %(base_file)s, error was %(error)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:299
+#, python-format
+msgid "%(id)s (%(base_file)s): checking"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:318
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): in use: on this node %(local)d local, %(remote)d "
+"on other nodes"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:330
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): warning -- an absent base file is in use! "
+"instances: %(instance_list)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:338
+#, python-format
+msgid "%(id)s (%(base_file)s): in use on (%(remote)d on other nodes)"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:348
+#, python-format
+msgid "%(id)s (%(base_file)s): image is not in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:354
+#, python-format
+msgid "%(id)s (%(base_file)s): image is in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:377
+#, python-format
+msgid "Skipping verification, no base directory at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:381
+msgid "Verify base images"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:388
+#, python-format
+msgid "Image id %(id)s yields fingerprint %(fingerprint)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:406
+#, python-format
+msgid "Unknown base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:411
+#, python-format
+msgid "Active base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:414
+#, python-format
+msgid "Corrupt base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:418
+#, python-format
+msgid "Removable base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:426
+msgid "Verification complete"
+msgstr ""
+
+#: cinder/virt/libvirt/utils.py:264
+msgid "Unable to find an open port"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:90
+#, python-format
+msgid "Ensuring vlan %(vlan)s and bridge %(bridge)s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:99
+#, python-format
+msgid "Ensuring bridge %s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:165 cinder/virt/libvirt/vif.py:220
+#, python-format
+msgid "Failed while unplugging vif of instance '%s'"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:163
+#, python-format
+msgid "iSCSI device not found at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:166
+#, python-format
+msgid ""
+"ISCSI volume not yet found at: %(mount_device)s. Will rescan & retry.  "
+"Try number: %(tries)s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:178
+#, python-format
+msgid "Found iSCSI node %(mount_device)s (after %(tries)s rescans)"
+msgstr ""
+
+#: cinder/virt/vmwareapi/error_util.py:93
+#, python-format
+msgid "Error(s) %s occurred in the call to RetrieveProperties"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:44 cinder/virt/xenapi/fake.py:77
+#, python-format
+msgid "%(text)s: _db_content => %(content)s"
+msgstr "%(text)s: _db_content => %(content)s"
+
+#: cinder/virt/vmwareapi/fake.py:131
+#, python-format
+msgid "Property %(attr)s not set for the managed object %(objName)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:437
+msgid "There is no VM registered"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:439 cinder/virt/vmwareapi/fake.py:609
+#, python-format
+msgid "Virtual Machine with ref %s is not there"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:502
+#, python-format
+msgid "Logging out a session that is invalid or already logged out: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:517
+msgid "Session is faulty"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:520
+msgid "Session Invalid"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:606
+msgid " No Virtual Machine has been registered yet"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:99
+#, python-format
+msgid "Glance image %s is in killed state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:107
+#, python-format
+msgid "Glance image %(image_id)s is in unknown state - %(state)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:128
+msgid ""
+"ESX SOAP server returned an empty port group for the host system in its "
+"response"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:155
+#, python-format
+msgid "Creating Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:169
+#, python-format
+msgid "Created Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/read_write_util.py:150
+#, python-format
+msgid "Exception during HTTP connection close in VMWareHTTpWrite. Exception is %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:84
+msgid "Unable to import suds."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:90
+msgid "Must specify vmwareapi_wsdl_loc"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:145
+#, python-format
+msgid "No such SOAP method '%s' provided by VI SDK"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:150
+#, python-format
+msgid "httplib error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:157
+#, python-format
+msgid "Socket error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:162
+#, python-format
+msgid "Type error in  %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:166
+#, python-format
+msgid "Exception in %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:66
+msgid "Getting list of instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:82
+#, python-format
+msgid "Got total of %s instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:126
+msgid "Couldn't get a local Datastore reference"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:196
+#, python-format
+msgid "Creating VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:205
+#, python-format
+msgid "Created VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:234
+#, python-format
+msgid ""
+"Creating Virtual Disk of size  %(vmdk_file_size_in_kb)s KB and adapter "
+"type  %(adapter_type)s on the ESX host local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:251
+#, python-format
+msgid ""
+"Created Virtual Disk of size %(vmdk_file_size_in_kb)s KB on the ESX host "
+"local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:260
+#, python-format
+msgid ""
+"Deleting the file %(flat_uploaded_vmdk_path)s on the ESX host localstore "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:272
+#, python-format
+msgid ""
+"Deleted the file %(flat_uploaded_vmdk_path)s on the ESX host local store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:283
+#, python-format
+msgid ""
+"Downloading image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:298
+#, python-format
+msgid ""
+"Downloaded image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:315
+#, python-format
+msgid "Reconfiguring VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:322
+#, python-format
+msgid "Reconfigured VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:329
+#, python-format
+msgid "Powering on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:335
+#, python-format
+msgid "Powered on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:381
+#, python-format
+msgid "Creating Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:391
+#, python-format
+msgid "Created Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:434
+#, python-format
+msgid "Copying disk data before snapshot of the VM  instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:447
+#, python-format
+msgid "Copied disk data before snapshot of the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:456
+#, python-format
+msgid "Uploading image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:469
+#, python-format
+msgid "Uploaded image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:479
+#, python-format
+msgid "Deleting temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:488
+#, python-format
+msgid "Deleted temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:520
+msgid "instance is not powered on"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:527
+#, python-format
+msgid "Rebooting guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:530
+#, python-format
+msgid "Rebooted guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:532
+#, python-format
+msgid "Doing hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:536
+#, python-format
+msgid "Did hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:548
+#, python-format
+msgid "instance - %s not present"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:567
+#, python-format
+msgid "Powering off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:572
+#, python-format
+msgid "Powered off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:576
+#, python-format
+msgid "Unregistering the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:579
+#, python-format
+msgid "Unregistered the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:581
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while un-registering the "
+"VM: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:592
+#, python-format
+msgid "Deleting contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:602
+#, python-format
+msgid "Deleted contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:607
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while deleting the VM "
+"contents from the disk: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:615
+msgid "pause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:619
+msgid "unpause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:633
+#, python-format
+msgid "Suspending the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:637
+#, python-format
+msgid "Suspended the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:640
+msgid "instance is powered off and can not be suspended."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:643
+#, python-format
+msgid "VM %s was already in suspended state. So returning without doing anything"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:656
+#, python-format
+msgid "Resuming the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:661
+#, python-format
+msgid "Resumed the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:663
+msgid "instance is not in a suspended state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:699
+msgid "get_diagnostics not implemented for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:757
+#, python-format
+msgid ""
+"Reconfiguring VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:765
+#, python-format
+msgid ""
+"Reconfigured VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:802
+#, python-format
+msgid "Creating directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:806
+#, python-format
+msgid "Created directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:89
+#, python-format
+msgid "Downloading image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:103
+#, python-format
+msgid "Downloaded image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:108
+#, python-format
+msgid "Uploading image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:129
+#, python-format
+msgid "Uploaded image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:139
+#, python-format
+msgid "Getting image size for the image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:143
+#, python-format
+msgid "Got image size of %(size)s for the image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:553 cinder/virt/xenapi/fake.py:652
+#: cinder/virt/xenapi/fake.py:670 cinder/virt/xenapi/fake.py:732
+msgid "Raising NotImplemented"
+msgstr "Raising NotImplemented"
+
+#: cinder/virt/xenapi/fake.py:555
+#, python-format
+msgid "xenapi.fake does not have an implementation for %s"
+msgstr "xenapi.fake does not have an implementation for %s"
+
+#: cinder/virt/xenapi/fake.py:589
+#, python-format
+msgid "Calling %(localname)s %(impl)s"
+msgstr "Calling %(localname)s %(impl)s"
+
+#: cinder/virt/xenapi/fake.py:594
+#, python-format
+msgid "Calling getter %s"
+msgstr "Calling getter %s"
+
+#: cinder/virt/xenapi/fake.py:654
+#, python-format
+msgid ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+msgstr ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+
+#: cinder/virt/xenapi/host.py:67
+#, python-format
+msgid ""
+"Instance %(name)s running on %(host)s could not be found in the database:"
+" assuming it is a worker VM and skipping migration to a new host"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:137
+#, python-format
+msgid "Unable to get SR for this host: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:169
+msgid "Unable to get updated status"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:172
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:37
+#, python-format
+msgid "Found non-unique network for name_label %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:55
+#, python-format
+msgid "Found non-unique network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:58
+#, python-format
+msgid "Found no network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:111
+#, python-format
+msgid "Unable to eject %(host)s from the pool; pool not empty"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:126
+#, python-format
+msgid "Unable to eject %(host)s from the pool; No master found"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:143
+#, python-format
+msgid "Pool-Join failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:146
+#, python-format
+msgid "Unable to join %(host)s in the pool"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:162
+#, python-format
+msgid "Pool-eject failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:174
+#, fuzzy, python-format
+msgid "Unable to set up pool: %(e)s."
+msgstr "Unable to detach volume %s"
+
+#: cinder/virt/xenapi/pool.py:185
+#, python-format
+msgid "Pool-set_name_label failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:103
+#, python-format
+msgid "Found no PIF for device %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:122
+#, python-format
+msgid ""
+"PIF %(pif_rec['uuid'])s for network %(bridge)s has VLAN id %(pif_vlan)d. "
+"Expected %(vlan_num)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:218
+msgid "Created VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:245
+#, python-format
+msgid "VBD not found in instance %s"
+msgstr "VBD not found in instance %s"
+
+#: cinder/virt/xenapi/vm_utils.py:262
+#, python-format
+msgid "VBD %s already detached"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:265
+#, python-format
+msgid "VBD %(vbd_ref)s detach rejected, attempt %(num_attempt)d/%(max_attempts)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:270
+#, python-format
+msgid "Unable to unplug VBD %s"
+msgstr "Unable to unplug VBD %s"
+
+#: cinder/virt/xenapi/vm_utils.py:275
+#, python-format
+msgid "Reached maximum number of retries trying to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:286
+#, python-format
+msgid "Unable to destroy VBD %s"
+msgstr "Unable to destroy VBD %s"
+
+#: cinder/virt/xenapi/vm_utils.py:305
+#, fuzzy, python-format
+msgid "Creating %(vbd_type)s-type VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+msgstr "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:308
+#, python-format
+msgid "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+msgstr "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:319
+#, python-format
+msgid "Unable to destroy VDI %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:336
+#, python-format
+msgid ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+msgstr ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:345
+#, python-format
+msgid "Copied VDI %(vdi_ref)s from VDI %(vdi_to_copy_ref)s on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:353
+#, python-format
+msgid "Cloned VDI %(vdi_ref)s from VDI %(vdi_to_clone_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:372
+#, python-format
+msgid "No primary VDI found for %(vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:379
+#, fuzzy, python-format
+msgid "Snapshotting with label '%(label)s'"
+msgstr "Snapshotting VM %(vm_ref)s with label '%(label)s'..."
+
+#: cinder/virt/xenapi/vm_utils.py:392
+#, fuzzy, python-format
+msgid "Created snapshot %(template_vm_ref)s"
+msgstr "Created snapshot %(template_vm_ref)s from VM %(vm_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:431
+#, python-format
+msgid "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+msgstr "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+
+#: cinder/virt/xenapi/vm_utils.py:583
+#, python-format
+msgid "Creating blank HD of size %(req_size)d gigs"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:634
+#, python-format
+msgid ""
+"Fast cloning is only supported on default local SR of type ext. SR on "
+"this system was found to be of type %(sr_type)s. Ignoring the cow flag."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:724
+#, python-format
+msgid ""
+"download_vhd %(image)s attempt %(attempt_num)d/%(max_attempts)d from "
+"%(glance_host)s:%(glance_port)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:734
+#, python-format
+msgid "download_vhd failed: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:750
+#, python-format
+msgid "Asking xapi to fetch vhd image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:760
+#, python-format
+msgid ""
+"xapi 'download_vhd' returned VDI of type '%(vdi_type)s' with UUID "
+"'%(vdi_uuid)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:789
+#, python-format
+msgid "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:805
+#, python-format
+msgid "image_size_bytes=%(size_bytes)d, allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:809
+#, python-format
+msgid ""
+"Image size %(size_bytes)d exceeded instance_type allowed size "
+"%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:831
+#, python-format
+msgid "Fetching image %(image)s, type %(image_type_str)"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:844
+#, fuzzy, python-format
+msgid "Size for image %(image)s: %(virtual_size)d"
+msgstr "Size for image %(image)s:%(virtual_size)d"
+
+#: cinder/virt/xenapi/vm_utils.py:853
+#, python-format
+msgid ""
+"Kernel/Ramdisk image is too large: %(vdi_size)d bytes, max %(max_size)d "
+"bytes"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:870
+#, python-format
+msgid "Copying VDI %s to /boot/guest on dom0"
+msgstr "Copying VDI %s to /boot/guest on dom0"
+
+#: cinder/virt/xenapi/vm_utils.py:884
+#, python-format
+msgid "Kernel/Ramdisk VDI %s destroyed"
+msgstr "Kernel/Ramdisk VDI %s destroyed"
+
+#: cinder/virt/xenapi/vm_utils.py:895
+msgid "Failed to fetch glance image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:934
+#, python-format
+msgid "Detected %(image_type_str)s format for image %(image_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:955
+#, python-format
+msgid "Looking up vdi %s for PV kernel"
+msgstr "Looking up vdi %s for PV kernel"
+
+#: cinder/virt/xenapi/vm_utils.py:973
+#, python-format
+msgid "Unknown image format %(disk_image_type)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1016
+#, python-format
+msgid "VDI %s is still available"
+msgstr "VDI %s is still available"
+
+#: cinder/virt/xenapi/vm_utils.py:1059
+#, python-format
+msgid "(VM_UTILS) xenserver vm state -> |%s|"
+msgstr "(VM_UTILS) xenserver vm state -> |%s|"
+
+#: cinder/virt/xenapi/vm_utils.py:1061
+#, python-format
+msgid "(VM_UTILS) xenapi power_state -> |%s|"
+msgstr "(VM_UTILS) xenapi power_state -> |%s|"
+
+#: cinder/virt/xenapi/vm_utils.py:1088
+#, python-format
+msgid "Unable to parse rrd of %(vm_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1108
+#, python-format
+msgid "Re-scanning SR %s"
+msgstr "Re-scanning SR %s"
+
+#: cinder/virt/xenapi/vm_utils.py:1136
+#, python-format
+msgid "Flag sr_matching_filter '%s' does not respect formatting convention"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1154
+msgid ""
+"XenAPI is unable to find a Storage Repository to install guest instances "
+"on. Please check your configuration and/or configure the flag "
+"'sr_matching_filter'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1167
+msgid "Cannot find SR of content-type ISO"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1175
+#, python-format
+msgid "ISO: looking at SR %(sr_rec)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1177
+msgid "ISO: not iso content"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1180
+msgid "ISO: iso content_type, no 'i18n-key' key"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1183
+msgid "ISO: iso content_type, i18n-key value not 'local-storage-iso'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1187
+msgid "ISO: SR MATCHing our criteria"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1189
+msgid "ISO: ISO, looking to see if it is host local"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1192
+#, python-format
+msgid "ISO: PBD %(pbd_ref)s disappeared"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1195
+#, python-format
+msgid "ISO: PBD matching, want %(pbd_rec)s, have %(host)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1198
+msgid "ISO: SR with local PBD"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1220
+#, python-format
+msgid ""
+"Unable to obtain RRD XML for VM %(vm_uuid)s with server details: "
+"%(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1236
+#, python-format
+msgid "Unable to obtain RRD XML updates with server details: %(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1290
+#, python-format
+msgid "Invalid statistics data from Xenserver: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1343
+#, python-format
+msgid "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+msgstr "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+
+#: cinder/virt/xenapi/vm_utils.py:1417
+#, python-format
+msgid ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+msgstr ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+
+#: cinder/virt/xenapi/vm_utils.py:1427
+#, python-format
+msgid "VHD coalesce attempts exceeded (%(max_attempts)d), giving up..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1462
+#, python-format
+msgid "Timeout waiting for device %s to be created"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1473
+#, python-format
+msgid "Plugging VBD %s ... "
+msgstr "Plugging VBD %s ... "
+
+#: cinder/virt/xenapi/vm_utils.py:1476
+#, python-format
+msgid "Plugging VBD %s done."
+msgstr "Plugging VBD %s done."
+
+#: cinder/virt/xenapi/vm_utils.py:1478
+#, python-format
+msgid "VBD %(vbd_ref)s plugged as %(orig_dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1481
+#, python-format
+msgid "VBD %(vbd_ref)s plugged into wrong dev, remapping to %(dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1490
+#, python-format
+msgid "Destroying VBD for VDI %s ... "
+msgstr "Destroying VBD for VDI %s ... "
+
+#: cinder/virt/xenapi/vm_utils.py:1498
+#, python-format
+msgid "Destroying VBD for VDI %s done."
+msgstr "Destroying VBD for VDI %s done."
+
+#: cinder/virt/xenapi/vm_utils.py:1511
+#, python-format
+msgid "Running pygrub against %s"
+msgstr "Running pygrub against %s"
+
+#: cinder/virt/xenapi/vm_utils.py:1518
+#, python-format
+msgid "Found Xen kernel %s"
+msgstr "Found Xen kernel %s"
+
+#: cinder/virt/xenapi/vm_utils.py:1520
+msgid "No Xen kernel found.  Booting HVM."
+msgstr "No Xen kernel found.  Booting HVM."
+
+#: cinder/virt/xenapi/vm_utils.py:1533
+msgid "Partitions:"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1539
+#, python-format
+msgid "  %(num)s: %(ptype)s %(size)d sectors"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1565
+#, python-format
+msgid ""
+"Writing partition table %(primary_first)d %(primary_last)d to "
+"%(dev_path)s..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1578
+#, python-format
+msgid "Writing partition table %s done."
+msgstr "Writing partition table %s done."
+
+#: cinder/virt/xenapi/vm_utils.py:1632
+#, python-format
+msgid ""
+"Starting sparse_copy src=%(src_path)s dst=%(dst_path)s "
+"virtual_size=%(virtual_size)d block_size=%(block_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1664
+#, python-format
+msgid ""
+"Finished sparse_copy in %(duration).2f secs, %(compression_pct).2f%% "
+"reduction in size"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1714
+msgid ""
+"XenServer tools installed in this image are capable of network injection."
+"  Networking files will not bemanipulated"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1722
+msgid ""
+"XenServer tools are present in this image but are not capable of network "
+"injection"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1726
+msgid "XenServer tools are not installed in this image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1742
+msgid "Manipulating interface files directly"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1751
+#, python-format
+msgid "Failed to mount filesystem (expected for non-linux instances): %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:131 cinder/virt/xenapi/vmops.py:722
+#, python-format
+msgid "Updating progress to %(progress)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:231
+#, python-format
+msgid "Attempted to power on non-existent instance bad instance id %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:233
+#, fuzzy, python-format
+msgid "Starting instance"
+msgstr "Rebooting instance %s"
+
+#: cinder/virt/xenapi/vmops.py:303
+msgid "Removing kernel/ramdisk files from dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:358
+msgid "Failed to spawn, rolling back"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:443
+msgid "Detected ISO image type, creating blank VM for install"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:462
+msgid "Auto configuring disk, attempting to resize partition..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:515
+#, python-format
+msgid "Invalid value for injected_files: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:520
+#, python-format
+msgid "Injecting file path: '%s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:527
+msgid "Setting admin password"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:531
+msgid "Resetting network"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:538
+msgid "Setting VCPU weight"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:544
+msgid "Starting VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:551
+#, python-format
+msgid ""
+"Latest agent build for %(hypervisor)s/%(os)s/%(architecture)s is "
+"%(version)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:554
+#, python-format
+msgid "No agent build found for %(hypervisor)s/%(os)s/%(architecture)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:561
+msgid "Waiting for instance state to become running"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:573
+msgid "Querying agent version"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:576
+#, python-format
+msgid "Instance agent version: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:581
+#, python-format
+msgid "Updating Agent to %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:616
+#, python-format
+msgid "No opaque_ref could be determined for '%s'."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:670
+msgid "Finished snapshot and upload for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:677
+msgid "Starting snapshot for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:686
+#, fuzzy, python-format
+msgid "Unable to Snapshot instance: %(exc)s"
+msgstr "Unable to attach volume to instance %s"
+
+#: cinder/virt/xenapi/vmops.py:702
+msgid "Failed to transfer vhd to new host"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:770
+#, python-format
+msgid "Resizing down VDI %(cow_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:893
+#, python-format
+msgid "Resizing up VDI %(vdi_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:901
+msgid "Resize complete"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:928
+#, python-format
+msgid "Failed to query agent version: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:949
+#, python-format
+msgid "domid changed from %(domid)s to %(newdomid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:962
+#, python-format
+msgid "Failed to update agent: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:983
+#, python-format
+msgid "Failed to exchange keys: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:998
+#, python-format
+msgid "Failed to update password: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1023
+#, python-format
+msgid "Failed to inject file: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1032
+msgid "VM already halted, skipping shutdown..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1036
+msgid "Shutting down VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1054
+msgid "Unable to find VBD for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1097
+msgid "Using RAW or VHD, skipping kernel and ramdisk deletion"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1104
+msgid "instance has a kernel or ramdisk but not both"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1111
+msgid "kernel/ramdisk files removed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1121
+msgid "VM destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1147
+msgid "Destroying VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1169
+msgid "VM is not present, skipping destroy..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1222
+#, python-format
+msgid "Instance is already in Rescue Mode: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1296
+#, python-format
+msgid "Found %(instance_count)d hung reboots older than %(timeout)d seconds"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1300
+msgid "Automatically hard rebooting"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1363
+#, python-format
+msgid "Setting migration %(migration_id)s to error: %(reason)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1374
+#, python-format
+msgid ""
+"Automatically confirming migration %(migration_id)s for instance "
+"%(instance_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1379
+#, fuzzy, python-format
+msgid "Instance %(instance_uuid)s not found"
+msgstr "Instance %(instance_id)s is not running."
+
+#: cinder/virt/xenapi/vmops.py:1383
+msgid "In ERROR state"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1389
+#, python-format
+msgid "In %(task_state)s task_state, not RESIZE_VERIFY"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1396
+#, python-format
+msgid "Error auto-confirming resize: %(e)s. Will retry later."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1418
+msgid "Could not get bandwidth info."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1469
+msgid "Injecting network info to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1483
+msgid "Creating vifs"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1492
+#, fuzzy, python-format
+msgid "Creating VIF for network %(network_ref)s"
+msgstr "Creating VIF for VM %(vm_ref)s, network %(network_ref)s."
+
+#: cinder/virt/xenapi/vmops.py:1495
+#, fuzzy, python-format
+msgid "Created VIF %(vif_ref)s, network %(network_ref)s"
+msgstr "Creating VIF for VM %(vm_ref)s, network %(network_ref)s."
+
+#: cinder/virt/xenapi/vmops.py:1520
+msgid "Injecting hostname to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1545
+#, python-format
+msgid ""
+"The agent call to %(method)s returned an invalid response: %(ret)r. "
+"path=%(path)s; args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1566
+#, python-format
+msgid "TIMEOUT: The call to %(method)s timed out. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1570
+#, python-format
+msgid ""
+"NOT IMPLEMENTED: The call to %(method)s is not supported by the agent. "
+"args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1575
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1661
+#, python-format
+msgid "OpenSSL error: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:52
+msgid "creating sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:55 cinder/virt/xenapi/volume_utils.py:83
+#, python-format
+msgid "type is = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:58 cinder/virt/xenapi/volume_utils.py:86
+#, python-format
+msgid "name = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:71
+#, python-format
+msgid "Created %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:76 cinder/virt/xenapi/volume_utils.py:174
+msgid "Unable to create Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:80
+msgid "introducing sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:103 cinder/virt/xenapi/volume_utils.py:170
+#: cinder/virt/xenapi/volumeops.py:156
+#, python-format
+msgid "Introduced %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:106
+msgid "Creating pbd for SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:108
+msgid "Plugging SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:116 cinder/virt/xenapi/volumeops.py:160
+msgid "Unable to introduce Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:127 cinder/virt/xenapi/volumeops.py:50
+msgid "Unable to get SR using uuid"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:129
+#, python-format
+msgid "Forgetting SR %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:137
+msgid "Unable to forget Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:157
+#, python-format
+msgid "Introducing %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:186
+#, python-format
+msgid "Unable to find SR from VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:204
+#, python-format
+msgid "Ignoring exception %(exc)s when getting PBDs for %(sr_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:210
+#, python-format
+msgid "Ignoring exception %(exc)s when unplugging PBD %(pbd)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:234
+#, python-format
+msgid "Unable to introduce VDI on SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:242
+#, python-format
+msgid "Unable to get record of VDI %s on"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:264
+#, python-format
+msgid "Unable to introduce VDI for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:274
+#, python-format
+msgid "Error finding vdis in SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:281
+#, python-format
+msgid "Unable to find vbd for vdi %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:315
+#, python-format
+msgid "Unable to obtain target information %(data)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:341
+#, python-format
+msgid "Mountpoint cannot be translated: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:64
+msgid "Could not find VDI ref"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:69
+#, python-format
+msgid "Creating SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:73
+msgid "Could not create SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:76
+msgid "Could not retrieve SR record"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:81
+#, python-format
+msgid "Introducing SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:85
+msgid "SR found in xapi database. No need to introduce"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:90
+msgid "Could not introduce SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:94
+#, python-format
+msgid "Checking for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:106
+#, python-format
+msgid "SR %s not found in the xapi database"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:112
+msgid "Could not forget SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:121
+#, python-format
+msgid "Attach_volume: %(connection_info)s, %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:178
+#, python-format
+msgid "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+msgstr "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:189
+#, python-format
+msgid "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+msgstr "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:197
+#, python-format
+msgid "Unable to attach volume to instance %s"
+msgstr "Unable to attach volume to instance %s"
+
+#: cinder/virt/xenapi/volumeops.py:200
+#, python-format
+msgid "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+msgstr "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:210
+#, python-format
+msgid "Detach_volume: %(instance_name)s, %(mountpoint)s"
+msgstr "Detach_volume: %(instance_name)s, %(mountpoint)s"
+
+#: cinder/virt/xenapi/volumeops.py:219
+#, python-format
+msgid "Unable to locate volume %s"
+msgstr "Unable to locate volume %s"
+
+#: cinder/virt/xenapi/volumeops.py:227
+#, python-format
+msgid "Unable to detach volume %s"
+msgstr "Unable to detach volume %s"
+
+#: cinder/virt/xenapi/volumeops.py:232
+#, python-format
+msgid "Unable to destroy vbd %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:239
+#, python-format
+msgid "Error purging SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:241
+#, python-format
+msgid "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+msgstr "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+
+#: cinder/vnc/xvp_proxy.py:98 cinder/vnc/xvp_proxy.py:103
+#, python-format
+msgid "Error in handshake: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:119
+#, python-format
+msgid "Invalid request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:139
+#, python-format
+msgid "Request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:142
+#, python-format
+msgid "Request made with missing token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:153
+#, python-format
+msgid "Request made with invalid token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:160
+#, python-format
+msgid "Unexpected error: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:180
+#, python-format
+msgid "Starting cinder-xvpvncproxy node (version %s)"
+msgstr ""
+
+#: cinder/volume/api.py:74 cinder/volume/api.py:220
+msgid "status must be available"
+msgstr ""
+
+#: cinder/volume/api.py:85
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to create %(size)sG volume"
+msgstr ""
+
+#: cinder/volume/api.py:137
+#, fuzzy
+msgid "Volume status must be available or error"
+msgstr "Volume status must be available"
+
+#: cinder/volume/api.py:142
+#, python-format
+msgid "Volume still has %d dependent snapshots"
+msgstr ""
+
+#: cinder/volume/api.py:223
+msgid "already attached"
+msgstr ""
+
+#: cinder/volume/api.py:230
+msgid "already detached"
+msgstr ""
+
+#: cinder/volume/api.py:292
+msgid "must be available"
+msgstr ""
+
+#: cinder/volume/api.py:325
+#, fuzzy
+msgid "Volume Snapshot status must be available or error"
+msgstr "Volume status must be available"
+
+#: cinder/volume/driver.py:96
+#, python-format
+msgid "Recovering from a failed execute.  Try number %s"
+msgstr ""
+
+#: cinder/volume/driver.py:106
+#, python-format
+msgid "volume group %s doesn't exist"
+msgstr ""
+
+#: cinder/volume/driver.py:270
+#, python-format
+msgid "Skipping ensure_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:318
+#, python-format
+msgid "Skipping remove_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:327
+#, python-format
+msgid ""
+"Skipping remove_export. No iscsi_target is presently exported for volume:"
+" %d"
+msgstr ""
+
+#: cinder/volume/driver.py:337
+msgid "ISCSI provider_location not stored, using discovery"
+msgstr ""
+
+#: cinder/volume/driver.py:384
+#, python-format
+msgid "Could not find iSCSI export  for volume %s"
+msgstr ""
+
+#: cinder/volume/driver.py:388
+#, python-format
+msgid "ISCSI Discovery: Found %s"
+msgstr ""
+
+#: cinder/volume/driver.py:466
+#, python-format
+msgid "Cannot confirm exported volume id:%(volume_id)s."
+msgstr ""
+
+#: cinder/volume/driver.py:493
+#, python-format
+msgid "FAKE ISCSI: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:505
+#, python-format
+msgid "rbd has no pool %s"
+msgstr ""
+
+#: cinder/volume/driver.py:579
+#, python-format
+msgid "Sheepdog is not working: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:581
+msgid "Sheepdog is not working"
+msgstr ""
+
+#: cinder/volume/driver.py:680 cinder/volume/driver.py:685
+#, python-format
+msgid "LoggingVolumeDriver: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:96
+#, python-format
+msgid "Re-exporting %s volumes"
+msgstr "Re-exporting %s volumes"
+
+#: cinder/volume/manager.py:101
+#, python-format
+msgid "volume %s: skipping export"
+msgstr "volume %s: skipping export"
+
+#: cinder/volume/manager.py:107
+#, python-format
+msgid "volume %s: creating"
+msgstr "volume %s: creating"
+
+#: cinder/volume/manager.py:119
+#, python-format
+msgid "volume %(vol_name)s: creating lv of size %(vol_size)sG"
+msgstr "volume %(vol_name)s: creating lv of size %(vol_size)sG"
+
+#: cinder/volume/manager.py:131
+#, python-format
+msgid "volume %s: creating export"
+msgstr "volume %s: creating export"
+
+#: cinder/volume/manager.py:144
+#, python-format
+msgid "volume %s: created successfully"
+msgstr "volume %s: created successfully"
+
+#: cinder/volume/manager.py:153
+msgid "Volume is still attached"
+msgstr "Volume is still attached"
+
+#: cinder/volume/manager.py:155
+msgid "Volume is not local to this node"
+msgstr "Volume is not local to this node"
+
+#: cinder/volume/manager.py:159
+#, python-format
+msgid "volume %s: removing export"
+msgstr "volume %s: removing export"
+
+#: cinder/volume/manager.py:161
+#, python-format
+msgid "volume %s: deleting"
+msgstr "volume %s: deleting"
+
+#: cinder/volume/manager.py:164
+#, python-format
+msgid "volume %s: volume is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:176
+#, python-format
+msgid "volume %s: deleted successfully"
+msgstr "volume %s: deleted successfully"
+
+#: cinder/volume/manager.py:183
+#, python-format
+msgid "snapshot %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:187
+#, python-format
+msgid "snapshot %(snap_name)s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:202
+#, python-format
+msgid "snapshot %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:211
+#, python-format
+msgid "snapshot %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:214
+#, fuzzy, python-format
+msgid "snapshot %s: snapshot is busy"
+msgstr "instance %s: snapshotting"
+
+#: cinder/volume/manager.py:226
+#, python-format
+msgid "snapshot %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:310
+msgid "Checking volume capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:314
+#, python-format
+msgid "New capabilities found: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:325
+msgid "Clear capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:329
+#, python-format
+msgid "Notification {%s} received"
+msgstr ""
+
+#: cinder/volume/netapp.py:79
+#, python-format
+msgid "API %(name)sfailed: %(reason)s"
+msgstr ""
+
+#: cinder/volume/netapp.py:109
+#, python-format
+msgid "%s is not set"
+msgstr ""
+
+#: cinder/volume/netapp.py:128
+msgid "Connected to DFM server"
+msgstr ""
+
+#: cinder/volume/netapp.py:159
+#, python-format
+msgid "Job failed: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:240
+msgid "Failed to provision dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:252
+msgid "No LUN was created by the provision job"
+msgstr ""
+
+#: cinder/volume/netapp.py:261 cinder/volume/netapp.py:433
+#, fuzzy, python-format
+msgid "Failed to find LUN ID for volume %s"
+msgstr "Unable to locate volume %s"
+
+#: cinder/volume/netapp.py:280
+msgid "Failed to remove and delete dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:603 cinder/volume/netapp.py:657
+#, fuzzy, python-format
+msgid "No LUN ID for volume %s"
+msgstr "Unable to locate volume %s"
+
+#: cinder/volume/netapp.py:607 cinder/volume/netapp.py:661
+#, python-format
+msgid "Failed to get LUN details for LUN ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:614
+#, python-format
+msgid "Failed to get host details for host ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:620
+#, python-format
+msgid "Failed to get target portal for filer: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:625
+#, python-format
+msgid "Failed to get target IQN for filer: %s"
+msgstr ""
+
+#: cinder/volume/san.py:113 cinder/volume/san.py:151
+msgid "Specify san_password or san_private_key"
+msgstr ""
+
+#: cinder/volume/san.py:156
+msgid "san_ip must be set"
+msgstr ""
+
+#: cinder/volume/san.py:320
+#, python-format
+msgid "LUID not found for %(zfs_poolname)s. Output=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:452
+#, python-format
+msgid "CLIQ command returned %s"
+msgstr ""
+
+#: cinder/volume/san.py:458
+#, python-format
+msgid "Malformed response to CLIQ command %(verb)s %(cliq_args)s. Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:466
+#, python-format
+msgid "Error running CLIQ command %(verb)s %(cliq_args)s.  Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:496
+#, python-format
+msgid ""
+"Unexpected number of virtual ips for cluster  %(cluster_name)s. "
+"Result=%(_xml)s"
+msgstr ""
+
+#: cinder/volume/san.py:549
+#, python-format
+msgid "Volume info: %(volume_name)s => %(volume_attributes)s"
+msgstr ""
+
+#: cinder/volume/san.py:594
+msgid "local_path not supported"
+msgstr ""
+
+#: cinder/volume/san.py:626
+#, python-format
+msgid "Could not determine project for volume %s, can't export"
+msgstr ""
+
+#: cinder/volume/san.py:696
+#, python-format
+msgid "Payload for SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:713
+#, python-format
+msgid "Call to json.loads() raised an exception: %s"
+msgstr ""
+
+#: cinder/volume/san.py:718
+#, python-format
+msgid "Results of SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:732
+#, python-format
+msgid "Found solidfire account: %s"
+msgstr ""
+
+#: cinder/volume/san.py:746
+#, python-format
+msgid "solidfire account: %s does not exist, create it..."
+msgstr ""
+
+#: cinder/volume/san.py:804
+msgid "Enter SolidFire create_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:846
+msgid "Leaving SolidFire create_volume"
+msgstr ""
+
+#: cinder/volume/san.py:861
+msgid "Enter SolidFire delete_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:880
+#, python-format
+msgid "Deleting volumeID: %s "
+msgstr ""
+
+#: cinder/volume/san.py:888
+msgid "Leaving SolidFire delete_volume"
+msgstr ""
+
+#: cinder/volume/san.py:891
+msgid "Executing SolidFire ensure_export..."
+msgstr ""
+
+#: cinder/volume/san.py:895
+msgid "Executing SolidFire create_export..."
+msgstr ""
+
+#: cinder/volume/volume_types.py:49 cinder/volume/volume_types.py:108
+msgid "name cannot be None"
+msgstr ""
+
+#: cinder/volume/volume_types.py:96
+msgid "id cannot be None"
+msgstr ""
+
+#: cinder/volume/xensm.py:55
+#, python-format
+msgid "SR name = %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:56
+#, python-format
+msgid "Params: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:60
+#, python-format
+msgid "Failed to create sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:62
+msgid "Create failed"
+msgstr ""
+
+#: cinder/volume/xensm.py:64
+#, python-format
+msgid "SR UUID of new SR is: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:71
+msgid "Failed to update db"
+msgstr ""
+
+#: cinder/volume/xensm.py:80
+#, python-format
+msgid "Failed to introduce sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:91
+#, python-format
+msgid "Failed to reach backend %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:100
+msgid "XenSMDriver requires xenapi connection"
+msgstr ""
+
+#: cinder/volume/xensm.py:110
+msgid "Failed to initiate session"
+msgstr ""
+
+#: cinder/volume/xensm.py:142
+#, python-format
+msgid "Volume will be created in backend - %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:154
+msgid "Failed to update volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:157
+msgid "Unable to create volume"
+msgstr ""
+
+#: cinder/volume/xensm.py:171
+msgid "Failed to delete vdi"
+msgstr ""
+
+#: cinder/volume/xensm.py:177
+msgid "Failed to delete volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:210
+msgid "Failed to find volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:221
+msgid "Failed to find backend in db"
+msgstr ""
+
+#: cinder/volume/nexenta/__init__.py:27
+msgid "Nexenta SA returned the error"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:64
+#, python-format
+msgid "Sending JSON data: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:69
+#, python-format
+msgid "Auto switching to HTTPS connection to %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:75
+msgid "No headers in server response"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:76
+msgid "Bad response from server"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:79
+#, python-format
+msgid "Got response: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:96
+#, python-format
+msgid "Volume %s does not exist in Nexenta SA"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:180
+msgid ""
+"Call to local_path should not happen. Verify that use_local_volumes flag "
+"is turned off."
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:202
+#, python-format
+msgid "Ignored target creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:210
+#, python-format
+msgid "Ignored target group creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:219
+#, python-format
+msgid "Ignored target group member addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:227
+#, python-format
+msgid "Ignored LU creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:237
+#, python-format
+msgid "Ignored LUN mapping entry addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:273
+#, python-format
+msgid ""
+"Got error trying to destroy target group %(target_group)s, assuming it is"
+" already gone: %(exc)s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:280
+#, python-format
+msgid ""
+"Got error trying to delete target %(target)s, assuming it is already "
+"gone: %(exc)s"
+msgstr ""
+
+#~ msgid "Unable to locate account %(account_name) on Solidfire device"
+#~ msgstr ""
+
+#~ msgid "Zone %(zone_id)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Cinder access parameters were not specified."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(id)d could not be found."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(name)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Detected more than one volume with name %(vol_name)"
+#~ msgstr ""
+
+#~ msgid "Detected existing vlan with id %(vlan)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab semaphore \"%(lock)s\" "
+#~ "for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab file lock "
+#~ "\"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Parent group id and group id cannot be same"
+#~ msgstr ""
+
+#~ msgid "No body provided"
+#~ msgstr ""
+
+#~ msgid "Create VSA %(display_name)s of type %(vc_type)s"
+#~ msgstr ""
+
+#~ msgid "Delete VSA with id: %s"
+#~ msgstr ""
+
+#~ msgid "Associate address %(ip)s to VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "Disassociate address from VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "%(obj)s with ID %(id)s not found"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(obj)s with ID %(id)s belongs to "
+#~ "VSA %(own_vsa_id)s and not to VSA "
+#~ "%(vsa_id)s."
+#~ msgstr ""
+
+#~ msgid "Index. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Detail. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Create. vsa_id=%(vsa_id)s, body=%(body)s"
+#~ msgstr ""
+
+#~ msgid "Create volume of %(size)s GB from VSA ID %(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Update %(obj)s with id: %(id)s, changes: %(changes)s"
+#~ msgstr ""
+
+#~ msgid "Delete. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Show. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Index instances for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You cannot run"
+#~ " any more instances of this type."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You can only"
+#~ " run %s more instances of this "
+#~ "type."
+#~ msgstr ""
+
+#~ msgid "Going to try to soft delete %s"
+#~ msgstr ""
+
+#~ msgid "No host for instance %s, deleting immediately"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to stop %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to start %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Going to force the deletion of the"
+#~ " vm %(instance_uuid)s, even if it is"
+#~ " deleted"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s did not exist "
+#~ "in the DB, but I will shut "
+#~ "it down anyway using a special "
+#~ "context"
+#~ msgstr ""
+
+#~ msgid "exception terminating the instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "trying to destroy already destroyed instance: %s"
+#~ msgstr "trying to destroy already destroyed instance: %s"
+
+#~ msgid ""
+#~ "Instance %(name)s found in database but"
+#~ " not known by hypervisor. Setting "
+#~ "power state to NOSTATE"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Detected instance  with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Destroying instance with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid "SQL connection failed (%(connstring)s). %(attempts)d attempts left."
+#~ msgstr ""
+
+#~ msgid "Can't downgrade without losing data"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_id)s not found"
+#~ msgstr ""
+
+#~ msgid "Network %s has active ports, cannot delete"
+#~ msgstr ""
+
+#~ msgid "No fixed IPs to deallocate for vif %sid"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "AMQP server on %(fl_host)s:%(fl_port)d is "
+#~ "unreachable: %(e)s. Trying again in "
+#~ "%(fl_intv)d seconds."
+#~ msgstr ""
+
+#~ msgid "Unable to connect to AMQP server after %(tries)d tries. Shutting down."
+#~ msgstr ""
+
+#~ msgid "Reconnected to queue"
+#~ msgstr ""
+
+#~ msgid "Failed to fetch message from queue: %s"
+#~ msgstr ""
+
+#~ msgid "Initing the Adapter Consumer for %s"
+#~ msgstr ""
+
+#~ msgid "Created \"%(exchange)s\" fanout exchange with \"%(key)s\" routing key"
+#~ msgstr ""
+
+#~ msgid "Exception while processing consumer"
+#~ msgstr ""
+
+#~ msgid "Creating \"%(exchange)s\" fanout exchange"
+#~ msgstr ""
+
+#~ msgid "response %s"
+#~ msgstr ""
+
+#~ msgid "topic is %s"
+#~ msgstr ""
+
+#~ msgid "message %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Cannot confirm tmpfile at %(ipath)s is"
+#~ " on same shared storage between "
+#~ "%(src)s and %(dest)s."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of memory(host:%(avail)s <= "
+#~ "instance:%(mem_inst)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of disk(host:%(available)s <="
+#~ " instance:%(necessary)s)"
+#~ msgstr ""
+
+#~ msgid "Driver Method %(driver_method)s missing: %(e)s.Reverting to schedule()"
+#~ msgstr ""
+
+#~ msgid "Setting instance %(instance_uuid)s to ERROR state."
+#~ msgstr ""
+
+#~ msgid "_filter_hosts: %(request_spec)s"
+#~ msgstr ""
+
+#~ msgid "Filter hosts for drive type %s"
+#~ msgstr ""
+
+#~ msgid "Host %s has no free capacity. Skip"
+#~ msgstr ""
+
+#~ msgid "Filter hosts: %s"
+#~ msgstr ""
+
+#~ msgid "Must implement host selection mechanism"
+#~ msgstr ""
+
+#~ msgid "Maximum number of hosts selected (%d)"
+#~ msgstr ""
+
+#~ msgid "Selected excessive host %(host)s"
+#~ msgstr ""
+
+#~ msgid "Provision volume %(name)s of size %(size)s GB on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "volume_params %(volume_params)s"
+#~ msgstr ""
+
+#~ msgid "%(i)d: Volume %(name)s"
+#~ msgstr ""
+
+#~ msgid "Attempting to spawn %(num_volumes)d volume(s)"
+#~ msgstr ""
+
+#~ msgid "Error creating volumes"
+#~ msgstr ""
+
+#~ msgid "Non-VSA volume %d"
+#~ msgstr ""
+
+#~ msgid "Spawning volume %(volume_id)s with drive type %(drive_type)s"
+#~ msgstr ""
+
+#~ msgid "Error creating volume"
+#~ msgstr ""
+
+#~ msgid "No capability selected for volume of size %(size)s"
+#~ msgstr ""
+
+#~ msgid "Host %s:"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\tDrive %(qosgrp)-25s: total %(total)2s, "
+#~ "used %(used)2s, free %(free)2s. Available "
+#~ "capacity %(avail)-5s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t LeastUsedHost: Best host: %(best_host)s."
+#~ " (used capacity %(min_used)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t MostAvailCap: Best host: %(best_host)s. "
+#~ "(available %(max_avail)s %(type_str)s)"
+#~ msgstr ""
+
+#~ msgid "(%(nm)s) publish (key: %(routing_key)s) %(message)s"
+#~ msgstr "(%(nm)s) publish (key: %(routing_key)s) %(message)s"
+
+#~ msgid "Publishing to route %s"
+#~ msgstr "Publishing to route %s"
+
+#~ msgid "Declaring queue %s"
+#~ msgstr "Declaring queue %s"
+
+#~ msgid "Declaring exchange %s"
+#~ msgstr "Declaring exchange %s"
+
+#~ msgid "Binding %(queue)s to %(exchange)s with key %(routing_key)s"
+#~ msgstr "Binding %(queue)s to %(exchange)s with key %(routing_key)s"
+
+#~ msgid "Getting from %(queue)s: %(message)s"
+#~ msgstr "Getting from %(queue)s: %(message)s"
+
+#~ msgid "Test: Emulate wrong VSA name. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate DB error. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: user_data = %s"
+#~ msgstr ""
+
+#~ msgid "_create: param=%s"
+#~ msgstr ""
+
+#~ msgid "Host %s"
+#~ msgstr ""
+
+#~ msgid "Test: provision vol %(name)s on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "\t vol=%(vol)s"
+#~ msgstr ""
+
+#~ msgid "Test: VSA update request: vsa_id=%(vsa_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume create: %s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get request: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume update request: id=%(volume_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: success    %(result)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: %(status)s    %(error_info)s"
+#~ msgstr ""
+
+#~ msgid "Unable to get updated status: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "deactivate_node is called for                "
+#~ "node_id = %(id)s node_ip = %(ip)s"
+#~ msgstr ""
+
+#~ msgid "virsh said: %r"
+#~ msgstr ""
+
+#~ msgid "cool, it's a device"
+#~ msgstr ""
+
+#~ msgid "Unable to read LXC console"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "to xml...\n"
+#~ ":%s "
+#~ msgstr ""
+
+#~ msgid "During wait running, %s disappeared."
+#~ msgstr ""
+
+#~ msgid "Instance %s running successfully."
+#~ msgstr ""
+
+#~ msgid "The nwfilter(%(instance_secgroup_filter_name)s) is not found."
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image verification failed"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): image "
+#~ "verification skipped, no hash stored"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): checking"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in use:"
+#~ " on this node %(local)d local, "
+#~ "%(remote)d on other nodes"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): warning "
+#~ "-- an absent base file is in "
+#~ "use! instances: %(instance_list)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in: on"
+#~ " other nodes (%(remote)d on other "
+#~ "nodes)"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is not in use"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is in use"
+#~ msgstr ""
+
+#~ msgid "Created VM %s..."
+#~ msgstr "Created VM %s..."
+
+#~ msgid "Created VM %(instance_name)s as %(vm_ref)s."
+#~ msgstr "Created VM %(instance_name)s as %(vm_ref)s."
+
+#~ msgid "Creating a CDROM-specific VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Created a CDROM-specific VBD %(vbd_ref)s"
+#~ "  for VM %(vm_ref)s, VDI %(vdi_ref)s."
+#~ msgstr ""
+
+#~ msgid "No primary VDI found for%(vm_ref)s"
+#~ msgstr ""
+
+#~ msgid "Fetching image %(image)s"
+#~ msgstr ""
+
+#~ msgid "Image Type: %s"
+#~ msgstr ""
+
+#~ msgid "ISO: Found sr possibly containing the ISO image"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to fetch glance image"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s ... "
+#~ msgstr "Creating VBD for VDI %s ... "
+
+#~ msgid "Creating VBD for VDI %s done."
+#~ msgstr "Creating VBD for VDI %s done."
+
+#~ msgid "VBD.unplug successful first time."
+#~ msgstr "VBD.unplug successful first time."
+
+#~ msgid "VBD.unplug rejected: retrying..."
+#~ msgstr "VBD.unplug rejected: retrying..."
+
+#~ msgid "Not sleeping anymore!"
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful eventually."
+#~ msgstr "VBD.unplug successful eventually."
+
+#~ msgid "Ignoring XenAPI.Failure in VBD.unplug: %s"
+#~ msgstr "Ignoring XenAPI.Failure in VBD.unplug: %s"
+
+#~ msgid "Ignoring XenAPI.Failure %s"
+#~ msgstr "Ignoring XenAPI.Failure %s"
+
+#~ msgid "Starting instance %s"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn"
+#~ msgstr "instance %s: Failed to spawn"
+
+#~ msgid "Instance %s failed to spawn - performing clean-up"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn - Unable to create VM"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Auto configuring disk for instance "
+#~ "%(instance_uuid)s, attempting to resize "
+#~ "partition..."
+#~ msgstr ""
+
+#~ msgid "Invalid value for injected_files: '%s'"
+#~ msgstr ""
+
+#~ msgid "Starting VM %s..."
+#~ msgstr ""
+
+#~ msgid "Spawning VM %(instance_uuid)s created %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Instance %s: waiting for running"
+#~ msgstr ""
+
+#~ msgid "Instance %s: running"
+#~ msgstr ""
+
+#~ msgid "Resources to remove:%s"
+#~ msgstr ""
+
+#~ msgid "Removing VDI %(vdi_ref)s(uuid:%(vdi_to_remove)s)"
+#~ msgstr ""
+
+#~ msgid "Skipping VDI destroy for %s"
+#~ msgstr ""
+
+#~ msgid "Finished snapshot and upload for VM %s"
+#~ msgstr ""
+
+#~ msgid "Starting snapshot for VM %s"
+#~ msgstr ""
+
+#~ msgid "Unable to Snapshot instance %(instance_uuid)s: %(exc)s"
+#~ msgstr ""
+
+#~ msgid "Updating instance '%(instance_uuid)s' progress to %(progress)d"
+#~ msgstr ""
+
+#~ msgid "Resize instance %s complete"
+#~ msgstr ""
+
+#~ msgid "domid changed from %(olddomid)s to %(newdomid)s"
+#~ msgstr ""
+
+#~ msgid "VM %(instance_uuid)s already halted,skipping shutdown..."
+#~ msgstr ""
+
+#~ msgid "Shutting down VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Destroying VDIs for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s using RAW or "
+#~ "VHD, skipping kernel and ramdisk "
+#~ "deletion"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_uuid)s VM destroyed"
+#~ msgstr ""
+
+#~ msgid "Destroying VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Automatically hard rebooting %d"
+#~ msgstr ""
+
+#~ msgid "Instance for migration %d not found, skipping"
+#~ msgstr ""
+
+#~ msgid "injecting network info to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "creating vif(s) for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "Created VIF %(vif_ref)s for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr "Created VIF %(vif_ref)s for VM %(vm_ref)s, network %(network_ref)s."
+
+#~ msgid "injecting hostname to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The agent call to %(method)s returned"
+#~ " an invalid response: %(ret)r. VM "
+#~ "id=%(instance_uuid)s; path=%(path)s; args=%(addl_args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "TIMEOUT: The call to %(method)s timed"
+#~ " out. VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "NOT IMPLEMENTED: The call to %(method)s"
+#~ " is not supported by the agent. "
+#~ "VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The call to %(method)s returned an "
+#~ "error: %(e)s. VM id=%(instance_uuid)s; "
+#~ "args=%(args)r"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr "Creating VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+
+#~ msgid "Error destroying VDI"
+#~ msgstr ""
+
+#~ msgid "\tVolume %s is NOT VSA volume"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s creation - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s succeeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s deletion - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s suceeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s local path call - call discover"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s ensure export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s create export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s remove export - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE remove_export for %s failed"
+#~ msgstr ""
+
+#~ msgid "Failed to retrieve QoS info"
+#~ msgstr ""
+
+#~ msgid "invalid drive data"
+#~ msgstr ""
+
+#~ msgid "drive_name not defined"
+#~ msgstr ""
+
+#~ msgid "invalid drive type name %s"
+#~ msgstr ""
+
+#~ msgid "*** Experimental VSA code ***"
+#~ msgstr ""
+
+#~ msgid "Requested number of VCs (%d) is too high. Setting to default"
+#~ msgstr ""
+
+#~ msgid "Creating VSA: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d %(vsa_name)s: Create "
+#~ "volume %(vol_name)s, %(vol_size)d GB, type "
+#~ "%(vol_type_id)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA status to %(status)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA call"
+#~ msgstr ""
+
+#~ msgid "Adding %(add_cnt)s VCs to VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "Deleting %(del_cnt)s VCs from VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Deleting %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Unable to delete volume %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Forced delete. %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate VSA ID %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Delete instance %(name)s"
+#~ msgstr ""
+
+#~ msgid "Create call received for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Failed to find VSA %(vsa_id)d"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Drive %(vol_id)s created. Status %(status)s"
+#~ msgstr ""
+
+#~ msgid "Drive %(vol_name)s (%(vol_disp_name)s) still in creating phase - wait"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Not all volumes "
+#~ "are created (%(cvol_real)d of %(cvol_exp)d)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Drive %(vol_name)s "
+#~ "(%(vol_disp_name)s) is in %(status)s state"
+#~ msgstr ""
+
+#~ msgid "Failed to update attach status for volume %(vol_name)s. %(ex)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Delete all BE volumes"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Start %(vc_count)d instances"
+#~ msgstr ""
+
diff --git a/cinder/locale/es/LC_MESSAGES/nova.po b/cinder/locale/es/LC_MESSAGES/nova.po
new file mode 100644
index 000000000..836900e35
--- /dev/null
+++ b/cinder/locale/es/LC_MESSAGES/nova.po
@@ -0,0 +1,8220 @@
+# Spanish translation for cinder
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the cinder package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version:  cinder\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-04-08 23:04+0000\n"
+"PO-Revision-Date: 2012-03-10 06:08+0000\n"
+"Last-Translator: Oscar Rosario <oscar.inirio@gmail.com>\n"
+"Language-Team: Spanish <es@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: cinder/context.py:59
+#, python-format
+msgid "Arguments dropped when creating context: %s"
+msgstr ""
+
+#: cinder/context.py:90
+#, python-format
+msgid "read_deleted can only be one of 'no', 'yes' or 'only', not %r"
+msgstr ""
+
+#: cinder/crypto.py:48
+msgid "Filename of root CA"
+msgstr "Nombre de fichero de la CA raíz"
+
+#: cinder/crypto.py:51
+msgid "Filename of private key"
+msgstr "Nombre de fichero de la clave privada"
+
+#: cinder/crypto.py:54
+msgid "Filename of root Certificate Revocation List"
+msgstr ""
+
+#: cinder/crypto.py:57
+msgid "Where we keep our keys"
+msgstr "Donde guardamos nuestras claves"
+
+#: cinder/crypto.py:60
+msgid "Where we keep our root CA"
+msgstr "Dónde guardamos nuestra CA raíz"
+
+#: cinder/crypto.py:63
+msgid "Should we use a CA for each project?"
+msgstr "¿Deberíamos usar una CA para cada proyecto?"
+
+#: cinder/crypto.py:67
+#, python-format
+msgid "Subject for certificate for users, %s for project, user, timestamp"
+msgstr ""
+"Sujeto (Subject) para el certificado de usuarios, %s para el proyecto, "
+"usuario, marca de tiempo"
+
+#: cinder/crypto.py:72
+#, python-format
+msgid "Subject for certificate for projects, %s for project, timestamp"
+msgstr ""
+"Sujeto (Subject) para el certificado del proyecto, %s para el proyecto, "
+"marca de tiempo"
+
+#: cinder/crypto.py:292
+#, python-format
+msgid "Flags path: %s"
+msgstr "Ruta a las opciones: %s"
+
+#: cinder/exception.py:56
+msgid "Unexpected error while running command."
+msgstr "Error inesperado mientras el comando se ejecutaba"
+
+#: cinder/exception.py:59
+#, python-format
+msgid ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+msgstr ""
+"%(description)s\n"
+"Comando: %(cmd)s\n"
+"Código de salida: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+
+#: cinder/exception.py:94
+msgid "DB exception wrapped."
+msgstr ""
+
+#: cinder/exception.py:155
+msgid "An unknown exception occurred."
+msgstr "Una excepcion desconocida ha ocurrido"
+
+#: cinder/exception.py:178
+msgid "Failed to decrypt text"
+msgstr "Fallo al desencriptar el texto"
+
+#: cinder/exception.py:182
+msgid "Failed to paginate through images from image service"
+msgstr ""
+
+#: cinder/exception.py:186
+msgid "Virtual Interface creation failed"
+msgstr "Creacion de interfaz virtual fallida"
+
+#: cinder/exception.py:190
+msgid "5 attempts to create virtual interfacewith unique mac address failed"
+msgstr ""
+
+#: cinder/exception.py:195
+msgid "Connection to glance failed"
+msgstr "Coneccion con glance fallida"
+
+#: cinder/exception.py:199
+msgid "Connection to melange failed"
+msgstr ""
+
+#: cinder/exception.py:203
+msgid "Not authorized."
+msgstr "No Autorizado"
+
+#: cinder/exception.py:208
+msgid "User does not have admin privileges"
+msgstr "El usuario no tiene privilegios de administrador"
+
+#: cinder/exception.py:212
+#, python-format
+msgid "Policy doesn't allow %(action)s to be performed."
+msgstr ""
+
+#: cinder/exception.py:216
+#, fuzzy, python-format
+msgid "Not authorized for image %(image_id)s."
+msgstr "no hay método para el mensaje: %s"
+
+#: cinder/exception.py:220
+msgid "Unacceptable parameters."
+msgstr "Parametros inaceptables"
+
+#: cinder/exception.py:225
+msgid "Invalid snapshot"
+msgstr "Captura no valida"
+
+#: cinder/exception.py:229
+#, python-format
+msgid "Volume %(volume_id)s is not attached to anything"
+msgstr ""
+
+#: cinder/exception.py:233 cinder/api/openstack/compute/contrib/keypairs.py:113
+msgid "Keypair data is invalid"
+msgstr ""
+
+#: cinder/exception.py:237
+msgid "Failed to load data into json format"
+msgstr "Fallo al ingresar informacion en formato json"
+
+#: cinder/exception.py:241
+msgid "The request is invalid."
+msgstr "La petición es inválida."
+
+#: cinder/exception.py:245
+#, python-format
+msgid "Invalid signature %(signature)s for user %(user)s."
+msgstr "Firma invalida %(signature)s para el usuario %(user)s"
+
+#: cinder/exception.py:249
+msgid "Invalid input received"
+msgstr "Entrada invalida recibida"
+
+#: cinder/exception.py:253
+#, python-format
+msgid "Invalid instance type %(instance_type)s."
+msgstr ""
+
+#: cinder/exception.py:257
+msgid "Invalid volume type"
+msgstr ""
+
+#: cinder/exception.py:261
+msgid "Invalid volume"
+msgstr ""
+
+#: cinder/exception.py:265
+#, python-format
+msgid "Invalid port range %(from_port)s:%(to_port)s. %(msg)s"
+msgstr "Rango de puertos invalido %(from_port)s:%(to_port)s. %(msg)s"
+
+#: cinder/exception.py:269
+#, python-format
+msgid "Invalid IP protocol %(protocol)s."
+msgstr "Protocolo IP invalido %(protocol)s"
+
+#: cinder/exception.py:273
+#, python-format
+msgid "Invalid content type %(content_type)s."
+msgstr "Tipo de contenido invalido %(content_type)s."
+
+#: cinder/exception.py:277
+#, python-format
+msgid "Invalid cidr %(cidr)s."
+msgstr "Cidr %(cidr)s invalido"
+
+#: cinder/exception.py:281
+msgid "Invalid reuse of an RPC connection."
+msgstr "Reuso invalido de una coneccion RPC"
+
+#: cinder/exception.py:285
+msgid "Invalid Parameter: Unicode is not supported by the current database."
+msgstr ""
+
+#: cinder/exception.py:292
+#, python-format
+msgid "%(err)s"
+msgstr ""
+
+#: cinder/exception.py:296
+#, python-format
+msgid ""
+"Cannot perform action '%(action)s' on aggregate %(aggregate_id)s. Reason:"
+" %(reason)s."
+msgstr ""
+
+#: cinder/exception.py:301
+#, python-format
+msgid "Group not valid. Reason: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:305
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot %(method)s while"
+" the instance is in this state."
+msgstr ""
+
+#: cinder/exception.py:310
+#, python-format
+msgid "Instance %(instance_id)s is not running."
+msgstr "La instacia %(instance_id)s no se esta ejecutando"
+
+#: cinder/exception.py:314
+#, python-format
+msgid "Instance %(instance_id)s is not suspended."
+msgstr "La instacia %(instance_id)s no esta suspendida"
+
+#: cinder/exception.py:318
+#, python-format
+msgid "Instance %(instance_id)s is not in rescue mode"
+msgstr "La instancia %(instance_id)s no esta en modo de rescate"
+
+#: cinder/exception.py:322
+msgid "Failed to suspend instance"
+msgstr "Fallo al suspender la instancia"
+
+#: cinder/exception.py:326
+msgid "Failed to resume server"
+msgstr "Fallo al resumir el servidor"
+
+#: cinder/exception.py:330
+msgid "Failed to reboot instance"
+msgstr "Fallo a reinicia la instancia"
+
+#: cinder/exception.py:334
+#, fuzzy
+msgid "Failed to terminate instance"
+msgstr "Fallo a reinicia la instancia"
+
+#: cinder/exception.py:338
+msgid "Service is unavailable at this time."
+msgstr "El servicio no esta disponible en este momento"
+
+#: cinder/exception.py:342
+msgid "Volume service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:346
+msgid "Compute service is unavailable at this time."
+msgstr "El servicio de computo no esta disponible en este momento"
+
+#: cinder/exception.py:350
+#, python-format
+msgid "Unable to migrate instance (%(instance_id)s) to current host (%(host)s)."
+msgstr ""
+"Incapaz de emigrar la instancia %(instance_id)s al actual anfitrion "
+"(%(host)s)"
+
+#: cinder/exception.py:355
+msgid "Destination compute host is unavailable at this time."
+msgstr "El destino del anfitrion de computo no esta disponible en este momento"
+
+#: cinder/exception.py:359
+msgid "Original compute host is unavailable at this time."
+msgstr "El anfitrion de computo no esta disponible en este momento"
+
+#: cinder/exception.py:363
+msgid "The supplied hypervisor type of is invalid."
+msgstr ""
+
+#: cinder/exception.py:367
+msgid "The instance requires a newer hypervisor version than has been provided."
+msgstr ""
+
+#: cinder/exception.py:372
+#, python-format
+msgid ""
+"The supplied disk path (%(path)s) already exists, it is expected not to "
+"exist."
+msgstr ""
+
+#: cinder/exception.py:377
+#, python-format
+msgid "The supplied device path (%(path)s) is invalid."
+msgstr ""
+
+#: cinder/exception.py:381
+#, python-format
+msgid "The supplied device (%(device)s) is busy."
+msgstr ""
+
+#: cinder/exception.py:385
+msgid "Unacceptable CPU info"
+msgstr "Informacion del CPU inaceptable"
+
+#: cinder/exception.py:389
+#, python-format
+msgid "%(address)s is not a valid IP v4/6 address."
+msgstr "%(address)s no es una direccion IP v4/6 valida"
+
+#: cinder/exception.py:393
+#, python-format
+msgid ""
+"VLAN tag is not appropriate for the port group %(bridge)s. Expected VLAN "
+"tag is %(tag)s, but the one associated with the port group is %(pgroup)s."
+msgstr ""
+
+#: cinder/exception.py:399
+#, python-format
+msgid ""
+"vSwitch which contains the port group %(bridge)s is not associated with "
+"the desired physical adapter. Expected vSwitch is %(expected)s, but the "
+"one associated is %(actual)s."
+msgstr ""
+
+#: cinder/exception.py:406
+#, python-format
+msgid "Disk format %(disk_format)s is not acceptable"
+msgstr "Formato de disco %(disk_format)s no es aceptable"
+
+#: cinder/exception.py:410
+#, python-format
+msgid "Image %(image_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:414
+#, python-format
+msgid "Instance %(instance_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:418
+#, python-format
+msgid "Ec2 id %(ec2_id)s is unacceptable."
+msgstr ""
+
+#: cinder/exception.py:422
+msgid "Resource could not be found."
+msgstr ""
+
+#: cinder/exception.py:427
+#, python-format
+msgid "Required flag %(flag)s not set."
+msgstr ""
+
+#: cinder/exception.py:431
+#, python-format
+msgid "Volume %(volume_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:435
+#, python-format
+msgid "Unable to locate account %(account_name)s on Solidfire device"
+msgstr ""
+
+#: cinder/exception.py:440
+#, python-format
+msgid "Volume not found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:444
+#, python-format
+msgid "Volume %(volume_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:449
+msgid "Zero volume types found."
+msgstr ""
+
+#: cinder/exception.py:453
+#, python-format
+msgid "Volume type %(volume_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:457
+#, python-format
+msgid "Volume type with name %(volume_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:462
+#, python-format
+msgid ""
+"Volume Type %(volume_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:467
+#, python-format
+msgid "Snapshot %(snapshot_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:471
+#, python-format
+msgid "deleting volume %(volume_name)s that has snapshot"
+msgstr ""
+
+#: cinder/exception.py:475
+#, python-format
+msgid "deleting snapshot %(snapshot_name)s that has dependent volumes"
+msgstr ""
+
+#: cinder/exception.py:480
+#, python-format
+msgid "No target id found for volume %(volume_id)s."
+msgstr ""
+
+#: cinder/exception.py:484
+#, python-format
+msgid "No disk at %(location)s"
+msgstr ""
+
+#: cinder/exception.py:488
+#, python-format
+msgid "Could not find a handler for %(driver_type)s volume."
+msgstr ""
+
+#: cinder/exception.py:492
+#, python-format
+msgid "Invalid image href %(image_href)s."
+msgstr ""
+
+#: cinder/exception.py:496
+msgid ""
+"Some images have been stored via hrefs. This version of the api does not "
+"support displaying image hrefs."
+msgstr ""
+
+#: cinder/exception.py:501
+#, python-format
+msgid "Image %(image_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:505
+#, python-format
+msgid "Kernel not found for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:509
+#, python-format
+msgid "User %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:513
+#, python-format
+msgid "Project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:517
+#, python-format
+msgid "User %(user_id)s is not a member of project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:521
+#, python-format
+msgid "Role %(role_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:525
+msgid "Cannot find SR to read/write VDI."
+msgstr ""
+
+#: cinder/exception.py:529
+#, python-format
+msgid "%(req)s is required to create a network."
+msgstr ""
+
+#: cinder/exception.py:533
+#, python-format
+msgid "Network %(network_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:537
+#, python-format
+msgid "Network could not be found for bridge %(bridge)s"
+msgstr ""
+
+#: cinder/exception.py:541
+#, python-format
+msgid "Network could not be found for uuid %(uuid)s"
+msgstr ""
+
+#: cinder/exception.py:545
+#, python-format
+msgid "Network could not be found with cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:549
+#, python-format
+msgid "Network could not be found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:553
+msgid "No networks defined."
+msgstr ""
+
+#: cinder/exception.py:557
+#, python-format
+msgid ""
+"Either Network uuid %(network_uuid)s is not present or is not assigned to"
+" the project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:562
+#, python-format
+msgid "Host is not set to the network (%(network_id)s)."
+msgstr ""
+
+#: cinder/exception.py:566
+#, python-format
+msgid "Network %(network)s has active ports, cannot delete."
+msgstr ""
+
+#: cinder/exception.py:570
+msgid "Could not find the datastore reference(s) which the VM uses."
+msgstr ""
+
+#: cinder/exception.py:574
+#, python-format
+msgid "No fixed IP associated with id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:578
+#, python-format
+msgid "Fixed ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:582
+#, python-format
+msgid "Instance %(instance_id)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:586
+#, python-format
+msgid "Network host %(host)s has zero fixed ips in network %(network_id)s."
+msgstr ""
+
+#: cinder/exception.py:591
+#, python-format
+msgid "Instance %(instance_id)s doesn't have fixed ip '%(ip)s'."
+msgstr ""
+
+#: cinder/exception.py:595
+#, python-format
+msgid "Host %(host)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:599
+#, python-format
+msgid ""
+"Fixed IP address (%(address)s) does not exist in network "
+"(%(network_uuid)s)."
+msgstr ""
+
+#: cinder/exception.py:604
+#, python-format
+msgid "Fixed IP address %(address)s is already in use."
+msgstr ""
+
+#: cinder/exception.py:608
+#, python-format
+msgid "Fixed IP address %(address)s is invalid."
+msgstr ""
+
+#: cinder/exception.py:612
+msgid "Zero fixed ips available."
+msgstr ""
+
+#: cinder/exception.py:616
+msgid "Zero fixed ips could be found."
+msgstr ""
+
+#: cinder/exception.py:620
+#, python-format
+msgid "Floating ip not found for id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:624
+#, python-format
+msgid "The DNS entry %(name)s already exists in domain %(domain)s."
+msgstr ""
+
+#: cinder/exception.py:628
+#, python-format
+msgid "Floating ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:632
+#, python-format
+msgid "Floating ip not found for host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:636
+msgid "Zero floating ips available."
+msgstr ""
+
+#: cinder/exception.py:640
+#, python-format
+msgid "Floating ip %(address)s is associated."
+msgstr ""
+
+#: cinder/exception.py:644
+#, python-format
+msgid "Floating ip %(address)s is not associated."
+msgstr ""
+
+#: cinder/exception.py:648
+msgid "Zero floating ips exist."
+msgstr ""
+
+#: cinder/exception.py:652
+#, python-format
+msgid "Interface %(interface)s not found."
+msgstr ""
+
+#: cinder/exception.py:656
+#, python-format
+msgid "Keypair %(name)s not found for user %(user_id)s"
+msgstr ""
+
+#: cinder/exception.py:660
+#, python-format
+msgid "Certificate %(certificate_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:664
+#, python-format
+msgid "Service %(service_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:668
+#, python-format
+msgid "Host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:672
+#, python-format
+msgid "Compute host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:676
+#, python-format
+msgid "Could not find binary %(binary)s on host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:680
+#, python-format
+msgid "Auth token %(token)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:684
+#, python-format
+msgid "Access Key %(access_key)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:688
+msgid "Quota could not be found"
+msgstr ""
+
+#: cinder/exception.py:692
+#, python-format
+msgid "Quota for project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:696
+#, python-format
+msgid "Quota class %(class_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:700
+#, python-format
+msgid "Security group %(security_group_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:704
+#, python-format
+msgid "Security group %(security_group_id)s not found for project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:709
+#, python-format
+msgid "Security group with rule %(rule_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:713
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is already associated with the "
+"instance %(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:718
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is not associated with the instance "
+"%(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:723
+#, python-format
+msgid "Migration %(migration_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:727
+#, python-format
+msgid "Migration not found for instance %(instance_id)s with status %(status)s."
+msgstr ""
+
+#: cinder/exception.py:732
+#, python-format
+msgid "Console pool %(pool_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:736
+#, python-format
+msgid ""
+"Console pool of type %(console_type)s for compute host %(compute_host)s "
+"on proxy host %(host)s not found."
+msgstr ""
+
+#: cinder/exception.py:742
+#, python-format
+msgid "Console %(console_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:746
+#, python-format
+msgid "Console for instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:750
+#, python-format
+msgid ""
+"Console for instance %(instance_id)s in pool %(pool_id)s could not be "
+"found."
+msgstr ""
+
+#: cinder/exception.py:755
+#, python-format
+msgid "Invalid console type %(console_type)s "
+msgstr ""
+
+#: cinder/exception.py:759
+msgid "Zero instance types found."
+msgstr ""
+
+#: cinder/exception.py:763
+#, python-format
+msgid "Instance type %(instance_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:767
+#, python-format
+msgid "Instance type with name %(instance_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:772
+#, python-format
+msgid "Flavor %(flavor_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:776
+#, python-format
+msgid "Cell %(cell_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:780
+#, python-format
+msgid "Scheduler Host Filter %(filter_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:784
+#, python-format
+msgid "Scheduler cost function %(cost_fn_str)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:789
+#, python-format
+msgid "Scheduler weight flag not found: %(flag_name)s"
+msgstr ""
+
+#: cinder/exception.py:793
+#, python-format
+msgid "Instance %(instance_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:798
+#, python-format
+msgid ""
+"Instance Type %(instance_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:803
+msgid "LDAP object could not be found"
+msgstr ""
+
+#: cinder/exception.py:807
+#, python-format
+msgid "LDAP user %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:811
+#, python-format
+msgid "LDAP group %(group_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:815
+#, python-format
+msgid "LDAP user %(user_id)s is not a member of group %(group_id)s."
+msgstr ""
+
+#: cinder/exception.py:819
+#, python-format
+msgid "File %(file_path)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:823
+msgid "Zero files could be found."
+msgstr ""
+
+#: cinder/exception.py:827
+#, python-format
+msgid "Virtual switch associated with the network adapter %(adapter)s not found."
+msgstr ""
+
+#: cinder/exception.py:832
+#, python-format
+msgid "Network adapter %(adapter)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:836
+#, python-format
+msgid "Class %(class_name)s could not be found: %(exception)s"
+msgstr ""
+
+#: cinder/exception.py:840
+msgid "Action not allowed."
+msgstr ""
+
+#: cinder/exception.py:844
+#, python-format
+msgid "Unable to use global role %(role_id)s"
+msgstr ""
+
+#: cinder/exception.py:848
+msgid "Rotation is not allowed for snapshots"
+msgstr ""
+
+#: cinder/exception.py:852
+msgid "Rotation param is required for backup image_type"
+msgstr ""
+
+#: cinder/exception.py:861
+#, python-format
+msgid "Key pair %(key_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:865
+#, python-format
+msgid "User %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:869
+#, python-format
+msgid "LDAP user %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:873
+#, python-format
+msgid "LDAP group %(group)s already exists."
+msgstr ""
+
+#: cinder/exception.py:877
+#, python-format
+msgid "User %(uid)s is already a member of the group %(group_dn)s"
+msgstr "El usuario %(uid)s es actualmente miembro del grupo %(group_dn)s"
+
+#: cinder/exception.py:882
+#, python-format
+msgid "Project %(project)s already exists."
+msgstr ""
+
+#: cinder/exception.py:886
+#, python-format
+msgid "Instance %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:890
+#, python-format
+msgid "Instance Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:894
+#, python-format
+msgid "Volume Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:898
+#, python-format
+msgid "%(path)s is on shared storage: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:902
+msgid "Migration error"
+msgstr ""
+
+#: cinder/exception.py:906
+#, python-format
+msgid "Malformed message body: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:910
+#, python-format
+msgid "Could not find config at %(path)s"
+msgstr ""
+
+#: cinder/exception.py:914
+#, python-format
+msgid "Could not load paste app '%(name)s' from %(path)s"
+msgstr ""
+
+#: cinder/exception.py:918
+msgid "When resizing, instances must change size!"
+msgstr ""
+
+#: cinder/exception.py:922
+msgid "Image is larger than instance type allows"
+msgstr ""
+
+#: cinder/exception.py:926
+msgid "1 or more Zones could not complete the request"
+msgstr ""
+
+#: cinder/exception.py:930
+msgid "Instance type's memory is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:934
+msgid "Instance type's disk is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:938
+#, python-format
+msgid "Insufficient free memory on compute node to start %(uuid)s."
+msgstr ""
+
+#: cinder/exception.py:942
+msgid "Could not fetch bandwidth/cpu/disk metrics for this host."
+msgstr ""
+
+#: cinder/exception.py:946
+#, python-format
+msgid "No valid host was found. %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:950
+#, python-format
+msgid "Host %(host)s is not up or doesn't exist."
+msgstr ""
+
+#: cinder/exception.py:954
+msgid "Quota exceeded"
+msgstr ""
+
+#: cinder/exception.py:958
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: action '%(action)s' caused an error: "
+"%(reason)s."
+msgstr ""
+
+#: cinder/exception.py:963
+#, python-format
+msgid "Aggregate %(aggregate_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:967
+#, python-format
+msgid "Aggregate %(aggregate_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:971
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:975
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:980
+#, python-format
+msgid "Host %(host)s already member of another aggregate."
+msgstr ""
+
+#: cinder/exception.py:984
+#, python-format
+msgid "Aggregate %(aggregate_id)s already has host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:988
+#, python-format
+msgid "Detected more than one volume with name %(vol_name)s"
+msgstr ""
+
+#: cinder/exception.py:992
+#, python-format
+msgid "Cannot create volume_type with name %(name)s and specs %(extra_specs)s"
+msgstr ""
+
+#: cinder/exception.py:997
+msgid "Unable to create instance type"
+msgstr ""
+
+#: cinder/exception.py:1001
+msgid "Bad response from SolidFire API"
+msgstr ""
+
+#: cinder/exception.py:1005
+#, python-format
+msgid "Error in SolidFire API response: status=%(status)s"
+msgstr ""
+
+#: cinder/exception.py:1009
+#, python-format
+msgid "Error in SolidFire API response: data=%(data)s"
+msgstr ""
+
+#: cinder/exception.py:1013
+#, python-format
+msgid "Detected existing vlan with id %(vlan)d"
+msgstr ""
+
+#: cinder/exception.py:1017
+#, python-format
+msgid "Instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:1021
+#, python-format
+msgid "Invalid id: %(val)s (expecting \"i-...\")."
+msgstr ""
+
+#: cinder/exception.py:1025
+#, fuzzy, python-format
+msgid "Could not fetch image %(image)s"
+msgstr "No se puede unir la imagen con el loopback: %s"
+
+#: cinder/log.py:315
+#, python-format
+msgid "syslog facility must be one of: %s"
+msgstr ""
+
+#: cinder/manager.py:146
+#, python-format
+msgid "Skipping %(full_task_name)s, %(ticks_to_skip)s ticks left until next run"
+msgstr ""
+
+#: cinder/manager.py:152
+#, python-format
+msgid "Running periodic task %(full_task_name)s"
+msgstr ""
+
+#: cinder/manager.py:159
+#, python-format
+msgid "Error during %(full_task_name)s: %(e)s"
+msgstr ""
+
+#: cinder/manager.py:203
+msgid "Notifying Schedulers of capabilities ..."
+msgstr ""
+
+#: cinder/policy.py:30
+msgid "JSON file representing policy"
+msgstr ""
+
+#: cinder/policy.py:33
+msgid "Rule checked when requested rule is not found"
+msgstr ""
+
+#: cinder/service.py:137
+msgid "SIGTERM received"
+msgstr ""
+
+#: cinder/service.py:177
+#, python-format
+msgid "Starting %(topic)s node (version %(vcs_string)s)"
+msgstr ""
+
+#: cinder/service.py:195
+#, python-format
+msgid "Creating Consumer connection for Service %s"
+msgstr ""
+
+#: cinder/service.py:282
+msgid "Service killed that has no database entry"
+msgstr "Se detuvo un servicio sin entrada en la base de datos"
+
+#: cinder/service.py:319
+msgid "The service database object disappeared, Recreating it."
+msgstr "El servicio objeto de base de datos ha desaparecido, recreándolo."
+
+#: cinder/service.py:334
+msgid "Recovered model server connection!"
+msgstr "Recuperada la conexión al servidor de modelos."
+
+#: cinder/service.py:340
+msgid "model server went away"
+msgstr "el servidor de modelos se ha ido"
+
+#: cinder/service.py:433
+msgid "Full set of FLAGS:"
+msgstr "Conjunto completo de opciones (FLAGS):"
+
+#: cinder/service.py:440
+#, python-format
+msgid "%(flag)s : FLAG SET "
+msgstr ""
+
+#: cinder/utils.py:79
+#, python-format
+msgid "Inner Exception: %s"
+msgstr "Excepción interna: %s"
+
+#: cinder/utils.py:165
+#, python-format
+msgid "Fetching %s"
+msgstr "Obteniendo %s"
+
+#: cinder/utils.py:210
+#, python-format
+msgid "Got unknown keyword args to utils.execute: %r"
+msgstr ""
+
+#: cinder/utils.py:220
+#, python-format
+msgid "Running cmd (subprocess): %s"
+msgstr "Ejecutando cmd (subprocesos): %s"
+
+#: cinder/utils.py:236 cinder/utils.py:315
+#, python-format
+msgid "Result was %s"
+msgstr "El resultado fue %s"
+
+#: cinder/utils.py:249
+#, python-format
+msgid "%r failed. Retrying."
+msgstr ""
+
+#: cinder/utils.py:291
+#, python-format
+msgid "Running cmd (SSH): %s"
+msgstr "corriendo cmd (SSH): %s"
+
+#: cinder/utils.py:293
+msgid "Environment not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:297
+msgid "process_input not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:352
+#, python-format
+msgid "debug in callback: %s"
+msgstr "Depuración de la devolución de llamada: %s"
+
+#: cinder/utils.py:534
+#, python-format
+msgid "Link Local address is not found.:%s"
+msgstr "No se encuentra la dirección del enlace local.:%s"
+
+#: cinder/utils.py:537
+#, python-format
+msgid "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+msgstr "No se pudo obtener enlace de la ip local de %(interface)s :%(ex)s"
+
+#: cinder/utils.py:648
+#, python-format
+msgid "Invalid backend: %s"
+msgstr "backend inválido: %s"
+
+#: cinder/utils.py:659
+#, python-format
+msgid "backend %s"
+msgstr "backend %s"
+
+#: cinder/utils.py:709
+msgid "in looping call"
+msgstr ""
+
+#: cinder/utils.py:927
+#, python-format
+msgid "Attempting to grab semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:931
+#, python-format
+msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:935
+#, python-format
+msgid "Attempting to grab file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:942
+#, python-format
+msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:1001
+#, python-format
+msgid "Found sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1008
+#, python-format
+msgid "Cleaned sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1023
+#, python-format
+msgid "Found lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1028
+#, python-format
+msgid "Cleaned lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1138
+#, python-format
+msgid "Expected object of type: %s"
+msgstr ""
+
+#: cinder/utils.py:1169
+#, python-format
+msgid "Invalid server_string: %s"
+msgstr ""
+
+#: cinder/utils.py:1298
+#, python-format
+msgid "timefunc: '%(name)s' took %(total_time).2f secs"
+msgstr ""
+
+#: cinder/utils.py:1330
+msgid "Original exception being dropped"
+msgstr ""
+
+#: cinder/utils.py:1461
+#, python-format
+msgid "Class %(fullname)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1463
+#, python-format
+msgid "Class %(fullname)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1495
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1497
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1681
+#, python-format
+msgid "Could not remove tmpdir: %s"
+msgstr ""
+
+#: cinder/wsgi.py:97
+#, python-format
+msgid "Started %(name)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:108
+msgid "Stopping WSGI server."
+msgstr ""
+
+#: cinder/wsgi.py:111
+msgid "Stopping raw TCP server."
+msgstr ""
+
+#: cinder/wsgi.py:117
+#, python-format
+msgid "Starting TCP server %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:133
+msgid "WSGI server has stopped."
+msgstr ""
+
+#: cinder/wsgi.py:211
+msgid "You must implement __call__"
+msgstr ""
+
+#: cinder/api/direct.py:218
+msgid "not available"
+msgstr ""
+
+#: cinder/api/direct.py:299
+#, python-format
+msgid "Returned non-serializeable type: %s"
+msgstr ""
+
+#: cinder/api/sizelimit.py:51
+msgid "Request is too large."
+msgstr ""
+
+#: cinder/api/validator.py:142
+#, python-format
+msgid "%(key)s with value %(value)s failed validator  %(validator)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:73
+#, python-format
+msgid "%(code)s: %(message)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:95
+#, python-format
+msgid "FaultWrapper: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:170
+msgid "Too many failed authentications."
+msgstr "Demasiados intentos de autenticacion fallidos."
+
+#: cinder/api/ec2/__init__.py:180
+#, python-format
+msgid ""
+"Access key %(access_key)s has had %(failures)d failed authentications and"
+" will be locked out for %(lock_mins)d minutes."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:267
+msgid "Signature not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:271
+msgid "Access key not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:306 cinder/api/ec2/__init__.py:319
+msgid "Failure communicating with keystone"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:388
+#, python-format
+msgid "Authentication Failure: %s"
+msgstr "Fallo de autenticación: %s"
+
+#: cinder/api/ec2/__init__.py:404
+#, python-format
+msgid "Authenticated Request For %(uname)s:%(pname)s)"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:435
+#, python-format
+msgid "action: %s"
+msgstr "acción: %s"
+
+#: cinder/api/ec2/__init__.py:437
+#, python-format
+msgid "arg: %(key)s\t\tval: %(value)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:512
+#, python-format
+msgid "Unauthorized request for controller=%(controller)s and action=%(action)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:584
+#, python-format
+msgid "InstanceNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:590
+#, python-format
+msgid "VolumeNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:596
+#, python-format
+msgid "SnapshotNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:602
+#, python-format
+msgid "NotFound raised: %s"
+msgstr "No encontrado: %s"
+
+#: cinder/api/ec2/__init__.py:605
+#, python-format
+msgid "EC2APIError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:613
+#, python-format
+msgid "KeyPairExists raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:617
+#, python-format
+msgid "InvalidParameterValue raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:621
+#, python-format
+msgid "InvalidPortRange raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:625
+#, python-format
+msgid "NotAuthorized raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:629
+#, python-format
+msgid "InvalidRequest raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:633
+#, fuzzy, python-format
+msgid "QuotaError raised: %s"
+msgstr "Sucedió un error inexperado: %s"
+
+#: cinder/api/ec2/__init__.py:637
+#, python-format
+msgid "Invalid id: bogus (expecting \"i-...\"): %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:646
+#, python-format
+msgid "Unexpected error raised: %s"
+msgstr "Sucedió un error inexperado: %s"
+
+#: cinder/api/ec2/__init__.py:647
+#, python-format
+msgid "Environment: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:649 cinder/api/metadata/handler.py:248
+msgid "An unknown error has occurred. Please try your request again."
+msgstr "Ha sucedido un error desconocido. Por favor repite el intento de nuevo."
+
+#: cinder/api/ec2/apirequest.py:64
+#, python-format
+msgid "Unsupported API request: controller = %(controller)s, action = %(action)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:336
+#, python-format
+msgid "Create snapshot of volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:372
+#, python-format
+msgid ""
+"Value (%s) for KeyName is invalid. Content limited to Alphanumeric "
+"character, spaces, dashes, and underscore."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:378
+#, python-format
+msgid "Value (%s) for Keyname is invalid. Length exceeds maximum of 255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:382
+#, python-format
+msgid "Create key pair %s"
+msgstr "Creando par de claves %s"
+
+#: cinder/api/ec2/cloud.py:391
+#, python-format
+msgid "Import key %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:409
+#, python-format
+msgid "Delete key pair %s"
+msgstr "Borrar para de claves %s"
+
+#: cinder/api/ec2/cloud.py:551
+#, fuzzy, python-format
+msgid "Invalid CIDR"
+msgstr "Cidr %(cidr)s invalido"
+
+#: cinder/api/ec2/cloud.py:639 cinder/api/ec2/cloud.py:693
+#: cinder/api/ec2/cloud.py:800
+msgid "Not enough parameters, need group_name or group_id"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:654
+#: cinder/api/openstack/compute/contrib/security_groups.py:517
+#, python-format
+msgid "Revoke security group ingress %s"
+msgstr "Revocar ingreso al grupo de seguridad %s"
+
+#: cinder/api/ec2/cloud.py:666 cinder/api/ec2/cloud.py:719
+#, python-format
+msgid "%s Not enough parameters to build a valid rule"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:684 cinder/api/ec2/cloud.py:744
+msgid "No rule for the specified parameters."
+msgstr "No hay regla para los parámetros especificados."
+
+#: cinder/api/ec2/cloud.py:708
+#: cinder/api/openstack/compute/contrib/security_groups.py:354
+#, python-format
+msgid "Authorize security group ingress %s"
+msgstr "Autorizar ingreso al grupo de seguridad %s"
+
+#: cinder/api/ec2/cloud.py:725
+#, fuzzy, python-format
+msgid "%s - This rule already exists in group"
+msgstr "Esta regla ya existe en el grupo %s"
+
+#: cinder/api/ec2/cloud.py:769
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Content limited to "
+"Alphanumeric characters, spaces, dashes, and underscores."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:776
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Length exceeds maximum of "
+"255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:780
+#: cinder/api/openstack/compute/contrib/security_groups.py:292
+#, python-format
+msgid "Create Security Group %s"
+msgstr "Crear Grupo de Seguridad %s"
+
+#: cinder/api/ec2/cloud.py:783
+#, python-format
+msgid "group %s already exists"
+msgstr "el grupo %s ya existe"
+
+#: cinder/api/ec2/cloud.py:815
+#: cinder/api/openstack/compute/contrib/security_groups.py:245
+#, python-format
+msgid "Delete security group %s"
+msgstr "Borrar grupo de seguridad %s"
+
+#: cinder/api/ec2/cloud.py:823 cinder/compute/manager.py:1630
+#, python-format
+msgid "Get console output for instance %s"
+msgstr "Obtener salida de la consola para la instancia %s"
+
+#: cinder/api/ec2/cloud.py:894
+#, python-format
+msgid "Create volume from snapshot %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:898 cinder/api/openstack/compute/contrib/volumes.py:186
+#: cinder/api/openstack/volume/volumes.py:222
+#, python-format
+msgid "Create volume of %s GB"
+msgstr "Crear volumen de %s GB"
+
+#: cinder/api/ec2/cloud.py:921
+msgid "Delete Failed"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:931
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(instance_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:939
+msgid "Attach Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:952 cinder/api/openstack/compute/contrib/volumes.py:366
+#, python-format
+msgid "Detach volume %s"
+msgstr "Desasociar volumen %s"
+
+#: cinder/api/ec2/cloud.py:959
+#, fuzzy, python-format
+msgid "Detach Volume Failed."
+msgstr "Desasociar volumen %s"
+
+#: cinder/api/ec2/cloud.py:984 cinder/api/ec2/cloud.py:1041
+#: cinder/api/ec2/cloud.py:1518 cinder/api/ec2/cloud.py:1533
+#, python-format
+msgid "attribute not supported: %s"
+msgstr "atributo no soportado: %s"
+
+#: cinder/api/ec2/cloud.py:1107
+#, python-format
+msgid "vol = %s\n"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1255
+msgid "Allocate address"
+msgstr "Asignar dirección"
+
+#: cinder/api/ec2/cloud.py:1267
+#, python-format
+msgid "Release address %s"
+msgstr "Liberar dirección %s"
+
+#: cinder/api/ec2/cloud.py:1272
+#, python-format
+msgid "Associate address %(public_ip)s to instance %(instance_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1282
+#, python-format
+msgid "Disassociate address %s"
+msgstr "Desasociar dirección %s"
+
+#: cinder/api/ec2/cloud.py:1308
+msgid "Image must be available"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1329
+msgid "Going to start terminating instances"
+msgstr "Se va a iniciar la finalización de las instancias"
+
+#: cinder/api/ec2/cloud.py:1343
+#, python-format
+msgid "Reboot instance %r"
+msgstr "Reiniciar instancia %r"
+
+#: cinder/api/ec2/cloud.py:1354
+msgid "Going to stop instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1365
+msgid "Going to start instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1455
+#, python-format
+msgid "De-registering image %s"
+msgstr "Des-registrando la imagen %s"
+
+#: cinder/api/ec2/cloud.py:1471
+msgid "imageLocation is required"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1490
+#, python-format
+msgid "Registered image %(image_location)s with id %(image_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1536
+msgid "user or group not specified"
+msgstr "usuario o grupo no especificado"
+
+#: cinder/api/ec2/cloud.py:1538
+msgid "only group \"all\" is supported"
+msgstr "sólo el grupo \"all\" está soportado"
+
+#: cinder/api/ec2/cloud.py:1540
+msgid "operation_type must be add or remove"
+msgstr "operation_type debe ser añadir o eliminar"
+
+#: cinder/api/ec2/cloud.py:1542
+#, python-format
+msgid "Updating image %s publicity"
+msgstr "Actualizando imagen %s públicamente"
+
+#: cinder/api/ec2/cloud.py:1555
+#, python-format
+msgid "Not allowed to modify attributes for image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1603
+#, python-format
+msgid "Couldn't stop instance with in %d sec"
+msgstr ""
+
+#: cinder/api/metadata/handler.py:246 cinder/api/metadata/handler.py:253
+#, python-format
+msgid "Failed to get metadata for ip: %s"
+msgstr "Fallo al generar metadatos para la ip %s"
+
+#: cinder/api/openstack/__init__.py:43
+#, python-format
+msgid "Caught error: %s"
+msgstr "Capturado error: %s"
+
+#: cinder/api/openstack/__init__.py:45 cinder/api/openstack/wsgi.py:886
+#, python-format
+msgid "%(url)s returned with HTTP %(status)d"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:94
+msgid "Must specify an ExtensionManager class"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:105
+#, python-format
+msgid "Extended resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:130
+#, python-format
+msgid ""
+"Extension %(ext_name)s: Cannot extend resource %(collection)s: No such "
+"resource"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:135
+#, python-format
+msgid "Extension %(ext_name)s extending resource: %(collection)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:90
+#, python-format
+msgid "%(user_id)s could not be found with token '%(token)s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:134
+#, python-format
+msgid "%(user_id)s must be an admin or a member of %(project_id)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:152
+msgid "Authentication requests must be made against a version root (e.g. /v2)."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:167
+#, python-format
+msgid "Could not find %s in request."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:191
+#, python-format
+msgid "Successfully authenticated '%s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:241
+msgid "User not found with provided API key."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:258
+#, python-format
+msgid "Provided API key is valid, but not for user '%(username)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:133 cinder/api/openstack/common.py:167
+msgid "limit param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:136 cinder/api/openstack/common.py:171
+msgid "limit param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:161
+msgid "offset param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:175
+msgid "offset param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:203
+#, python-format
+msgid "marker [%s] not found"
+msgstr ""
+
+#: cinder/api/openstack/common.py:243
+#, python-format
+msgid "href %s does not contain version"
+msgstr ""
+
+#: cinder/api/openstack/common.py:278
+msgid "Image metadata limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/common.py:295
+#, python-format
+msgid "Converting nw_info: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:305
+#, python-format
+msgid "Converted networks: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:338
+#, python-format
+msgid "Cannot '%(action)s' while instance is in %(attr)s %(state)s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:341
+#, python-format
+msgid "Instance is in an invalid state for '%(action)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:421
+msgid "Rejecting snapshot request, snapshots currently disabled"
+msgstr ""
+
+#: cinder/api/openstack/common.py:423
+msgid "Instance snapshots are not permitted at this time."
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:188
+#, python-format
+msgid "Loaded extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:225
+#, python-format
+msgid "Ext name: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:226
+#, python-format
+msgid "Ext alias: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:227
+#, python-format
+msgid "Ext description: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:229
+#, python-format
+msgid "Ext namespace: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:230
+#, python-format
+msgid "Ext updated: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:232
+#, python-format
+msgid "Exception loading extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:246
+#, python-format
+msgid "Loading extension %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:252
+#, python-format
+msgid "Calling extension factory %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:264
+#, python-format
+msgid "Failed to load extension %(ext_factory)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:344
+#, python-format
+msgid "Failed to load extension %(classpath)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:368
+#, python-format
+msgid "Failed to load extension %(ext_name)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:135 cinder/api/openstack/wsgi.py:538
+msgid "cannot understand JSON"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:159
+#: cinder/api/openstack/compute/contrib/hosts.py:86
+msgid "cannot understand XML"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:543
+msgid "too many body keys"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:582
+#, python-format
+msgid "Exception handling resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:586
+#, python-format
+msgid "Fault thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:589
+#, python-format
+msgid "HTTP exception thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:697
+msgid "Unrecognized Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:701
+msgid "No Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:705
+msgid "Empty body provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:816
+#, python-format
+msgid "There is no such action: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:819 cinder/api/openstack/wsgi.py:832
+#: cinder/api/openstack/compute/server_metadata.py:58
+#: cinder/api/openstack/compute/server_metadata.py:76
+#: cinder/api/openstack/compute/server_metadata.py:101
+#: cinder/api/openstack/compute/server_metadata.py:126
+#: cinder/api/openstack/compute/contrib/admin_actions.py:211
+#: cinder/api/openstack/compute/contrib/console_output.py:52
+msgid "Malformed request body"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:829
+msgid "Unsupported Content-Type"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:841
+msgid "Malformed request url"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:889
+#, python-format
+msgid "%(url)s returned a fault: %(e)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:265
+msgid "element is not a child"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:414
+msgid "root element selecting a list"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:739
+#, python-format
+msgid "Template tree mismatch; adding slave %(slavetag)s to master %(mastertag)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:858
+msgid "subclasses must implement construct()!"
+msgstr ""
+
+#: cinder/api/openstack/compute/extensions.py:29
+#: cinder/api/openstack/volume/extensions.py:29
+msgid "Initializing extension manager."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:40
+#: cinder/api/openstack/compute/images.py:146
+#: cinder/api/openstack/compute/images.py:161
+msgid "Image not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:79
+msgid "Incorrect request body format"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:83
+#: cinder/api/openstack/compute/server_metadata.py:80
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:79
+#: cinder/api/openstack/compute/contrib/volumetypes.py:188
+msgid "Request body and URI mismatch"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:86
+#: cinder/api/openstack/compute/server_metadata.py:84
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:82
+#: cinder/api/openstack/compute/contrib/volumetypes.py:191
+msgid "Request body contains too many items"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:111
+msgid "Invalid metadata key"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:74
+msgid "Instance does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:97
+msgid "Instance is not a member of specified network"
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:140
+#, python-format
+msgid ""
+"Only %(value)s %(verb)s request(s) can be made to %(uri)s every "
+"%(unit_string)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:266
+msgid "This request was rate-limited."
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:38
+#: cinder/api/openstack/compute/server_metadata.py:122
+#: cinder/api/openstack/compute/server_metadata.py:159
+msgid "Server does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:141
+#: cinder/api/openstack/compute/server_metadata.py:152
+msgid "Metadata item was not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:425
+#, python-format
+msgid "Invalid server status: %(status)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:433
+msgid "Invalid changes-since value"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:483
+msgid "Personality file limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:485
+msgid "Personality file path too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:487
+msgid "Personality file content too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:501
+msgid "Server name is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:505
+msgid "Server name is an empty string"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:509
+msgid "Server name must be less than 256 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:527
+#, python-format
+msgid "Bad personality format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:530
+msgid "Bad personality format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:535
+#, python-format
+msgid "Personality content for %s cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:550
+#, python-format
+msgid "Bad networks format: network uuid is not in proper format (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:559
+#, python-format
+msgid "Invalid fixed IP address (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:566
+#, python-format
+msgid "Duplicate networks (%s) are not allowed"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:572
+#, python-format
+msgid "Bad network format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:575
+msgid "Bad networks format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:587
+msgid "Userdata content cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:594
+msgid "accessIPv4 is not proper IPv4 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:601
+msgid "accessIPv6 is not proper IPv6 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:633
+msgid "Server name is not defined"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:675
+#: cinder/api/openstack/compute/servers.py:740
+msgid "Invalid flavorRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:737
+msgid "Can not find requested image"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:743
+msgid "Invalid key_name provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:829
+#: cinder/api/openstack/compute/servers.py:849
+msgid "Instance has not been resized."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:835
+#, python-format
+msgid "Error in confirm-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:855
+#, python-format
+msgid "Error in revert-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:868
+msgid "Argument 'type' for reboot is not HARD or SOFT"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:872
+msgid "Missing argument 'type' for reboot"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:885
+#, python-format
+msgid "Error in reboot %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:897
+msgid "Unable to locate requested flavor."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:900
+msgid "Resize requires a change in size."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:924
+msgid "Malformed server entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:931
+msgid "Missing imageRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:940
+msgid "Invalid imageRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:949
+msgid "Missing flavorRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:962
+msgid "No adminPass was specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:966
+#: cinder/api/openstack/compute/servers.py:1144
+msgid "Invalid adminPass"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:980
+msgid "Unable to parse metadata key/value pairs."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:993
+msgid "Resize request has invalid 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:996
+msgid "Resize requests require 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1014
+#: cinder/api/openstack/compute/contrib/aggregates.py:142
+#: cinder/api/openstack/compute/contrib/networks.py:65
+msgid "Invalid request body"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1019
+msgid "Could not parse imageRef from request."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1071
+msgid "Instance could not be found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1074
+msgid "Cannot find image for rebuild"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1103
+msgid "createImage entity requires name attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1112
+#: cinder/api/openstack/compute/contrib/admin_actions.py:238
+msgid "Invalid metadata"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1167
+#, python-format
+msgid "Removing options '%(unk_opt_str)s' from query"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:60
+#, python-format
+msgid "Compute.api::pause %s"
+msgstr "Compute.api::pause %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:77
+#, python-format
+msgid "Compute.api::unpause %s"
+msgstr "Compute.api::unpause %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:94
+#, python-format
+msgid "compute.api::suspend %s"
+msgstr "compute.api::suspend %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:111
+#, python-format
+msgid "compute.api::resume %s"
+msgstr "compute.api::resume %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:127
+#, python-format
+msgid "Error in migrate %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:141
+#, python-format
+msgid "Compute.api::reset_network %s"
+msgstr "Compute.api::reset_network %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:154
+#: cinder/api/openstack/compute/contrib/admin_actions.py:170
+#: cinder/api/openstack/compute/contrib/admin_actions.py:186
+#: cinder/api/openstack/compute/contrib/multinic.py:41
+#: cinder/api/openstack/compute/contrib/rescue.py:44
+msgid "Server not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:157
+#, python-format
+msgid "Compute.api::inject_network_info %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:173
+#, python-format
+msgid "Compute.api::lock %s"
+msgstr "Compute.api::lock %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:189
+#, python-format
+msgid "Compute.api::unlock %s"
+msgstr "Compute.api::unlock %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:219
+#, python-format
+msgid "createBackup entity requires %s attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:223
+msgid "Malformed createBackup entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:229
+msgid "createBackup attribute 'rotation' must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:244
+#: cinder/api/openstack/compute/contrib/console_output.py:47
+#: cinder/api/openstack/compute/contrib/console_output.py:59
+#: cinder/api/openstack/compute/contrib/consoles.py:49
+#: cinder/api/openstack/compute/contrib/consoles.py:60
+#: cinder/api/openstack/compute/contrib/server_action_list.py:49
+#: cinder/api/openstack/compute/contrib/server_diagnostics.py:47
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:38
+msgid "Instance not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:272
+msgid "host and block_migration must be specified."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:284
+#, python-format
+msgid "Live migration of instance %(id)s to host %(host)s failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:76
+#, python-format
+msgid ""
+"Cannot create aggregate with name %(name)s and availability zone "
+"%(avail_zone)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:88
+#, python-format
+msgid "Cannot show aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:114
+#, python-format
+msgid "Cannot update aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:126
+#, python-format
+msgid "Cannot delete aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:139
+#, python-format
+msgid "Aggregates does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:152
+#: cinder/api/openstack/compute/contrib/aggregates.py:158
+#, python-format
+msgid "Cannot add host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:171
+#: cinder/api/openstack/compute/contrib/aggregates.py:175
+#, python-format
+msgid "Cannot remove host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:195
+#, python-format
+msgid "Cannot set metadata %(metadata)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/certificates.py:75
+msgid "Only root certificate can be retrieved."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/cloudpipe.py:146
+msgid ""
+"Unable to claim IP for VPN instances, ensure it isn't running, and try "
+"again in a few minutes"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:44
+msgid "Missing type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:56
+msgid "Invalid type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/disk_config.py:44
+#, python-format
+msgid "%s must be either 'MANUAL' or 'AUTO'."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/extended_server_attributes.py:77
+#: cinder/api/openstack/compute/contrib/extended_status.py:61
+msgid "Server not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:61
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:91
+msgid "Flavor not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:49
+#: cinder/api/openstack/compute/contrib/volumetypes.py:158
+msgid "No Request Body"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:159
+#, python-format
+msgid "No more floating ips in pool %s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:161
+msgid "No more floating ips available."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:201
+#: cinder/api/openstack/compute/contrib/floating_ips.py:230
+#: cinder/api/openstack/compute/contrib/security_groups.py:571
+#: cinder/api/openstack/compute/contrib/security_groups.py:604
+msgid "Missing parameter dict"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:204
+#: cinder/api/openstack/compute/contrib/floating_ips.py:233
+msgid "Address not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:213
+msgid "No fixed ips associated to instance"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:216
+msgid "Associate floating ip failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:144
+#, python-format
+msgid "Invalid status: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:148
+#, fuzzy, python-format
+msgid "Invalid mode: '%s'"
+msgstr "backend inválido: %s"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:152
+#, python-format
+msgid "Invalid update setting: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:170
+#, python-format
+msgid "Putting host %(host)s in maintenance mode %(mode)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:181
+#, python-format
+msgid "Setting host %(host)s to %(state)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:230
+msgid "Describe-resource is admin only functionality"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:238
+msgid "Host not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:70
+msgid "Keypair name contains unsafe characters"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:95
+msgid "Keypair name must be between 1 and 255 characters long"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:100
+#, python-format
+msgid "Key pair '%s' already exists."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:52
+msgid "Missing 'networkId' argument for addFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:68
+msgid "Missing 'address' argument for removeFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:77
+#, python-format
+msgid "Unable to find address %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:62
+#, python-format
+msgid "Network does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:70
+#, python-format
+msgid "Disassociating network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:74
+#: cinder/api/openstack/compute/contrib/networks.py:91
+#: cinder/api/openstack/compute/contrib/networks.py:101
+msgid "Network not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:87
+#, python-format
+msgid "Showing network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:97
+#, python-format
+msgid "Deleting network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/scheduler_hints.py:41
+msgid "Malformed scheduler_hints attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:222
+msgid "Security group id should be integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:243
+#, fuzzy, python-format
+msgid "Security group is still in use"
+msgstr "Revocar ingreso al grupo de seguridad %s"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:295
+#, python-format
+msgid "Security group %s already exists"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:315
+#, python-format
+msgid "Security group %s is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:318
+#, python-format
+msgid "Security group %s cannot be empty."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:321
+#, python-format
+msgid "Security group %s should not be greater than 255 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:348
+msgid "Parent group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:351
+#, python-format
+msgid "Security group (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:369
+msgid "Not enough parameters to build a valid rule."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:376
+#, python-format
+msgid "This rule already exists in group %s"
+msgstr "Esta regla ya existe en el grupo %s"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:414
+msgid "Parent or group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:507
+msgid "Rule id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:510
+#, python-format
+msgid "Rule (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:574
+#: cinder/api/openstack/compute/contrib/security_groups.py:607
+msgid "Security group not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:578
+#: cinder/api/openstack/compute/contrib/security_groups.py:611
+msgid "Security group name cannot be empty"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:45
+#, python-format
+msgid "start instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:54
+#, python-format
+msgid "stop instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:73
+#: cinder/api/openstack/volume/volumes.py:106
+#, python-format
+msgid "vol=%s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:146
+#: cinder/api/openstack/volume/volumes.py:184
+#, python-format
+msgid "Delete volume with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:329
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(server_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:481
+#: cinder/api/openstack/volume/snapshots.py:110
+#, python-format
+msgid "Delete snapshot with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:524
+#: cinder/api/openstack/volume/snapshots.py:150
+#, python-format
+msgid "Create snapshot from volume %s"
+msgstr ""
+
+#: cinder/auth/fakeldap.py:33
+msgid "Attempted to instantiate singleton"
+msgstr "Intento de instanciar sigleton"
+
+#: cinder/auth/ldapdriver.py:650
+#, python-format
+msgid ""
+"Attempted to remove the last member of a group. Deleting the group at %s "
+"instead."
+msgstr ""
+"Se ha intentado eliminar el último miembro de un grupo. Eliminando el "
+"grupo %s en su lugar."
+
+#: cinder/auth/manager.py:298
+#, python-format
+msgid "Looking up user: %r"
+msgstr "Buscando usuario: %r"
+
+#: cinder/auth/manager.py:302
+#, python-format
+msgid "Failed authorization for access key %s"
+msgstr "Fallo de autorización para la clave de acceso %s"
+
+#: cinder/auth/manager.py:308
+#, python-format
+msgid "Using project name = user name (%s)"
+msgstr "Utilizando nombre de proyecto = nombre de usuario (%s)"
+
+#: cinder/auth/manager.py:315
+#, python-format
+msgid "failed authorization: no project named %(pjid)s (user=%(uname)s)"
+msgstr ""
+
+#: cinder/auth/manager.py:324
+#, python-format
+msgid ""
+"Failed authorization: user %(uname)s not admin and not member of project "
+"%(pjname)s"
+msgstr ""
+
+#: cinder/auth/manager.py:331 cinder/auth/manager.py:343
+#, python-format
+msgid "user.secret: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:332 cinder/auth/manager.py:344
+#, python-format
+msgid "expected_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:333 cinder/auth/manager.py:345
+#, python-format
+msgid "signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:335 cinder/auth/manager.py:357
+#, python-format
+msgid "Invalid signature for user %s"
+msgstr "Firma invalida para el usuario %s"
+
+#: cinder/auth/manager.py:353
+#, python-format
+msgid "host_only_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:449
+msgid "Must specify project"
+msgstr "Debes especificar un proyecto"
+
+#: cinder/auth/manager.py:490
+#, python-format
+msgid "Adding role %(role)s to user %(uid)s in project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:493
+#, python-format
+msgid "Adding sitewide role %(role)s to user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:519
+#, python-format
+msgid "Removing role %(role)s from user %(uid)s on project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:522
+#, python-format
+msgid "Removing sitewide role %(role)s from user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:595
+#, python-format
+msgid "Created project %(name)s with manager %(manager_user)s"
+msgstr "Creado el proyecto %(name)s con administrador %(manager_user)s"
+
+#: cinder/auth/manager.py:613
+#, python-format
+msgid "modifying project %s"
+msgstr "Modificando proyecto %s"
+
+#: cinder/auth/manager.py:625
+#, python-format
+msgid "Adding user %(uid)s to project %(pid)s"
+msgstr "Agregando usuario %(uid)s para el proyecto %(pid)s"
+
+#: cinder/auth/manager.py:646
+#, python-format
+msgid "Remove user %(uid)s from project %(pid)s"
+msgstr "Borrar usuario %(uid)s del proyecto %(pid)s"
+
+#: cinder/auth/manager.py:676
+#, python-format
+msgid "Deleting project %s"
+msgstr "Borrando proyecto %s"
+
+#: cinder/auth/manager.py:734
+#, python-format
+msgid "Created user %(rvname)s (admin: %(rvadmin)r)"
+msgstr ""
+
+#: cinder/auth/manager.py:743
+#, python-format
+msgid "Deleting user %s"
+msgstr "Borrando usuario %s"
+
+#: cinder/auth/manager.py:753
+#, python-format
+msgid "Access Key change for user %s"
+msgstr "Cambio de clave de acceso para el usuario %s"
+
+#: cinder/auth/manager.py:755
+#, python-format
+msgid "Secret Key change for user %s"
+msgstr "Cambio de clave secreta para el usuario %s"
+
+#: cinder/auth/manager.py:757
+#, python-format
+msgid "Admin status set to %(admin)r for user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:802
+#, python-format
+msgid "No vpn data for project %s"
+msgstr "No hay datos vpn para el proyecto %s"
+
+#: cinder/cloudpipe/pipelib.py:46
+#, fuzzy, python-format
+msgid "Instance type for vpn instances"
+msgstr "Obtener salida de la consola para la instancia %s"
+
+#: cinder/cloudpipe/pipelib.py:49
+msgid "Template for cloudpipe instance boot script"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:52
+msgid "Network to push into openvpn config"
+msgstr "Red a insertar en la configuración de openvpn"
+
+#: cinder/cloudpipe/pipelib.py:55
+msgid "Netmask to push into openvpn config"
+msgstr "Mascara de red a insertar en la configuración de openvpn"
+
+#: cinder/cloudpipe/pipelib.py:107
+#, python-format
+msgid "Launching VPN for %s"
+msgstr "Lanzando VPN para %s"
+
+#: cinder/compute/api.py:141
+msgid "No compute host specified"
+msgstr ""
+
+#: cinder/compute/api.py:144
+#, python-format
+msgid "Unable to find host for Instance %s"
+msgstr ""
+
+#: cinder/compute/api.py:192
+#, python-format
+msgid ""
+"Quota exceeded for %(pid)s, tried to set %(num_metadata)s metadata "
+"properties"
+msgstr ""
+
+#: cinder/compute/api.py:203
+#, python-format
+msgid "Quota exceeded for %(pid)s, metadata property key or value too long"
+msgstr ""
+
+#: cinder/compute/api.py:257
+#, fuzzy, python-format
+msgid "Cannot run any more instances of this type."
+msgstr ""
+"Quota de instancias superada. Sólo puedes ejecutar %s instancias más de "
+"este tipo."
+
+#: cinder/compute/api.py:259
+#, fuzzy, python-format
+msgid "Can only run %s more instances of this type."
+msgstr ""
+"Quota de instancias superada. Sólo puedes ejecutar %s instancias más de "
+"este tipo."
+
+#: cinder/compute/api.py:261
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances. "
+msgstr ""
+
+#: cinder/compute/api.py:310
+msgid "Creating a raw instance"
+msgstr "Creando una instancia raw"
+
+#: cinder/compute/api.py:312
+#, python-format
+msgid "Using Kernel=%(kernel_id)s, Ramdisk=%(ramdisk_id)s"
+msgstr ""
+
+#: cinder/compute/api.py:383
+#, python-format
+msgid "Going to run %s instances..."
+msgstr "Vamos a ejecutar %s insntacias..."
+
+#: cinder/compute/api.py:447
+#, python-format
+msgid "bdm %s"
+msgstr ""
+
+#: cinder/compute/api.py:474
+#, python-format
+msgid "block_device_mapping %s"
+msgstr ""
+
+#: cinder/compute/api.py:591
+#, python-format
+msgid "Sending create to scheduler for %(pid)s/%(uid)s's"
+msgstr ""
+
+#: cinder/compute/api.py:871
+#, fuzzy, python-format
+msgid "Going to try to soft delete instance"
+msgstr "Vamos a ejecutar %s insntacias..."
+
+#: cinder/compute/api.py:891
+msgid "No host for instance, deleting immediately"
+msgstr ""
+
+#: cinder/compute/api.py:939
+#, fuzzy
+msgid "Going to try to terminate instance"
+msgstr "Se va a iniciar la finalización de las instancias"
+
+#: cinder/compute/api.py:977
+#, fuzzy, python-format
+msgid "Going to try to stop instance"
+msgstr "Vamos a ejecutar %s insntacias..."
+
+#: cinder/compute/api.py:996
+#, fuzzy, python-format
+msgid "Going to try to start instance"
+msgstr "Vamos a ejecutar %s insntacias..."
+
+#: cinder/compute/api.py:1000
+#, python-format
+msgid "Instance %(instance_uuid)s is not stopped. (%(vm_state)s"
+msgstr ""
+
+#: cinder/compute/api.py:1071 cinder/volume/api.py:173
+#: cinder/volume/volume_types.py:64
+#, python-format
+msgid "Searching by: %s"
+msgstr ""
+
+#: cinder/compute/api.py:1201
+#, python-format
+msgid "Image type not recognized %s"
+msgstr ""
+
+#: cinder/compute/api.py:1369
+msgid "flavor_id is None. Assuming migration."
+msgstr ""
+
+#: cinder/compute/api.py:1377
+#, python-format
+msgid ""
+"Old instance type %(current_instance_type_name)s,  new instance type "
+"%(new_instance_type_name)s"
+msgstr ""
+
+#: cinder/compute/api.py:1644
+#, python-format
+msgid "multiple fixedips exist, using the first: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:57 cinder/compute/instance_types.py:65
+msgid "create arguments must be positive integers"
+msgstr ""
+
+#: cinder/compute/instance_types.py:76 cinder/volume/volume_types.py:41
+#, python-format
+msgid "DB error: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:86
+#, python-format
+msgid "Instance type %s not found for deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:138
+#, python-format
+msgid "check_instance_lock: decorating: |%s|"
+msgstr "check_instance_lock: decorating: |%s|"
+
+#: cinder/compute/manager.py:140
+#, python-format
+msgid ""
+"check_instance_lock: arguments: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+msgstr ""
+
+#: cinder/compute/manager.py:144
+#, python-format
+msgid "check_instance_lock: locked: |%s|"
+msgstr "check_instance_lock: locked: |%s|"
+
+#: cinder/compute/manager.py:146
+#, python-format
+msgid "check_instance_lock: admin: |%s|"
+msgstr "check_instance_lock: admin: |%s|"
+
+#: cinder/compute/manager.py:151
+#, python-format
+msgid "check_instance_lock: executing: |%s|"
+msgstr "check_instance_lock: ejecutando: |%s|"
+
+#: cinder/compute/manager.py:155
+#, python-format
+msgid "check_instance_lock: not executing |%s|"
+msgstr "check_instance_lock: no ejecutando |%s|"
+
+#: cinder/compute/manager.py:201
+#, python-format
+msgid "Unable to load the virtualization driver: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:223
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s has been destroyed from under us while trying "
+"to set it to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:240
+#, python-format
+msgid "Current state is %(drv_state)s, state in DB is %(db_state)s."
+msgstr ""
+
+#: cinder/compute/manager.py:245
+msgid "Rebooting instance after cinder-compute restart."
+msgstr ""
+
+#: cinder/compute/manager.py:255
+msgid "Hypervisor driver does not support firewall rules"
+msgstr ""
+
+#: cinder/compute/manager.py:260
+msgid "Checking state"
+msgstr ""
+
+#: cinder/compute/manager.py:329
+#, python-format
+msgid "Setting up bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:400
+#, python-format
+msgid "Instance %s already deleted from database. Attempting forceful vm deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:406
+#, fuzzy, python-format
+msgid "Exception encountered while terminating the instance %s"
+msgstr "Después de terminar las instancias: %s"
+
+#: cinder/compute/manager.py:444
+#, python-format
+msgid "Instance %s not found."
+msgstr ""
+
+#: cinder/compute/manager.py:480
+msgid "Instance has already been created"
+msgstr "La instancia ha sido creada previamente"
+
+#: cinder/compute/manager.py:523
+#, python-format
+msgid ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:528
+#, python-format
+msgid ""
+"Image '%(image_id)s' size %(size_bytes)d exceeded instance_type allowed "
+"size %(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:538
+msgid "Starting instance..."
+msgstr ""
+
+#: cinder/compute/manager.py:548
+msgid "Skipping network allocation for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:561
+msgid "Instance failed network setup"
+msgstr ""
+
+#: cinder/compute/manager.py:565
+#, python-format
+msgid "Instance network_info: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:578
+msgid "Instance failed block device setup"
+msgstr ""
+
+#: cinder/compute/manager.py:594
+msgid "Instance failed to spawn"
+msgstr ""
+
+#: cinder/compute/manager.py:615
+msgid "Deallocating network for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:672
+#, python-format
+msgid "%(action_str)s instance"
+msgstr ""
+
+#: cinder/compute/manager.py:699
+#, python-format
+msgid "Ignoring DiskNotFound: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:708
+#, python-format
+msgid "terminating bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:742 cinder/compute/manager.py:1328
+#: cinder/compute/manager.py:1416 cinder/compute/manager.py:2501
+#, python-format
+msgid "%s. Setting instance vm_state to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:811
+#, python-format
+msgid ""
+"Cannot rebuild instance [%(instance_uuid)s], because the given image does"
+" not exist."
+msgstr ""
+
+#: cinder/compute/manager.py:816
+#, python-format
+msgid "Cannot rebuild instance [%(instance_uuid)s]: %(exc)s"
+msgstr ""
+
+#: cinder/compute/manager.py:823
+#, python-format
+msgid "Rebuilding instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:876
+#, python-format
+msgid "Rebooting instance %s"
+msgstr "Reiniciando instancia %s"
+
+#: cinder/compute/manager.py:891
+#, python-format
+msgid ""
+"trying to reboot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:933
+#, python-format
+msgid "instance %s: snapshotting"
+msgstr "instancia %s: creando snapshot"
+
+#: cinder/compute/manager.py:939
+#, python-format
+msgid ""
+"trying to snapshot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:995
+#, python-format
+msgid "Found %(num_images)d images (rotation: %(rotation)d)"
+msgstr ""
+
+#: cinder/compute/manager.py:1001
+#, python-format
+msgid "Rotating out %d backups"
+msgstr ""
+
+#: cinder/compute/manager.py:1005
+#, python-format
+msgid "Deleting image %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1035
+#, python-format
+msgid "Failed to set admin password. Instance %s is not running"
+msgstr ""
+
+#: cinder/compute/manager.py:1041
+#, python-format
+msgid "Instance %s: Root password set"
+msgstr ""
+
+#: cinder/compute/manager.py:1050
+msgid "set_admin_password is not implemented by this driver."
+msgstr ""
+
+#: cinder/compute/manager.py:1064
+msgid "Error setting admin password"
+msgstr ""
+
+#: cinder/compute/manager.py:1079
+#, python-format
+msgid ""
+"trying to inject a file into a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1084
+#, python-format
+msgid "instance %(instance_uuid)s: injecting file to %(path)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1098
+#, python-format
+msgid ""
+"trying to update agent on a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1103
+#, python-format
+msgid "instance %(instance_uuid)s: updating agent to %(url)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1116
+#, python-format
+msgid "instance %s: rescuing"
+msgstr "instancia %s: rescatando"
+
+#: cinder/compute/manager.py:1141
+#, python-format
+msgid "instance %s: unrescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1270
+msgid "destination same as source!"
+msgstr ""
+
+#: cinder/compute/manager.py:1287
+#, python-format
+msgid "instance %s: migrating"
+msgstr ""
+
+#: cinder/compute/manager.py:1471
+#, python-format
+msgid "instance %s: pausing"
+msgstr "instancia %s: pausando"
+
+#: cinder/compute/manager.py:1489
+#, python-format
+msgid "instance %s: unpausing"
+msgstr "instancia %s: continuando tras pausa"
+
+#: cinder/compute/manager.py:1525
+#, python-format
+msgid "instance %s: retrieving diagnostics"
+msgstr "instancia %s: obteniendo los diagnosticos"
+
+#: cinder/compute/manager.py:1534
+#, python-format
+msgid "instance %s: suspending"
+msgstr "instancia %s: suspendiendo"
+
+#: cinder/compute/manager.py:1556
+#, python-format
+msgid "instance %s: resuming"
+msgstr "instancia %s: continuando"
+
+#: cinder/compute/manager.py:1579
+#, python-format
+msgid "instance %s: locking"
+msgstr "instancia %s: bloqueando"
+
+#: cinder/compute/manager.py:1588
+#, python-format
+msgid "instance %s: unlocking"
+msgstr "instancia %s: desbloqueando"
+
+#: cinder/compute/manager.py:1596
+#, python-format
+msgid "instance %s: getting locked state"
+msgstr "instancia %s: pasando a estado bloqueado"
+
+#: cinder/compute/manager.py:1606
+#, python-format
+msgid "instance %s: reset network"
+msgstr "instancia %s: reiniciar redes"
+
+#: cinder/compute/manager.py:1614
+#, python-format
+msgid "instance %s: inject network info"
+msgstr ""
+
+#: cinder/compute/manager.py:1618
+#, python-format
+msgid "network_info to inject: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:1655
+#, python-format
+msgid "instance %s: getting vnc console"
+msgstr ""
+
+#: cinder/compute/manager.py:1685
+#, python-format
+msgid "Booting with volume %(volume_id)s at %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1703
+#, python-format
+msgid ""
+"instance %(instance_uuid)s: attaching volume %(volume_id)s to "
+"%(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1705
+#, python-format
+msgid "Attaching volume %(volume_id)s to %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1714
+#, fuzzy, python-format
+msgid "instance %(instance_uuid)s: attach failed %(mountpoint)s, removing"
+msgstr "La instancia %(instance_id)s no esta en modo de rescate"
+
+#: cinder/compute/manager.py:1724
+#, python-format
+msgid "Attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1752
+#, python-format
+msgid "Detach volume %(volume_id)s from mountpoint %(mp)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1756
+#, python-format
+msgid "Detaching volume from unknown instance %s"
+msgstr "Desvinculando volumen de instancia desconocida %s"
+
+#: cinder/compute/manager.py:1822
+#, python-format
+msgid ""
+"Creating tmpfile %s to notify to other compute nodes that they should "
+"mount the same storage."
+msgstr ""
+
+#: cinder/compute/manager.py:1884
+msgid "Instance has no volume."
+msgstr ""
+
+#: cinder/compute/manager.py:1916
+#, python-format
+msgid "plug_vifs() failed %(cnt)d.Retry up to %(max_retry)d for %(hostname)s."
+msgstr ""
+
+#: cinder/compute/manager.py:1973
+#, python-format
+msgid "Pre live migration failed at  %(dest)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2000
+msgid "post_live_migration() is started.."
+msgstr ""
+
+#: cinder/compute/manager.py:2030
+msgid "No floating_ip found"
+msgstr ""
+
+#: cinder/compute/manager.py:2038
+msgid "No floating_ip found."
+msgstr ""
+
+#: cinder/compute/manager.py:2040
+#, python-format
+msgid ""
+"Live migration: Unexpected error: cannot inherit floating ip.\n"
+"%(e)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2073
+#, python-format
+msgid "Migrating instance to %(dest)s finished successfully."
+msgstr ""
+
+#: cinder/compute/manager.py:2075
+msgid ""
+"You may see the error \"libvirt: QEMU error: Domain not found: no domain "
+"with matching name.\" This error can be safely ignored."
+msgstr ""
+
+#: cinder/compute/manager.py:2090
+msgid "Post operation of migraton started"
+msgstr ""
+
+#: cinder/compute/manager.py:2226
+#, python-format
+msgid "Updated the info_cache for instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:2255
+msgid "Updating bandwidth usage cache"
+msgstr ""
+
+#: cinder/compute/manager.py:2277
+msgid "Updating host status"
+msgstr ""
+
+#: cinder/compute/manager.py:2305
+#, python-format
+msgid ""
+"Found %(num_db_instances)s in the database and %(num_vm_instances)s on "
+"the hypervisor."
+msgstr ""
+
+#: cinder/compute/manager.py:2331
+#, python-format
+msgid ""
+"During the sync_power process the instance %(uuid)s has moved from host "
+"%(src)s to host %(dst)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2344
+#, python-format
+msgid ""
+"Instance %s is in the process of migrating to this host. Wait next "
+"sync_power cycle before setting power state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2350
+msgid ""
+"Instance found in database but not known by hypervisor. Setting power "
+"state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2380
+msgid "FLAGS.reclaim_instance_interval <= 0, skipping..."
+msgstr ""
+
+#: cinder/compute/manager.py:2392
+msgid "Reclaiming deleted instance"
+msgstr ""
+
+#: cinder/compute/manager.py:2458
+#, python-format
+msgid ""
+"Detected instance with name label '%(name)s' which is marked as DELETED "
+"but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2465
+#, python-format
+msgid ""
+"Destroying instance with name label '%(name)s' which is marked as DELETED"
+" but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2472
+#, python-format
+msgid "Unrecognized value '%(action)s' for FLAGS.running_deleted_instance_action"
+msgstr ""
+
+#: cinder/compute/manager.py:2542
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: unrecoverable state during operation on "
+"%(host)s"
+msgstr ""
+
+#: cinder/compute/utils.py:142
+msgid "v4 subnets are required for legacy nw_info"
+msgstr ""
+
+#: cinder/console/manager.py:77 cinder/console/vmrc_manager.py:70
+msgid "Adding console"
+msgstr ""
+
+#: cinder/console/manager.py:97
+#, python-format
+msgid "Tried to remove non-existant console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:122
+#, python-format
+msgid "Tried to remove non-existent console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:125
+#, python-format
+msgid "Removing console %(console_id)s."
+msgstr ""
+
+#: cinder/console/xvp.py:98
+msgid "Rebuilding xvp conf"
+msgstr ""
+
+#: cinder/console/xvp.py:116
+#, python-format
+msgid "Re-wrote %s"
+msgstr ""
+
+#: cinder/console/xvp.py:121
+msgid "Stopping xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:134
+msgid "Starting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:141
+#, python-format
+msgid "Error starting xvp: %s"
+msgstr ""
+
+#: cinder/console/xvp.py:144
+msgid "Restarting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:146
+msgid "xvp not running..."
+msgstr ""
+
+#: cinder/consoleauth/manager.py:63
+#, python-format
+msgid "Deleting Expired Token: (%s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:75
+#, python-format
+msgid "Received Token: %(token)s, %(token_dict)s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:79
+#, python-format
+msgid "Checking Token: %(token)s, %(token_valid)s)"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:57
+msgid "Use of empty request context is deprecated"
+msgstr "El uso de una petición de contexto vacía está en desuso"
+
+#: cinder/db/sqlalchemy/api.py:198
+#, python-format
+msgid "Unrecognized read_deleted value '%s'"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:516 cinder/db/sqlalchemy/api.py:551
+#, python-format
+msgid "No ComputeNode for %(host)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4019 cinder/db/sqlalchemy/api.py:4045
+#, python-format
+msgid "No backend config with id %(sm_backend_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4103
+#, python-format
+msgid "No sm_flavor called %(sm_flavor)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4147
+#, python-format
+msgid "No sm_volume with id %(volume_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:66
+msgid "python-migrate is not installed. Exiting."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:78
+msgid "version should be an integer"
+msgstr ""
+
+#: cinder/db/sqlalchemy/session.py:137
+#, python-format
+msgid "SQL connection failed. %s attempts left."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:48
+msgid "interface column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:80
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:54
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:48
+#, python-format
+msgid "Table |%s| not created!"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:87
+msgid "VIF column not added to fixed_ips table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:97
+#, python-format
+msgid "join list for moving mac_addresses |%s|"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:39
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:60
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:99
+msgid "foreign key constraint couldn't be added"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:58
+msgid "foreign key constraint couldn't be dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py:34
+msgid "priority column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:41
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:42
+#: cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py:56
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:68
+msgid "foreign key constraint couldn't be removed"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py:34
+msgid "progress column not added to instances table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py:97
+#, python-format
+msgid ""
+"Could not cast flavorid to integer: %s. Set flavorid to an integer-like "
+"string to downgrade."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:69
+msgid "instance_info_caches tables not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py:41
+msgid "progress column not added to compute_nodes table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:76
+msgid "dns_domains table not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:60
+msgid "quota_classes table not dropped"
+msgstr ""
+
+#: cinder/image/glance.py:147
+msgid "Connection error contacting glance server, retrying"
+msgstr ""
+
+#: cinder/image/glance.py:153 cinder/network/quantum/melange_connection.py:104
+msgid "Maximum attempts reached"
+msgstr ""
+
+#: cinder/image/glance.py:278
+#, python-format
+msgid "Creating image in Glance. Metadata passed in %s"
+msgstr ""
+
+#: cinder/image/glance.py:281
+#, python-format
+msgid "Metadata after formatting for Glance %s"
+msgstr ""
+
+#: cinder/image/glance.py:289
+#, python-format
+msgid "Metadata returned from Glance formatted for Base %s"
+msgstr ""
+
+#: cinder/image/glance.py:331 cinder/image/glance.py:335
+msgid "Not the image owner"
+msgstr ""
+
+#: cinder/image/glance.py:410
+#, python-format
+msgid "%(timestamp)s does not follow any of the signatures: %(iso_formats)s"
+msgstr ""
+
+#: cinder/image/s3.py:309
+#, python-format
+msgid "Failed to download %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:328
+#, python-format
+msgid "Failed to decrypt %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:340
+#, python-format
+msgid "Failed to untar %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:353
+#, python-format
+msgid "Failed to upload %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:379
+#, python-format
+msgid "Failed to decrypt private key: %s"
+msgstr ""
+
+#: cinder/image/s3.py:387
+#, python-format
+msgid "Failed to decrypt initialization vector: %s"
+msgstr ""
+
+#: cinder/image/s3.py:398
+#, python-format
+msgid "Failed to decrypt image file %(image_file)s: %(err)s"
+msgstr ""
+
+#: cinder/image/s3.py:410
+msgid "Unsafe filenames in image"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:38 cinder/ipv6/rfc2462.py:34
+#, python-format
+msgid "Bad mac for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:40 cinder/ipv6/rfc2462.py:36
+#, python-format
+msgid "Bad prefix for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:42
+#, python-format
+msgid "Bad project_id for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/network/ldapdns.py:321
+msgid "This driver only supports type 'a' entries."
+msgstr ""
+
+#: cinder/network/linux_net.py:166
+#, python-format
+msgid "Attempted to remove chain %s which does not exist"
+msgstr ""
+
+#: cinder/network/linux_net.py:192
+#, python-format
+msgid "Unknown chain: %r"
+msgstr ""
+
+#: cinder/network/linux_net.py:215
+#, python-format
+msgid ""
+"Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r "
+"%(top)r"
+msgstr ""
+
+#: cinder/network/linux_net.py:335
+msgid "IPTablesManager.apply completed with success"
+msgstr ""
+
+#: cinder/network/linux_net.py:694
+#, python-format
+msgid "Hupping dnsmasq threw %s"
+msgstr "Excepción al recargar la configuración de dnsmasq: %s"
+
+#: cinder/network/linux_net.py:696
+#, python-format
+msgid "Pid %d is stale, relaunching dnsmasq"
+msgstr "El pid %d está pasado, relanzando dnsmasq"
+
+#: cinder/network/linux_net.py:756
+#, python-format
+msgid "killing radvd threw %s"
+msgstr "Matando radvd lanzado %s"
+
+#: cinder/network/linux_net.py:758
+#, python-format
+msgid "Pid %d is stale, relaunching radvd"
+msgstr "Pid %d corrupto, relanzando radvd"
+
+#: cinder/network/linux_net.py:967
+#, python-format
+msgid "Starting VLAN inteface %s"
+msgstr "Iniciando interfaz VLAN %s"
+
+#: cinder/network/linux_net.py:999
+#, python-format
+msgid "Starting Bridge interface for %s"
+msgstr "Iniciando interfaz puente para %s"
+
+#: cinder/network/linux_net.py:1142
+#, fuzzy, python-format
+msgid "Starting bridge %s "
+msgstr "Iniciando interfaz puente para %s"
+
+#: cinder/network/linux_net.py:1149
+#, fuzzy, python-format
+msgid "Done starting bridge %s"
+msgstr "Des-registrando la imagen %s"
+
+#: cinder/network/linux_net.py:1167
+#, python-format
+msgid "Failed unplugging gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/linux_net.py:1170
+#, python-format
+msgid "Unplugged gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/manager.py:291
+#, python-format
+msgid "Fixed ip %(fixed_ip_id)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:300 cinder/network/manager.py:496
+#, python-format
+msgid "Interface %(interface)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:315
+#, python-format
+msgid "floating IP allocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:353
+#, python-format
+msgid "floating IP deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:386
+#, python-format
+msgid "Address |%(address)s| is not allocated"
+msgstr ""
+
+#: cinder/network/manager.py:390
+#, python-format
+msgid "Address |%(address)s| is not allocated to your project |%(project)s|"
+msgstr ""
+
+#: cinder/network/manager.py:402
+#, python-format
+msgid "Quota exceeded for %s, tried to allocate address"
+msgstr ""
+
+#: cinder/network/manager.py:614
+#, python-format
+msgid ""
+"Database inconsistency: DNS domain |%s| is registered in the Cinder db but "
+"not visible to either the floating or instance DNS driver. It will be "
+"ignored."
+msgstr ""
+
+#: cinder/network/manager.py:660
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing zone to |%(av_zone)s|."
+msgstr ""
+
+#: cinder/network/manager.py:670
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing project to |%(project)s|."
+msgstr ""
+
+#: cinder/network/manager.py:778
+#, python-format
+msgid "Disassociated %s stale fixed ip(s)"
+msgstr ""
+
+#: cinder/network/manager.py:782
+msgid "setting network host"
+msgstr "configurando la red del host"
+
+#: cinder/network/manager.py:896
+#, python-format
+msgid "network allocations for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:901
+#, python-format
+msgid "networks retrieved for instance |%(instance_id)s|: |%(networks)s|"
+msgstr ""
+
+#: cinder/network/manager.py:930
+#, python-format
+msgid "network deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:1152
+#, python-format
+msgid ""
+"instance-dns-zone is |%(domain)s|, which is in availability zone "
+"|%(zone)s|. Instance |%(instance)s| is in zone |%(zone2)s|. No DNS record"
+" will be created."
+msgstr ""
+
+#: cinder/network/manager.py:1227
+#, python-format
+msgid "Unable to release %s because vif doesn't exist."
+msgstr ""
+
+#: cinder/network/manager.py:1244
+#, python-format
+msgid "Leased IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1248
+#, python-format
+msgid "IP %s leased that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1256
+#, python-format
+msgid "IP |%s| leased that isn't allocated"
+msgstr ""
+
+#: cinder/network/manager.py:1261
+#, python-format
+msgid "Released IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1265
+#, python-format
+msgid "IP %s released that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1268
+#, python-format
+msgid "IP %s released that was not leased"
+msgstr ""
+
+#: cinder/network/manager.py:1331
+msgid "cidr already in use"
+msgstr ""
+
+#: cinder/network/manager.py:1334
+#, python-format
+msgid "requested cidr (%(cidr)s) conflicts with existing supernet (%(super)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1345
+#, python-format
+msgid ""
+"requested cidr (%(cidr)s) conflicts with existing smaller cidr "
+"(%(smaller)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1404
+msgid "Network already exists!"
+msgstr ""
+
+#: cinder/network/manager.py:1423
+#, python-format
+msgid "Network must be disassociated from project %s before delete"
+msgstr ""
+
+#: cinder/network/manager.py:1832
+msgid ""
+"The sum between the number of networks and the vlan start cannot be "
+"greater than 4094"
+msgstr ""
+
+#: cinder/network/manager.py:1839
+#, python-format
+msgid ""
+"The network range is not big enough to fit %(num_networks)s. Network size"
+" is %(network_size)s"
+msgstr ""
+
+#: cinder/network/minidns.py:65
+msgid "This driver only supports type 'a'"
+msgstr ""
+
+#: cinder/network/quantum/client.py:154
+msgid "Tenant ID not set"
+msgstr ""
+
+#: cinder/network/quantum/client.py:180
+#, python-format
+msgid "Quantum Client Request: %(method)s %(action)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:196
+#, python-format
+msgid "Quantum entity not found: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:206
+#, python-format
+msgid "Server %(status_code)s error: %(data)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:210
+#, python-format
+msgid "Unable to connect to server. Got error: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:228
+#, python-format
+msgid "unable to deserialize object of type = '%s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:162
+msgid "QuantumManager does not use 'multi_host' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:166
+msgid "QuantumManager requires that only one network is created per call"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:176
+msgid "QuantumManager does not use 'vlan_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:182
+msgid "QuantumManager does not use 'vpn_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:186
+msgid "QuantumManager does not use 'bridge' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:190
+msgid "QuantumManager does not use 'bridge_interface' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:195
+msgid "QuantumManager requires a valid (.1) gateway address."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:204
+#, python-format
+msgid ""
+"Unable to find existing quantum network for tenant '%(q_tenant_id)s' with"
+" net-id '%(quantum_net_id)s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:301
+#, python-format
+msgid "network allocations for instance %s"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:588
+#, python-format
+msgid ""
+"port deallocation failed for instance: |%(instance_id)s|, port_id: "
+"|%(port_id)s|"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:606
+#, python-format
+msgid ""
+"ipam deallocation failed for instance: |%(instance_id)s|, vif_uuid: "
+"|%(vif_uuid)s|"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:96
+#, python-format
+msgid "Server returned error: %s"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:98
+msgid "Connection error contacting melange service, retrying"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:108
+#, python-format
+msgid ""
+"allocate IP on network |%(network_id)s| belonging to "
+"|%(network_tenant_id)s| to this vif |%(vif_id)s| with mac "
+"|%(mac_address)s| belonging to |%(project_id)s| "
+msgstr ""
+
+#: cinder/network/quantum/melange_ipam_lib.py:133
+msgid "get_project_and_global_net_ids must be called with a non-null project_id"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:75
+msgid "Error creating network entry"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:90
+#, python-format
+msgid "No network with net_id = %s"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:221
+#, python-format
+msgid "No fixed IPs to deallocate for vif %s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:99
+#, python-format
+msgid "Connecting interface %(interface_id)s to net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:113
+#, python-format
+msgid "Deleting port %(port_id)s on net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/notifier/api.py:115
+#, python-format
+msgid "%s not in valid priorities"
+msgstr ""
+
+#: cinder/notifier/api.py:130
+#, python-format
+msgid ""
+"Problem '%(e)s' attempting to send to notification system. "
+"Payload=%(payload)s"
+msgstr ""
+
+#: cinder/notifier/list_notifier.py:65
+#, python-format
+msgid "Problem '%(e)s' attempting to send to notification driver %(driver)s."
+msgstr ""
+
+#: cinder/notifier/rabbit_notifier.py:46
+#, python-format
+msgid "Could not send notification to %(topic)s. Payload=%(message)s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:146
+#, python-format
+msgid "Returning exception %s to caller"
+msgstr ""
+
+#: cinder/rpc/amqp.py:188
+#, python-format
+msgid "unpacked context: %s"
+msgstr "contenido desempaquetado: %s"
+
+#: cinder/rpc/amqp.py:231
+#, python-format
+msgid "received %s"
+msgstr "recibido %s"
+
+#: cinder/rpc/amqp.py:236
+#, python-format
+msgid "no method for message: %s"
+msgstr "no hay método para el mensaje: %s"
+
+#: cinder/rpc/amqp.py:237
+#, python-format
+msgid "No method for message: %s"
+msgstr "No hay método para el mensaje: %s"
+
+#: cinder/rpc/amqp.py:321
+#, python-format
+msgid "Making asynchronous call on %s ..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:324
+#, python-format
+msgid "MSG_ID is %s"
+msgstr "MSG_ID es %s"
+
+#: cinder/rpc/amqp.py:346
+#, python-format
+msgid "Making asynchronous cast on %s..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:354
+msgid "Making asynchronous fanout cast..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:379
+#, python-format
+msgid "Sending notification on %s..."
+msgstr ""
+
+#: cinder/rpc/common.py:54
+#, python-format
+msgid ""
+"Remote error: %(exc_type)s %(value)s\n"
+"%(traceback)s."
+msgstr ""
+
+#: cinder/rpc/common.py:71
+msgid "Timeout while waiting on RPC response."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:111
+msgid "Failed to process message... skipping it."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:407
+#, python-format
+msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:430
+#, python-format
+msgid "Connected to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:466
+#, python-format
+msgid ""
+"Unable to connect to AMQP server on %(hostname)s:%(port)d after "
+"%(max_retries)d tries: %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:482
+#, python-format
+msgid ""
+"AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying "
+"again in %(sleep_time)d seconds."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:533 cinder/rpc/impl_qpid.py:385
+#, python-format
+msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:551 cinder/rpc/impl_qpid.py:400
+#, python-format
+msgid "Timed out waiting for RPC response: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:555 cinder/rpc/impl_qpid.py:404
+#, python-format
+msgid "Failed to consume message from queue: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:589 cinder/rpc/impl_qpid.py:434
+#, python-format
+msgid "Failed to publish message to topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:341
+#, python-format
+msgid "Unable to connect to AMQP server: %s "
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:346
+#, python-format
+msgid "Connected to AMQP server on %s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:354
+msgid "Re-established AMQP queues"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:412
+msgid "Error processing message.  Skipping it."
+msgstr ""
+
+#: cinder/scheduler/chance.py:47 cinder/scheduler/simple.py:91
+#: cinder/scheduler/simple.py:143
+msgid "Is the appropriate service running?"
+msgstr ""
+
+#: cinder/scheduler/chance.py:52
+msgid "Could not find another compute"
+msgstr ""
+
+#: cinder/scheduler/driver.py:63
+#, python-format
+msgid "Casted '%(method)s' to volume '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:80
+#, python-format
+msgid "Casted '%(method)s' to compute '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:89
+#, python-format
+msgid "Casted '%(method)s' to network '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:107
+#, python-format
+msgid "Casted '%(method)s' to %(topic)s '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:181
+msgid "Must implement a fallback schedule"
+msgstr "Debe de implementar un horario de reserva"
+
+#: cinder/scheduler/driver.py:185
+msgid "Driver must implement schedule_prep_resize"
+msgstr ""
+
+#: cinder/scheduler/driver.py:190
+msgid "Driver must implement schedule_run_instance"
+msgstr ""
+
+#: cinder/scheduler/driver.py:325
+msgid "Block migration can not be used with shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:330
+msgid "Live migration can not be used without shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:367 cinder/scheduler/driver.py:457
+#, python-format
+msgid "host %(dest)s is not compatible with original host %(src)s."
+msgstr ""
+
+#: cinder/scheduler/driver.py:416
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"memory(host:%(avail)s <= instance:%(mem_inst)s)"
+msgstr ""
+
+#: cinder/scheduler/driver.py:472
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"disk(host:%(available)s <= instance:%(necessary)s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:51
+#, python-format
+msgid "No host selection for %s defined."
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:64
+#, python-format
+msgid "Attempting to build %(num_instances)d instance(s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:157
+msgid "Scheduler only understands Compute nodes (for now)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:199
+#, python-format
+msgid "Filtered %(hosts)s"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:209
+#, python-format
+msgid "Weighted %(weighted_host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:144
+#, python-format
+msgid "Host filter fails for ignored host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:151
+#, python-format
+msgid "Host filter fails for non-forced host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:157
+#, python-format
+msgid "Host filter function %(func)s failed for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:163
+#, python-format
+msgid "Host filter passes for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:272
+#, python-format
+msgid "Received %(service_name)s service update from %(host)s."
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:313
+msgid "host_manager only implemented for 'compute'"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:323
+#, python-format
+msgid "No service for compute ID %s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:85
+#, python-format
+msgid ""
+"Driver Method %(driver_method_name)s missing: %(e)s. Reverting to "
+"schedule()"
+msgstr ""
+
+#: cinder/scheduler/manager.py:150
+#, python-format
+msgid "Failed to schedule_%(method)s: %(ex)s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:159
+#, fuzzy, python-format
+msgid "Setting instance %(instance_uuid)s to %(state)s state."
+msgstr "La instacia %(instance_id)s no esta suspendida"
+
+#: cinder/scheduler/scheduler_options.py:66
+#, python-format
+msgid "Could not stat scheduler options file %(filename)s: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:75
+#, python-format
+msgid "Could not decode scheduler options: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/simple.py:87
+msgid "Not enough allocatable CPU cores remaining"
+msgstr ""
+
+#: cinder/scheduler/simple.py:137
+msgid "Not enough allocatable volume gigabytes remaining"
+msgstr ""
+
+#: cinder/scheduler/filters/core_filter.py:45
+msgid "VCPUs not set; assuming CPU collection broken"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:72
+#, python-format
+msgid "Faking execution of cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:80
+#, python-format
+msgid "Faked command matched %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:96
+#, python-format
+msgid "Faked command raised an exception %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:101
+#, python-format
+msgid "Reply to faked command is stdout='%(stdout)s' stderr='%(stderr)s'"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:784
+msgid "Please extend mock libvirt module to support flags"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:790
+msgid "Please extend fake libvirt module to support this auth method"
+msgstr ""
+
+#: cinder/tests/test_compute.py:365 cinder/tests/test_compute.py:1419
+#, python-format
+msgid "Running instances: %s"
+msgstr "Ejecutando instancias: %s"
+
+#: cinder/tests/test_compute.py:371
+#, python-format
+msgid "After terminating instances: %s"
+msgstr "Después de terminar las instancias: %s"
+
+#: cinder/tests/test_compute.py:589
+msgid "Internal error"
+msgstr ""
+
+#: cinder/tests/test_compute.py:1430
+#, python-format
+msgid "After force-killing instances: %s"
+msgstr ""
+
+#: cinder/tests/test_misc.py:92
+#, python-format
+msgid ""
+"The following migrations are missing a downgrade:\n"
+"\t%s"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:169
+msgid "id"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:170
+msgid "IPv4"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:171
+msgid "IPv6"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:172
+msgid "start address"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:173
+msgid "DNS1"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:174
+msgid "DNS2"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:175
+msgid "VlanID"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:176
+msgid "project"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:177
+msgid "uuid"
+msgstr ""
+
+#: cinder/tests/test_volume.py:216
+#, python-format
+msgid "Target %s allocated"
+msgstr "Destino %s asignado"
+
+#: cinder/tests/test_volume.py:468
+#, python-format
+msgid "Cannot confirm exported volume id:%s."
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:58
+#, python-format
+msgid "Given data: %s"
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:59
+#, python-format
+msgid "Result data: %s"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:626
+#, python-format
+msgid "Creating files in %s to simulate guest agent"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:637
+#, python-format
+msgid "Removing simulated guest agent files in %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/test_servers.py:2144
+#, python-format
+msgid "Quota exceeded: code=%(code)s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:57
+#, python-format
+msgid "_create: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:66
+#, python-format
+msgid "_delete: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:75
+#, python-format
+msgid "_get: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:85
+#, python-format
+msgid "_get_all: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:125
+#, python-format
+msgid "test_snapshot_create: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:134
+#, python-format
+msgid "test_snapshot_create: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:156
+#, python-format
+msgid "test_snapshot_create_force: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:165
+#, python-format
+msgid "test_snapshot_create_force: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:205
+#, python-format
+msgid "test_snapshot_show: resp=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:231
+#, python-format
+msgid "test_snapshot_detail: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/integrated/test_login.py:31
+#, python-format
+msgid "flavor: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:38
+#, python-format
+msgid ""
+"%(message)s\n"
+"Status Code: %(_status)s\n"
+"Body: %(_body)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:47
+msgid "Authentication error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:55
+msgid "Authorization error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:63
+msgid "Item not found"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:105
+#, python-format
+msgid "Doing %(method)s on %(relative_url)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:107
+#, python-format
+msgid "Body: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:125
+#, python-format
+msgid "%(auth_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:151
+#, python-format
+msgid "%(relative_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:161
+msgid "Unexpected status code"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:168
+#, python-format
+msgid "Decoding JSON: %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:133
+#, python-format
+msgid "Nested received %(queue)s, %(value)s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:142
+#, python-format
+msgid "Nested return %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:160
+msgid "RPC backend does not support timeouts"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:227 cinder/tests/rpc/common.py:233
+#, python-format
+msgid "Received %s"
+msgstr "Recibido %s"
+
+#: cinder/virt/connection.py:85
+msgid "Failed to open connection to the hypervisor"
+msgstr "Fallo al abrir conexión con el hypervisor"
+
+#: cinder/virt/fake.py:270 cinder/virt/xenapi_conn.py:396
+#: cinder/virt/baremetal/proxy.py:716 cinder/virt/libvirt/connection.py:2045
+#, python-format
+msgid "Compute_service record created for %s "
+msgstr ""
+
+#: cinder/virt/fake.py:273 cinder/virt/xenapi_conn.py:399
+#: cinder/virt/baremetal/proxy.py:720 cinder/virt/libvirt/connection.py:2048
+#, python-format
+msgid "Compute_service record updated for %s "
+msgstr ""
+
+#: cinder/virt/firewall.py:130
+#, python-format
+msgid "Attempted to unfilter instance %s which is not filtered"
+msgstr ""
+
+#: cinder/virt/firewall.py:137
+#, python-format
+msgid "Filters added to instance %s"
+msgstr ""
+
+#: cinder/virt/firewall.py:139
+msgid "Provider Firewall Rules refreshed"
+msgstr ""
+
+#: cinder/virt/firewall.py:291
+#, python-format
+msgid "Adding security group rule: %r"
+msgstr ""
+
+#: cinder/virt/firewall.py:403 cinder/virt/xenapi/firewall.py:87
+#, python-format
+msgid "Adding provider rule: %s"
+msgstr ""
+
+#: cinder/virt/images.py:86
+msgid "'qemu-img info' parsing failed."
+msgstr ""
+
+#: cinder/virt/images.py:92
+#, python-format
+msgid "fmt=%(fmt)s backed by: %(backing_file)s"
+msgstr ""
+
+#: cinder/virt/images.py:104
+#, python-format
+msgid "Converted to raw, but format is now %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:105
+msgid ""
+"Must specify vmwareapi_host_ip,vmwareapi_host_username and "
+"vmwareapi_host_password to useconnection_type=vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:276
+#, python-format
+msgid "In vmwareapi:_create_session, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:359
+#, python-format
+msgid "In vmwareapi:_call_method, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:398
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: success"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:404
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: error %(error_info)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:409
+#, python-format
+msgid "In vmwareapi:_poll_task, Got this error %s"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:140
+msgid ""
+"Must specify xenapi_connection_url, xenapi_connection_username "
+"(optionally), and xenapi_connection_password to use "
+"connection_type=xenapi"
+msgstr ""
+"Debes especificar xenapi_connection_url, xenapi_connection_username "
+"(opcional), y xenapi_connection_password para usar connection_type=xenapi"
+
+#: cinder/virt/xenapi_conn.py:329 cinder/virt/libvirt/connection.py:472
+msgid "Could not determine iscsi initiator name"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:460
+msgid "Host startup on XenServer is not supported."
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:489
+msgid "Unable to log in to XenAPI (is the Dom0 disk full?)"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:527
+msgid "Host is member of a pool, but DB says otherwise"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:599 cinder/virt/xenapi_conn.py:612
+#, python-format
+msgid "Got exception: %s"
+msgstr "Obtenida excepción %s"
+
+#: cinder/virt/baremetal/dom.py:93
+msgid "No domains exist."
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:95
+#, python-format
+msgid "============= initial domains =========== : %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:99
+msgid "Building domain: to be removed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:103
+msgid "Not running domain: remove"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:111
+msgid "domain running on an unknown node: discarded"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:127
+#, python-format
+msgid "No such domain (%s)"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:134
+#, python-format
+msgid "Failed power down Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:143
+msgid "deactivate -> activate fails"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:153
+msgid "destroy_domain: no such domain"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:154
+#, python-format
+msgid "No such domain %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:161
+#, python-format
+msgid "Domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:163
+#, python-format
+msgid "Nodes: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:166
+#, python-format
+msgid "After storing domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:169
+msgid "deactivation/removing domain failed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:176
+msgid "===== Domain is being created ====="
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:179
+msgid "Same domain name already exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:181
+msgid "create_domain: before get_idle_node"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:198
+#, python-format
+msgid "Created new domain: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:213
+#, python-format
+msgid "Failed to boot Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:222
+msgid "No such domain exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:226
+#, python-format
+msgid "change_domain_state: to new state %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:233
+#, python-format
+msgid "Stored fake domains to the file: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:244
+msgid "domain does not exist"
+msgstr ""
+
+#: cinder/virt/baremetal/nodes.py:42
+#, python-format
+msgid "Unknown baremetal driver %(d)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:148
+#, python-format
+msgid "Error encountered when destroying instance '%(name)s': %(ex)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:162
+#, python-format
+msgid "instance %(instance_name)s: deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:189
+#, python-format
+msgid "instance %s: rebooted"
+msgstr "instancia %s: reiniciada"
+
+#: cinder/virt/baremetal/proxy.py:192
+msgid "_wait_for_reboot failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:222
+#, python-format
+msgid "instance %s: rescued"
+msgstr "instancia %s: rescatada"
+
+#: cinder/virt/baremetal/proxy.py:225
+msgid "_wait_for_rescue failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:242
+msgid "<============= spawn of baremetal =============>"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:255
+#, python-format
+msgid "instance %s: is building"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:260
+msgid "Key is injected but instance is not running yet"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:265
+#, python-format
+msgid "instance %s: booted"
+msgstr "instancia %s: arrancada"
+
+#: cinder/virt/baremetal/proxy.py:268
+#, python-format
+msgid "~~~~~~ current state = %s ~~~~~~"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:269
+#, python-format
+msgid "instance %s spawned successfully"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:272
+#, python-format
+msgid "instance %s:not booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:274
+msgid "Bremetal assignment is overcommitted."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:354
+#, python-format
+msgid "instance %s: Creating image"
+msgstr "instancia %s: Creando imagen"
+
+#: cinder/virt/baremetal/proxy.py:473
+#, python-format
+msgid "instance %(inst_name)s: injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:484
+#, python-format
+msgid ""
+"instance %(inst_name)s: ignoring error injecting data into image "
+"%(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:529
+#, python-format
+msgid "instance %s: starting toXML method"
+msgstr "instancia %s: comenzando método toXML"
+
+#: cinder/virt/baremetal/proxy.py:531
+#, python-format
+msgid "instance %s: finished toXML method"
+msgstr "instancia %s: finalizado método toXML"
+
+#: cinder/virt/baremetal/proxy.py:574 cinder/virt/libvirt/connection.py:1815
+msgid ""
+"Cannot get the number of cpu, because this function is not implemented "
+"for this platform. This error can be safely ignored for now."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:714
+#, python-format
+msgid "#### RLK: cpu_arch = %s "
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:746
+msgid "Updating!"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:773 cinder/virt/libvirt/connection.py:2609
+#: cinder/virt/xenapi/host.py:129
+msgid "Updating host stats"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:185
+msgid "free_node...."
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:216
+#, python-format
+msgid "deactivate_node is called for node_id = %(id)s node_ip = %(ip)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:221
+msgid "status of node is set to 0"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:232
+msgid "rootfs is already removed"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:264
+msgid "Before ping to the bare-metal node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:275
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is ready"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:279
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is not ready, out_msg=%(out_msg)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:292
+msgid "Noting to do for tilera nodes: vmlinux is in CF"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:316
+msgid "activate_node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:330
+msgid "Node is unknown error state."
+msgstr ""
+
+#: cinder/virt/disk/api.py:165
+msgid "no capable image handler configured"
+msgstr ""
+
+#: cinder/virt/disk/api.py:178
+#, python-format
+msgid "unknown disk image handler: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:189
+msgid "image already mounted"
+msgstr ""
+
+#: cinder/virt/disk/api.py:276 cinder/virt/disk/guestfs.py:64
+#: cinder/virt/disk/guestfs.py:78 cinder/virt/disk/mount.py:100
+#, python-format
+msgid "Failed to mount filesystem: %s"
+msgstr "Fallo al montar el sistema de ficheros: %s"
+
+#: cinder/virt/disk/api.py:291
+#, python-format
+msgid "Failed to remove container: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:441
+#, python-format
+msgid "User %(username)s not found in password file."
+msgstr ""
+
+#: cinder/virt/disk/api.py:457
+#, python-format
+msgid "User %(username)s not found in shadow file."
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:39
+#, python-format
+msgid "unsupported partition: %s"
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:77
+msgid "unknown guestmount error"
+msgstr ""
+
+#: cinder/virt/disk/loop.py:30
+#, python-format
+msgid "Could not attach image to loopback: %s"
+msgstr "No se puede unir la imagen con el loopback: %s"
+
+#: cinder/virt/disk/mount.py:76
+msgid "no partitions found"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:77
+#, python-format
+msgid "Failed to map partitions: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:58
+msgid "nbd unavailable: module not loaded"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:63
+msgid "No free nbd devices"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:81
+#, python-format
+msgid "qemu-nbd error: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:93
+#, python-format
+msgid "nbd device %s did not show up"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:265
+#, python-format
+msgid "Connecting to libvirt: %s"
+msgstr "Conectando a libvirt: %s"
+
+#: cinder/virt/libvirt/connection.py:286
+msgid "Connection to libvirt broke"
+msgstr "Conexión a libvirt rota"
+
+#: cinder/virt/libvirt/connection.py:388
+#, python-format
+msgid "Error from libvirt during destroy. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:400
+#, python-format
+msgid ""
+"Error from libvirt during saved instance removal. Code=%(errcode)s "
+"Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:411
+#, python-format
+msgid "Error from libvirt during undefine. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:423
+msgid "Instance destroyed successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:435
+#, python-format
+msgid "Error from libvirt during unfilter. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:461
+#, python-format
+msgid "Deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:554
+msgid "attaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:567
+msgid "detaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:692
+#, fuzzy, python-format
+msgid "Instance soft rebooted successfully."
+msgstr "instancia %s: reiniciada"
+
+#: cinder/virt/libvirt/connection.py:696
+#, fuzzy
+msgid "Failed to soft reboot instance."
+msgstr "Fallo a reinicia la instancia"
+
+#: cinder/virt/libvirt/connection.py:725
+msgid "Instance shutdown successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:761 cinder/virt/libvirt/connection.py:905
+msgid "During reboot, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:766
+msgid "Instance rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:867 cinder/virt/xenapi/vmops.py:1358
+#, python-format
+msgid ""
+"Found %(migration_count)d unconfirmed migrations older than "
+"%(confirm_window)d seconds"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:871
+#, python-format
+msgid "Automatically confirming migration %d"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:896
+msgid "Instance is running"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:910
+msgid "Instance spawned successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:926
+#, python-format
+msgid "data: %(data)r, fpath: %(fpath)r"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:978
+#, fuzzy
+msgid "Guest does not have a console available"
+msgstr "El usuario no tiene privilegios de administrador"
+
+#: cinder/virt/libvirt/connection.py:1020
+#, python-format
+msgid "Path '%(path)s' supports direct I/O"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1024
+#, python-format
+msgid "Path '%(path)s' does not support direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1028 cinder/virt/libvirt/connection.py:1032
+#, python-format
+msgid "Error on '%(path)s' while checking direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1153
+msgid "Creating image"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1339
+#, python-format
+msgid "Injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1349
+#, python-format
+msgid "Ignoring error injecting data into image %(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1381
+#, python-format
+msgid "block_device_list %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1658
+msgid "Starting toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1662
+msgid "Finished toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1679
+#, python-format
+msgid ""
+"Error from libvirt while looking up %(instance_name)s: [Error Code "
+"%(error_code)s] %(ex)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1920
+msgid "libvirt version is too old (does not support getVersion)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1942
+#, python-format
+msgid "'<cpu>' must be 1, but %d\n"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1969
+#, python-format
+msgid "topology (%(topology)s) must have %(ks)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2067
+#, python-format
+msgid ""
+"Instance launched has CPU info:\n"
+"%s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2079
+#, python-format
+msgid ""
+"CPU doesn't have compatibility.\n"
+"\n"
+"%(ret)s\n"
+"\n"
+"Refer to %(u)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2136
+#, python-format
+msgid "Timeout migrating for %s. nwfilter not found."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2352
+#, python-format
+msgid "skipping %(path)s since it looks like volume"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2407
+#, python-format
+msgid "Getting disk size of %(i_name)s: %(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2458
+#, python-format
+msgid "Instance %s: Starting migrate_disk_and_power_off"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2513
+msgid "During wait running, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2518
+msgid "Instance running successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2525
+#, python-format
+msgid "Instance %s: Starting finish_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2565
+#, python-format
+msgid "Instance %s: Starting finish_revert_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:42
+msgid ""
+"Libvirt module could not be loaded. NWFilterFirewall will not work "
+"correctly."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:93
+msgid "Called setup_basic_filtering in nwfilter"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:101
+msgid "Ensuring static filters"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:171
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:217
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) for%(name)s is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:233
+msgid "iptables firewall: Setup Basic Filtering"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:252
+msgid "Attempted to unfilter instance which is not filtered"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:170
+#, python-format
+msgid "%s is a valid instance name"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:173
+#, python-format
+msgid "%s has a disk file"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:175
+#, python-format
+msgid "Instance %(instance)s is backed by %(backing)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:186
+#, python-format
+msgid ""
+"Instance %(instance)s is using a backing file %(backing)s which does not "
+"appear in the image service"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:237
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification failed"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:247
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification skipped, no hash stored"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:266
+#, python-format
+msgid "Cannot remove %(base_file)s, it does not exist"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:278
+#, python-format
+msgid "Base file too young to remove: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:281
+#, python-format
+msgid "Removing base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:288
+#, python-format
+msgid "Failed to remove %(base_file)s, error was %(error)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:299
+#, python-format
+msgid "%(id)s (%(base_file)s): checking"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:318
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): in use: on this node %(local)d local, %(remote)d "
+"on other nodes"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:330
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): warning -- an absent base file is in use! "
+"instances: %(instance_list)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:338
+#, python-format
+msgid "%(id)s (%(base_file)s): in use on (%(remote)d on other nodes)"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:348
+#, python-format
+msgid "%(id)s (%(base_file)s): image is not in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:354
+#, python-format
+msgid "%(id)s (%(base_file)s): image is in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:377
+#, python-format
+msgid "Skipping verification, no base directory at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:381
+msgid "Verify base images"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:388
+#, python-format
+msgid "Image id %(id)s yields fingerprint %(fingerprint)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:406
+#, python-format
+msgid "Unknown base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:411
+#, python-format
+msgid "Active base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:414
+#, python-format
+msgid "Corrupt base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:418
+#, python-format
+msgid "Removable base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:426
+msgid "Verification complete"
+msgstr ""
+
+#: cinder/virt/libvirt/utils.py:264
+msgid "Unable to find an open port"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:90
+#, python-format
+msgid "Ensuring vlan %(vlan)s and bridge %(bridge)s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:99
+#, python-format
+msgid "Ensuring bridge %s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:165 cinder/virt/libvirt/vif.py:220
+#, python-format
+msgid "Failed while unplugging vif of instance '%s'"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:163
+#, python-format
+msgid "iSCSI device not found at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:166
+#, python-format
+msgid ""
+"ISCSI volume not yet found at: %(mount_device)s. Will rescan & retry.  "
+"Try number: %(tries)s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:178
+#, python-format
+msgid "Found iSCSI node %(mount_device)s (after %(tries)s rescans)"
+msgstr ""
+
+#: cinder/virt/vmwareapi/error_util.py:93
+#, python-format
+msgid "Error(s) %s occurred in the call to RetrieveProperties"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:44 cinder/virt/xenapi/fake.py:77
+#, python-format
+msgid "%(text)s: _db_content => %(content)s"
+msgstr "%(text)s: _db_content => %(content)s"
+
+#: cinder/virt/vmwareapi/fake.py:131
+#, python-format
+msgid "Property %(attr)s not set for the managed object %(objName)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:437
+msgid "There is no VM registered"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:439 cinder/virt/vmwareapi/fake.py:609
+#, python-format
+msgid "Virtual Machine with ref %s is not there"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:502
+#, python-format
+msgid "Logging out a session that is invalid or already logged out: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:517
+msgid "Session is faulty"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:520
+msgid "Session Invalid"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:606
+msgid " No Virtual Machine has been registered yet"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:99
+#, python-format
+msgid "Glance image %s is in killed state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:107
+#, python-format
+msgid "Glance image %(image_id)s is in unknown state - %(state)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:128
+msgid ""
+"ESX SOAP server returned an empty port group for the host system in its "
+"response"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:155
+#, python-format
+msgid "Creating Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:169
+#, python-format
+msgid "Created Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/read_write_util.py:150
+#, python-format
+msgid "Exception during HTTP connection close in VMWareHTTpWrite. Exception is %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:84
+msgid "Unable to import suds."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:90
+msgid "Must specify vmwareapi_wsdl_loc"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:145
+#, python-format
+msgid "No such SOAP method '%s' provided by VI SDK"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:150
+#, python-format
+msgid "httplib error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:157
+#, python-format
+msgid "Socket error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:162
+#, python-format
+msgid "Type error in  %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:166
+#, python-format
+msgid "Exception in %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:66
+msgid "Getting list of instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:82
+#, python-format
+msgid "Got total of %s instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:126
+msgid "Couldn't get a local Datastore reference"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:196
+#, python-format
+msgid "Creating VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:205
+#, python-format
+msgid "Created VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:234
+#, python-format
+msgid ""
+"Creating Virtual Disk of size  %(vmdk_file_size_in_kb)s KB and adapter "
+"type  %(adapter_type)s on the ESX host local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:251
+#, python-format
+msgid ""
+"Created Virtual Disk of size %(vmdk_file_size_in_kb)s KB on the ESX host "
+"local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:260
+#, python-format
+msgid ""
+"Deleting the file %(flat_uploaded_vmdk_path)s on the ESX host localstore "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:272
+#, python-format
+msgid ""
+"Deleted the file %(flat_uploaded_vmdk_path)s on the ESX host local store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:283
+#, python-format
+msgid ""
+"Downloading image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:298
+#, python-format
+msgid ""
+"Downloaded image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:315
+#, python-format
+msgid "Reconfiguring VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:322
+#, python-format
+msgid "Reconfigured VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:329
+#, python-format
+msgid "Powering on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:335
+#, python-format
+msgid "Powered on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:381
+#, python-format
+msgid "Creating Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:391
+#, python-format
+msgid "Created Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:434
+#, python-format
+msgid "Copying disk data before snapshot of the VM  instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:447
+#, python-format
+msgid "Copied disk data before snapshot of the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:456
+#, python-format
+msgid "Uploading image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:469
+#, python-format
+msgid "Uploaded image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:479
+#, python-format
+msgid "Deleting temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:488
+#, python-format
+msgid "Deleted temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:520
+msgid "instance is not powered on"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:527
+#, python-format
+msgid "Rebooting guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:530
+#, python-format
+msgid "Rebooted guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:532
+#, python-format
+msgid "Doing hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:536
+#, python-format
+msgid "Did hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:548
+#, python-format
+msgid "instance - %s not present"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:567
+#, python-format
+msgid "Powering off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:572
+#, python-format
+msgid "Powered off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:576
+#, python-format
+msgid "Unregistering the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:579
+#, python-format
+msgid "Unregistered the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:581
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while un-registering the "
+"VM: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:592
+#, python-format
+msgid "Deleting contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:602
+#, python-format
+msgid "Deleted contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:607
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while deleting the VM "
+"contents from the disk: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:615
+msgid "pause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:619
+msgid "unpause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:633
+#, python-format
+msgid "Suspending the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:637
+#, python-format
+msgid "Suspended the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:640
+msgid "instance is powered off and can not be suspended."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:643
+#, python-format
+msgid "VM %s was already in suspended state. So returning without doing anything"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:656
+#, python-format
+msgid "Resuming the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:661
+#, python-format
+msgid "Resumed the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:663
+msgid "instance is not in a suspended state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:699
+msgid "get_diagnostics not implemented for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:757
+#, python-format
+msgid ""
+"Reconfiguring VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:765
+#, python-format
+msgid ""
+"Reconfigured VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:802
+#, python-format
+msgid "Creating directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:806
+#, python-format
+msgid "Created directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:89
+#, python-format
+msgid "Downloading image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:103
+#, python-format
+msgid "Downloaded image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:108
+#, python-format
+msgid "Uploading image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:129
+#, python-format
+msgid "Uploaded image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:139
+#, python-format
+msgid "Getting image size for the image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:143
+#, python-format
+msgid "Got image size of %(size)s for the image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:553 cinder/virt/xenapi/fake.py:652
+#: cinder/virt/xenapi/fake.py:670 cinder/virt/xenapi/fake.py:732
+msgid "Raising NotImplemented"
+msgstr "Lanzando NotImplemented"
+
+#: cinder/virt/xenapi/fake.py:555
+#, python-format
+msgid "xenapi.fake does not have an implementation for %s"
+msgstr "xenapi.fake no tiene una implementación para %s"
+
+#: cinder/virt/xenapi/fake.py:589
+#, python-format
+msgid "Calling %(localname)s %(impl)s"
+msgstr "Llamando %(localname)s %(impl)s"
+
+#: cinder/virt/xenapi/fake.py:594
+#, python-format
+msgid "Calling getter %s"
+msgstr "Llanado al adquiridor %s"
+
+#: cinder/virt/xenapi/fake.py:654
+#, python-format
+msgid ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+msgstr ""
+"xenapi.fake no tiene una implementación para %s o ha sido llamada con un "
+"número incorrecto de argumentos"
+
+#: cinder/virt/xenapi/host.py:67
+#, python-format
+msgid ""
+"Instance %(name)s running on %(host)s could not be found in the database:"
+" assuming it is a worker VM and skipping migration to a new host"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:137
+#, python-format
+msgid "Unable to get SR for this host: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:169
+msgid "Unable to get updated status"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:172
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:37
+#, python-format
+msgid "Found non-unique network for name_label %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:55
+#, python-format
+msgid "Found non-unique network for bridge %s"
+msgstr "Encontrada una red no única para el puente %s"
+
+#: cinder/virt/xenapi/network_utils.py:58
+#, python-format
+msgid "Found no network for bridge %s"
+msgstr "No se ha encontrado red para el puente %s"
+
+#: cinder/virt/xenapi/pool.py:111
+#, python-format
+msgid "Unable to eject %(host)s from the pool; pool not empty"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:126
+#, python-format
+msgid "Unable to eject %(host)s from the pool; No master found"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:143
+#, python-format
+msgid "Pool-Join failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:146
+#, python-format
+msgid "Unable to join %(host)s in the pool"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:162
+#, python-format
+msgid "Pool-eject failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:174
+#, fuzzy, python-format
+msgid "Unable to set up pool: %(e)s."
+msgstr "Imposible desasociar volumen %s"
+
+#: cinder/virt/xenapi/pool.py:185
+#, python-format
+msgid "Pool-set_name_label failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:103
+#, python-format
+msgid "Found no PIF for device %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:122
+#, python-format
+msgid ""
+"PIF %(pif_rec['uuid'])s for network %(bridge)s has VLAN id %(pif_vlan)d. "
+"Expected %(vlan_num)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:218
+msgid "Created VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:245
+#, python-format
+msgid "VBD not found in instance %s"
+msgstr "VBD no encontrado en la instancia %s"
+
+#: cinder/virt/xenapi/vm_utils.py:262
+#, fuzzy, python-format
+msgid "VBD %s already detached"
+msgstr "el grupo %s ya existe"
+
+#: cinder/virt/xenapi/vm_utils.py:265
+#, python-format
+msgid "VBD %(vbd_ref)s detach rejected, attempt %(num_attempt)d/%(max_attempts)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:270
+#, python-format
+msgid "Unable to unplug VBD %s"
+msgstr "Imposible desconectar VBD %s"
+
+#: cinder/virt/xenapi/vm_utils.py:275
+#, python-format
+msgid "Reached maximum number of retries trying to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:286
+#, python-format
+msgid "Unable to destroy VBD %s"
+msgstr "Imposible destruir VBD %s"
+
+#: cinder/virt/xenapi/vm_utils.py:305
+#, fuzzy, python-format
+msgid "Creating %(vbd_type)s-type VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+msgstr "Creado el VBD %(vbd_ref)s para VM %(vm_ref)s, VDI %(vdi_ref)s"
+
+#: cinder/virt/xenapi/vm_utils.py:308
+#, python-format
+msgid "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+msgstr "Creado el VBD %(vbd_ref)s para VM %(vm_ref)s, VDI %(vdi_ref)s"
+
+#: cinder/virt/xenapi/vm_utils.py:319
+#, python-format
+msgid "Unable to destroy VDI %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:336
+#, python-format
+msgid ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+msgstr ""
+"VDI creado %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s) "
+"sobre %(sr_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:345
+#, python-format
+msgid "Copied VDI %(vdi_ref)s from VDI %(vdi_to_copy_ref)s on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:353
+#, python-format
+msgid "Cloned VDI %(vdi_ref)s from VDI %(vdi_to_clone_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:372
+#, python-format
+msgid "No primary VDI found for %(vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:379
+#, fuzzy, python-format
+msgid "Snapshotting with label '%(label)s'"
+msgstr "Creando snapshot de la VM %(vm_ref)s con etiqueta '%(label)s'..."
+
+#: cinder/virt/xenapi/vm_utils.py:392
+#, fuzzy, python-format
+msgid "Created snapshot %(template_vm_ref)s"
+msgstr "Instantánea creada %(template_vm_ref)s de la VM %(vm_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:431
+#, python-format
+msgid "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+msgstr "Pidiendo xapi a subir %(vdi_uuids)s como ID %(image_id)s"
+
+#: cinder/virt/xenapi/vm_utils.py:583
+#, python-format
+msgid "Creating blank HD of size %(req_size)d gigs"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:634
+#, python-format
+msgid ""
+"Fast cloning is only supported on default local SR of type ext. SR on "
+"this system was found to be of type %(sr_type)s. Ignoring the cow flag."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:724
+#, python-format
+msgid ""
+"download_vhd %(image)s attempt %(attempt_num)d/%(max_attempts)d from "
+"%(glance_host)s:%(glance_port)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:734
+#, python-format
+msgid "download_vhd failed: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:750
+#, python-format
+msgid "Asking xapi to fetch vhd image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:760
+#, python-format
+msgid ""
+"xapi 'download_vhd' returned VDI of type '%(vdi_type)s' with UUID "
+"'%(vdi_uuid)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:789
+#, python-format
+msgid "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:805
+#, python-format
+msgid "image_size_bytes=%(size_bytes)d, allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:809
+#, python-format
+msgid ""
+"Image size %(size_bytes)d exceeded instance_type allowed size "
+"%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:831
+#, python-format
+msgid "Fetching image %(image)s, type %(image_type_str)"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:844
+#, fuzzy, python-format
+msgid "Size for image %(image)s: %(virtual_size)d"
+msgstr "Tamaño para imagen %(image)s:%(virtual_size)d"
+
+#: cinder/virt/xenapi/vm_utils.py:853
+#, python-format
+msgid ""
+"Kernel/Ramdisk image is too large: %(vdi_size)d bytes, max %(max_size)d "
+"bytes"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:870
+#, python-format
+msgid "Copying VDI %s to /boot/guest on dom0"
+msgstr "Copiando VDI %s a /boot/guest on dom0"
+
+#: cinder/virt/xenapi/vm_utils.py:884
+#, python-format
+msgid "Kernel/Ramdisk VDI %s destroyed"
+msgstr "Kernel/Ramdisk VDI %s destruído"
+
+#: cinder/virt/xenapi/vm_utils.py:895
+#, fuzzy
+msgid "Failed to fetch glance image"
+msgstr "Fallo a reinicia la instancia"
+
+#: cinder/virt/xenapi/vm_utils.py:934
+#, python-format
+msgid "Detected %(image_type_str)s format for image %(image_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:955
+#, python-format
+msgid "Looking up vdi %s for PV kernel"
+msgstr "Buscando vid %s para el kernel PV"
+
+#: cinder/virt/xenapi/vm_utils.py:973
+#, python-format
+msgid "Unknown image format %(disk_image_type)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1016
+#, python-format
+msgid "VDI %s is still available"
+msgstr "VDI %s está todavía disponible"
+
+#: cinder/virt/xenapi/vm_utils.py:1059
+#, python-format
+msgid "(VM_UTILS) xenserver vm state -> |%s|"
+msgstr "(VM_UTILS) xenserver vm state -> |%s|"
+
+#: cinder/virt/xenapi/vm_utils.py:1061
+#, python-format
+msgid "(VM_UTILS) xenapi power_state -> |%s|"
+msgstr "(VM_UTILS) xenapi power_state -> |%s|"
+
+#: cinder/virt/xenapi/vm_utils.py:1088
+#, python-format
+msgid "Unable to parse rrd of %(vm_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1108
+#, python-format
+msgid "Re-scanning SR %s"
+msgstr "Re-escaneando SR %s"
+
+#: cinder/virt/xenapi/vm_utils.py:1136
+#, python-format
+msgid "Flag sr_matching_filter '%s' does not respect formatting convention"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1154
+msgid ""
+"XenAPI is unable to find a Storage Repository to install guest instances "
+"on. Please check your configuration and/or configure the flag "
+"'sr_matching_filter'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1167
+msgid "Cannot find SR of content-type ISO"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1175
+#, python-format
+msgid "ISO: looking at SR %(sr_rec)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1177
+msgid "ISO: not iso content"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1180
+msgid "ISO: iso content_type, no 'i18n-key' key"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1183
+msgid "ISO: iso content_type, i18n-key value not 'local-storage-iso'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1187
+msgid "ISO: SR MATCHing our criteria"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1189
+msgid "ISO: ISO, looking to see if it is host local"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1192
+#, python-format
+msgid "ISO: PBD %(pbd_ref)s disappeared"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1195
+#, python-format
+msgid "ISO: PBD matching, want %(pbd_rec)s, have %(host)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1198
+msgid "ISO: SR with local PBD"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1220
+#, python-format
+msgid ""
+"Unable to obtain RRD XML for VM %(vm_uuid)s with server details: "
+"%(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1236
+#, python-format
+msgid "Unable to obtain RRD XML updates with server details: %(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1290
+#, python-format
+msgid "Invalid statistics data from Xenserver: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1343
+#, python-format
+msgid "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+msgstr "VHD %(vdi_uuid)s tiene origen en %(parent_ref)s"
+
+#: cinder/virt/xenapi/vm_utils.py:1417
+#, python-format
+msgid ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1427
+#, python-format
+msgid "VHD coalesce attempts exceeded (%(max_attempts)d), giving up..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1462
+#, python-format
+msgid "Timeout waiting for device %s to be created"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1473
+#, python-format
+msgid "Plugging VBD %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1476
+#, python-format
+msgid "Plugging VBD %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1478
+#, python-format
+msgid "VBD %(vbd_ref)s plugged as %(orig_dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1481
+#, python-format
+msgid "VBD %(vbd_ref)s plugged into wrong dev, remapping to %(dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1490
+#, python-format
+msgid "Destroying VBD for VDI %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1498
+#, python-format
+msgid "Destroying VBD for VDI %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1511
+#, python-format
+msgid "Running pygrub against %s"
+msgstr "Ejecutando pygrub contra %s"
+
+#: cinder/virt/xenapi/vm_utils.py:1518
+#, python-format
+msgid "Found Xen kernel %s"
+msgstr "Kernel Xen Encontrado %s"
+
+#: cinder/virt/xenapi/vm_utils.py:1520
+msgid "No Xen kernel found.  Booting HVM."
+msgstr "Kernel Xen no encontrado. Reiniciando HVM"
+
+#: cinder/virt/xenapi/vm_utils.py:1533
+msgid "Partitions:"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1539
+#, python-format
+msgid "  %(num)s: %(ptype)s %(size)d sectors"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1565
+#, python-format
+msgid ""
+"Writing partition table %(primary_first)d %(primary_last)d to "
+"%(dev_path)s..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1578
+#, python-format
+msgid "Writing partition table %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1632
+#, python-format
+msgid ""
+"Starting sparse_copy src=%(src_path)s dst=%(dst_path)s "
+"virtual_size=%(virtual_size)d block_size=%(block_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1664
+#, python-format
+msgid ""
+"Finished sparse_copy in %(duration).2f secs, %(compression_pct).2f%% "
+"reduction in size"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1714
+msgid ""
+"XenServer tools installed in this image are capable of network injection."
+"  Networking files will not bemanipulated"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1722
+msgid ""
+"XenServer tools are present in this image but are not capable of network "
+"injection"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1726
+msgid "XenServer tools are not installed in this image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1742
+msgid "Manipulating interface files directly"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1751
+#, python-format
+msgid "Failed to mount filesystem (expected for non-linux instances): %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:131 cinder/virt/xenapi/vmops.py:722
+#, python-format
+msgid "Updating progress to %(progress)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:231
+#, python-format
+msgid "Attempted to power on non-existent instance bad instance id %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:233
+#, fuzzy
+msgid "Starting instance"
+msgstr "Creando una instancia raw"
+
+#: cinder/virt/xenapi/vmops.py:303
+msgid "Removing kernel/ramdisk files from dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:358
+#, fuzzy
+msgid "Failed to spawn, rolling back"
+msgstr "Fallo al suspender la instancia"
+
+#: cinder/virt/xenapi/vmops.py:443
+msgid "Detected ISO image type, creating blank VM for install"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:462
+msgid "Auto configuring disk, attempting to resize partition..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:515
+#, python-format
+msgid "Invalid value for injected_files: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:520
+#, python-format
+msgid "Injecting file path: '%s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:527
+msgid "Setting admin password"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:531
+msgid "Resetting network"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:538
+msgid "Setting VCPU weight"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:544
+msgid "Starting VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:551
+#, python-format
+msgid ""
+"Latest agent build for %(hypervisor)s/%(os)s/%(architecture)s is "
+"%(version)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:554
+#, python-format
+msgid "No agent build found for %(hypervisor)s/%(os)s/%(architecture)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:561
+msgid "Waiting for instance state to become running"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:573
+msgid "Querying agent version"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:576
+#, python-format
+msgid "Instance agent version: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:581
+#, python-format
+msgid "Updating Agent to %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:616
+#, python-format
+msgid "No opaque_ref could be determined for '%s'."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:670
+#, fuzzy, python-format
+msgid "Finished snapshot and upload for VM"
+msgstr "Finalizado el snapshot y la subida de la VM %s"
+
+#: cinder/virt/xenapi/vmops.py:677
+#, fuzzy, python-format
+msgid "Starting snapshot for VM"
+msgstr "Comenzando snapshot para la VM %s"
+
+#: cinder/virt/xenapi/vmops.py:686
+#, fuzzy, python-format
+msgid "Unable to Snapshot instance: %(exc)s"
+msgstr "Imposible adjuntar volumen a la instancia %s"
+
+#: cinder/virt/xenapi/vmops.py:702
+msgid "Failed to transfer vhd to new host"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:770
+#, python-format
+msgid "Resizing down VDI %(cow_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:893
+#, python-format
+msgid "Resizing up VDI %(vdi_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:901
+msgid "Resize complete"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:928
+#, python-format
+msgid "Failed to query agent version: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:949
+#, python-format
+msgid "domid changed from %(domid)s to %(newdomid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:962
+#, python-format
+msgid "Failed to update agent: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:983
+#, python-format
+msgid "Failed to exchange keys: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:998
+#, python-format
+msgid "Failed to update password: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1023
+#, python-format
+msgid "Failed to inject file: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1032
+msgid "VM already halted, skipping shutdown..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1036
+msgid "Shutting down VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1054
+msgid "Unable to find VBD for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1097
+msgid "Using RAW or VHD, skipping kernel and ramdisk deletion"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1104
+msgid "instance has a kernel or ramdisk but not both"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1111
+msgid "kernel/ramdisk files removed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1121
+msgid "VM destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1147
+msgid "Destroying VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1169
+msgid "VM is not present, skipping destroy..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1222
+#, python-format
+msgid "Instance is already in Rescue Mode: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1296
+#, python-format
+msgid "Found %(instance_count)d hung reboots older than %(timeout)d seconds"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1300
+msgid "Automatically hard rebooting"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1363
+#, python-format
+msgid "Setting migration %(migration_id)s to error: %(reason)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1374
+#, python-format
+msgid ""
+"Automatically confirming migration %(migration_id)s for instance "
+"%(instance_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1379
+#, fuzzy, python-format
+msgid "Instance %(instance_uuid)s not found"
+msgstr "La instacia %(instance_id)s no esta suspendida"
+
+#: cinder/virt/xenapi/vmops.py:1383
+msgid "In ERROR state"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1389
+#, python-format
+msgid "In %(task_state)s task_state, not RESIZE_VERIFY"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1396
+#, python-format
+msgid "Error auto-confirming resize: %(e)s. Will retry later."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1418
+msgid "Could not get bandwidth info."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1469
+#, fuzzy
+msgid "Injecting network info to xenstore"
+msgstr "configurando la red del host"
+
+#: cinder/virt/xenapi/vmops.py:1483
+msgid "Creating vifs"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1492
+#, fuzzy, python-format
+msgid "Creating VIF for network %(network_ref)s"
+msgstr "Creando VIF para VM %(vm_ref)s, red %(network_ref)s."
+
+#: cinder/virt/xenapi/vmops.py:1495
+#, fuzzy, python-format
+msgid "Created VIF %(vif_ref)s, network %(network_ref)s"
+msgstr "Creando VIF para VM %(vm_ref)s, red %(network_ref)s."
+
+#: cinder/virt/xenapi/vmops.py:1520
+msgid "Injecting hostname to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1545
+#, python-format
+msgid ""
+"The agent call to %(method)s returned an invalid response: %(ret)r. "
+"path=%(path)s; args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1566
+#, python-format
+msgid "TIMEOUT: The call to %(method)s timed out. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1570
+#, python-format
+msgid ""
+"NOT IMPLEMENTED: The call to %(method)s is not supported by the agent. "
+"args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1575
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1661
+#, python-format
+msgid "OpenSSL error: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:52
+msgid "creating sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:55 cinder/virt/xenapi/volume_utils.py:83
+#, python-format
+msgid "type is = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:58 cinder/virt/xenapi/volume_utils.py:86
+#, python-format
+msgid "name = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:71
+#, python-format
+msgid "Created %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:76 cinder/virt/xenapi/volume_utils.py:174
+msgid "Unable to create Storage Repository"
+msgstr "Imposible crear el repositorio de almacenamiento"
+
+#: cinder/virt/xenapi/volume_utils.py:80
+msgid "introducing sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:103 cinder/virt/xenapi/volume_utils.py:170
+#: cinder/virt/xenapi/volumeops.py:156
+#, python-format
+msgid "Introduced %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:106
+msgid "Creating pbd for SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:108
+msgid "Plugging SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:116 cinder/virt/xenapi/volumeops.py:160
+msgid "Unable to introduce Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:127 cinder/virt/xenapi/volumeops.py:50
+msgid "Unable to get SR using uuid"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:129
+#, python-format
+msgid "Forgetting SR %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:137
+msgid "Unable to forget Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:157
+#, python-format
+msgid "Introducing %s..."
+msgstr "Introduciendo %s..."
+
+#: cinder/virt/xenapi/volume_utils.py:186
+#, python-format
+msgid "Unable to find SR from VBD %s"
+msgstr "Imposible encontrar SR en VBD %s"
+
+#: cinder/virt/xenapi/volume_utils.py:204
+#, python-format
+msgid "Ignoring exception %(exc)s when getting PBDs for %(sr_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:210
+#, python-format
+msgid "Ignoring exception %(exc)s when unplugging PBD %(pbd)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:234
+#, python-format
+msgid "Unable to introduce VDI on SR %s"
+msgstr "Incapaz de insertar VDI en SR %s"
+
+#: cinder/virt/xenapi/volume_utils.py:242
+#, python-format
+msgid "Unable to get record of VDI %s on"
+msgstr "Imposible obtener copia del VDI %s en"
+
+#: cinder/virt/xenapi/volume_utils.py:264
+#, python-format
+msgid "Unable to introduce VDI for SR %s"
+msgstr "Inposible insertar VDI para SR %s"
+
+#: cinder/virt/xenapi/volume_utils.py:274
+#, python-format
+msgid "Error finding vdis in SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:281
+#, python-format
+msgid "Unable to find vbd for vdi %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:315
+#, python-format
+msgid "Unable to obtain target information %(data)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:341
+#, python-format
+msgid "Mountpoint cannot be translated: %s"
+msgstr "Punto de montaje no puede ser traducido: %s"
+
+#: cinder/virt/xenapi/volumeops.py:64
+msgid "Could not find VDI ref"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:69
+#, python-format
+msgid "Creating SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:73
+msgid "Could not create SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:76
+msgid "Could not retrieve SR record"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:81
+#, python-format
+msgid "Introducing SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:85
+msgid "SR found in xapi database. No need to introduce"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:90
+msgid "Could not introduce SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:94
+#, python-format
+msgid "Checking for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:106
+#, python-format
+msgid "SR %s not found in the xapi database"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:112
+msgid "Could not forget SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:121
+#, python-format
+msgid "Attach_volume: %(connection_info)s, %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:178
+#, python-format
+msgid "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+msgstr ""
+"No es posible crear el VDI en SR %(sr_ref)s para la instancia "
+"%(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:189
+#, python-format
+msgid "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+msgstr "No es posible usar SR %(sr_ref)s para la instancia %(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:197
+#, python-format
+msgid "Unable to attach volume to instance %s"
+msgstr "Imposible adjuntar volumen a la instancia %s"
+
+#: cinder/virt/xenapi/volumeops.py:200
+#, python-format
+msgid "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+msgstr ""
+"El punto de montaje %(mountpoint)s esta unido a la instancia "
+"%(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:210
+#, python-format
+msgid "Detach_volume: %(instance_name)s, %(mountpoint)s"
+msgstr "Volume_separado: %(instance_name)s, %(mountpoint)s"
+
+#: cinder/virt/xenapi/volumeops.py:219
+#, python-format
+msgid "Unable to locate volume %s"
+msgstr "Imposible encontrar volumen %s"
+
+#: cinder/virt/xenapi/volumeops.py:227
+#, python-format
+msgid "Unable to detach volume %s"
+msgstr "Imposible desasociar volumen %s"
+
+#: cinder/virt/xenapi/volumeops.py:232
+#, python-format
+msgid "Unable to destroy vbd %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:239
+#, python-format
+msgid "Error purging SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:241
+#, python-format
+msgid "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+msgstr ""
+"El punto de montaje %(mountpoint)s se desligó de la instancia "
+"%(instance_name)s"
+
+#: cinder/vnc/xvp_proxy.py:98 cinder/vnc/xvp_proxy.py:103
+#, python-format
+msgid "Error in handshake: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:119
+#, python-format
+msgid "Invalid request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:139
+#, python-format
+msgid "Request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:142
+#, python-format
+msgid "Request made with missing token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:153
+#, python-format
+msgid "Request made with invalid token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:160
+#, python-format
+msgid "Unexpected error: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:180
+#, python-format
+msgid "Starting cinder-xvpvncproxy node (version %s)"
+msgstr ""
+
+#: cinder/volume/api.py:74 cinder/volume/api.py:220
+msgid "status must be available"
+msgstr ""
+
+#: cinder/volume/api.py:85
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to create %(size)sG volume"
+msgstr ""
+
+#: cinder/volume/api.py:137
+#, fuzzy
+msgid "Volume status must be available or error"
+msgstr "El estado del volumen debe estar disponible"
+
+#: cinder/volume/api.py:142
+#, python-format
+msgid "Volume still has %d dependent snapshots"
+msgstr ""
+
+#: cinder/volume/api.py:223
+msgid "already attached"
+msgstr ""
+
+#: cinder/volume/api.py:230
+msgid "already detached"
+msgstr ""
+
+#: cinder/volume/api.py:292
+msgid "must be available"
+msgstr ""
+
+#: cinder/volume/api.py:325
+#, fuzzy
+msgid "Volume Snapshot status must be available or error"
+msgstr "El estado del volumen debe estar disponible"
+
+#: cinder/volume/driver.py:96
+#, python-format
+msgid "Recovering from a failed execute.  Try number %s"
+msgstr "Recuperandose de una ejecución fallida. Intenta el número %s"
+
+#: cinder/volume/driver.py:106
+#, python-format
+msgid "volume group %s doesn't exist"
+msgstr "el grupo de volumenes %s no existe"
+
+#: cinder/volume/driver.py:270
+#, python-format
+msgid "Skipping ensure_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:318
+#, python-format
+msgid "Skipping remove_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:327
+#, python-format
+msgid ""
+"Skipping remove_export. No iscsi_target is presently exported for volume:"
+" %d"
+msgstr ""
+
+#: cinder/volume/driver.py:337
+msgid "ISCSI provider_location not stored, using discovery"
+msgstr ""
+
+#: cinder/volume/driver.py:384
+#, python-format
+msgid "Could not find iSCSI export  for volume %s"
+msgstr ""
+
+#: cinder/volume/driver.py:388
+#, python-format
+msgid "ISCSI Discovery: Found %s"
+msgstr ""
+
+#: cinder/volume/driver.py:466
+#, python-format
+msgid "Cannot confirm exported volume id:%(volume_id)s."
+msgstr ""
+
+#: cinder/volume/driver.py:493
+#, python-format
+msgid "FAKE ISCSI: %s"
+msgstr "Falso ISCSI: %s"
+
+#: cinder/volume/driver.py:505
+#, python-format
+msgid "rbd has no pool %s"
+msgstr ""
+
+#: cinder/volume/driver.py:579
+#, python-format
+msgid "Sheepdog is not working: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:581
+msgid "Sheepdog is not working"
+msgstr ""
+
+#: cinder/volume/driver.py:680 cinder/volume/driver.py:685
+#, python-format
+msgid "LoggingVolumeDriver: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:96
+#, python-format
+msgid "Re-exporting %s volumes"
+msgstr "Exportando de nuevo los volumenes %s"
+
+#: cinder/volume/manager.py:101
+#, python-format
+msgid "volume %s: skipping export"
+msgstr "volume %s: saltando exportación"
+
+#: cinder/volume/manager.py:107
+#, python-format
+msgid "volume %s: creating"
+msgstr "volumen %s: creando"
+
+#: cinder/volume/manager.py:119
+#, python-format
+msgid "volume %(vol_name)s: creating lv of size %(vol_size)sG"
+msgstr "volume %(vol_name)s: creando lv del tamaño %(vol_size)sG"
+
+#: cinder/volume/manager.py:131
+#, python-format
+msgid "volume %s: creating export"
+msgstr "volumen %s: exportando"
+
+#: cinder/volume/manager.py:144
+#, python-format
+msgid "volume %s: created successfully"
+msgstr "volumen %s: creado satisfactoriamente"
+
+#: cinder/volume/manager.py:153
+msgid "Volume is still attached"
+msgstr "El volumen todavía está asociado"
+
+#: cinder/volume/manager.py:155
+msgid "Volume is not local to this node"
+msgstr "Volumen no local a este nodo"
+
+#: cinder/volume/manager.py:159
+#, python-format
+msgid "volume %s: removing export"
+msgstr "volumen %s: eliminando exportación"
+
+#: cinder/volume/manager.py:161
+#, python-format
+msgid "volume %s: deleting"
+msgstr "volumen %s: eliminando"
+
+#: cinder/volume/manager.py:164
+#, python-format
+msgid "volume %s: volume is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:176
+#, python-format
+msgid "volume %s: deleted successfully"
+msgstr "volumen %s: eliminado satisfactoriamente"
+
+#: cinder/volume/manager.py:183
+#, python-format
+msgid "snapshot %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:187
+#, python-format
+msgid "snapshot %(snap_name)s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:202
+#, python-format
+msgid "snapshot %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:211
+#, python-format
+msgid "snapshot %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:214
+#, fuzzy, python-format
+msgid "snapshot %s: snapshot is busy"
+msgstr "instancia %s: creando snapshot"
+
+#: cinder/volume/manager.py:226
+#, python-format
+msgid "snapshot %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:310
+msgid "Checking volume capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:314
+#, python-format
+msgid "New capabilities found: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:325
+msgid "Clear capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:329
+#, python-format
+msgid "Notification {%s} received"
+msgstr ""
+
+#: cinder/volume/netapp.py:79
+#, python-format
+msgid "API %(name)sfailed: %(reason)s"
+msgstr ""
+
+#: cinder/volume/netapp.py:109
+#, python-format
+msgid "%s is not set"
+msgstr ""
+
+#: cinder/volume/netapp.py:128
+#, fuzzy
+msgid "Connected to DFM server"
+msgstr "Reconectado a la cola"
+
+#: cinder/volume/netapp.py:159
+#, fuzzy, python-format
+msgid "Job failed: %s"
+msgstr "No encontrado: %s"
+
+#: cinder/volume/netapp.py:240
+msgid "Failed to provision dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:252
+msgid "No LUN was created by the provision job"
+msgstr ""
+
+#: cinder/volume/netapp.py:261 cinder/volume/netapp.py:433
+#, fuzzy, python-format
+msgid "Failed to find LUN ID for volume %s"
+msgstr "Imposible encontrar SR en VBD %s"
+
+#: cinder/volume/netapp.py:280
+msgid "Failed to remove and delete dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:603 cinder/volume/netapp.py:657
+#, fuzzy, python-format
+msgid "No LUN ID for volume %s"
+msgstr "Imposible encontrar volumen %s"
+
+#: cinder/volume/netapp.py:607 cinder/volume/netapp.py:661
+#, fuzzy, python-format
+msgid "Failed to get LUN details for LUN ID %s"
+msgstr "Fallo al generar metadatos para la ip %s"
+
+#: cinder/volume/netapp.py:614
+#, fuzzy, python-format
+msgid "Failed to get host details for host ID %s"
+msgstr "Fallo al generar metadatos para la ip %s"
+
+#: cinder/volume/netapp.py:620
+#, fuzzy, python-format
+msgid "Failed to get target portal for filer: %s"
+msgstr "Fallo al generar metadatos para la ip %s"
+
+#: cinder/volume/netapp.py:625
+#, fuzzy, python-format
+msgid "Failed to get target IQN for filer: %s"
+msgstr "Fallo al generar metadatos para la ip %s"
+
+#: cinder/volume/san.py:113 cinder/volume/san.py:151
+msgid "Specify san_password or san_private_key"
+msgstr ""
+
+#: cinder/volume/san.py:156
+msgid "san_ip must be set"
+msgstr ""
+
+#: cinder/volume/san.py:320
+#, python-format
+msgid "LUID not found for %(zfs_poolname)s. Output=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:452
+#, python-format
+msgid "CLIQ command returned %s"
+msgstr ""
+
+#: cinder/volume/san.py:458
+#, python-format
+msgid "Malformed response to CLIQ command %(verb)s %(cliq_args)s. Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:466
+#, python-format
+msgid "Error running CLIQ command %(verb)s %(cliq_args)s.  Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:496
+#, python-format
+msgid ""
+"Unexpected number of virtual ips for cluster  %(cluster_name)s. "
+"Result=%(_xml)s"
+msgstr ""
+
+#: cinder/volume/san.py:549
+#, python-format
+msgid "Volume info: %(volume_name)s => %(volume_attributes)s"
+msgstr ""
+
+#: cinder/volume/san.py:594
+msgid "local_path not supported"
+msgstr ""
+
+#: cinder/volume/san.py:626
+#, python-format
+msgid "Could not determine project for volume %s, can't export"
+msgstr ""
+
+#: cinder/volume/san.py:696
+#, python-format
+msgid "Payload for SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:713
+#, python-format
+msgid "Call to json.loads() raised an exception: %s"
+msgstr ""
+
+#: cinder/volume/san.py:718
+#, python-format
+msgid "Results of SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:732
+#, python-format
+msgid "Found solidfire account: %s"
+msgstr ""
+
+#: cinder/volume/san.py:746
+#, python-format
+msgid "solidfire account: %s does not exist, create it..."
+msgstr ""
+
+#: cinder/volume/san.py:804
+msgid "Enter SolidFire create_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:846
+msgid "Leaving SolidFire create_volume"
+msgstr ""
+
+#: cinder/volume/san.py:861
+msgid "Enter SolidFire delete_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:880
+#, python-format
+msgid "Deleting volumeID: %s "
+msgstr ""
+
+#: cinder/volume/san.py:888
+msgid "Leaving SolidFire delete_volume"
+msgstr ""
+
+#: cinder/volume/san.py:891
+msgid "Executing SolidFire ensure_export..."
+msgstr ""
+
+#: cinder/volume/san.py:895
+msgid "Executing SolidFire create_export..."
+msgstr ""
+
+#: cinder/volume/volume_types.py:49 cinder/volume/volume_types.py:108
+msgid "name cannot be None"
+msgstr ""
+
+#: cinder/volume/volume_types.py:96
+msgid "id cannot be None"
+msgstr ""
+
+#: cinder/volume/xensm.py:55
+#, python-format
+msgid "SR name = %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:56
+#, python-format
+msgid "Params: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:60
+#, python-format
+msgid "Failed to create sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:62
+msgid "Create failed"
+msgstr ""
+
+#: cinder/volume/xensm.py:64
+#, python-format
+msgid "SR UUID of new SR is: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:71
+msgid "Failed to update db"
+msgstr ""
+
+#: cinder/volume/xensm.py:80
+#, python-format
+msgid "Failed to introduce sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:91
+#, python-format
+msgid "Failed to reach backend %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:100
+msgid "XenSMDriver requires xenapi connection"
+msgstr ""
+
+#: cinder/volume/xensm.py:110
+msgid "Failed to initiate session"
+msgstr ""
+
+#: cinder/volume/xensm.py:142
+#, python-format
+msgid "Volume will be created in backend - %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:154
+msgid "Failed to update volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:157
+msgid "Unable to create volume"
+msgstr ""
+
+#: cinder/volume/xensm.py:171
+msgid "Failed to delete vdi"
+msgstr ""
+
+#: cinder/volume/xensm.py:177
+msgid "Failed to delete volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:210
+msgid "Failed to find volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:221
+msgid "Failed to find backend in db"
+msgstr ""
+
+#: cinder/volume/nexenta/__init__.py:27
+msgid "Nexenta SA returned the error"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:64
+#, python-format
+msgid "Sending JSON data: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:69
+#, python-format
+msgid "Auto switching to HTTPS connection to %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:75
+msgid "No headers in server response"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:76
+msgid "Bad response from server"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:79
+#, fuzzy, python-format
+msgid "Got response: %s"
+msgstr "respuesta %s"
+
+#: cinder/volume/nexenta/volume.py:96
+#, fuzzy, python-format
+msgid "Volume %s does not exist in Nexenta SA"
+msgstr "el grupo de volumenes %s no existe"
+
+#: cinder/volume/nexenta/volume.py:180
+msgid ""
+"Call to local_path should not happen. Verify that use_local_volumes flag "
+"is turned off."
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:202
+#, python-format
+msgid "Ignored target creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:210
+#, python-format
+msgid "Ignored target group creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:219
+#, python-format
+msgid "Ignored target group member addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:227
+#, python-format
+msgid "Ignored LU creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:237
+#, python-format
+msgid "Ignored LUN mapping entry addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:273
+#, python-format
+msgid ""
+"Got error trying to destroy target group %(target_group)s, assuming it is"
+" already gone: %(exc)s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:280
+#, python-format
+msgid ""
+"Got error trying to delete target %(target)s, assuming it is already "
+"gone: %(exc)s"
+msgstr ""
+
+#~ msgid "Unable to locate account %(account_name) on Solidfire device"
+#~ msgstr ""
+
+#~ msgid "Zone %(zone_id)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Cinder access parameters were not specified."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(id)d could not be found."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(name)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Detected more than one volume with name %(vol_name)"
+#~ msgstr ""
+
+#~ msgid "Detected existing vlan with id %(vlan)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab semaphore \"%(lock)s\" "
+#~ "for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab file lock "
+#~ "\"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Parent group id and group id cannot be same"
+#~ msgstr ""
+
+#~ msgid "No body provided"
+#~ msgstr ""
+
+#~ msgid "Create VSA %(display_name)s of type %(vc_type)s"
+#~ msgstr ""
+
+#~ msgid "Delete VSA with id: %s"
+#~ msgstr ""
+
+#~ msgid "Associate address %(ip)s to VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "Disassociate address from VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "%(obj)s with ID %(id)s not found"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(obj)s with ID %(id)s belongs to "
+#~ "VSA %(own_vsa_id)s and not to VSA "
+#~ "%(vsa_id)s."
+#~ msgstr ""
+
+#~ msgid "Index. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Detail. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Create. vsa_id=%(vsa_id)s, body=%(body)s"
+#~ msgstr ""
+
+#~ msgid "Create volume of %(size)s GB from VSA ID %(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Update %(obj)s with id: %(id)s, changes: %(changes)s"
+#~ msgstr ""
+
+#~ msgid "Delete. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Show. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Index instances for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You cannot run"
+#~ " any more instances of this type."
+#~ msgstr ""
+
+#~ msgid "Going to try to soft delete %s"
+#~ msgstr ""
+
+#~ msgid "No host for instance %s, deleting immediately"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to stop %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to start %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Going to force the deletion of the"
+#~ " vm %(instance_uuid)s, even if it is"
+#~ " deleted"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s did not exist "
+#~ "in the DB, but I will shut "
+#~ "it down anyway using a special "
+#~ "context"
+#~ msgstr ""
+
+#~ msgid "exception terminating the instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "trying to destroy already destroyed instance: %s"
+#~ msgstr "intentando finalizar una instancia que ya había sido finalizada: %s"
+
+#~ msgid ""
+#~ "Instance %(name)s found in database but"
+#~ " not known by hypervisor. Setting "
+#~ "power state to NOSTATE"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Detected instance  with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Destroying instance with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid "SQL connection failed (%(connstring)s). %(attempts)d attempts left."
+#~ msgstr ""
+
+#~ msgid "Can't downgrade without losing data"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_id)s not found"
+#~ msgstr ""
+
+#~ msgid "Network %s has active ports, cannot delete"
+#~ msgstr ""
+
+#~ msgid "No fixed IPs to deallocate for vif %sid"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "AMQP server on %(fl_host)s:%(fl_port)d is "
+#~ "unreachable: %(e)s. Trying again in "
+#~ "%(fl_intv)d seconds."
+#~ msgstr ""
+
+#~ msgid "Unable to connect to AMQP server after %(tries)d tries. Shutting down."
+#~ msgstr ""
+
+#~ msgid "Failed to fetch message from queue: %s"
+#~ msgstr ""
+
+#~ msgid "Initing the Adapter Consumer for %s"
+#~ msgstr ""
+
+#~ msgid "Created \"%(exchange)s\" fanout exchange with \"%(key)s\" routing key"
+#~ msgstr ""
+
+#~ msgid "Exception while processing consumer"
+#~ msgstr ""
+
+#~ msgid "Creating \"%(exchange)s\" fanout exchange"
+#~ msgstr ""
+
+#~ msgid "topic is %s"
+#~ msgstr ""
+
+#~ msgid "message %s"
+#~ msgstr "mensaje %s"
+
+#~ msgid ""
+#~ "Cannot confirm tmpfile at %(ipath)s is"
+#~ " on same shared storage between "
+#~ "%(src)s and %(dest)s."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of memory(host:%(avail)s <= "
+#~ "instance:%(mem_inst)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of disk(host:%(available)s <="
+#~ " instance:%(necessary)s)"
+#~ msgstr ""
+
+#~ msgid "Driver Method %(driver_method)s missing: %(e)s.Reverting to schedule()"
+#~ msgstr ""
+
+#~ msgid "Setting instance %(instance_uuid)s to ERROR state."
+#~ msgstr ""
+
+#~ msgid "_filter_hosts: %(request_spec)s"
+#~ msgstr ""
+
+#~ msgid "Filter hosts for drive type %s"
+#~ msgstr ""
+
+#~ msgid "Host %s has no free capacity. Skip"
+#~ msgstr ""
+
+#~ msgid "Filter hosts: %s"
+#~ msgstr ""
+
+#~ msgid "Must implement host selection mechanism"
+#~ msgstr ""
+
+#~ msgid "Maximum number of hosts selected (%d)"
+#~ msgstr ""
+
+#~ msgid "Selected excessive host %(host)s"
+#~ msgstr ""
+
+#~ msgid "Provision volume %(name)s of size %(size)s GB on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "volume_params %(volume_params)s"
+#~ msgstr ""
+
+#~ msgid "%(i)d: Volume %(name)s"
+#~ msgstr ""
+
+#~ msgid "Attempting to spawn %(num_volumes)d volume(s)"
+#~ msgstr ""
+
+#~ msgid "Error creating volumes"
+#~ msgstr ""
+
+#~ msgid "Non-VSA volume %d"
+#~ msgstr ""
+
+#~ msgid "Spawning volume %(volume_id)s with drive type %(drive_type)s"
+#~ msgstr ""
+
+#~ msgid "Error creating volume"
+#~ msgstr ""
+
+#~ msgid "No capability selected for volume of size %(size)s"
+#~ msgstr ""
+
+#~ msgid "Host %s:"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\tDrive %(qosgrp)-25s: total %(total)2s, "
+#~ "used %(used)2s, free %(free)2s. Available "
+#~ "capacity %(avail)-5s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t LeastUsedHost: Best host: %(best_host)s."
+#~ " (used capacity %(min_used)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t MostAvailCap: Best host: %(best_host)s. "
+#~ "(available %(max_avail)s %(type_str)s)"
+#~ msgstr ""
+
+#~ msgid "(%(nm)s) publish (key: %(routing_key)s) %(message)s"
+#~ msgstr "(%(nm)s) publica (key: %(routing_key)s) %(message)s"
+
+#~ msgid "Publishing to route %s"
+#~ msgstr "Publicando la ruta %s"
+
+#~ msgid "Declaring queue %s"
+#~ msgstr "Declarando cola %s"
+
+#~ msgid "Declaring exchange %s"
+#~ msgstr "Declarando intercambio %s"
+
+#~ msgid "Binding %(queue)s to %(exchange)s with key %(routing_key)s"
+#~ msgstr "Enlazando %(queue)s a %(exchange)s con la llave %(routing_key)s"
+
+#~ msgid "Getting from %(queue)s: %(message)s"
+#~ msgstr "Obtendiendo desde %(queue)s: %(message)s"
+
+#~ msgid "Test: Emulate wrong VSA name. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate DB error. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: user_data = %s"
+#~ msgstr ""
+
+#~ msgid "_create: param=%s"
+#~ msgstr ""
+
+#~ msgid "Host %s"
+#~ msgstr ""
+
+#~ msgid "Test: provision vol %(name)s on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "\t vol=%(vol)s"
+#~ msgstr ""
+
+#~ msgid "Test: VSA update request: vsa_id=%(vsa_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume create: %s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get request: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume update request: id=%(volume_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: success    %(result)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: %(status)s    %(error_info)s"
+#~ msgstr ""
+
+#~ msgid "Unable to get updated status: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "deactivate_node is called for                "
+#~ "node_id = %(id)s node_ip = %(ip)s"
+#~ msgstr ""
+
+#~ msgid "virsh said: %r"
+#~ msgstr "virsh dijo: %r"
+
+#~ msgid "cool, it's a device"
+#~ msgstr "genial, es un dispositivo"
+
+#~ msgid "Unable to read LXC console"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "to xml...\n"
+#~ ":%s "
+#~ msgstr ""
+
+#~ msgid "During wait running, %s disappeared."
+#~ msgstr ""
+
+#~ msgid "Instance %s running successfully."
+#~ msgstr ""
+
+#~ msgid "The nwfilter(%(instance_secgroup_filter_name)s) is not found."
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image verification failed"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): image "
+#~ "verification skipped, no hash stored"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): checking"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in use:"
+#~ " on this node %(local)d local, "
+#~ "%(remote)d on other nodes"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): warning "
+#~ "-- an absent base file is in "
+#~ "use! instances: %(instance_list)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in: on"
+#~ " other nodes (%(remote)d on other "
+#~ "nodes)"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is not in use"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is in use"
+#~ msgstr ""
+
+#~ msgid "Created VM %s..."
+#~ msgstr "Creada VM %s..."
+
+#~ msgid "Created VM %(instance_name)s as %(vm_ref)s."
+#~ msgstr "VM creada %(instance_name)s como %(vm_ref)s."
+
+#~ msgid "Creating a CDROM-specific VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Created a CDROM-specific VBD %(vbd_ref)s"
+#~ "  for VM %(vm_ref)s, VDI %(vdi_ref)s."
+#~ msgstr ""
+
+#~ msgid "No primary VDI found for%(vm_ref)s"
+#~ msgstr ""
+
+#~ msgid "Fetching image %(image)s"
+#~ msgstr ""
+
+#~ msgid "Image Type: %s"
+#~ msgstr ""
+
+#~ msgid "ISO: Found sr possibly containing the ISO image"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to fetch glance image"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s ... "
+#~ msgstr "Creando VBD para VDI %s ... "
+
+#~ msgid "Creating VBD for VDI %s done."
+#~ msgstr "Creando VBF para VDI %s terminado"
+
+#~ msgid "VBD.unplug successful first time."
+#~ msgstr "VBD.Primera desconexión satisfactoria."
+
+#~ msgid "VBD.unplug rejected: retrying..."
+#~ msgstr "VBD. Desconexión rechazada: reintentándolo..."
+
+#~ msgid "Not sleeping anymore!"
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful eventually."
+#~ msgstr "VBD.Finalmente logro desconectar."
+
+#~ msgid "Ignoring XenAPI.Failure in VBD.unplug: %s"
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure %s"
+#~ msgstr ""
+
+#~ msgid "Starting instance %s"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn"
+#~ msgstr "Instancia %s: no se pudo iniciar"
+
+#~ msgid "Instance %s failed to spawn - performing clean-up"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn - Unable to create VM"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Auto configuring disk for instance "
+#~ "%(instance_uuid)s, attempting to resize "
+#~ "partition..."
+#~ msgstr ""
+
+#~ msgid "Invalid value for injected_files: '%s'"
+#~ msgstr ""
+
+#~ msgid "Starting VM %s..."
+#~ msgstr "Iniciando VM %s..."
+
+#~ msgid "Spawning VM %(instance_uuid)s created %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Instance %s: waiting for running"
+#~ msgstr ""
+
+#~ msgid "Instance %s: running"
+#~ msgstr ""
+
+#~ msgid "Resources to remove:%s"
+#~ msgstr ""
+
+#~ msgid "Removing VDI %(vdi_ref)s(uuid:%(vdi_to_remove)s)"
+#~ msgstr ""
+
+#~ msgid "Skipping VDI destroy for %s"
+#~ msgstr ""
+
+#~ msgid "Unable to Snapshot instance %(instance_uuid)s: %(exc)s"
+#~ msgstr ""
+
+#~ msgid "Updating instance '%(instance_uuid)s' progress to %(progress)d"
+#~ msgstr ""
+
+#~ msgid "Resize instance %s complete"
+#~ msgstr ""
+
+#~ msgid "domid changed from %(olddomid)s to %(newdomid)s"
+#~ msgstr ""
+
+#~ msgid "VM %(instance_uuid)s already halted,skipping shutdown..."
+#~ msgstr ""
+
+#~ msgid "Shutting down VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Destroying VDIs for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s using RAW or "
+#~ "VHD, skipping kernel and ramdisk "
+#~ "deletion"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_uuid)s VM destroyed"
+#~ msgstr ""
+
+#~ msgid "Destroying VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Automatically hard rebooting %d"
+#~ msgstr ""
+
+#~ msgid "Instance for migration %d not found, skipping"
+#~ msgstr ""
+
+#~ msgid "injecting network info to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "creating vif(s) for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "Created VIF %(vif_ref)s for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr "Creado el VIF %(vif_ref)s para VM %(vm_ref)s, red %(network_ref)s."
+
+#~ msgid "injecting hostname to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The agent call to %(method)s returned"
+#~ " an invalid response: %(ret)r. VM "
+#~ "id=%(instance_uuid)s; path=%(path)s; args=%(addl_args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "TIMEOUT: The call to %(method)s timed"
+#~ " out. VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "NOT IMPLEMENTED: The call to %(method)s"
+#~ " is not supported by the agent. "
+#~ "VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The call to %(method)s returned an "
+#~ "error: %(e)s. VM id=%(instance_uuid)s; "
+#~ "args=%(args)r"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr "Creando VBD para VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+
+#~ msgid "Error destroying VDI"
+#~ msgstr ""
+
+#~ msgid "\tVolume %s is NOT VSA volume"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s creation - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s succeeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s deletion - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s suceeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s local path call - call discover"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s ensure export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s create export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s remove export - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE remove_export for %s failed"
+#~ msgstr ""
+
+#~ msgid "Failed to retrieve QoS info"
+#~ msgstr ""
+
+#~ msgid "invalid drive data"
+#~ msgstr ""
+
+#~ msgid "drive_name not defined"
+#~ msgstr ""
+
+#~ msgid "invalid drive type name %s"
+#~ msgstr ""
+
+#~ msgid "*** Experimental VSA code ***"
+#~ msgstr ""
+
+#~ msgid "Requested number of VCs (%d) is too high. Setting to default"
+#~ msgstr ""
+
+#~ msgid "Creating VSA: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d %(vsa_name)s: Create "
+#~ "volume %(vol_name)s, %(vol_size)d GB, type "
+#~ "%(vol_type_id)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA status to %(status)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA call"
+#~ msgstr ""
+
+#~ msgid "Adding %(add_cnt)s VCs to VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "Deleting %(del_cnt)s VCs from VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Deleting %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Unable to delete volume %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Forced delete. %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate VSA ID %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Delete instance %(name)s"
+#~ msgstr ""
+
+#~ msgid "Create call received for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Failed to find VSA %(vsa_id)d"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Drive %(vol_id)s created. Status %(status)s"
+#~ msgstr ""
+
+#~ msgid "Drive %(vol_name)s (%(vol_disp_name)s) still in creating phase - wait"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Not all volumes "
+#~ "are created (%(cvol_real)d of %(cvol_exp)d)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Drive %(vol_name)s "
+#~ "(%(vol_disp_name)s) is in %(status)s state"
+#~ msgstr ""
+
+#~ msgid "Failed to update attach status for volume %(vol_name)s. %(ex)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Delete all BE volumes"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Start %(vc_count)d instances"
+#~ msgstr ""
+
diff --git a/cinder/locale/fr/LC_MESSAGES/nova.po b/cinder/locale/fr/LC_MESSAGES/nova.po
new file mode 100644
index 000000000..036363370
--- /dev/null
+++ b/cinder/locale/fr/LC_MESSAGES/nova.po
@@ -0,0 +1,8251 @@
+# French translation for cinder
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the cinder package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version:  cinder\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-04-08 23:04+0000\n"
+"PO-Revision-Date: 2012-04-06 14:54+0000\n"
+"Last-Translator: EmmanuelLeNormand <manu@ubuntu-fr.org>\n"
+"Language-Team: French <fr@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: cinder/context.py:59
+#, python-format
+msgid "Arguments dropped when creating context: %s"
+msgstr ""
+
+#: cinder/context.py:90
+#, python-format
+msgid "read_deleted can only be one of 'no', 'yes' or 'only', not %r"
+msgstr ""
+
+#: cinder/crypto.py:48
+msgid "Filename of root CA"
+msgstr "Nom du fichier contenant la racine de l'autorité de certification"
+
+#: cinder/crypto.py:51
+msgid "Filename of private key"
+msgstr "Nom de fichier de la clé privée"
+
+#: cinder/crypto.py:54
+msgid "Filename of root Certificate Revocation List"
+msgstr "Nom du fichier de la liste de révocation du Certificat Racine"
+
+#: cinder/crypto.py:57
+msgid "Where we keep our keys"
+msgstr "Emplacement de sauvegarde des clefs"
+
+#: cinder/crypto.py:60
+msgid "Where we keep our root CA"
+msgstr "Emplacement de sauvegarde des racines d'autorité de certification"
+
+#: cinder/crypto.py:63
+msgid "Should we use a CA for each project?"
+msgstr "Doit-on utiliser une autorité de certification pour chaque projet ?"
+
+#: cinder/crypto.py:67
+#, python-format
+msgid "Subject for certificate for users, %s for project, user, timestamp"
+msgstr ""
+"Sujet pour les certificats utilisateurs, %s pour le projet, utilisateur, "
+"timestamp"
+
+#: cinder/crypto.py:72
+#, python-format
+msgid "Subject for certificate for projects, %s for project, timestamp"
+msgstr "Sujet de certificat pour projets, %s pour le projet, timestamp"
+
+#: cinder/crypto.py:292
+#, python-format
+msgid "Flags path: %s"
+msgstr "Chemin des propriétés: %s"
+
+#: cinder/exception.py:56
+msgid "Unexpected error while running command."
+msgstr "Erreur imprévue lors de l'éxecution de la commande"
+
+#: cinder/exception.py:59
+#, python-format
+msgid ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+msgstr ""
+"%(description)s\n"
+"Commande : %(cmd)s\n"
+"Valeur retournée : %(exit_code)s\n"
+"Sortie standard : %(stdout)r\n"
+"Sortie d'erreur : %(stderr)r"
+
+#: cinder/exception.py:94
+msgid "DB exception wrapped."
+msgstr ""
+
+#: cinder/exception.py:155
+msgid "An unknown exception occurred."
+msgstr "Une exception inconnue s'est produite."
+
+#: cinder/exception.py:178
+msgid "Failed to decrypt text"
+msgstr "Échec du décryptage du text"
+
+#: cinder/exception.py:182
+msgid "Failed to paginate through images from image service"
+msgstr "Échec de la pagination à travers les images depuis le service d'image"
+
+#: cinder/exception.py:186
+msgid "Virtual Interface creation failed"
+msgstr "La création de l'Interface Virtuelle a échoué"
+
+#: cinder/exception.py:190
+msgid "5 attempts to create virtual interfacewith unique mac address failed"
+msgstr ""
+"Les 5 tentatives de création de l'interface virtuelle avec une adresse "
+"MAC unique ont échoué"
+
+#: cinder/exception.py:195
+msgid "Connection to glance failed"
+msgstr "La connexion à Glance a échoué"
+
+#: cinder/exception.py:199
+msgid "Connection to melange failed"
+msgstr "La connexion à Melange a échoué"
+
+#: cinder/exception.py:203
+msgid "Not authorized."
+msgstr "Non autorisé."
+
+#: cinder/exception.py:208
+msgid "User does not have admin privileges"
+msgstr "L’utilisateur n'a pas les privilèges administrateur"
+
+#: cinder/exception.py:212
+#, python-format
+msgid "Policy doesn't allow %(action)s to be performed."
+msgstr "Le réglage des droits n'autorise pas %(action)s à être effectué(e)(s)"
+
+#: cinder/exception.py:216
+#, fuzzy, python-format
+msgid "Not authorized for image %(image_id)s."
+msgstr "Pas de méthode pour le message : %s"
+
+#: cinder/exception.py:220
+msgid "Unacceptable parameters."
+msgstr "Paramètres inacceptables."
+
+#: cinder/exception.py:225
+msgid "Invalid snapshot"
+msgstr "Snapshot invalide"
+
+#: cinder/exception.py:229
+#, python-format
+msgid "Volume %(volume_id)s is not attached to anything"
+msgstr "Le volume %(volume_id)s n'est lié à rien"
+
+#: cinder/exception.py:233 cinder/api/openstack/compute/contrib/keypairs.py:113
+msgid "Keypair data is invalid"
+msgstr "La paire de clés de donnée n'est pas valide"
+
+#: cinder/exception.py:237
+msgid "Failed to load data into json format"
+msgstr "Échec du chargement des données au format JSON"
+
+#: cinder/exception.py:241
+msgid "The request is invalid."
+msgstr "La requête est invalide."
+
+#: cinder/exception.py:245
+#, python-format
+msgid "Invalid signature %(signature)s for user %(user)s."
+msgstr "La signature %(signature)s est invalide pour l'utilisateur %(user)s."
+
+#: cinder/exception.py:249
+msgid "Invalid input received"
+msgstr "Entrée invalide reçue"
+
+#: cinder/exception.py:253
+#, python-format
+msgid "Invalid instance type %(instance_type)s."
+msgstr "L'instance de type %(instance_type)s est invalide."
+
+#: cinder/exception.py:257
+msgid "Invalid volume type"
+msgstr "Type de volume invalide"
+
+#: cinder/exception.py:261
+msgid "Invalid volume"
+msgstr "Volume invalide"
+
+#: cinder/exception.py:265
+#, python-format
+msgid "Invalid port range %(from_port)s:%(to_port)s. %(msg)s"
+msgstr "La plage de port %(from_port)s:%(to_port)s. %(msg)s est invalide"
+
+#: cinder/exception.py:269
+#, python-format
+msgid "Invalid IP protocol %(protocol)s."
+msgstr "Le protocole IP %(protocol)s est invalide"
+
+#: cinder/exception.py:273
+#, python-format
+msgid "Invalid content type %(content_type)s."
+msgstr "Le type de contenu %(content_type)s est invalide"
+
+#: cinder/exception.py:277
+#, python-format
+msgid "Invalid cidr %(cidr)s."
+msgstr "Le cidr %(cidr)s est invalide"
+
+#: cinder/exception.py:281
+msgid "Invalid reuse of an RPC connection."
+msgstr "Réutilisation invalide d'une connexion RPC"
+
+#: cinder/exception.py:285
+msgid "Invalid Parameter: Unicode is not supported by the current database."
+msgstr ""
+
+#: cinder/exception.py:292
+#, python-format
+msgid "%(err)s"
+msgstr "%(err)s"
+
+#: cinder/exception.py:296
+#, python-format
+msgid ""
+"Cannot perform action '%(action)s' on aggregate %(aggregate_id)s. Reason:"
+" %(reason)s."
+msgstr ""
+"Impossible d'effectuer l'action '%(action)s' sur l'ensemble "
+"%(aggregate_id)s. Raison: %(reason)s."
+
+#: cinder/exception.py:301
+#, python-format
+msgid "Group not valid. Reason: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:305
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot %(method)s while"
+" the instance is in this state."
+msgstr ""
+"L'instance %(instance_uuid)s dans %(attr)s %(state)s. Impossible de "
+"%(method)s pendant que l'instance est dans cet état."
+
+#: cinder/exception.py:310
+#, python-format
+msgid "Instance %(instance_id)s is not running."
+msgstr "L'instance %(instance_id)s  ne fonctionne pas."
+
+#: cinder/exception.py:314
+#, python-format
+msgid "Instance %(instance_id)s is not suspended."
+msgstr "L'instance %(instance_id)s  n'est pas suspendue"
+
+#: cinder/exception.py:318
+#, python-format
+msgid "Instance %(instance_id)s is not in rescue mode"
+msgstr "L'instance %(instance_id)s  n'est pas en mode secours"
+
+#: cinder/exception.py:322
+msgid "Failed to suspend instance"
+msgstr "Échec de la suspension de l'instance"
+
+#: cinder/exception.py:326
+msgid "Failed to resume server"
+msgstr "Échec de la reprise du serveur"
+
+#: cinder/exception.py:330
+msgid "Failed to reboot instance"
+msgstr "Échec du redémarrage de l'instance"
+
+#: cinder/exception.py:334
+#, fuzzy
+msgid "Failed to terminate instance"
+msgstr "Échec du redémarrage de l'instance"
+
+#: cinder/exception.py:338
+msgid "Service is unavailable at this time."
+msgstr "Le service est indisponible actuellement."
+
+#: cinder/exception.py:342
+msgid "Volume service is unavailable at this time."
+msgstr "Le service de volume est indisponible actuellement."
+
+#: cinder/exception.py:346
+msgid "Compute service is unavailable at this time."
+msgstr "Le service de calcul est indisponible actuellement."
+
+#: cinder/exception.py:350
+#, python-format
+msgid "Unable to migrate instance (%(instance_id)s) to current host (%(host)s)."
+msgstr ""
+"Impossible de migrer l'instance (%(instance_id)s) vers l'hôte actuel "
+"(%(host)s)."
+
+#: cinder/exception.py:355
+msgid "Destination compute host is unavailable at this time."
+msgstr "L'hôte destinataire de calcul est indisponible actuellement."
+
+#: cinder/exception.py:359
+msgid "Original compute host is unavailable at this time."
+msgstr "L'hôte original de calcul est indisponible actuellement."
+
+#: cinder/exception.py:363
+msgid "The supplied hypervisor type of is invalid."
+msgstr "Le type de l'hyperviseur fourni n'est pas valide."
+
+#: cinder/exception.py:367
+msgid "The instance requires a newer hypervisor version than has been provided."
+msgstr ""
+"L'instance nécessite une version plus récente de l'hyperviseur que celle "
+"fournie."
+
+#: cinder/exception.py:372
+#, python-format
+msgid ""
+"The supplied disk path (%(path)s) already exists, it is expected not to "
+"exist."
+msgstr ""
+
+#: cinder/exception.py:377
+#, python-format
+msgid "The supplied device path (%(path)s) is invalid."
+msgstr ""
+
+#: cinder/exception.py:381
+#, python-format
+msgid "The supplied device (%(device)s) is busy."
+msgstr ""
+
+#: cinder/exception.py:385
+msgid "Unacceptable CPU info"
+msgstr ""
+
+#: cinder/exception.py:389
+#, python-format
+msgid "%(address)s is not a valid IP v4/6 address."
+msgstr ""
+
+#: cinder/exception.py:393
+#, python-format
+msgid ""
+"VLAN tag is not appropriate for the port group %(bridge)s. Expected VLAN "
+"tag is %(tag)s, but the one associated with the port group is %(pgroup)s."
+msgstr ""
+
+#: cinder/exception.py:399
+#, python-format
+msgid ""
+"vSwitch which contains the port group %(bridge)s is not associated with "
+"the desired physical adapter. Expected vSwitch is %(expected)s, but the "
+"one associated is %(actual)s."
+msgstr ""
+
+#: cinder/exception.py:406
+#, python-format
+msgid "Disk format %(disk_format)s is not acceptable"
+msgstr ""
+
+#: cinder/exception.py:410
+#, python-format
+msgid "Image %(image_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:414
+#, python-format
+msgid "Instance %(instance_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:418
+#, python-format
+msgid "Ec2 id %(ec2_id)s is unacceptable."
+msgstr ""
+
+#: cinder/exception.py:422
+msgid "Resource could not be found."
+msgstr ""
+
+#: cinder/exception.py:427
+#, python-format
+msgid "Required flag %(flag)s not set."
+msgstr ""
+
+#: cinder/exception.py:431
+#, python-format
+msgid "Volume %(volume_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:435
+#, python-format
+msgid "Unable to locate account %(account_name)s on Solidfire device"
+msgstr ""
+
+#: cinder/exception.py:440
+#, python-format
+msgid "Volume not found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:444
+#, python-format
+msgid "Volume %(volume_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:449
+msgid "Zero volume types found."
+msgstr ""
+
+#: cinder/exception.py:453
+#, python-format
+msgid "Volume type %(volume_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:457
+#, python-format
+msgid "Volume type with name %(volume_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:462
+#, python-format
+msgid ""
+"Volume Type %(volume_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:467
+#, python-format
+msgid "Snapshot %(snapshot_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:471
+#, python-format
+msgid "deleting volume %(volume_name)s that has snapshot"
+msgstr ""
+
+#: cinder/exception.py:475
+#, python-format
+msgid "deleting snapshot %(snapshot_name)s that has dependent volumes"
+msgstr ""
+
+#: cinder/exception.py:480
+#, python-format
+msgid "No target id found for volume %(volume_id)s."
+msgstr ""
+
+#: cinder/exception.py:484
+#, python-format
+msgid "No disk at %(location)s"
+msgstr ""
+
+#: cinder/exception.py:488
+#, python-format
+msgid "Could not find a handler for %(driver_type)s volume."
+msgstr ""
+
+#: cinder/exception.py:492
+#, python-format
+msgid "Invalid image href %(image_href)s."
+msgstr ""
+
+#: cinder/exception.py:496
+msgid ""
+"Some images have been stored via hrefs. This version of the api does not "
+"support displaying image hrefs."
+msgstr ""
+
+#: cinder/exception.py:501
+#, python-format
+msgid "Image %(image_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:505
+#, python-format
+msgid "Kernel not found for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:509
+#, python-format
+msgid "User %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:513
+#, python-format
+msgid "Project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:517
+#, python-format
+msgid "User %(user_id)s is not a member of project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:521
+#, python-format
+msgid "Role %(role_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:525
+msgid "Cannot find SR to read/write VDI."
+msgstr ""
+
+#: cinder/exception.py:529
+#, python-format
+msgid "%(req)s is required to create a network."
+msgstr ""
+
+#: cinder/exception.py:533
+#, python-format
+msgid "Network %(network_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:537
+#, python-format
+msgid "Network could not be found for bridge %(bridge)s"
+msgstr ""
+
+#: cinder/exception.py:541
+#, python-format
+msgid "Network could not be found for uuid %(uuid)s"
+msgstr ""
+
+#: cinder/exception.py:545
+#, python-format
+msgid "Network could not be found with cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:549
+#, python-format
+msgid "Network could not be found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:553
+msgid "No networks defined."
+msgstr ""
+
+#: cinder/exception.py:557
+#, python-format
+msgid ""
+"Either Network uuid %(network_uuid)s is not present or is not assigned to"
+" the project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:562
+#, python-format
+msgid "Host is not set to the network (%(network_id)s)."
+msgstr ""
+
+#: cinder/exception.py:566
+#, python-format
+msgid "Network %(network)s has active ports, cannot delete."
+msgstr ""
+
+#: cinder/exception.py:570
+msgid "Could not find the datastore reference(s) which the VM uses."
+msgstr ""
+
+#: cinder/exception.py:574
+#, python-format
+msgid "No fixed IP associated with id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:578
+#, python-format
+msgid "Fixed ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:582
+#, python-format
+msgid "Instance %(instance_id)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:586
+#, python-format
+msgid "Network host %(host)s has zero fixed ips in network %(network_id)s."
+msgstr ""
+
+#: cinder/exception.py:591
+#, python-format
+msgid "Instance %(instance_id)s doesn't have fixed ip '%(ip)s'."
+msgstr ""
+
+#: cinder/exception.py:595
+#, python-format
+msgid "Host %(host)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:599
+#, python-format
+msgid ""
+"Fixed IP address (%(address)s) does not exist in network "
+"(%(network_uuid)s)."
+msgstr ""
+
+#: cinder/exception.py:604
+#, python-format
+msgid "Fixed IP address %(address)s is already in use."
+msgstr ""
+
+#: cinder/exception.py:608
+#, python-format
+msgid "Fixed IP address %(address)s is invalid."
+msgstr ""
+
+#: cinder/exception.py:612
+msgid "Zero fixed ips available."
+msgstr ""
+
+#: cinder/exception.py:616
+msgid "Zero fixed ips could be found."
+msgstr ""
+
+#: cinder/exception.py:620
+#, python-format
+msgid "Floating ip not found for id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:624
+#, python-format
+msgid "The DNS entry %(name)s already exists in domain %(domain)s."
+msgstr ""
+
+#: cinder/exception.py:628
+#, python-format
+msgid "Floating ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:632
+#, python-format
+msgid "Floating ip not found for host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:636
+msgid "Zero floating ips available."
+msgstr ""
+
+#: cinder/exception.py:640
+#, python-format
+msgid "Floating ip %(address)s is associated."
+msgstr ""
+
+#: cinder/exception.py:644
+#, python-format
+msgid "Floating ip %(address)s is not associated."
+msgstr ""
+
+#: cinder/exception.py:648
+msgid "Zero floating ips exist."
+msgstr ""
+
+#: cinder/exception.py:652
+#, python-format
+msgid "Interface %(interface)s not found."
+msgstr ""
+
+#: cinder/exception.py:656
+#, python-format
+msgid "Keypair %(name)s not found for user %(user_id)s"
+msgstr ""
+
+#: cinder/exception.py:660
+#, python-format
+msgid "Certificate %(certificate_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:664
+#, python-format
+msgid "Service %(service_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:668
+#, python-format
+msgid "Host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:672
+#, python-format
+msgid "Compute host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:676
+#, python-format
+msgid "Could not find binary %(binary)s on host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:680
+#, python-format
+msgid "Auth token %(token)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:684
+#, python-format
+msgid "Access Key %(access_key)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:688
+msgid "Quota could not be found"
+msgstr ""
+
+#: cinder/exception.py:692
+#, python-format
+msgid "Quota for project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:696
+#, python-format
+msgid "Quota class %(class_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:700
+#, python-format
+msgid "Security group %(security_group_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:704
+#, python-format
+msgid "Security group %(security_group_id)s not found for project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:709
+#, python-format
+msgid "Security group with rule %(rule_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:713
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is already associated with the "
+"instance %(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:718
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is not associated with the instance "
+"%(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:723
+#, python-format
+msgid "Migration %(migration_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:727
+#, python-format
+msgid "Migration not found for instance %(instance_id)s with status %(status)s."
+msgstr ""
+
+#: cinder/exception.py:732
+#, python-format
+msgid "Console pool %(pool_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:736
+#, python-format
+msgid ""
+"Console pool of type %(console_type)s for compute host %(compute_host)s "
+"on proxy host %(host)s not found."
+msgstr ""
+
+#: cinder/exception.py:742
+#, python-format
+msgid "Console %(console_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:746
+#, python-format
+msgid "Console for instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:750
+#, python-format
+msgid ""
+"Console for instance %(instance_id)s in pool %(pool_id)s could not be "
+"found."
+msgstr ""
+
+#: cinder/exception.py:755
+#, python-format
+msgid "Invalid console type %(console_type)s "
+msgstr ""
+
+#: cinder/exception.py:759
+msgid "Zero instance types found."
+msgstr ""
+
+#: cinder/exception.py:763
+#, python-format
+msgid "Instance type %(instance_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:767
+#, python-format
+msgid "Instance type with name %(instance_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:772
+#, python-format
+msgid "Flavor %(flavor_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:776
+#, python-format
+msgid "Cell %(cell_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:780
+#, python-format
+msgid "Scheduler Host Filter %(filter_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:784
+#, python-format
+msgid "Scheduler cost function %(cost_fn_str)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:789
+#, python-format
+msgid "Scheduler weight flag not found: %(flag_name)s"
+msgstr ""
+
+#: cinder/exception.py:793
+#, python-format
+msgid "Instance %(instance_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:798
+#, python-format
+msgid ""
+"Instance Type %(instance_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:803
+msgid "LDAP object could not be found"
+msgstr ""
+
+#: cinder/exception.py:807
+#, python-format
+msgid "LDAP user %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:811
+#, python-format
+msgid "LDAP group %(group_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:815
+#, python-format
+msgid "LDAP user %(user_id)s is not a member of group %(group_id)s."
+msgstr ""
+
+#: cinder/exception.py:819
+#, python-format
+msgid "File %(file_path)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:823
+msgid "Zero files could be found."
+msgstr ""
+
+#: cinder/exception.py:827
+#, python-format
+msgid "Virtual switch associated with the network adapter %(adapter)s not found."
+msgstr ""
+
+#: cinder/exception.py:832
+#, python-format
+msgid "Network adapter %(adapter)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:836
+#, python-format
+msgid "Class %(class_name)s could not be found: %(exception)s"
+msgstr ""
+
+#: cinder/exception.py:840
+msgid "Action not allowed."
+msgstr ""
+
+#: cinder/exception.py:844
+#, python-format
+msgid "Unable to use global role %(role_id)s"
+msgstr ""
+
+#: cinder/exception.py:848
+msgid "Rotation is not allowed for snapshots"
+msgstr ""
+
+#: cinder/exception.py:852
+msgid "Rotation param is required for backup image_type"
+msgstr ""
+
+#: cinder/exception.py:861
+#, python-format
+msgid "Key pair %(key_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:865
+#, python-format
+msgid "User %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:869
+#, python-format
+msgid "LDAP user %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:873
+#, python-format
+msgid "LDAP group %(group)s already exists."
+msgstr ""
+
+#: cinder/exception.py:877
+#, python-format
+msgid "User %(uid)s is already a member of the group %(group_dn)s"
+msgstr "L'utilisateur %(uid)s est déjà membre du groupe %(group_dn)s"
+
+#: cinder/exception.py:882
+#, python-format
+msgid "Project %(project)s already exists."
+msgstr ""
+
+#: cinder/exception.py:886
+#, python-format
+msgid "Instance %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:890
+#, python-format
+msgid "Instance Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:894
+#, python-format
+msgid "Volume Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:898
+#, python-format
+msgid "%(path)s is on shared storage: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:902
+msgid "Migration error"
+msgstr ""
+
+#: cinder/exception.py:906
+#, python-format
+msgid "Malformed message body: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:910
+#, python-format
+msgid "Could not find config at %(path)s"
+msgstr ""
+
+#: cinder/exception.py:914
+#, python-format
+msgid "Could not load paste app '%(name)s' from %(path)s"
+msgstr ""
+
+#: cinder/exception.py:918
+msgid "When resizing, instances must change size!"
+msgstr ""
+
+#: cinder/exception.py:922
+msgid "Image is larger than instance type allows"
+msgstr ""
+
+#: cinder/exception.py:926
+msgid "1 or more Zones could not complete the request"
+msgstr ""
+
+#: cinder/exception.py:930
+msgid "Instance type's memory is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:934
+msgid "Instance type's disk is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:938
+#, python-format
+msgid "Insufficient free memory on compute node to start %(uuid)s."
+msgstr ""
+
+#: cinder/exception.py:942
+msgid "Could not fetch bandwidth/cpu/disk metrics for this host."
+msgstr ""
+
+#: cinder/exception.py:946
+#, python-format
+msgid "No valid host was found. %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:950
+#, python-format
+msgid "Host %(host)s is not up or doesn't exist."
+msgstr ""
+
+#: cinder/exception.py:954
+msgid "Quota exceeded"
+msgstr ""
+
+#: cinder/exception.py:958
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: action '%(action)s' caused an error: "
+"%(reason)s."
+msgstr ""
+
+#: cinder/exception.py:963
+#, python-format
+msgid "Aggregate %(aggregate_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:967
+#, python-format
+msgid "Aggregate %(aggregate_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:971
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:975
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:980
+#, python-format
+msgid "Host %(host)s already member of another aggregate."
+msgstr ""
+
+#: cinder/exception.py:984
+#, python-format
+msgid "Aggregate %(aggregate_id)s already has host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:988
+#, python-format
+msgid "Detected more than one volume with name %(vol_name)s"
+msgstr ""
+
+#: cinder/exception.py:992
+#, python-format
+msgid "Cannot create volume_type with name %(name)s and specs %(extra_specs)s"
+msgstr ""
+
+#: cinder/exception.py:997
+msgid "Unable to create instance type"
+msgstr ""
+
+#: cinder/exception.py:1001
+msgid "Bad response from SolidFire API"
+msgstr ""
+
+#: cinder/exception.py:1005
+#, python-format
+msgid "Error in SolidFire API response: status=%(status)s"
+msgstr ""
+
+#: cinder/exception.py:1009
+#, python-format
+msgid "Error in SolidFire API response: data=%(data)s"
+msgstr ""
+
+#: cinder/exception.py:1013
+#, python-format
+msgid "Detected existing vlan with id %(vlan)d"
+msgstr ""
+
+#: cinder/exception.py:1017
+#, python-format
+msgid "Instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:1021
+#, python-format
+msgid "Invalid id: %(val)s (expecting \"i-...\")."
+msgstr ""
+
+#: cinder/exception.py:1025
+#, fuzzy, python-format
+msgid "Could not fetch image %(image)s"
+msgstr "Impossible de lier l'image au loopback : %s"
+
+#: cinder/log.py:315
+#, python-format
+msgid "syslog facility must be one of: %s"
+msgstr ""
+
+#: cinder/manager.py:146
+#, python-format
+msgid "Skipping %(full_task_name)s, %(ticks_to_skip)s ticks left until next run"
+msgstr ""
+
+#: cinder/manager.py:152
+#, python-format
+msgid "Running periodic task %(full_task_name)s"
+msgstr ""
+
+#: cinder/manager.py:159
+#, python-format
+msgid "Error during %(full_task_name)s: %(e)s"
+msgstr ""
+
+#: cinder/manager.py:203
+msgid "Notifying Schedulers of capabilities ..."
+msgstr ""
+
+#: cinder/policy.py:30
+msgid "JSON file representing policy"
+msgstr ""
+
+#: cinder/policy.py:33
+msgid "Rule checked when requested rule is not found"
+msgstr ""
+
+#: cinder/service.py:137
+msgid "SIGTERM received"
+msgstr ""
+
+#: cinder/service.py:177
+#, python-format
+msgid "Starting %(topic)s node (version %(vcs_string)s)"
+msgstr "Démarrage du noeud %(topic)s (version %(vcs_string)s)"
+
+#: cinder/service.py:195
+#, python-format
+msgid "Creating Consumer connection for Service %s"
+msgstr ""
+
+#: cinder/service.py:282
+msgid "Service killed that has no database entry"
+msgstr "Service détruit sans entrée dans la base de données"
+
+#: cinder/service.py:319
+msgid "The service database object disappeared, Recreating it."
+msgstr "L'objet du service de base de données à disparru, re-création en cours."
+
+#: cinder/service.py:334
+msgid "Recovered model server connection!"
+msgstr "Récupération du modelle de connexion serveur terminée!"
+
+#: cinder/service.py:340
+msgid "model server went away"
+msgstr "Le modèle de serveur à disparu"
+
+#: cinder/service.py:433
+msgid "Full set of FLAGS:"
+msgstr "Ensemble de propriétés complet :"
+
+#: cinder/service.py:440
+#, python-format
+msgid "%(flag)s : FLAG SET "
+msgstr ""
+
+#: cinder/utils.py:79
+#, python-format
+msgid "Inner Exception: %s"
+msgstr "Exception interne : %s"
+
+#: cinder/utils.py:165
+#, python-format
+msgid "Fetching %s"
+msgstr "Récupèration de %s"
+
+#: cinder/utils.py:210
+#, python-format
+msgid "Got unknown keyword args to utils.execute: %r"
+msgstr ""
+
+#: cinder/utils.py:220
+#, python-format
+msgid "Running cmd (subprocess): %s"
+msgstr "Execution de la commande (sous-processus) : %s"
+
+#: cinder/utils.py:236 cinder/utils.py:315
+#, python-format
+msgid "Result was %s"
+msgstr "Le résultat était %s"
+
+#: cinder/utils.py:249
+#, python-format
+msgid "%r failed. Retrying."
+msgstr ""
+
+#: cinder/utils.py:291
+#, python-format
+msgid "Running cmd (SSH): %s"
+msgstr "Execution de la cmd (SSH): %s"
+
+#: cinder/utils.py:293
+msgid "Environment not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:297
+msgid "process_input not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:352
+#, python-format
+msgid "debug in callback: %s"
+msgstr "Debug dans le rappel : %s"
+
+#: cinder/utils.py:534
+#, python-format
+msgid "Link Local address is not found.:%s"
+msgstr "L'adresse du lien local n'a pas été trouvé :%s"
+
+#: cinder/utils.py:537
+#, python-format
+msgid "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+msgstr "Impossible de trouver l'IP du lien local de %(interface)s :%(ex)s"
+
+#: cinder/utils.py:648
+#, python-format
+msgid "Invalid backend: %s"
+msgstr "Backend invalide : %s"
+
+#: cinder/utils.py:659
+#, python-format
+msgid "backend %s"
+msgstr "backend %s"
+
+#: cinder/utils.py:709
+msgid "in looping call"
+msgstr ""
+
+#: cinder/utils.py:927
+#, python-format
+msgid "Attempting to grab semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:931
+#, python-format
+msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:935
+#, python-format
+msgid "Attempting to grab file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:942
+#, python-format
+msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:1001
+#, python-format
+msgid "Found sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1008
+#, python-format
+msgid "Cleaned sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1023
+#, python-format
+msgid "Found lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1028
+#, python-format
+msgid "Cleaned lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1138
+#, python-format
+msgid "Expected object of type: %s"
+msgstr ""
+
+#: cinder/utils.py:1169
+#, python-format
+msgid "Invalid server_string: %s"
+msgstr ""
+
+#: cinder/utils.py:1298
+#, python-format
+msgid "timefunc: '%(name)s' took %(total_time).2f secs"
+msgstr ""
+
+#: cinder/utils.py:1330
+msgid "Original exception being dropped"
+msgstr ""
+
+#: cinder/utils.py:1461
+#, python-format
+msgid "Class %(fullname)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1463
+#, python-format
+msgid "Class %(fullname)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1495
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1497
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1681
+#, python-format
+msgid "Could not remove tmpdir: %s"
+msgstr ""
+
+#: cinder/wsgi.py:97
+#, python-format
+msgid "Started %(name)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:108
+msgid "Stopping WSGI server."
+msgstr ""
+
+#: cinder/wsgi.py:111
+msgid "Stopping raw TCP server."
+msgstr ""
+
+#: cinder/wsgi.py:117
+#, python-format
+msgid "Starting TCP server %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:133
+msgid "WSGI server has stopped."
+msgstr ""
+
+#: cinder/wsgi.py:211
+msgid "You must implement __call__"
+msgstr "Vous devez implémenter __call__"
+
+#: cinder/api/direct.py:218
+msgid "not available"
+msgstr "non disponible"
+
+#: cinder/api/direct.py:299
+#, python-format
+msgid "Returned non-serializeable type: %s"
+msgstr ""
+
+#: cinder/api/sizelimit.py:51
+msgid "Request is too large."
+msgstr ""
+
+#: cinder/api/validator.py:142
+#, python-format
+msgid "%(key)s with value %(value)s failed validator  %(validator)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:73
+#, python-format
+msgid "%(code)s: %(message)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:95
+#, python-format
+msgid "FaultWrapper: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:170
+msgid "Too many failed authentications."
+msgstr "Trop d'erreur d'authentification"
+
+#: cinder/api/ec2/__init__.py:180
+#, python-format
+msgid ""
+"Access key %(access_key)s has had %(failures)d failed authentications and"
+" will be locked out for %(lock_mins)d minutes."
+msgstr ""
+"La clef d'accès %(access_key)s a rencontrée %(failures)d echecs "
+"d'authentification et sera par conséquent vérouillée pour %(lock_mins)d "
+"minutes."
+
+#: cinder/api/ec2/__init__.py:267
+msgid "Signature not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:271
+msgid "Access key not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:306 cinder/api/ec2/__init__.py:319
+msgid "Failure communicating with keystone"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:388
+#, python-format
+msgid "Authentication Failure: %s"
+msgstr "Echec d'authentification : %s"
+
+#: cinder/api/ec2/__init__.py:404
+#, python-format
+msgid "Authenticated Request For %(uname)s:%(pname)s)"
+msgstr "Requête authentifiée pour : %(uname)s:%(pname)s)"
+
+#: cinder/api/ec2/__init__.py:435
+#, python-format
+msgid "action: %s"
+msgstr "action: %s"
+
+#: cinder/api/ec2/__init__.py:437
+#, python-format
+msgid "arg: %(key)s\t\tval: %(value)s"
+msgstr "arg: %(key)s\t\tval: %(value)s"
+
+#: cinder/api/ec2/__init__.py:512
+#, python-format
+msgid "Unauthorized request for controller=%(controller)s and action=%(action)s"
+msgstr ""
+"Requête non authorisé pour le controlleur=%(controller)s et "
+"l'action=%(action)s"
+
+#: cinder/api/ec2/__init__.py:584
+#, python-format
+msgid "InstanceNotFound raised: %s"
+msgstr "\"Instance non trouvée\" remontée : %s"
+
+#: cinder/api/ec2/__init__.py:590
+#, python-format
+msgid "VolumeNotFound raised: %s"
+msgstr "\"Volume non trouvé\" remonté : %s"
+
+#: cinder/api/ec2/__init__.py:596
+#, python-format
+msgid "SnapshotNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:602
+#, python-format
+msgid "NotFound raised: %s"
+msgstr "\"Non trouvé\" remonté : %s"
+
+#: cinder/api/ec2/__init__.py:605
+#, python-format
+msgid "EC2APIError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:613
+#, python-format
+msgid "KeyPairExists raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:617
+#, python-format
+msgid "InvalidParameterValue raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:621
+#, python-format
+msgid "InvalidPortRange raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:625
+#, python-format
+msgid "NotAuthorized raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:629
+#, python-format
+msgid "InvalidRequest raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:633
+#, fuzzy, python-format
+msgid "QuotaError raised: %s"
+msgstr "\"Erreur inopinée\" remontée : %s"
+
+#: cinder/api/ec2/__init__.py:637
+#, python-format
+msgid "Invalid id: bogus (expecting \"i-...\"): %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:646
+#, python-format
+msgid "Unexpected error raised: %s"
+msgstr "\"Erreur inopinée\" remontée : %s"
+
+#: cinder/api/ec2/__init__.py:647
+#, python-format
+msgid "Environment: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:649 cinder/api/metadata/handler.py:248
+msgid "An unknown error has occurred. Please try your request again."
+msgstr "Une erreur inopinée à eu lieu. Merci d'essayer votre requête à nouveau."
+
+#: cinder/api/ec2/apirequest.py:64
+#, python-format
+msgid "Unsupported API request: controller = %(controller)s, action = %(action)s"
+msgstr ""
+"Requête API non supportée : controleur = %(controller)s, action = "
+"%(action)s"
+
+#: cinder/api/ec2/cloud.py:336
+#, python-format
+msgid "Create snapshot of volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:372
+#, python-format
+msgid ""
+"Value (%s) for KeyName is invalid. Content limited to Alphanumeric "
+"character, spaces, dashes, and underscore."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:378
+#, python-format
+msgid "Value (%s) for Keyname is invalid. Length exceeds maximum of 255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:382
+#, python-format
+msgid "Create key pair %s"
+msgstr "Création du bi-clef %s"
+
+#: cinder/api/ec2/cloud.py:391
+#, python-format
+msgid "Import key %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:409
+#, python-format
+msgid "Delete key pair %s"
+msgstr "Suppression du bi-clef %s"
+
+#: cinder/api/ec2/cloud.py:551
+#, fuzzy, python-format
+msgid "Invalid CIDR"
+msgstr "Le cidr %(cidr)s est invalide"
+
+#: cinder/api/ec2/cloud.py:639 cinder/api/ec2/cloud.py:693
+#: cinder/api/ec2/cloud.py:800
+msgid "Not enough parameters, need group_name or group_id"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:654
+#: cinder/api/openstack/compute/contrib/security_groups.py:517
+#, python-format
+msgid "Revoke security group ingress %s"
+msgstr "Révocation de groupe de sécurité %s"
+
+#: cinder/api/ec2/cloud.py:666 cinder/api/ec2/cloud.py:719
+#, fuzzy, python-format
+msgid "%s Not enough parameters to build a valid rule"
+msgstr "Pas assez de parametres pour contruire un règle valide."
+
+#: cinder/api/ec2/cloud.py:684 cinder/api/ec2/cloud.py:744
+msgid "No rule for the specified parameters."
+msgstr "Pas de règle pour les paramètres spécifiés."
+
+#: cinder/api/ec2/cloud.py:708
+#: cinder/api/openstack/compute/contrib/security_groups.py:354
+#, python-format
+msgid "Authorize security group ingress %s"
+msgstr "Authorisation du groupe de sécurité %s"
+
+#: cinder/api/ec2/cloud.py:725
+#, fuzzy, python-format
+msgid "%s - This rule already exists in group"
+msgstr "Cette règle existe déjà dans le groupe %s"
+
+#: cinder/api/ec2/cloud.py:769
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Content limited to "
+"Alphanumeric characters, spaces, dashes, and underscores."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:776
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Length exceeds maximum of "
+"255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:780
+#: cinder/api/openstack/compute/contrib/security_groups.py:292
+#, python-format
+msgid "Create Security Group %s"
+msgstr "Création du groupe de sécurité %s"
+
+#: cinder/api/ec2/cloud.py:783
+#, python-format
+msgid "group %s already exists"
+msgstr "le groupe %s existe déjà"
+
+#: cinder/api/ec2/cloud.py:815
+#: cinder/api/openstack/compute/contrib/security_groups.py:245
+#, python-format
+msgid "Delete security group %s"
+msgstr "Suppression du groupe de sécurité %s"
+
+#: cinder/api/ec2/cloud.py:823 cinder/compute/manager.py:1630
+#, python-format
+msgid "Get console output for instance %s"
+msgstr "Récupération de la sortie de la console de l'instance %s"
+
+#: cinder/api/ec2/cloud.py:894
+#, python-format
+msgid "Create volume from snapshot %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:898 cinder/api/openstack/compute/contrib/volumes.py:186
+#: cinder/api/openstack/volume/volumes.py:222
+#, python-format
+msgid "Create volume of %s GB"
+msgstr "Création d'un volume de %s Go"
+
+#: cinder/api/ec2/cloud.py:921
+msgid "Delete Failed"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:931
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(instance_id)s at %(device)s"
+msgstr ""
+"Montage du volume %(volume_id)s sur l'instance %(instance_id)s en tant "
+"que %(device)s"
+
+#: cinder/api/ec2/cloud.py:939
+msgid "Attach Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:952 cinder/api/openstack/compute/contrib/volumes.py:366
+#, python-format
+msgid "Detach volume %s"
+msgstr "Dé-montage du volume %s"
+
+#: cinder/api/ec2/cloud.py:959
+#, fuzzy, python-format
+msgid "Detach Volume Failed."
+msgstr "Dé-montage du volume %s"
+
+#: cinder/api/ec2/cloud.py:984 cinder/api/ec2/cloud.py:1041
+#: cinder/api/ec2/cloud.py:1518 cinder/api/ec2/cloud.py:1533
+#, python-format
+msgid "attribute not supported: %s"
+msgstr "attribut non reconnu : %s"
+
+#: cinder/api/ec2/cloud.py:1107
+#, python-format
+msgid "vol = %s\n"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1255
+msgid "Allocate address"
+msgstr "Allocation d'adresse"
+
+#: cinder/api/ec2/cloud.py:1267
+#, python-format
+msgid "Release address %s"
+msgstr "Désallocation de l'adresse %s"
+
+#: cinder/api/ec2/cloud.py:1272
+#, python-format
+msgid "Associate address %(public_ip)s to instance %(instance_id)s"
+msgstr "Association de l'adresse %(public_ip)s avec l'instance %(instance_id)s"
+
+#: cinder/api/ec2/cloud.py:1282
+#, python-format
+msgid "Disassociate address %s"
+msgstr "Désassociation de l'adresse %s"
+
+#: cinder/api/ec2/cloud.py:1308
+msgid "Image must be available"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1329
+msgid "Going to start terminating instances"
+msgstr "Début de la destruction d'instance"
+
+#: cinder/api/ec2/cloud.py:1343
+#, python-format
+msgid "Reboot instance %r"
+msgstr "Re-démarrage de l'instance %r"
+
+#: cinder/api/ec2/cloud.py:1354
+msgid "Going to stop instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1365
+msgid "Going to start instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1455
+#, python-format
+msgid "De-registering image %s"
+msgstr "Dé-enregitrement de l'image %s"
+
+#: cinder/api/ec2/cloud.py:1471
+msgid "imageLocation is required"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1490
+#, python-format
+msgid "Registered image %(image_location)s with id %(image_id)s"
+msgstr "Image %(image_location)s enregistré avec l'id %(image_id)s"
+
+#: cinder/api/ec2/cloud.py:1536
+msgid "user or group not specified"
+msgstr "Utilisateur ou groupe non spécifié"
+
+#: cinder/api/ec2/cloud.py:1538
+msgid "only group \"all\" is supported"
+msgstr "Seul le group \"tous\" est supporté"
+
+#: cinder/api/ec2/cloud.py:1540
+msgid "operation_type must be add or remove"
+msgstr ""
+"le type d'opération (operation_type) doit être ajout (add) ou suppression"
+" (remove)"
+
+#: cinder/api/ec2/cloud.py:1542
+#, python-format
+msgid "Updating image %s publicity"
+msgstr "Mis à jour de la publication de l'image %s"
+
+#: cinder/api/ec2/cloud.py:1555
+#, python-format
+msgid "Not allowed to modify attributes for image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1603
+#, python-format
+msgid "Couldn't stop instance with in %d sec"
+msgstr ""
+
+#: cinder/api/metadata/handler.py:246 cinder/api/metadata/handler.py:253
+#, python-format
+msgid "Failed to get metadata for ip: %s"
+msgstr "Impossible de récupérer les méta-donnérs pour l'IP : %s"
+
+#: cinder/api/openstack/__init__.py:43
+#, python-format
+msgid "Caught error: %s"
+msgstr "Erreur interceptée : %s"
+
+#: cinder/api/openstack/__init__.py:45 cinder/api/openstack/wsgi.py:886
+#, python-format
+msgid "%(url)s returned with HTTP %(status)d"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:94
+msgid "Must specify an ExtensionManager class"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:105
+#, python-format
+msgid "Extended resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:130
+#, python-format
+msgid ""
+"Extension %(ext_name)s: Cannot extend resource %(collection)s: No such "
+"resource"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:135
+#, python-format
+msgid "Extension %(ext_name)s extending resource: %(collection)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:90
+#, python-format
+msgid "%(user_id)s could not be found with token '%(token)s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:134
+#, python-format
+msgid "%(user_id)s must be an admin or a member of %(project_id)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:152
+msgid "Authentication requests must be made against a version root (e.g. /v2)."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:167
+#, python-format
+msgid "Could not find %s in request."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:191
+#, python-format
+msgid "Successfully authenticated '%s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:241
+msgid "User not found with provided API key."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:258
+#, python-format
+msgid "Provided API key is valid, but not for user '%(username)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:133 cinder/api/openstack/common.py:167
+msgid "limit param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:136 cinder/api/openstack/common.py:171
+msgid "limit param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:161
+msgid "offset param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:175
+msgid "offset param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:203
+#, python-format
+msgid "marker [%s] not found"
+msgstr ""
+
+#: cinder/api/openstack/common.py:243
+#, python-format
+msgid "href %s does not contain version"
+msgstr ""
+
+#: cinder/api/openstack/common.py:278
+msgid "Image metadata limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/common.py:295
+#, python-format
+msgid "Converting nw_info: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:305
+#, python-format
+msgid "Converted networks: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:338
+#, python-format
+msgid "Cannot '%(action)s' while instance is in %(attr)s %(state)s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:341
+#, python-format
+msgid "Instance is in an invalid state for '%(action)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:421
+msgid "Rejecting snapshot request, snapshots currently disabled"
+msgstr ""
+
+#: cinder/api/openstack/common.py:423
+msgid "Instance snapshots are not permitted at this time."
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:188
+#, python-format
+msgid "Loaded extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:225
+#, python-format
+msgid "Ext name: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:226
+#, python-format
+msgid "Ext alias: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:227
+#, python-format
+msgid "Ext description: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:229
+#, python-format
+msgid "Ext namespace: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:230
+#, python-format
+msgid "Ext updated: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:232
+#, python-format
+msgid "Exception loading extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:246
+#, python-format
+msgid "Loading extension %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:252
+#, python-format
+msgid "Calling extension factory %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:264
+#, python-format
+msgid "Failed to load extension %(ext_factory)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:344
+#, python-format
+msgid "Failed to load extension %(classpath)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:368
+#, python-format
+msgid "Failed to load extension %(ext_name)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:135 cinder/api/openstack/wsgi.py:538
+msgid "cannot understand JSON"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:159
+#: cinder/api/openstack/compute/contrib/hosts.py:86
+msgid "cannot understand XML"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:543
+msgid "too many body keys"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:582
+#, python-format
+msgid "Exception handling resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:586
+#, python-format
+msgid "Fault thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:589
+#, python-format
+msgid "HTTP exception thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:697
+msgid "Unrecognized Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:701
+msgid "No Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:705
+msgid "Empty body provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:816
+#, python-format
+msgid "There is no such action: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:819 cinder/api/openstack/wsgi.py:832
+#: cinder/api/openstack/compute/server_metadata.py:58
+#: cinder/api/openstack/compute/server_metadata.py:76
+#: cinder/api/openstack/compute/server_metadata.py:101
+#: cinder/api/openstack/compute/server_metadata.py:126
+#: cinder/api/openstack/compute/contrib/admin_actions.py:211
+#: cinder/api/openstack/compute/contrib/console_output.py:52
+msgid "Malformed request body"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:829
+msgid "Unsupported Content-Type"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:841
+msgid "Malformed request url"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:889
+#, python-format
+msgid "%(url)s returned a fault: %(e)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:265
+msgid "element is not a child"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:414
+msgid "root element selecting a list"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:739
+#, python-format
+msgid "Template tree mismatch; adding slave %(slavetag)s to master %(mastertag)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:858
+msgid "subclasses must implement construct()!"
+msgstr ""
+
+#: cinder/api/openstack/compute/extensions.py:29
+#: cinder/api/openstack/volume/extensions.py:29
+msgid "Initializing extension manager."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:40
+#: cinder/api/openstack/compute/images.py:146
+#: cinder/api/openstack/compute/images.py:161
+msgid "Image not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:79
+msgid "Incorrect request body format"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:83
+#: cinder/api/openstack/compute/server_metadata.py:80
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:79
+#: cinder/api/openstack/compute/contrib/volumetypes.py:188
+msgid "Request body and URI mismatch"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:86
+#: cinder/api/openstack/compute/server_metadata.py:84
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:82
+#: cinder/api/openstack/compute/contrib/volumetypes.py:191
+msgid "Request body contains too many items"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:111
+msgid "Invalid metadata key"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:74
+msgid "Instance does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:97
+msgid "Instance is not a member of specified network"
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:140
+#, python-format
+msgid ""
+"Only %(value)s %(verb)s request(s) can be made to %(uri)s every "
+"%(unit_string)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:266
+msgid "This request was rate-limited."
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:38
+#: cinder/api/openstack/compute/server_metadata.py:122
+#: cinder/api/openstack/compute/server_metadata.py:159
+msgid "Server does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:141
+#: cinder/api/openstack/compute/server_metadata.py:152
+msgid "Metadata item was not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:425
+#, python-format
+msgid "Invalid server status: %(status)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:433
+msgid "Invalid changes-since value"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:483
+msgid "Personality file limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:485
+msgid "Personality file path too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:487
+msgid "Personality file content too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:501
+msgid "Server name is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:505
+msgid "Server name is an empty string"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:509
+msgid "Server name must be less than 256 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:527
+#, python-format
+msgid "Bad personality format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:530
+msgid "Bad personality format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:535
+#, python-format
+msgid "Personality content for %s cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:550
+#, python-format
+msgid "Bad networks format: network uuid is not in proper format (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:559
+#, python-format
+msgid "Invalid fixed IP address (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:566
+#, python-format
+msgid "Duplicate networks (%s) are not allowed"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:572
+#, python-format
+msgid "Bad network format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:575
+msgid "Bad networks format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:587
+msgid "Userdata content cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:594
+msgid "accessIPv4 is not proper IPv4 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:601
+msgid "accessIPv6 is not proper IPv6 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:633
+msgid "Server name is not defined"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:675
+#: cinder/api/openstack/compute/servers.py:740
+msgid "Invalid flavorRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:737
+msgid "Can not find requested image"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:743
+msgid "Invalid key_name provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:829
+#: cinder/api/openstack/compute/servers.py:849
+msgid "Instance has not been resized."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:835
+#, python-format
+msgid "Error in confirm-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:855
+#, python-format
+msgid "Error in revert-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:868
+msgid "Argument 'type' for reboot is not HARD or SOFT"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:872
+msgid "Missing argument 'type' for reboot"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:885
+#, python-format
+msgid "Error in reboot %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:897
+msgid "Unable to locate requested flavor."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:900
+msgid "Resize requires a change in size."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:924
+msgid "Malformed server entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:931
+msgid "Missing imageRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:940
+msgid "Invalid imageRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:949
+msgid "Missing flavorRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:962
+msgid "No adminPass was specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:966
+#: cinder/api/openstack/compute/servers.py:1144
+msgid "Invalid adminPass"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:980
+msgid "Unable to parse metadata key/value pairs."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:993
+msgid "Resize request has invalid 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:996
+msgid "Resize requests require 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1014
+#: cinder/api/openstack/compute/contrib/aggregates.py:142
+#: cinder/api/openstack/compute/contrib/networks.py:65
+msgid "Invalid request body"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1019
+msgid "Could not parse imageRef from request."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1071
+msgid "Instance could not be found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1074
+msgid "Cannot find image for rebuild"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1103
+msgid "createImage entity requires name attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1112
+#: cinder/api/openstack/compute/contrib/admin_actions.py:238
+msgid "Invalid metadata"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1167
+#, python-format
+msgid "Removing options '%(unk_opt_str)s' from query"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:60
+#, python-format
+msgid "Compute.api::pause %s"
+msgstr "Compute.api::pause %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:77
+#, python-format
+msgid "Compute.api::unpause %s"
+msgstr "Compute.api::unpause %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:94
+#, python-format
+msgid "compute.api::suspend %s"
+msgstr "compute.api::suspend %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:111
+#, python-format
+msgid "compute.api::resume %s"
+msgstr "compute.api::resume %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:127
+#, python-format
+msgid "Error in migrate %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:141
+#, python-format
+msgid "Compute.api::reset_network %s"
+msgstr "Compute.api::reset_network %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:154
+#: cinder/api/openstack/compute/contrib/admin_actions.py:170
+#: cinder/api/openstack/compute/contrib/admin_actions.py:186
+#: cinder/api/openstack/compute/contrib/multinic.py:41
+#: cinder/api/openstack/compute/contrib/rescue.py:44
+msgid "Server not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:157
+#, python-format
+msgid "Compute.api::inject_network_info %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:173
+#, python-format
+msgid "Compute.api::lock %s"
+msgstr "Compute.api::lock %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:189
+#, python-format
+msgid "Compute.api::unlock %s"
+msgstr "Compute.api::unlock %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:219
+#, python-format
+msgid "createBackup entity requires %s attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:223
+msgid "Malformed createBackup entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:229
+msgid "createBackup attribute 'rotation' must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:244
+#: cinder/api/openstack/compute/contrib/console_output.py:47
+#: cinder/api/openstack/compute/contrib/console_output.py:59
+#: cinder/api/openstack/compute/contrib/consoles.py:49
+#: cinder/api/openstack/compute/contrib/consoles.py:60
+#: cinder/api/openstack/compute/contrib/server_action_list.py:49
+#: cinder/api/openstack/compute/contrib/server_diagnostics.py:47
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:38
+msgid "Instance not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:272
+msgid "host and block_migration must be specified."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:284
+#, python-format
+msgid "Live migration of instance %(id)s to host %(host)s failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:76
+#, python-format
+msgid ""
+"Cannot create aggregate with name %(name)s and availability zone "
+"%(avail_zone)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:88
+#, python-format
+msgid "Cannot show aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:114
+#, python-format
+msgid "Cannot update aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:126
+#, python-format
+msgid "Cannot delete aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:139
+#, python-format
+msgid "Aggregates does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:152
+#: cinder/api/openstack/compute/contrib/aggregates.py:158
+#, python-format
+msgid "Cannot add host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:171
+#: cinder/api/openstack/compute/contrib/aggregates.py:175
+#, python-format
+msgid "Cannot remove host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:195
+#, python-format
+msgid "Cannot set metadata %(metadata)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/certificates.py:75
+msgid "Only root certificate can be retrieved."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/cloudpipe.py:146
+msgid ""
+"Unable to claim IP for VPN instances, ensure it isn't running, and try "
+"again in a few minutes"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:44
+msgid "Missing type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:56
+msgid "Invalid type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/disk_config.py:44
+#, python-format
+msgid "%s must be either 'MANUAL' or 'AUTO'."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/extended_server_attributes.py:77
+#: cinder/api/openstack/compute/contrib/extended_status.py:61
+msgid "Server not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:61
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:91
+msgid "Flavor not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:49
+#: cinder/api/openstack/compute/contrib/volumetypes.py:158
+msgid "No Request Body"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:159
+#, python-format
+msgid "No more floating ips in pool %s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:161
+msgid "No more floating ips available."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:201
+#: cinder/api/openstack/compute/contrib/floating_ips.py:230
+#: cinder/api/openstack/compute/contrib/security_groups.py:571
+#: cinder/api/openstack/compute/contrib/security_groups.py:604
+msgid "Missing parameter dict"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:204
+#: cinder/api/openstack/compute/contrib/floating_ips.py:233
+msgid "Address not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:213
+msgid "No fixed ips associated to instance"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:216
+msgid "Associate floating ip failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:144
+#, python-format
+msgid "Invalid status: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:148
+#, fuzzy, python-format
+msgid "Invalid mode: '%s'"
+msgstr "Backend invalide : %s"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:152
+#, python-format
+msgid "Invalid update setting: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:170
+#, python-format
+msgid "Putting host %(host)s in maintenance mode %(mode)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:181
+#, python-format
+msgid "Setting host %(host)s to %(state)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:230
+msgid "Describe-resource is admin only functionality"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:238
+msgid "Host not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:70
+msgid "Keypair name contains unsafe characters"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:95
+msgid "Keypair name must be between 1 and 255 characters long"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:100
+#, python-format
+msgid "Key pair '%s' already exists."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:52
+msgid "Missing 'networkId' argument for addFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:68
+msgid "Missing 'address' argument for removeFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:77
+#, python-format
+msgid "Unable to find address %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:62
+#, python-format
+msgid "Network does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:70
+#, python-format
+msgid "Disassociating network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:74
+#: cinder/api/openstack/compute/contrib/networks.py:91
+#: cinder/api/openstack/compute/contrib/networks.py:101
+msgid "Network not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:87
+#, python-format
+msgid "Showing network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:97
+#, python-format
+msgid "Deleting network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/scheduler_hints.py:41
+msgid "Malformed scheduler_hints attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:222
+msgid "Security group id should be integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:243
+#, fuzzy, python-format
+msgid "Security group is still in use"
+msgstr "Révocation de groupe de sécurité %s"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:295
+#, python-format
+msgid "Security group %s already exists"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:315
+#, python-format
+msgid "Security group %s is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:318
+#, python-format
+msgid "Security group %s cannot be empty."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:321
+#, python-format
+msgid "Security group %s should not be greater than 255 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:348
+msgid "Parent group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:351
+#, python-format
+msgid "Security group (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:369
+msgid "Not enough parameters to build a valid rule."
+msgstr "Pas assez de parametres pour contruire un règle valide."
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:376
+#, python-format
+msgid "This rule already exists in group %s"
+msgstr "Cette règle existe déjà dans le groupe %s"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:414
+msgid "Parent or group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:507
+msgid "Rule id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:510
+#, python-format
+msgid "Rule (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:574
+#: cinder/api/openstack/compute/contrib/security_groups.py:607
+msgid "Security group not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:578
+#: cinder/api/openstack/compute/contrib/security_groups.py:611
+msgid "Security group name cannot be empty"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:45
+#, python-format
+msgid "start instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:54
+#, python-format
+msgid "stop instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:73
+#: cinder/api/openstack/volume/volumes.py:106
+#, python-format
+msgid "vol=%s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:146
+#: cinder/api/openstack/volume/volumes.py:184
+#, python-format
+msgid "Delete volume with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:329
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(server_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:481
+#: cinder/api/openstack/volume/snapshots.py:110
+#, python-format
+msgid "Delete snapshot with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:524
+#: cinder/api/openstack/volume/snapshots.py:150
+#, python-format
+msgid "Create snapshot from volume %s"
+msgstr ""
+
+#: cinder/auth/fakeldap.py:33
+msgid "Attempted to instantiate singleton"
+msgstr "Tentative d'instanciation d'un singleton"
+
+#: cinder/auth/ldapdriver.py:650
+#, python-format
+msgid ""
+"Attempted to remove the last member of a group. Deleting the group at %s "
+"instead."
+msgstr ""
+"Tentative de suppression du dernier membre d'un groupe.  Essayez plutôt "
+"de supprimer le group sur %s."
+
+#: cinder/auth/manager.py:298
+#, python-format
+msgid "Looking up user: %r"
+msgstr "Recherche de l'utilisateur : %r"
+
+#: cinder/auth/manager.py:302
+#, python-format
+msgid "Failed authorization for access key %s"
+msgstr "Autorisation refusée pour la clef d'accès %s"
+
+#: cinder/auth/manager.py:308
+#, python-format
+msgid "Using project name = user name (%s)"
+msgstr "Nom de projet utilisé = nom d'utilisateur (%s)"
+
+#: cinder/auth/manager.py:315
+#, python-format
+msgid "failed authorization: no project named %(pjid)s (user=%(uname)s)"
+msgstr ""
+"Autorisation refusée : pas de projet nommé %(pjid)s "
+"(utilisateur=%(uname)s)"
+
+#: cinder/auth/manager.py:324
+#, python-format
+msgid ""
+"Failed authorization: user %(uname)s not admin and not member of project "
+"%(pjname)s"
+msgstr ""
+"Autorisation refusée : utilisateur %(uname)s n'est ni admin ni membre du "
+"projet %(pjname)s"
+
+#: cinder/auth/manager.py:331 cinder/auth/manager.py:343
+#, python-format
+msgid "user.secret: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:332 cinder/auth/manager.py:344
+#, python-format
+msgid "expected_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:333 cinder/auth/manager.py:345
+#, python-format
+msgid "signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:335 cinder/auth/manager.py:357
+#, python-format
+msgid "Invalid signature for user %s"
+msgstr "Signature non valide pour l'utilisateur %s"
+
+#: cinder/auth/manager.py:353
+#, python-format
+msgid "host_only_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:449
+msgid "Must specify project"
+msgstr "Le projet doit être spécifié"
+
+#: cinder/auth/manager.py:490
+#, python-format
+msgid "Adding role %(role)s to user %(uid)s in project %(pid)s"
+msgstr "Ajout du rôle %(role)s à l'utilisateur %(uid)s pour le projet %(pid)s"
+
+#: cinder/auth/manager.py:493
+#, python-format
+msgid "Adding sitewide role %(role)s to user %(uid)s"
+msgstr "Ajout du rôle global %(role)s pour l'utilisateur %(uid)s"
+
+#: cinder/auth/manager.py:519
+#, python-format
+msgid "Removing role %(role)s from user %(uid)s on project %(pid)s"
+msgstr ""
+"Suppression du rôle %(role)s pour l'utilisateur %(uid)s dans le projet "
+"%(pid)s"
+
+#: cinder/auth/manager.py:522
+#, python-format
+msgid "Removing sitewide role %(role)s from user %(uid)s"
+msgstr "Suppression du role global %(role)s pour l'utilisateur %(uid)s"
+
+#: cinder/auth/manager.py:595
+#, python-format
+msgid "Created project %(name)s with manager %(manager_user)s"
+msgstr "Création du projet %(name)s ayant pour manager %(manager_user)s"
+
+#: cinder/auth/manager.py:613
+#, python-format
+msgid "modifying project %s"
+msgstr "modification du projet %s"
+
+#: cinder/auth/manager.py:625
+#, python-format
+msgid "Adding user %(uid)s to project %(pid)s"
+msgstr "Ajout de l'utilisateur %(uid)s au projet %(pid)s"
+
+#: cinder/auth/manager.py:646
+#, python-format
+msgid "Remove user %(uid)s from project %(pid)s"
+msgstr "Suppression de l'utilisateur %(uid)s du projet %(pid)s"
+
+#: cinder/auth/manager.py:676
+#, python-format
+msgid "Deleting project %s"
+msgstr "Suppression du projet %s"
+
+#: cinder/auth/manager.py:734
+#, python-format
+msgid "Created user %(rvname)s (admin: %(rvadmin)r)"
+msgstr "Utilisateur créé %(rvname)s (admin: %(rvadmin)r)"
+
+#: cinder/auth/manager.py:743
+#, python-format
+msgid "Deleting user %s"
+msgstr "Suppression de l'utilisateur %s"
+
+#: cinder/auth/manager.py:753
+#, python-format
+msgid "Access Key change for user %s"
+msgstr "Clef d'accès changée pour l'utilisateur %s"
+
+#: cinder/auth/manager.py:755
+#, python-format
+msgid "Secret Key change for user %s"
+msgstr "Clef secrète changée pour l'utilisateur %s"
+
+#: cinder/auth/manager.py:757
+#, python-format
+msgid "Admin status set to %(admin)r for user %(uid)s"
+msgstr "Statut admin changé en %(admin)r pour l'utilisateur %(uid)s"
+
+#: cinder/auth/manager.py:802
+#, python-format
+msgid "No vpn data for project %s"
+msgstr "Pas de données VPN pour le projet %s"
+
+#: cinder/cloudpipe/pipelib.py:46
+#, fuzzy, python-format
+msgid "Instance type for vpn instances"
+msgstr "L'instance de type %(instance_type)s est invalide."
+
+#: cinder/cloudpipe/pipelib.py:49
+msgid "Template for cloudpipe instance boot script"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:52
+msgid "Network to push into openvpn config"
+msgstr "Réseau à passer à la configuration d'openvpn"
+
+#: cinder/cloudpipe/pipelib.py:55
+msgid "Netmask to push into openvpn config"
+msgstr "Masque réseau à passer à la configuration d'openvpn"
+
+#: cinder/cloudpipe/pipelib.py:107
+#, python-format
+msgid "Launching VPN for %s"
+msgstr "Démarrage du VPN pour %s"
+
+#: cinder/compute/api.py:141
+msgid "No compute host specified"
+msgstr ""
+
+#: cinder/compute/api.py:144
+#, python-format
+msgid "Unable to find host for Instance %s"
+msgstr ""
+
+#: cinder/compute/api.py:192
+#, python-format
+msgid ""
+"Quota exceeded for %(pid)s, tried to set %(num_metadata)s metadata "
+"properties"
+msgstr ""
+
+#: cinder/compute/api.py:203
+#, python-format
+msgid "Quota exceeded for %(pid)s, metadata property key or value too long"
+msgstr ""
+
+#: cinder/compute/api.py:257
+#, fuzzy, python-format
+msgid "Cannot run any more instances of this type."
+msgstr ""
+"Quota d'instances dépassé. Vous ne pouvez éxécuter que %s instances de ce"
+" type de plus."
+
+#: cinder/compute/api.py:259
+#, fuzzy, python-format
+msgid "Can only run %s more instances of this type."
+msgstr ""
+"Quota d'instances dépassé. Vous ne pouvez éxécuter que %s instances de ce"
+" type de plus."
+
+#: cinder/compute/api.py:261
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances. "
+msgstr ""
+
+#: cinder/compute/api.py:310
+msgid "Creating a raw instance"
+msgstr "Création d'une instance raw"
+
+#: cinder/compute/api.py:312
+#, python-format
+msgid "Using Kernel=%(kernel_id)s, Ramdisk=%(ramdisk_id)s"
+msgstr ""
+
+#: cinder/compute/api.py:383
+#, python-format
+msgid "Going to run %s instances..."
+msgstr "Démarrage de %s instances..."
+
+#: cinder/compute/api.py:447
+#, python-format
+msgid "bdm %s"
+msgstr ""
+
+#: cinder/compute/api.py:474
+#, python-format
+msgid "block_device_mapping %s"
+msgstr ""
+
+#: cinder/compute/api.py:591
+#, python-format
+msgid "Sending create to scheduler for %(pid)s/%(uid)s's"
+msgstr ""
+
+#: cinder/compute/api.py:871
+#, fuzzy, python-format
+msgid "Going to try to soft delete instance"
+msgstr "Va essayer d'arrêter %s"
+
+#: cinder/compute/api.py:891
+msgid "No host for instance, deleting immediately"
+msgstr ""
+
+#: cinder/compute/api.py:939
+#, fuzzy, python-format
+msgid "Going to try to terminate instance"
+msgstr "Va essayer d'arrêter %s"
+
+#: cinder/compute/api.py:977
+#, fuzzy, python-format
+msgid "Going to try to stop instance"
+msgstr "Va essayer d'arrêter %s"
+
+#: cinder/compute/api.py:996
+#, fuzzy, python-format
+msgid "Going to try to start instance"
+msgstr "Va essayer d'arrêter %s"
+
+#: cinder/compute/api.py:1000
+#, python-format
+msgid "Instance %(instance_uuid)s is not stopped. (%(vm_state)s"
+msgstr ""
+
+#: cinder/compute/api.py:1071 cinder/volume/api.py:173
+#: cinder/volume/volume_types.py:64
+#, python-format
+msgid "Searching by: %s"
+msgstr ""
+
+#: cinder/compute/api.py:1201
+#, python-format
+msgid "Image type not recognized %s"
+msgstr ""
+
+#: cinder/compute/api.py:1369
+msgid "flavor_id is None. Assuming migration."
+msgstr ""
+
+#: cinder/compute/api.py:1377
+#, python-format
+msgid ""
+"Old instance type %(current_instance_type_name)s,  new instance type "
+"%(new_instance_type_name)s"
+msgstr ""
+
+#: cinder/compute/api.py:1644
+#, python-format
+msgid "multiple fixedips exist, using the first: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:57 cinder/compute/instance_types.py:65
+msgid "create arguments must be positive integers"
+msgstr ""
+
+#: cinder/compute/instance_types.py:76 cinder/volume/volume_types.py:41
+#, python-format
+msgid "DB error: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:86
+#, python-format
+msgid "Instance type %s not found for deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:138
+#, python-format
+msgid "check_instance_lock: decorating: |%s|"
+msgstr "check_instance_lock: décoration : |%s|"
+
+#: cinder/compute/manager.py:140
+#, python-format
+msgid ""
+"check_instance_lock: arguments: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+msgstr ""
+
+#: cinder/compute/manager.py:144
+#, python-format
+msgid "check_instance_lock: locked: |%s|"
+msgstr "check_instance_lock: vérouillé : |%s|"
+
+#: cinder/compute/manager.py:146
+#, python-format
+msgid "check_instance_lock: admin: |%s|"
+msgstr "check_instance_lock: admin : |%s|"
+
+#: cinder/compute/manager.py:151
+#, python-format
+msgid "check_instance_lock: executing: |%s|"
+msgstr "check_instance_lock: exécution : |%s|"
+
+#: cinder/compute/manager.py:155
+#, python-format
+msgid "check_instance_lock: not executing |%s|"
+msgstr "check_instance_lock: ne s'éxécute pas |%s|"
+
+#: cinder/compute/manager.py:201
+#, python-format
+msgid "Unable to load the virtualization driver: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:223
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s has been destroyed from under us while trying "
+"to set it to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:240
+#, python-format
+msgid "Current state is %(drv_state)s, state in DB is %(db_state)s."
+msgstr ""
+
+#: cinder/compute/manager.py:245
+msgid "Rebooting instance after cinder-compute restart."
+msgstr ""
+
+#: cinder/compute/manager.py:255
+msgid "Hypervisor driver does not support firewall rules"
+msgstr ""
+
+#: cinder/compute/manager.py:260
+msgid "Checking state"
+msgstr ""
+
+#: cinder/compute/manager.py:329
+#, python-format
+msgid "Setting up bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:400
+#, python-format
+msgid "Instance %s already deleted from database. Attempting forceful vm deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:406
+#, fuzzy, python-format
+msgid "Exception encountered while terminating the instance %s"
+msgstr "Après l'arrêt d'instances : %s"
+
+#: cinder/compute/manager.py:444
+#, python-format
+msgid "Instance %s not found."
+msgstr ""
+
+#: cinder/compute/manager.py:480
+msgid "Instance has already been created"
+msgstr "L'instance a déjà été crée"
+
+#: cinder/compute/manager.py:523
+#, python-format
+msgid ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:528
+#, python-format
+msgid ""
+"Image '%(image_id)s' size %(size_bytes)d exceeded instance_type allowed "
+"size %(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:538
+msgid "Starting instance..."
+msgstr ""
+
+#: cinder/compute/manager.py:548
+msgid "Skipping network allocation for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:561
+msgid "Instance failed network setup"
+msgstr ""
+
+#: cinder/compute/manager.py:565
+#, python-format
+msgid "Instance network_info: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:578
+msgid "Instance failed block device setup"
+msgstr ""
+
+#: cinder/compute/manager.py:594
+msgid "Instance failed to spawn"
+msgstr ""
+
+#: cinder/compute/manager.py:615
+msgid "Deallocating network for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:672
+#, python-format
+msgid "%(action_str)s instance"
+msgstr ""
+
+#: cinder/compute/manager.py:699
+#, python-format
+msgid "Ignoring DiskNotFound: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:708
+#, python-format
+msgid "terminating bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:742 cinder/compute/manager.py:1328
+#: cinder/compute/manager.py:1416 cinder/compute/manager.py:2501
+#, python-format
+msgid "%s. Setting instance vm_state to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:811
+#, python-format
+msgid ""
+"Cannot rebuild instance [%(instance_uuid)s], because the given image does"
+" not exist."
+msgstr ""
+
+#: cinder/compute/manager.py:816
+#, python-format
+msgid "Cannot rebuild instance [%(instance_uuid)s]: %(exc)s"
+msgstr ""
+
+#: cinder/compute/manager.py:823
+#, python-format
+msgid "Rebuilding instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:876
+#, python-format
+msgid "Rebooting instance %s"
+msgstr "Redémarrage de l'instance %s"
+
+#: cinder/compute/manager.py:891
+#, python-format
+msgid ""
+"trying to reboot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:933
+#, python-format
+msgid "instance %s: snapshotting"
+msgstr "instance %s: création d'un instantané (snapshot)"
+
+#: cinder/compute/manager.py:939
+#, python-format
+msgid ""
+"trying to snapshot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:995
+#, python-format
+msgid "Found %(num_images)d images (rotation: %(rotation)d)"
+msgstr ""
+
+#: cinder/compute/manager.py:1001
+#, python-format
+msgid "Rotating out %d backups"
+msgstr ""
+
+#: cinder/compute/manager.py:1005
+#, python-format
+msgid "Deleting image %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1035
+#, python-format
+msgid "Failed to set admin password. Instance %s is not running"
+msgstr ""
+
+#: cinder/compute/manager.py:1041
+#, python-format
+msgid "Instance %s: Root password set"
+msgstr ""
+
+#: cinder/compute/manager.py:1050
+msgid "set_admin_password is not implemented by this driver."
+msgstr ""
+
+#: cinder/compute/manager.py:1064
+msgid "Error setting admin password"
+msgstr ""
+
+#: cinder/compute/manager.py:1079
+#, python-format
+msgid ""
+"trying to inject a file into a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1084
+#, python-format
+msgid "instance %(instance_uuid)s: injecting file to %(path)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1098
+#, python-format
+msgid ""
+"trying to update agent on a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1103
+#, python-format
+msgid "instance %(instance_uuid)s: updating agent to %(url)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1116
+#, python-format
+msgid "instance %s: rescuing"
+msgstr "instance %s: récupération"
+
+#: cinder/compute/manager.py:1141
+#, python-format
+msgid "instance %s: unrescuing"
+msgstr "instance %s: dé-récupération"
+
+#: cinder/compute/manager.py:1270
+msgid "destination same as source!"
+msgstr ""
+
+#: cinder/compute/manager.py:1287
+#, python-format
+msgid "instance %s: migrating"
+msgstr ""
+
+#: cinder/compute/manager.py:1471
+#, python-format
+msgid "instance %s: pausing"
+msgstr "instance %s: mise en pause"
+
+#: cinder/compute/manager.py:1489
+#, python-format
+msgid "instance %s: unpausing"
+msgstr "instance %s: reprise après pause"
+
+#: cinder/compute/manager.py:1525
+#, python-format
+msgid "instance %s: retrieving diagnostics"
+msgstr "instance %s: récupération des diagnostiques"
+
+#: cinder/compute/manager.py:1534
+#, python-format
+msgid "instance %s: suspending"
+msgstr "instance %s: suspension"
+
+#: cinder/compute/manager.py:1556
+#, python-format
+msgid "instance %s: resuming"
+msgstr "instance %s: reprise après suspension"
+
+#: cinder/compute/manager.py:1579
+#, python-format
+msgid "instance %s: locking"
+msgstr "instance %s: vérrouillage"
+
+#: cinder/compute/manager.py:1588
+#, python-format
+msgid "instance %s: unlocking"
+msgstr "instance %s: déverrouillage"
+
+#: cinder/compute/manager.py:1596
+#, python-format
+msgid "instance %s: getting locked state"
+msgstr "instance %s: récupération de l'état de vérouillage"
+
+#: cinder/compute/manager.py:1606
+#, python-format
+msgid "instance %s: reset network"
+msgstr "instance %s: redémarrage du réseau"
+
+#: cinder/compute/manager.py:1614
+#, python-format
+msgid "instance %s: inject network info"
+msgstr ""
+
+#: cinder/compute/manager.py:1618
+#, python-format
+msgid "network_info to inject: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:1655
+#, python-format
+msgid "instance %s: getting vnc console"
+msgstr ""
+
+#: cinder/compute/manager.py:1685
+#, python-format
+msgid "Booting with volume %(volume_id)s at %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1703
+#, python-format
+msgid ""
+"instance %(instance_uuid)s: attaching volume %(volume_id)s to "
+"%(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1705
+#, python-format
+msgid "Attaching volume %(volume_id)s to %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1714
+#, fuzzy, python-format
+msgid "instance %(instance_uuid)s: attach failed %(mountpoint)s, removing"
+msgstr "L'instance %(instance_id)s  n'est pas en mode secours"
+
+#: cinder/compute/manager.py:1724
+#, python-format
+msgid "Attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1752
+#, python-format
+msgid "Detach volume %(volume_id)s from mountpoint %(mp)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1756
+#, python-format
+msgid "Detaching volume from unknown instance %s"
+msgstr "Démontage de volume d'une instance inconnue %s"
+
+#: cinder/compute/manager.py:1822
+#, python-format
+msgid ""
+"Creating tmpfile %s to notify to other compute nodes that they should "
+"mount the same storage."
+msgstr ""
+
+#: cinder/compute/manager.py:1884
+msgid "Instance has no volume."
+msgstr ""
+
+#: cinder/compute/manager.py:1916
+#, python-format
+msgid "plug_vifs() failed %(cnt)d.Retry up to %(max_retry)d for %(hostname)s."
+msgstr ""
+
+#: cinder/compute/manager.py:1973
+#, python-format
+msgid "Pre live migration failed at  %(dest)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2000
+msgid "post_live_migration() is started.."
+msgstr ""
+
+#: cinder/compute/manager.py:2030
+msgid "No floating_ip found"
+msgstr ""
+
+#: cinder/compute/manager.py:2038
+msgid "No floating_ip found."
+msgstr ""
+
+#: cinder/compute/manager.py:2040
+#, python-format
+msgid ""
+"Live migration: Unexpected error: cannot inherit floating ip.\n"
+"%(e)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2073
+#, python-format
+msgid "Migrating instance to %(dest)s finished successfully."
+msgstr ""
+
+#: cinder/compute/manager.py:2075
+msgid ""
+"You may see the error \"libvirt: QEMU error: Domain not found: no domain "
+"with matching name.\" This error can be safely ignored."
+msgstr ""
+
+#: cinder/compute/manager.py:2090
+msgid "Post operation of migraton started"
+msgstr ""
+
+#: cinder/compute/manager.py:2226
+#, python-format
+msgid "Updated the info_cache for instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:2255
+msgid "Updating bandwidth usage cache"
+msgstr ""
+
+#: cinder/compute/manager.py:2277
+msgid "Updating host status"
+msgstr ""
+
+#: cinder/compute/manager.py:2305
+#, python-format
+msgid ""
+"Found %(num_db_instances)s in the database and %(num_vm_instances)s on "
+"the hypervisor."
+msgstr ""
+
+#: cinder/compute/manager.py:2331
+#, python-format
+msgid ""
+"During the sync_power process the instance %(uuid)s has moved from host "
+"%(src)s to host %(dst)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2344
+#, python-format
+msgid ""
+"Instance %s is in the process of migrating to this host. Wait next "
+"sync_power cycle before setting power state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2350
+msgid ""
+"Instance found in database but not known by hypervisor. Setting power "
+"state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2380
+msgid "FLAGS.reclaim_instance_interval <= 0, skipping..."
+msgstr ""
+
+#: cinder/compute/manager.py:2392
+msgid "Reclaiming deleted instance"
+msgstr ""
+
+#: cinder/compute/manager.py:2458
+#, python-format
+msgid ""
+"Detected instance with name label '%(name)s' which is marked as DELETED "
+"but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2465
+#, python-format
+msgid ""
+"Destroying instance with name label '%(name)s' which is marked as DELETED"
+" but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2472
+#, python-format
+msgid "Unrecognized value '%(action)s' for FLAGS.running_deleted_instance_action"
+msgstr ""
+
+#: cinder/compute/manager.py:2542
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: unrecoverable state during operation on "
+"%(host)s"
+msgstr ""
+
+#: cinder/compute/utils.py:142
+msgid "v4 subnets are required for legacy nw_info"
+msgstr ""
+
+#: cinder/console/manager.py:77 cinder/console/vmrc_manager.py:70
+msgid "Adding console"
+msgstr "Ajout de console"
+
+#: cinder/console/manager.py:97
+#, python-format
+msgid "Tried to remove non-existant console %(console_id)s."
+msgstr "Tentative de suppression d'une console non existante %(console_id)s."
+
+#: cinder/console/vmrc_manager.py:122
+#, python-format
+msgid "Tried to remove non-existent console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:125
+#, python-format
+msgid "Removing console %(console_id)s."
+msgstr ""
+
+#: cinder/console/xvp.py:98
+msgid "Rebuilding xvp conf"
+msgstr "Reconstruction de la configuration xvp"
+
+#: cinder/console/xvp.py:116
+#, python-format
+msgid "Re-wrote %s"
+msgstr "Ré-écriture de %s"
+
+#: cinder/console/xvp.py:121
+msgid "Stopping xvp"
+msgstr "Arrêt xvp"
+
+#: cinder/console/xvp.py:134
+msgid "Starting xvp"
+msgstr "Démarrage xvp"
+
+#: cinder/console/xvp.py:141
+#, python-format
+msgid "Error starting xvp: %s"
+msgstr "Erreur au démarrage xvp : %s"
+
+#: cinder/console/xvp.py:144
+msgid "Restarting xvp"
+msgstr "Re-démarrage xvp"
+
+#: cinder/console/xvp.py:146
+msgid "xvp not running..."
+msgstr "xvp non actif..."
+
+#: cinder/consoleauth/manager.py:63
+#, python-format
+msgid "Deleting Expired Token: (%s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:75
+#, python-format
+msgid "Received Token: %(token)s, %(token_dict)s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:79
+#, python-format
+msgid "Checking Token: %(token)s, %(token_valid)s)"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:57
+msgid "Use of empty request context is deprecated"
+msgstr "L'utilisation d'une requête de contexte vide est dévalué"
+
+#: cinder/db/sqlalchemy/api.py:198
+#, python-format
+msgid "Unrecognized read_deleted value '%s'"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:516 cinder/db/sqlalchemy/api.py:551
+#, python-format
+msgid "No ComputeNode for %(host)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4019 cinder/db/sqlalchemy/api.py:4045
+#, python-format
+msgid "No backend config with id %(sm_backend_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4103
+#, python-format
+msgid "No sm_flavor called %(sm_flavor)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4147
+#, python-format
+msgid "No sm_volume with id %(volume_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:66
+msgid "python-migrate is not installed. Exiting."
+msgstr "python-migrate n'est pas installé. Fin d'éxécution."
+
+#: cinder/db/sqlalchemy/migration.py:78
+msgid "version should be an integer"
+msgstr ""
+
+#: cinder/db/sqlalchemy/session.py:137
+#, python-format
+msgid "SQL connection failed. %s attempts left."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:48
+msgid "interface column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:80
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:54
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:48
+#, python-format
+msgid "Table |%s| not created!"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:87
+msgid "VIF column not added to fixed_ips table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:97
+#, python-format
+msgid "join list for moving mac_addresses |%s|"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:39
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:60
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:99
+msgid "foreign key constraint couldn't be added"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:58
+msgid "foreign key constraint couldn't be dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py:34
+msgid "priority column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:41
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:42
+#: cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py:56
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:68
+msgid "foreign key constraint couldn't be removed"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py:34
+msgid "progress column not added to instances table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py:97
+#, python-format
+msgid ""
+"Could not cast flavorid to integer: %s. Set flavorid to an integer-like "
+"string to downgrade."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:69
+msgid "instance_info_caches tables not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py:41
+msgid "progress column not added to compute_nodes table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:76
+msgid "dns_domains table not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:60
+msgid "quota_classes table not dropped"
+msgstr ""
+
+#: cinder/image/glance.py:147
+msgid "Connection error contacting glance server, retrying"
+msgstr ""
+
+#: cinder/image/glance.py:153 cinder/network/quantum/melange_connection.py:104
+msgid "Maximum attempts reached"
+msgstr ""
+
+#: cinder/image/glance.py:278
+#, python-format
+msgid "Creating image in Glance. Metadata passed in %s"
+msgstr ""
+
+#: cinder/image/glance.py:281
+#, python-format
+msgid "Metadata after formatting for Glance %s"
+msgstr ""
+
+#: cinder/image/glance.py:289
+#, python-format
+msgid "Metadata returned from Glance formatted for Base %s"
+msgstr ""
+
+#: cinder/image/glance.py:331 cinder/image/glance.py:335
+msgid "Not the image owner"
+msgstr ""
+
+#: cinder/image/glance.py:410
+#, python-format
+msgid "%(timestamp)s does not follow any of the signatures: %(iso_formats)s"
+msgstr ""
+
+#: cinder/image/s3.py:309
+#, python-format
+msgid "Failed to download %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:328
+#, python-format
+msgid "Failed to decrypt %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:340
+#, python-format
+msgid "Failed to untar %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:353
+#, python-format
+msgid "Failed to upload %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:379
+#, python-format
+msgid "Failed to decrypt private key: %s"
+msgstr "Impossible de déchiffrer la clef privée : %s"
+
+#: cinder/image/s3.py:387
+#, python-format
+msgid "Failed to decrypt initialization vector: %s"
+msgstr "Impossible de déchiffrer le vecteur d'initialisation : %s"
+
+#: cinder/image/s3.py:398
+#, python-format
+msgid "Failed to decrypt image file %(image_file)s: %(err)s"
+msgstr "Impossible de déchiffrer le fichier image %(image_file)s: %(err)s"
+
+#: cinder/image/s3.py:410
+msgid "Unsafe filenames in image"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:38 cinder/ipv6/rfc2462.py:34
+#, python-format
+msgid "Bad mac for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:40 cinder/ipv6/rfc2462.py:36
+#, python-format
+msgid "Bad prefix for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:42
+#, python-format
+msgid "Bad project_id for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/network/ldapdns.py:321
+msgid "This driver only supports type 'a' entries."
+msgstr ""
+
+#: cinder/network/linux_net.py:166
+#, python-format
+msgid "Attempted to remove chain %s which does not exist"
+msgstr ""
+
+#: cinder/network/linux_net.py:192
+#, python-format
+msgid "Unknown chain: %r"
+msgstr ""
+
+#: cinder/network/linux_net.py:215
+#, python-format
+msgid ""
+"Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r "
+"%(top)r"
+msgstr ""
+
+#: cinder/network/linux_net.py:335
+msgid "IPTablesManager.apply completed with success"
+msgstr ""
+
+#: cinder/network/linux_net.py:694
+#, python-format
+msgid "Hupping dnsmasq threw %s"
+msgstr "Hupping dnsmasq à renvoyé %s"
+
+#: cinder/network/linux_net.py:696
+#, python-format
+msgid "Pid %d is stale, relaunching dnsmasq"
+msgstr "Pid %d est dépassé, re-démarrage de dnsmasq"
+
+#: cinder/network/linux_net.py:756
+#, python-format
+msgid "killing radvd threw %s"
+msgstr "La destruction de radvd à renvoyé %s"
+
+#: cinder/network/linux_net.py:758
+#, python-format
+msgid "Pid %d is stale, relaunching radvd"
+msgstr "Pid %d est dépassé, re-démarrage radvd"
+
+#: cinder/network/linux_net.py:967
+#, python-format
+msgid "Starting VLAN inteface %s"
+msgstr "Démarrage de l'interface VLAN %s"
+
+#: cinder/network/linux_net.py:999
+#, python-format
+msgid "Starting Bridge interface for %s"
+msgstr "Démarrage de l'interface de Bridge %s"
+
+#: cinder/network/linux_net.py:1142
+#, fuzzy, python-format
+msgid "Starting bridge %s "
+msgstr "Démarrage de l'interface de Bridge %s"
+
+#: cinder/network/linux_net.py:1149
+#, fuzzy, python-format
+msgid "Done starting bridge %s"
+msgstr "Erreur au démarrage xvp : %s"
+
+#: cinder/network/linux_net.py:1167
+#, python-format
+msgid "Failed unplugging gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/linux_net.py:1170
+#, python-format
+msgid "Unplugged gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/manager.py:291
+#, python-format
+msgid "Fixed ip %(fixed_ip_id)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:300 cinder/network/manager.py:496
+#, python-format
+msgid "Interface %(interface)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:315
+#, python-format
+msgid "floating IP allocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:353
+#, python-format
+msgid "floating IP deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:386
+#, python-format
+msgid "Address |%(address)s| is not allocated"
+msgstr ""
+
+#: cinder/network/manager.py:390
+#, python-format
+msgid "Address |%(address)s| is not allocated to your project |%(project)s|"
+msgstr ""
+
+#: cinder/network/manager.py:402
+#, python-format
+msgid "Quota exceeded for %s, tried to allocate address"
+msgstr ""
+
+#: cinder/network/manager.py:614
+#, python-format
+msgid ""
+"Database inconsistency: DNS domain |%s| is registered in the Cinder db but "
+"not visible to either the floating or instance DNS driver. It will be "
+"ignored."
+msgstr ""
+
+#: cinder/network/manager.py:660
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing zone to |%(av_zone)s|."
+msgstr ""
+
+#: cinder/network/manager.py:670
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing project to |%(project)s|."
+msgstr ""
+
+#: cinder/network/manager.py:778
+#, python-format
+msgid "Disassociated %s stale fixed ip(s)"
+msgstr ""
+
+#: cinder/network/manager.py:782
+msgid "setting network host"
+msgstr "réglage de l'hôte réseau"
+
+#: cinder/network/manager.py:896
+#, python-format
+msgid "network allocations for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:901
+#, python-format
+msgid "networks retrieved for instance |%(instance_id)s|: |%(networks)s|"
+msgstr ""
+
+#: cinder/network/manager.py:930
+#, python-format
+msgid "network deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:1152
+#, python-format
+msgid ""
+"instance-dns-zone is |%(domain)s|, which is in availability zone "
+"|%(zone)s|. Instance |%(instance)s| is in zone |%(zone2)s|. No DNS record"
+" will be created."
+msgstr ""
+
+#: cinder/network/manager.py:1227
+#, python-format
+msgid "Unable to release %s because vif doesn't exist."
+msgstr ""
+
+#: cinder/network/manager.py:1244
+#, python-format
+msgid "Leased IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1248
+#, python-format
+msgid "IP %s leased that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1256
+#, python-format
+msgid "IP |%s| leased that isn't allocated"
+msgstr ""
+
+#: cinder/network/manager.py:1261
+#, python-format
+msgid "Released IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1265
+#, python-format
+msgid "IP %s released that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1268
+#, python-format
+msgid "IP %s released that was not leased"
+msgstr "IP %s libérée qui n'était pas allouée"
+
+#: cinder/network/manager.py:1331
+msgid "cidr already in use"
+msgstr ""
+
+#: cinder/network/manager.py:1334
+#, python-format
+msgid "requested cidr (%(cidr)s) conflicts with existing supernet (%(super)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1345
+#, python-format
+msgid ""
+"requested cidr (%(cidr)s) conflicts with existing smaller cidr "
+"(%(smaller)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1404
+msgid "Network already exists!"
+msgstr ""
+
+#: cinder/network/manager.py:1423
+#, python-format
+msgid "Network must be disassociated from project %s before delete"
+msgstr ""
+
+#: cinder/network/manager.py:1832
+msgid ""
+"The sum between the number of networks and the vlan start cannot be "
+"greater than 4094"
+msgstr "La somme du nombre de réseau et le début de vlan ne peut excéder 4094"
+
+#: cinder/network/manager.py:1839
+#, python-format
+msgid ""
+"The network range is not big enough to fit %(num_networks)s. Network size"
+" is %(network_size)s"
+msgstr ""
+
+#: cinder/network/minidns.py:65
+msgid "This driver only supports type 'a'"
+msgstr ""
+
+#: cinder/network/quantum/client.py:154
+msgid "Tenant ID not set"
+msgstr ""
+
+#: cinder/network/quantum/client.py:180
+#, python-format
+msgid "Quantum Client Request: %(method)s %(action)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:196
+#, python-format
+msgid "Quantum entity not found: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:206
+#, python-format
+msgid "Server %(status_code)s error: %(data)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:210
+#, python-format
+msgid "Unable to connect to server. Got error: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:228
+#, python-format
+msgid "unable to deserialize object of type = '%s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:162
+msgid "QuantumManager does not use 'multi_host' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:166
+msgid "QuantumManager requires that only one network is created per call"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:176
+msgid "QuantumManager does not use 'vlan_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:182
+msgid "QuantumManager does not use 'vpn_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:186
+msgid "QuantumManager does not use 'bridge' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:190
+msgid "QuantumManager does not use 'bridge_interface' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:195
+msgid "QuantumManager requires a valid (.1) gateway address."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:204
+#, python-format
+msgid ""
+"Unable to find existing quantum network for tenant '%(q_tenant_id)s' with"
+" net-id '%(quantum_net_id)s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:301
+#, python-format
+msgid "network allocations for instance %s"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:588
+#, python-format
+msgid ""
+"port deallocation failed for instance: |%(instance_id)s|, port_id: "
+"|%(port_id)s|"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:606
+#, python-format
+msgid ""
+"ipam deallocation failed for instance: |%(instance_id)s|, vif_uuid: "
+"|%(vif_uuid)s|"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:96
+#, python-format
+msgid "Server returned error: %s"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:98
+msgid "Connection error contacting melange service, retrying"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:108
+#, python-format
+msgid ""
+"allocate IP on network |%(network_id)s| belonging to "
+"|%(network_tenant_id)s| to this vif |%(vif_id)s| with mac "
+"|%(mac_address)s| belonging to |%(project_id)s| "
+msgstr ""
+
+#: cinder/network/quantum/melange_ipam_lib.py:133
+msgid "get_project_and_global_net_ids must be called with a non-null project_id"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:75
+msgid "Error creating network entry"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:90
+#, python-format
+msgid "No network with net_id = %s"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:221
+#, python-format
+msgid "No fixed IPs to deallocate for vif %s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:99
+#, python-format
+msgid "Connecting interface %(interface_id)s to net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:113
+#, python-format
+msgid "Deleting port %(port_id)s on net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/notifier/api.py:115
+#, python-format
+msgid "%s not in valid priorities"
+msgstr ""
+
+#: cinder/notifier/api.py:130
+#, python-format
+msgid ""
+"Problem '%(e)s' attempting to send to notification system. "
+"Payload=%(payload)s"
+msgstr ""
+
+#: cinder/notifier/list_notifier.py:65
+#, python-format
+msgid "Problem '%(e)s' attempting to send to notification driver %(driver)s."
+msgstr ""
+
+#: cinder/notifier/rabbit_notifier.py:46
+#, python-format
+msgid "Could not send notification to %(topic)s. Payload=%(message)s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:146
+#, python-format
+msgid "Returning exception %s to caller"
+msgstr "Renvoi de l'exception %s à l'appelant"
+
+#: cinder/rpc/amqp.py:188
+#, python-format
+msgid "unpacked context: %s"
+msgstr "Contexte décompacté : %s"
+
+#: cinder/rpc/amqp.py:231
+#, python-format
+msgid "received %s"
+msgstr "%s reçu"
+
+#: cinder/rpc/amqp.py:236
+#, python-format
+msgid "no method for message: %s"
+msgstr "Pas de méthode pour le message : %s"
+
+#: cinder/rpc/amqp.py:237
+#, python-format
+msgid "No method for message: %s"
+msgstr "Pas de méthode pour le message : %s"
+
+#: cinder/rpc/amqp.py:321
+#, python-format
+msgid "Making asynchronous call on %s ..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:324
+#, python-format
+msgid "MSG_ID is %s"
+msgstr "MSG_ID est %s"
+
+#: cinder/rpc/amqp.py:346
+#, python-format
+msgid "Making asynchronous cast on %s..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:354
+msgid "Making asynchronous fanout cast..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:379
+#, python-format
+msgid "Sending notification on %s..."
+msgstr ""
+
+#: cinder/rpc/common.py:54
+#, python-format
+msgid ""
+"Remote error: %(exc_type)s %(value)s\n"
+"%(traceback)s."
+msgstr ""
+
+#: cinder/rpc/common.py:71
+msgid "Timeout while waiting on RPC response."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:111
+msgid "Failed to process message... skipping it."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:407
+#, python-format
+msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:430
+#, python-format
+msgid "Connected to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:466
+#, python-format
+msgid ""
+"Unable to connect to AMQP server on %(hostname)s:%(port)d after "
+"%(max_retries)d tries: %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:482
+#, python-format
+msgid ""
+"AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying "
+"again in %(sleep_time)d seconds."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:533 cinder/rpc/impl_qpid.py:385
+#, python-format
+msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:551 cinder/rpc/impl_qpid.py:400
+#, python-format
+msgid "Timed out waiting for RPC response: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:555 cinder/rpc/impl_qpid.py:404
+#, python-format
+msgid "Failed to consume message from queue: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:589 cinder/rpc/impl_qpid.py:434
+#, python-format
+msgid "Failed to publish message to topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:341
+#, python-format
+msgid "Unable to connect to AMQP server: %s "
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:346
+#, python-format
+msgid "Connected to AMQP server on %s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:354
+msgid "Re-established AMQP queues"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:412
+msgid "Error processing message.  Skipping it."
+msgstr ""
+
+#: cinder/scheduler/chance.py:47 cinder/scheduler/simple.py:91
+#: cinder/scheduler/simple.py:143
+msgid "Is the appropriate service running?"
+msgstr ""
+
+#: cinder/scheduler/chance.py:52
+msgid "Could not find another compute"
+msgstr ""
+
+#: cinder/scheduler/driver.py:63
+#, python-format
+msgid "Casted '%(method)s' to volume '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:80
+#, python-format
+msgid "Casted '%(method)s' to compute '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:89
+#, python-format
+msgid "Casted '%(method)s' to network '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:107
+#, python-format
+msgid "Casted '%(method)s' to %(topic)s '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:181
+msgid "Must implement a fallback schedule"
+msgstr "Doit mettre en oeuvre un calendrier de retrait"
+
+#: cinder/scheduler/driver.py:185
+msgid "Driver must implement schedule_prep_resize"
+msgstr ""
+
+#: cinder/scheduler/driver.py:190
+msgid "Driver must implement schedule_run_instance"
+msgstr ""
+
+#: cinder/scheduler/driver.py:325
+msgid "Block migration can not be used with shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:330
+msgid "Live migration can not be used without shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:367 cinder/scheduler/driver.py:457
+#, python-format
+msgid "host %(dest)s is not compatible with original host %(src)s."
+msgstr ""
+
+#: cinder/scheduler/driver.py:416
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"memory(host:%(avail)s <= instance:%(mem_inst)s)"
+msgstr ""
+
+#: cinder/scheduler/driver.py:472
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"disk(host:%(available)s <= instance:%(necessary)s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:51
+#, python-format
+msgid "No host selection for %s defined."
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:64
+#, python-format
+msgid "Attempting to build %(num_instances)d instance(s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:157
+msgid "Scheduler only understands Compute nodes (for now)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:199
+#, python-format
+msgid "Filtered %(hosts)s"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:209
+#, python-format
+msgid "Weighted %(weighted_host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:144
+#, python-format
+msgid "Host filter fails for ignored host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:151
+#, python-format
+msgid "Host filter fails for non-forced host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:157
+#, python-format
+msgid "Host filter function %(func)s failed for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:163
+#, python-format
+msgid "Host filter passes for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:272
+#, python-format
+msgid "Received %(service_name)s service update from %(host)s."
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:313
+msgid "host_manager only implemented for 'compute'"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:323
+#, python-format
+msgid "No service for compute ID %s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:85
+#, python-format
+msgid ""
+"Driver Method %(driver_method_name)s missing: %(e)s. Reverting to "
+"schedule()"
+msgstr ""
+
+#: cinder/scheduler/manager.py:150
+#, python-format
+msgid "Failed to schedule_%(method)s: %(ex)s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:159
+#, fuzzy, python-format
+msgid "Setting instance %(instance_uuid)s to %(state)s state."
+msgstr "L'instance %(instance_id)s  n'est pas suspendue"
+
+#: cinder/scheduler/scheduler_options.py:66
+#, python-format
+msgid "Could not stat scheduler options file %(filename)s: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:75
+#, python-format
+msgid "Could not decode scheduler options: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/simple.py:87
+msgid "Not enough allocatable CPU cores remaining"
+msgstr ""
+
+#: cinder/scheduler/simple.py:137
+msgid "Not enough allocatable volume gigabytes remaining"
+msgstr ""
+
+#: cinder/scheduler/filters/core_filter.py:45
+msgid "VCPUs not set; assuming CPU collection broken"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:72
+#, python-format
+msgid "Faking execution of cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:80
+#, python-format
+msgid "Faked command matched %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:96
+#, python-format
+msgid "Faked command raised an exception %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:101
+#, python-format
+msgid "Reply to faked command is stdout='%(stdout)s' stderr='%(stderr)s'"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:784
+msgid "Please extend mock libvirt module to support flags"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:790
+msgid "Please extend fake libvirt module to support this auth method"
+msgstr ""
+
+#: cinder/tests/test_compute.py:365 cinder/tests/test_compute.py:1419
+#, python-format
+msgid "Running instances: %s"
+msgstr "Instance actives : %s"
+
+#: cinder/tests/test_compute.py:371
+#, python-format
+msgid "After terminating instances: %s"
+msgstr "Après l'arrêt d'instances : %s"
+
+#: cinder/tests/test_compute.py:589
+msgid "Internal error"
+msgstr ""
+
+#: cinder/tests/test_compute.py:1430
+#, python-format
+msgid "After force-killing instances: %s"
+msgstr ""
+
+#: cinder/tests/test_misc.py:92
+#, python-format
+msgid ""
+"The following migrations are missing a downgrade:\n"
+"\t%s"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:169
+msgid "id"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:170
+msgid "IPv4"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:171
+msgid "IPv6"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:172
+msgid "start address"
+msgstr "adresse de départ"
+
+#: cinder/tests/test_cinder_manage.py:173
+msgid "DNS1"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:174
+msgid "DNS2"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:175
+msgid "VlanID"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:176
+msgid "project"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:177
+msgid "uuid"
+msgstr ""
+
+#: cinder/tests/test_volume.py:216
+#, python-format
+msgid "Target %s allocated"
+msgstr "Destination %s allouée"
+
+#: cinder/tests/test_volume.py:468
+#, python-format
+msgid "Cannot confirm exported volume id:%s."
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:58
+#, python-format
+msgid "Given data: %s"
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:59
+#, python-format
+msgid "Result data: %s"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:626
+#, python-format
+msgid "Creating files in %s to simulate guest agent"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:637
+#, python-format
+msgid "Removing simulated guest agent files in %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/test_servers.py:2144
+#, python-format
+msgid "Quota exceeded: code=%(code)s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:57
+#, python-format
+msgid "_create: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:66
+#, python-format
+msgid "_delete: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:75
+#, python-format
+msgid "_get: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:85
+#, python-format
+msgid "_get_all: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:125
+#, python-format
+msgid "test_snapshot_create: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:134
+#, python-format
+msgid "test_snapshot_create: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:156
+#, python-format
+msgid "test_snapshot_create_force: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:165
+#, python-format
+msgid "test_snapshot_create_force: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:205
+#, python-format
+msgid "test_snapshot_show: resp=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:231
+#, python-format
+msgid "test_snapshot_detail: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/integrated/test_login.py:31
+#, python-format
+msgid "flavor: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:38
+#, python-format
+msgid ""
+"%(message)s\n"
+"Status Code: %(_status)s\n"
+"Body: %(_body)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:47
+msgid "Authentication error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:55
+msgid "Authorization error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:63
+msgid "Item not found"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:105
+#, python-format
+msgid "Doing %(method)s on %(relative_url)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:107
+#, python-format
+msgid "Body: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:125
+#, python-format
+msgid "%(auth_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:151
+#, python-format
+msgid "%(relative_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:161
+msgid "Unexpected status code"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:168
+#, python-format
+msgid "Decoding JSON: %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:133
+#, python-format
+msgid "Nested received %(queue)s, %(value)s"
+msgstr "Reception par Nested %(queue)s, %(value)s"
+
+#: cinder/tests/rpc/common.py:142
+#, python-format
+msgid "Nested return %s"
+msgstr "Nested renvoi %s"
+
+#: cinder/tests/rpc/common.py:160
+msgid "RPC backend does not support timeouts"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:227 cinder/tests/rpc/common.py:233
+#, python-format
+msgid "Received %s"
+msgstr "%s Reçu"
+
+#: cinder/virt/connection.py:85
+msgid "Failed to open connection to the hypervisor"
+msgstr "Échec lors de l'ouverture d'une connexion à l'hyperviseur"
+
+#: cinder/virt/fake.py:270 cinder/virt/xenapi_conn.py:396
+#: cinder/virt/baremetal/proxy.py:716 cinder/virt/libvirt/connection.py:2045
+#, python-format
+msgid "Compute_service record created for %s "
+msgstr ""
+
+#: cinder/virt/fake.py:273 cinder/virt/xenapi_conn.py:399
+#: cinder/virt/baremetal/proxy.py:720 cinder/virt/libvirt/connection.py:2048
+#, python-format
+msgid "Compute_service record updated for %s "
+msgstr ""
+
+#: cinder/virt/firewall.py:130
+#, python-format
+msgid "Attempted to unfilter instance %s which is not filtered"
+msgstr "Tentative de suppression de filtre pour l'intance %s qui n'est pas filtrée"
+
+#: cinder/virt/firewall.py:137
+#, python-format
+msgid "Filters added to instance %s"
+msgstr ""
+
+#: cinder/virt/firewall.py:139
+msgid "Provider Firewall Rules refreshed"
+msgstr ""
+
+#: cinder/virt/firewall.py:291
+#, python-format
+msgid "Adding security group rule: %r"
+msgstr ""
+
+#: cinder/virt/firewall.py:403 cinder/virt/xenapi/firewall.py:87
+#, python-format
+msgid "Adding provider rule: %s"
+msgstr ""
+
+#: cinder/virt/images.py:86
+msgid "'qemu-img info' parsing failed."
+msgstr ""
+
+#: cinder/virt/images.py:92
+#, python-format
+msgid "fmt=%(fmt)s backed by: %(backing_file)s"
+msgstr ""
+
+#: cinder/virt/images.py:104
+#, python-format
+msgid "Converted to raw, but format is now %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:105
+msgid ""
+"Must specify vmwareapi_host_ip,vmwareapi_host_username and "
+"vmwareapi_host_password to useconnection_type=vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:276
+#, python-format
+msgid "In vmwareapi:_create_session, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:359
+#, python-format
+msgid "In vmwareapi:_call_method, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:398
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: success"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:404
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: error %(error_info)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:409
+#, python-format
+msgid "In vmwareapi:_poll_task, Got this error %s"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:140
+msgid ""
+"Must specify xenapi_connection_url, xenapi_connection_username "
+"(optionally), and xenapi_connection_password to use "
+"connection_type=xenapi"
+msgstr ""
+"Doit spécifier xenapi_connection_url, xenapi_connection_username "
+"(optionel), et xenapi_connection_password pour utiliser "
+"connection_type=xenapi"
+
+#: cinder/virt/xenapi_conn.py:329 cinder/virt/libvirt/connection.py:472
+msgid "Could not determine iscsi initiator name"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:460
+msgid "Host startup on XenServer is not supported."
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:489
+msgid "Unable to log in to XenAPI (is the Dom0 disk full?)"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:527
+msgid "Host is member of a pool, but DB says otherwise"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:599 cinder/virt/xenapi_conn.py:612
+#, python-format
+msgid "Got exception: %s"
+msgstr "Reçu exception : %s"
+
+#: cinder/virt/baremetal/dom.py:93
+msgid "No domains exist."
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:95
+#, python-format
+msgid "============= initial domains =========== : %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:99
+msgid "Building domain: to be removed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:103
+msgid "Not running domain: remove"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:111
+msgid "domain running on an unknown node: discarded"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:127
+#, python-format
+msgid "No such domain (%s)"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:134
+#, python-format
+msgid "Failed power down Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:143
+msgid "deactivate -> activate fails"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:153
+msgid "destroy_domain: no such domain"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:154
+#, python-format
+msgid "No such domain %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:161
+#, python-format
+msgid "Domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:163
+#, python-format
+msgid "Nodes: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:166
+#, python-format
+msgid "After storing domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:169
+msgid "deactivation/removing domain failed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:176
+msgid "===== Domain is being created ====="
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:179
+msgid "Same domain name already exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:181
+msgid "create_domain: before get_idle_node"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:198
+#, python-format
+msgid "Created new domain: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:213
+#, python-format
+msgid "Failed to boot Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:222
+msgid "No such domain exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:226
+#, python-format
+msgid "change_domain_state: to new state %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:233
+#, python-format
+msgid "Stored fake domains to the file: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:244
+msgid "domain does not exist"
+msgstr ""
+
+#: cinder/virt/baremetal/nodes.py:42
+#, python-format
+msgid "Unknown baremetal driver %(d)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:148
+#, python-format
+msgid "Error encountered when destroying instance '%(name)s': %(ex)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:162
+#, python-format
+msgid "instance %(instance_name)s: deleting instance files %(target)s"
+msgstr "instance %(instance_name)s: suppression des fichiers d'instance %(target)s"
+
+#: cinder/virt/baremetal/proxy.py:189
+#, python-format
+msgid "instance %s: rebooted"
+msgstr "instance %s: re-démarrée"
+
+#: cinder/virt/baremetal/proxy.py:192
+msgid "_wait_for_reboot failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:222
+#, python-format
+msgid "instance %s: rescued"
+msgstr "instance %s: récupérée"
+
+#: cinder/virt/baremetal/proxy.py:225
+msgid "_wait_for_rescue failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:242
+msgid "<============= spawn of baremetal =============>"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:255
+#, python-format
+msgid "instance %s: is building"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:260
+msgid "Key is injected but instance is not running yet"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:265
+#, python-format
+msgid "instance %s: booted"
+msgstr "instance %s: a démarrée"
+
+#: cinder/virt/baremetal/proxy.py:268
+#, python-format
+msgid "~~~~~~ current state = %s ~~~~~~"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:269
+#, python-format
+msgid "instance %s spawned successfully"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:272
+#, python-format
+msgid "instance %s:not booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:274
+msgid "Bremetal assignment is overcommitted."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:354
+#, python-format
+msgid "instance %s: Creating image"
+msgstr "instance %s : Création de l'image"
+
+#: cinder/virt/baremetal/proxy.py:473
+#, python-format
+msgid "instance %(inst_name)s: injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:484
+#, python-format
+msgid ""
+"instance %(inst_name)s: ignoring error injecting data into image "
+"%(img_id)s (%(e)s)"
+msgstr ""
+"instance %(inst_name)s : l'erreur d'injection de donné dans l'image "
+"%(img_id)s (%(e)s) a été ignorée"
+
+#: cinder/virt/baremetal/proxy.py:529
+#, python-format
+msgid "instance %s: starting toXML method"
+msgstr "instance %s: démarrage de la méthode toXML"
+
+#: cinder/virt/baremetal/proxy.py:531
+#, python-format
+msgid "instance %s: finished toXML method"
+msgstr "instance %s: fin d'éxécution de la méthode toXML"
+
+#: cinder/virt/baremetal/proxy.py:574 cinder/virt/libvirt/connection.py:1815
+msgid ""
+"Cannot get the number of cpu, because this function is not implemented "
+"for this platform. This error can be safely ignored for now."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:714
+#, python-format
+msgid "#### RLK: cpu_arch = %s "
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:746
+msgid "Updating!"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:773 cinder/virt/libvirt/connection.py:2609
+#: cinder/virt/xenapi/host.py:129
+msgid "Updating host stats"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:185
+msgid "free_node...."
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:216
+#, python-format
+msgid "deactivate_node is called for node_id = %(id)s node_ip = %(ip)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:221
+msgid "status of node is set to 0"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:232
+msgid "rootfs is already removed"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:264
+msgid "Before ping to the bare-metal node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:275
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is ready"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:279
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is not ready, out_msg=%(out_msg)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:292
+msgid "Noting to do for tilera nodes: vmlinux is in CF"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:316
+msgid "activate_node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:330
+msgid "Node is unknown error state."
+msgstr ""
+
+#: cinder/virt/disk/api.py:165
+msgid "no capable image handler configured"
+msgstr ""
+
+#: cinder/virt/disk/api.py:178
+#, python-format
+msgid "unknown disk image handler: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:189
+msgid "image already mounted"
+msgstr ""
+
+#: cinder/virt/disk/api.py:276 cinder/virt/disk/guestfs.py:64
+#: cinder/virt/disk/guestfs.py:78 cinder/virt/disk/mount.py:100
+#, python-format
+msgid "Failed to mount filesystem: %s"
+msgstr "Impossible de monter le système de fichier : %s"
+
+#: cinder/virt/disk/api.py:291
+#, python-format
+msgid "Failed to remove container: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:441
+#, python-format
+msgid "User %(username)s not found in password file."
+msgstr ""
+
+#: cinder/virt/disk/api.py:457
+#, python-format
+msgid "User %(username)s not found in shadow file."
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:39
+#, python-format
+msgid "unsupported partition: %s"
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:77
+msgid "unknown guestmount error"
+msgstr ""
+
+#: cinder/virt/disk/loop.py:30
+#, python-format
+msgid "Could not attach image to loopback: %s"
+msgstr "Impossible de lier l'image au loopback : %s"
+
+#: cinder/virt/disk/mount.py:76
+msgid "no partitions found"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:77
+#, python-format
+msgid "Failed to map partitions: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:58
+msgid "nbd unavailable: module not loaded"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:63
+msgid "No free nbd devices"
+msgstr "Pas de device nbd libre"
+
+#: cinder/virt/disk/nbd.py:81
+#, python-format
+msgid "qemu-nbd error: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:93
+#, python-format
+msgid "nbd device %s did not show up"
+msgstr "Device nbd %s n'est pas apparu"
+
+#: cinder/virt/libvirt/connection.py:265
+#, python-format
+msgid "Connecting to libvirt: %s"
+msgstr "Connexion à libvirt: %s"
+
+#: cinder/virt/libvirt/connection.py:286
+msgid "Connection to libvirt broke"
+msgstr "Connexion à libvirt interrompue"
+
+#: cinder/virt/libvirt/connection.py:388
+#, python-format
+msgid "Error from libvirt during destroy. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:400
+#, python-format
+msgid ""
+"Error from libvirt during saved instance removal. Code=%(errcode)s "
+"Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:411
+#, python-format
+msgid "Error from libvirt during undefine. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:423
+msgid "Instance destroyed successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:435
+#, python-format
+msgid "Error from libvirt during unfilter. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:461
+#, python-format
+msgid "Deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:554
+msgid "attaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:567
+msgid "detaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:692
+#, fuzzy, python-format
+msgid "Instance soft rebooted successfully."
+msgstr "instance %s: re-démarrée"
+
+#: cinder/virt/libvirt/connection.py:696
+#, fuzzy
+msgid "Failed to soft reboot instance."
+msgstr "Échec du redémarrage de l'instance"
+
+#: cinder/virt/libvirt/connection.py:725
+msgid "Instance shutdown successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:761 cinder/virt/libvirt/connection.py:905
+msgid "During reboot, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:766
+msgid "Instance rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:867 cinder/virt/xenapi/vmops.py:1358
+#, python-format
+msgid ""
+"Found %(migration_count)d unconfirmed migrations older than "
+"%(confirm_window)d seconds"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:871
+#, python-format
+msgid "Automatically confirming migration %d"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:896
+msgid "Instance is running"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:910
+msgid "Instance spawned successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:926
+#, python-format
+msgid "data: %(data)r, fpath: %(fpath)r"
+msgstr "data: %(data)r, fpath: %(fpath)r"
+
+#: cinder/virt/libvirt/connection.py:978
+#, fuzzy
+msgid "Guest does not have a console available"
+msgstr "L’utilisateur n'a pas les privilèges administrateur"
+
+#: cinder/virt/libvirt/connection.py:1020
+#, python-format
+msgid "Path '%(path)s' supports direct I/O"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1024
+#, python-format
+msgid "Path '%(path)s' does not support direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1028 cinder/virt/libvirt/connection.py:1032
+#, python-format
+msgid "Error on '%(path)s' while checking direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1153
+msgid "Creating image"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1339
+#, python-format
+msgid "Injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1349
+#, python-format
+msgid "Ignoring error injecting data into image %(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1381
+#, python-format
+msgid "block_device_list %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1658
+msgid "Starting toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1662
+msgid "Finished toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1679
+#, python-format
+msgid ""
+"Error from libvirt while looking up %(instance_name)s: [Error Code "
+"%(error_code)s] %(ex)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1920
+msgid "libvirt version is too old (does not support getVersion)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1942
+#, python-format
+msgid "'<cpu>' must be 1, but %d\n"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1969
+#, python-format
+msgid "topology (%(topology)s) must have %(ks)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2067
+#, python-format
+msgid ""
+"Instance launched has CPU info:\n"
+"%s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2079
+#, python-format
+msgid ""
+"CPU doesn't have compatibility.\n"
+"\n"
+"%(ret)s\n"
+"\n"
+"Refer to %(u)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2136
+#, python-format
+msgid "Timeout migrating for %s. nwfilter not found."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2352
+#, python-format
+msgid "skipping %(path)s since it looks like volume"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2407
+#, python-format
+msgid "Getting disk size of %(i_name)s: %(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2458
+#, python-format
+msgid "Instance %s: Starting migrate_disk_and_power_off"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2513
+msgid "During wait running, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2518
+msgid "Instance running successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2525
+#, python-format
+msgid "Instance %s: Starting finish_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2565
+#, python-format
+msgid "Instance %s: Starting finish_revert_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:42
+msgid ""
+"Libvirt module could not be loaded. NWFilterFirewall will not work "
+"correctly."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:93
+msgid "Called setup_basic_filtering in nwfilter"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:101
+msgid "Ensuring static filters"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:171
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:217
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) for%(name)s is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:233
+msgid "iptables firewall: Setup Basic Filtering"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:252
+msgid "Attempted to unfilter instance which is not filtered"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:170
+#, python-format
+msgid "%s is a valid instance name"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:173
+#, python-format
+msgid "%s has a disk file"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:175
+#, python-format
+msgid "Instance %(instance)s is backed by %(backing)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:186
+#, python-format
+msgid ""
+"Instance %(instance)s is using a backing file %(backing)s which does not "
+"appear in the image service"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:237
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification failed"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:247
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification skipped, no hash stored"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:266
+#, python-format
+msgid "Cannot remove %(base_file)s, it does not exist"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:278
+#, python-format
+msgid "Base file too young to remove: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:281
+#, python-format
+msgid "Removing base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:288
+#, python-format
+msgid "Failed to remove %(base_file)s, error was %(error)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:299
+#, python-format
+msgid "%(id)s (%(base_file)s): checking"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:318
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): in use: on this node %(local)d local, %(remote)d "
+"on other nodes"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:330
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): warning -- an absent base file is in use! "
+"instances: %(instance_list)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:338
+#, python-format
+msgid "%(id)s (%(base_file)s): in use on (%(remote)d on other nodes)"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:348
+#, python-format
+msgid "%(id)s (%(base_file)s): image is not in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:354
+#, python-format
+msgid "%(id)s (%(base_file)s): image is in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:377
+#, python-format
+msgid "Skipping verification, no base directory at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:381
+msgid "Verify base images"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:388
+#, python-format
+msgid "Image id %(id)s yields fingerprint %(fingerprint)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:406
+#, python-format
+msgid "Unknown base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:411
+#, python-format
+msgid "Active base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:414
+#, python-format
+msgid "Corrupt base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:418
+#, python-format
+msgid "Removable base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:426
+msgid "Verification complete"
+msgstr ""
+
+#: cinder/virt/libvirt/utils.py:264
+msgid "Unable to find an open port"
+msgstr "Impossible de trouver un port ouvert"
+
+#: cinder/virt/libvirt/vif.py:90
+#, python-format
+msgid "Ensuring vlan %(vlan)s and bridge %(bridge)s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:99
+#, python-format
+msgid "Ensuring bridge %s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:165 cinder/virt/libvirt/vif.py:220
+#, python-format
+msgid "Failed while unplugging vif of instance '%s'"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:163
+#, python-format
+msgid "iSCSI device not found at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:166
+#, python-format
+msgid ""
+"ISCSI volume not yet found at: %(mount_device)s. Will rescan & retry.  "
+"Try number: %(tries)s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:178
+#, python-format
+msgid "Found iSCSI node %(mount_device)s (after %(tries)s rescans)"
+msgstr ""
+
+#: cinder/virt/vmwareapi/error_util.py:93
+#, python-format
+msgid "Error(s) %s occurred in the call to RetrieveProperties"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:44 cinder/virt/xenapi/fake.py:77
+#, python-format
+msgid "%(text)s: _db_content => %(content)s"
+msgstr "%(text)s: _db_content => %(content)s"
+
+#: cinder/virt/vmwareapi/fake.py:131
+#, python-format
+msgid "Property %(attr)s not set for the managed object %(objName)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:437
+msgid "There is no VM registered"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:439 cinder/virt/vmwareapi/fake.py:609
+#, python-format
+msgid "Virtual Machine with ref %s is not there"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:502
+#, python-format
+msgid "Logging out a session that is invalid or already logged out: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:517
+msgid "Session is faulty"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:520
+msgid "Session Invalid"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:606
+msgid " No Virtual Machine has been registered yet"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:99
+#, python-format
+msgid "Glance image %s is in killed state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:107
+#, python-format
+msgid "Glance image %(image_id)s is in unknown state - %(state)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:128
+msgid ""
+"ESX SOAP server returned an empty port group for the host system in its "
+"response"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:155
+#, python-format
+msgid "Creating Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:169
+#, python-format
+msgid "Created Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/read_write_util.py:150
+#, python-format
+msgid "Exception during HTTP connection close in VMWareHTTpWrite. Exception is %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:84
+msgid "Unable to import suds."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:90
+msgid "Must specify vmwareapi_wsdl_loc"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:145
+#, python-format
+msgid "No such SOAP method '%s' provided by VI SDK"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:150
+#, python-format
+msgid "httplib error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:157
+#, python-format
+msgid "Socket error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:162
+#, python-format
+msgid "Type error in  %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:166
+#, python-format
+msgid "Exception in %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:66
+msgid "Getting list of instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:82
+#, python-format
+msgid "Got total of %s instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:126
+msgid "Couldn't get a local Datastore reference"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:196
+#, python-format
+msgid "Creating VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:205
+#, python-format
+msgid "Created VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:234
+#, python-format
+msgid ""
+"Creating Virtual Disk of size  %(vmdk_file_size_in_kb)s KB and adapter "
+"type  %(adapter_type)s on the ESX host local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:251
+#, python-format
+msgid ""
+"Created Virtual Disk of size %(vmdk_file_size_in_kb)s KB on the ESX host "
+"local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:260
+#, python-format
+msgid ""
+"Deleting the file %(flat_uploaded_vmdk_path)s on the ESX host localstore "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:272
+#, python-format
+msgid ""
+"Deleted the file %(flat_uploaded_vmdk_path)s on the ESX host local store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:283
+#, python-format
+msgid ""
+"Downloading image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:298
+#, python-format
+msgid ""
+"Downloaded image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:315
+#, python-format
+msgid "Reconfiguring VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:322
+#, python-format
+msgid "Reconfigured VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:329
+#, python-format
+msgid "Powering on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:335
+#, python-format
+msgid "Powered on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:381
+#, python-format
+msgid "Creating Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:391
+#, python-format
+msgid "Created Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:434
+#, python-format
+msgid "Copying disk data before snapshot of the VM  instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:447
+#, python-format
+msgid "Copied disk data before snapshot of the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:456
+#, python-format
+msgid "Uploading image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:469
+#, python-format
+msgid "Uploaded image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:479
+#, python-format
+msgid "Deleting temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:488
+#, python-format
+msgid "Deleted temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:520
+msgid "instance is not powered on"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:527
+#, python-format
+msgid "Rebooting guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:530
+#, python-format
+msgid "Rebooted guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:532
+#, python-format
+msgid "Doing hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:536
+#, python-format
+msgid "Did hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:548
+#, python-format
+msgid "instance - %s not present"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:567
+#, python-format
+msgid "Powering off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:572
+#, python-format
+msgid "Powered off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:576
+#, python-format
+msgid "Unregistering the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:579
+#, python-format
+msgid "Unregistered the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:581
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while un-registering the "
+"VM: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:592
+#, python-format
+msgid "Deleting contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:602
+#, python-format
+msgid "Deleted contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:607
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while deleting the VM "
+"contents from the disk: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:615
+msgid "pause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:619
+msgid "unpause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:633
+#, python-format
+msgid "Suspending the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:637
+#, python-format
+msgid "Suspended the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:640
+msgid "instance is powered off and can not be suspended."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:643
+#, python-format
+msgid "VM %s was already in suspended state. So returning without doing anything"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:656
+#, python-format
+msgid "Resuming the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:661
+#, python-format
+msgid "Resumed the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:663
+msgid "instance is not in a suspended state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:699
+msgid "get_diagnostics not implemented for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:757
+#, python-format
+msgid ""
+"Reconfiguring VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:765
+#, python-format
+msgid ""
+"Reconfigured VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:802
+#, python-format
+msgid "Creating directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:806
+#, python-format
+msgid "Created directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:89
+#, python-format
+msgid "Downloading image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:103
+#, python-format
+msgid "Downloaded image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:108
+#, python-format
+msgid "Uploading image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:129
+#, python-format
+msgid "Uploaded image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:139
+#, python-format
+msgid "Getting image size for the image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:143
+#, python-format
+msgid "Got image size of %(size)s for the image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:553 cinder/virt/xenapi/fake.py:652
+#: cinder/virt/xenapi/fake.py:670 cinder/virt/xenapi/fake.py:732
+msgid "Raising NotImplemented"
+msgstr "Fonction non implémentée"
+
+#: cinder/virt/xenapi/fake.py:555
+#, python-format
+msgid "xenapi.fake does not have an implementation for %s"
+msgstr "xenapi.fake n'a pas d'implémentation pour %s"
+
+#: cinder/virt/xenapi/fake.py:589
+#, python-format
+msgid "Calling %(localname)s %(impl)s"
+msgstr "Appel %(localname)s %(impl)s"
+
+#: cinder/virt/xenapi/fake.py:594
+#, python-format
+msgid "Calling getter %s"
+msgstr "Appel du getter %s"
+
+#: cinder/virt/xenapi/fake.py:654
+#, python-format
+msgid ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+msgstr ""
+"xenapi.fake n'a pas d'implementation pour %s ou il a été appelé avec le "
+"mauvais nombre d'arguments"
+
+#: cinder/virt/xenapi/host.py:67
+#, python-format
+msgid ""
+"Instance %(name)s running on %(host)s could not be found in the database:"
+" assuming it is a worker VM and skipping migration to a new host"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:137
+#, python-format
+msgid "Unable to get SR for this host: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:169
+msgid "Unable to get updated status"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:172
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:37
+#, python-format
+msgid "Found non-unique network for name_label %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:55
+#, python-format
+msgid "Found non-unique network for bridge %s"
+msgstr "Réseau non unique trouvé pour le bridge %s"
+
+#: cinder/virt/xenapi/network_utils.py:58
+#, python-format
+msgid "Found no network for bridge %s"
+msgstr "Aucun réseau trouvé pour le bridge %s"
+
+#: cinder/virt/xenapi/pool.py:111
+#, python-format
+msgid "Unable to eject %(host)s from the pool; pool not empty"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:126
+#, python-format
+msgid "Unable to eject %(host)s from the pool; No master found"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:143
+#, python-format
+msgid "Pool-Join failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:146
+#, python-format
+msgid "Unable to join %(host)s in the pool"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:162
+#, python-format
+msgid "Pool-eject failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:174
+#, fuzzy, python-format
+msgid "Unable to set up pool: %(e)s."
+msgstr "Impossible de détacher le volume %s"
+
+#: cinder/virt/xenapi/pool.py:185
+#, python-format
+msgid "Pool-set_name_label failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:103
+#, python-format
+msgid "Found no PIF for device %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:122
+#, python-format
+msgid ""
+"PIF %(pif_rec['uuid'])s for network %(bridge)s has VLAN id %(pif_vlan)d. "
+"Expected %(vlan_num)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:218
+msgid "Created VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:245
+#, python-format
+msgid "VBD not found in instance %s"
+msgstr "VBD non trouvé dans l'instance %s"
+
+#: cinder/virt/xenapi/vm_utils.py:262
+#, fuzzy, python-format
+msgid "VBD %s already detached"
+msgstr "le groupe %s existe déjà"
+
+#: cinder/virt/xenapi/vm_utils.py:265
+#, python-format
+msgid "VBD %(vbd_ref)s detach rejected, attempt %(num_attempt)d/%(max_attempts)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:270
+#, python-format
+msgid "Unable to unplug VBD %s"
+msgstr "Impossible de deconnecter le VBD %s"
+
+#: cinder/virt/xenapi/vm_utils.py:275
+#, python-format
+msgid "Reached maximum number of retries trying to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:286
+#, python-format
+msgid "Unable to destroy VBD %s"
+msgstr "Impossible de supprimer le VBD %s"
+
+#: cinder/virt/xenapi/vm_utils.py:305
+#, fuzzy, python-format
+msgid "Creating %(vbd_type)s-type VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+msgstr "VBD créé %(vbd_ref)s pour VM %(vm_ref)s, VDI %(vdi_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:308
+#, python-format
+msgid "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+msgstr "VBD créé %(vbd_ref)s pour VM %(vm_ref)s, VDI %(vdi_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:319
+#, python-format
+msgid "Unable to destroy VDI %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:336
+#, python-format
+msgid ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+msgstr ""
+"VDI créé %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s) on"
+" %(sr_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:345
+#, python-format
+msgid "Copied VDI %(vdi_ref)s from VDI %(vdi_to_copy_ref)s on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:353
+#, python-format
+msgid "Cloned VDI %(vdi_ref)s from VDI %(vdi_to_clone_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:372
+#, python-format
+msgid "No primary VDI found for %(vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:379
+#, fuzzy, python-format
+msgid "Snapshotting with label '%(label)s'"
+msgstr ""
+"Création de l'instantané (snapshot) pour la VM %(vm_ref)s avec le label "
+"'%(label)s'..."
+
+#: cinder/virt/xenapi/vm_utils.py:392
+#, fuzzy, python-format
+msgid "Created snapshot %(template_vm_ref)s"
+msgstr "Instantané (snapshot) créé %(template_vm_ref)s pour la  VM %(vm_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:431
+#, python-format
+msgid "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+msgstr "Demande de chargement à xapi de %(vdi_uuids)s en tant qu'ID %(image_id)s"
+
+#: cinder/virt/xenapi/vm_utils.py:583
+#, python-format
+msgid "Creating blank HD of size %(req_size)d gigs"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:634
+#, python-format
+msgid ""
+"Fast cloning is only supported on default local SR of type ext. SR on "
+"this system was found to be of type %(sr_type)s. Ignoring the cow flag."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:724
+#, python-format
+msgid ""
+"download_vhd %(image)s attempt %(attempt_num)d/%(max_attempts)d from "
+"%(glance_host)s:%(glance_port)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:734
+#, python-format
+msgid "download_vhd failed: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:750
+#, python-format
+msgid "Asking xapi to fetch vhd image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:760
+#, python-format
+msgid ""
+"xapi 'download_vhd' returned VDI of type '%(vdi_type)s' with UUID "
+"'%(vdi_uuid)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:789
+#, python-format
+msgid "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:805
+#, python-format
+msgid "image_size_bytes=%(size_bytes)d, allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:809
+#, python-format
+msgid ""
+"Image size %(size_bytes)d exceeded instance_type allowed size "
+"%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:831
+#, python-format
+msgid "Fetching image %(image)s, type %(image_type_str)"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:844
+#, fuzzy, python-format
+msgid "Size for image %(image)s: %(virtual_size)d"
+msgstr "Taille de l'image %(image)s:%(virtual_size)d"
+
+#: cinder/virt/xenapi/vm_utils.py:853
+#, python-format
+msgid ""
+"Kernel/Ramdisk image is too large: %(vdi_size)d bytes, max %(max_size)d "
+"bytes"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:870
+#, python-format
+msgid "Copying VDI %s to /boot/guest on dom0"
+msgstr "Copie de VDI %s vers /boot/guest sur dom0"
+
+#: cinder/virt/xenapi/vm_utils.py:884
+#, python-format
+msgid "Kernel/Ramdisk VDI %s destroyed"
+msgstr "Noyau/Ramdisk VDI %s détruit"
+
+#: cinder/virt/xenapi/vm_utils.py:895
+#, fuzzy
+msgid "Failed to fetch glance image"
+msgstr "Échec du redémarrage de l'instance"
+
+#: cinder/virt/xenapi/vm_utils.py:934
+#, python-format
+msgid "Detected %(image_type_str)s format for image %(image_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:955
+#, python-format
+msgid "Looking up vdi %s for PV kernel"
+msgstr "Recherche du VDI %s pour le PV kernel"
+
+#: cinder/virt/xenapi/vm_utils.py:973
+#, python-format
+msgid "Unknown image format %(disk_image_type)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1016
+#, python-format
+msgid "VDI %s is still available"
+msgstr "Le VDI %s est toujours disponible"
+
+#: cinder/virt/xenapi/vm_utils.py:1059
+#, python-format
+msgid "(VM_UTILS) xenserver vm state -> |%s|"
+msgstr "(VM_UTILS) état xenserver vm -> |%s|"
+
+#: cinder/virt/xenapi/vm_utils.py:1061
+#, python-format
+msgid "(VM_UTILS) xenapi power_state -> |%s|"
+msgstr "(VM_UTILS) xenapi power_state -> |%s|"
+
+#: cinder/virt/xenapi/vm_utils.py:1088
+#, python-format
+msgid "Unable to parse rrd of %(vm_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1108
+#, python-format
+msgid "Re-scanning SR %s"
+msgstr "Re-parcours de SR %s"
+
+#: cinder/virt/xenapi/vm_utils.py:1136
+#, python-format
+msgid "Flag sr_matching_filter '%s' does not respect formatting convention"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1154
+msgid ""
+"XenAPI is unable to find a Storage Repository to install guest instances "
+"on. Please check your configuration and/or configure the flag "
+"'sr_matching_filter'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1167
+msgid "Cannot find SR of content-type ISO"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1175
+#, python-format
+msgid "ISO: looking at SR %(sr_rec)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1177
+msgid "ISO: not iso content"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1180
+msgid "ISO: iso content_type, no 'i18n-key' key"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1183
+msgid "ISO: iso content_type, i18n-key value not 'local-storage-iso'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1187
+msgid "ISO: SR MATCHing our criteria"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1189
+msgid "ISO: ISO, looking to see if it is host local"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1192
+#, python-format
+msgid "ISO: PBD %(pbd_ref)s disappeared"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1195
+#, python-format
+msgid "ISO: PBD matching, want %(pbd_rec)s, have %(host)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1198
+msgid "ISO: SR with local PBD"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1220
+#, python-format
+msgid ""
+"Unable to obtain RRD XML for VM %(vm_uuid)s with server details: "
+"%(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1236
+#, python-format
+msgid "Unable to obtain RRD XML updates with server details: %(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1290
+#, python-format
+msgid "Invalid statistics data from Xenserver: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1343
+#, python-format
+msgid "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+msgstr "VHD %(vdi_uuid)s à pour parent %(parent_ref)s"
+
+#: cinder/virt/xenapi/vm_utils.py:1417
+#, python-format
+msgid ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+msgstr ""
+"L'UUID parent %(parent_uuid)s ne correspond pas au parent originel "
+"%(original_parent_uuid)s, attente de coalesence..."
+
+#: cinder/virt/xenapi/vm_utils.py:1427
+#, python-format
+msgid "VHD coalesce attempts exceeded (%(max_attempts)d), giving up..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1462
+#, python-format
+msgid "Timeout waiting for device %s to be created"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1473
+#, python-format
+msgid "Plugging VBD %s ... "
+msgstr "Connexion de VBD %s ... "
+
+#: cinder/virt/xenapi/vm_utils.py:1476
+#, python-format
+msgid "Plugging VBD %s done."
+msgstr "Connexion de VBD %s terminée."
+
+#: cinder/virt/xenapi/vm_utils.py:1478
+#, python-format
+msgid "VBD %(vbd_ref)s plugged as %(orig_dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1481
+#, python-format
+msgid "VBD %(vbd_ref)s plugged into wrong dev, remapping to %(dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1490
+#, python-format
+msgid "Destroying VBD for VDI %s ... "
+msgstr "Destruction de VBD pour la VDI %s ... "
+
+#: cinder/virt/xenapi/vm_utils.py:1498
+#, python-format
+msgid "Destroying VBD for VDI %s done."
+msgstr "Destruction de VBD pour la VDI %s terminée."
+
+#: cinder/virt/xenapi/vm_utils.py:1511
+#, python-format
+msgid "Running pygrub against %s"
+msgstr "Exécution de pygrub sur %s"
+
+#: cinder/virt/xenapi/vm_utils.py:1518
+#, python-format
+msgid "Found Xen kernel %s"
+msgstr "Kernel Xen %s trouvé"
+
+#: cinder/virt/xenapi/vm_utils.py:1520
+msgid "No Xen kernel found.  Booting HVM."
+msgstr "Pas de kernel Xen trouvé.  Démarrage en HVM."
+
+#: cinder/virt/xenapi/vm_utils.py:1533
+msgid "Partitions:"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1539
+#, python-format
+msgid "  %(num)s: %(ptype)s %(size)d sectors"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1565
+#, python-format
+msgid ""
+"Writing partition table %(primary_first)d %(primary_last)d to "
+"%(dev_path)s..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1578
+#, python-format
+msgid "Writing partition table %s done."
+msgstr "Ecriture de la table de partitionnement %s terminée."
+
+#: cinder/virt/xenapi/vm_utils.py:1632
+#, python-format
+msgid ""
+"Starting sparse_copy src=%(src_path)s dst=%(dst_path)s "
+"virtual_size=%(virtual_size)d block_size=%(block_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1664
+#, python-format
+msgid ""
+"Finished sparse_copy in %(duration).2f secs, %(compression_pct).2f%% "
+"reduction in size"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1714
+msgid ""
+"XenServer tools installed in this image are capable of network injection."
+"  Networking files will not bemanipulated"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1722
+msgid ""
+"XenServer tools are present in this image but are not capable of network "
+"injection"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1726
+msgid "XenServer tools are not installed in this image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1742
+msgid "Manipulating interface files directly"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1751
+#, python-format
+msgid "Failed to mount filesystem (expected for non-linux instances): %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:131 cinder/virt/xenapi/vmops.py:722
+#, python-format
+msgid "Updating progress to %(progress)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:231
+#, python-format
+msgid "Attempted to power on non-existent instance bad instance id %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:233
+#, fuzzy
+msgid "Starting instance"
+msgstr "Création d'une instance raw"
+
+#: cinder/virt/xenapi/vmops.py:303
+msgid "Removing kernel/ramdisk files from dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:358
+#, fuzzy
+msgid "Failed to spawn, rolling back"
+msgstr "Échec de la suspension de l'instance"
+
+#: cinder/virt/xenapi/vmops.py:443
+msgid "Detected ISO image type, creating blank VM for install"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:462
+msgid "Auto configuring disk, attempting to resize partition..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:515
+#, python-format
+msgid "Invalid value for injected_files: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:520
+#, python-format
+msgid "Injecting file path: '%s'"
+msgstr "Injection du chemin d'accès : '%s'"
+
+#: cinder/virt/xenapi/vmops.py:527
+msgid "Setting admin password"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:531
+msgid "Resetting network"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:538
+msgid "Setting VCPU weight"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:544
+#, fuzzy
+msgid "Starting VM"
+msgstr "Re-démarrage xvp"
+
+#: cinder/virt/xenapi/vmops.py:551
+#, python-format
+msgid ""
+"Latest agent build for %(hypervisor)s/%(os)s/%(architecture)s is "
+"%(version)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:554
+#, python-format
+msgid "No agent build found for %(hypervisor)s/%(os)s/%(architecture)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:561
+msgid "Waiting for instance state to become running"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:573
+msgid "Querying agent version"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:576
+#, python-format
+msgid "Instance agent version: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:581
+#, python-format
+msgid "Updating Agent to %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:616
+#, python-format
+msgid "No opaque_ref could be determined for '%s'."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:670
+#, fuzzy, python-format
+msgid "Finished snapshot and upload for VM"
+msgstr "Fin de l'instantané et du chargement de VM %s"
+
+#: cinder/virt/xenapi/vmops.py:677
+#, fuzzy, python-format
+msgid "Starting snapshot for VM"
+msgstr "Début de création d'instantané (snapshot) pour la VM %s"
+
+#: cinder/virt/xenapi/vmops.py:686
+#, fuzzy, python-format
+msgid "Unable to Snapshot instance: %(exc)s"
+msgstr "Impossible d'attacher le volume à l'instance %s"
+
+#: cinder/virt/xenapi/vmops.py:702
+msgid "Failed to transfer vhd to new host"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:770
+#, python-format
+msgid "Resizing down VDI %(cow_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:893
+#, python-format
+msgid "Resizing up VDI %(vdi_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:901
+msgid "Resize complete"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:928
+#, python-format
+msgid "Failed to query agent version: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:949
+#, python-format
+msgid "domid changed from %(domid)s to %(newdomid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:962
+#, python-format
+msgid "Failed to update agent: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:983
+#, python-format
+msgid "Failed to exchange keys: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:998
+#, python-format
+msgid "Failed to update password: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1023
+#, python-format
+msgid "Failed to inject file: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1032
+msgid "VM already halted, skipping shutdown..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1036
+msgid "Shutting down VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1054
+msgid "Unable to find VBD for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1097
+msgid "Using RAW or VHD, skipping kernel and ramdisk deletion"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1104
+msgid "instance has a kernel or ramdisk but not both"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1111
+msgid "kernel/ramdisk files removed"
+msgstr "Fichiers noyau/ramdisk supprimés"
+
+#: cinder/virt/xenapi/vmops.py:1121
+msgid "VM destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1147
+#, fuzzy
+msgid "Destroying VM"
+msgstr "Re-démarrage xvp"
+
+#: cinder/virt/xenapi/vmops.py:1169
+msgid "VM is not present, skipping destroy..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1222
+#, python-format
+msgid "Instance is already in Rescue Mode: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1296
+#, python-format
+msgid "Found %(instance_count)d hung reboots older than %(timeout)d seconds"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1300
+msgid "Automatically hard rebooting"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1363
+#, python-format
+msgid "Setting migration %(migration_id)s to error: %(reason)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1374
+#, python-format
+msgid ""
+"Automatically confirming migration %(migration_id)s for instance "
+"%(instance_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1379
+#, fuzzy, python-format
+msgid "Instance %(instance_uuid)s not found"
+msgstr "L'instance %(instance_id)s  n'est pas suspendue"
+
+#: cinder/virt/xenapi/vmops.py:1383
+msgid "In ERROR state"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1389
+#, python-format
+msgid "In %(task_state)s task_state, not RESIZE_VERIFY"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1396
+#, python-format
+msgid "Error auto-confirming resize: %(e)s. Will retry later."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1418
+msgid "Could not get bandwidth info."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1469
+#, fuzzy
+msgid "Injecting network info to xenstore"
+msgstr "réglage de l'hôte réseau"
+
+#: cinder/virt/xenapi/vmops.py:1483
+msgid "Creating vifs"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1492
+#, fuzzy, python-format
+msgid "Creating VIF for network %(network_ref)s"
+msgstr "Création du VIF pour la VM %(vm_ref)s, réseau %(network_ref)s."
+
+#: cinder/virt/xenapi/vmops.py:1495
+#, fuzzy, python-format
+msgid "Created VIF %(vif_ref)s, network %(network_ref)s"
+msgstr "Création du VIF pour la VM %(vm_ref)s, réseau %(network_ref)s."
+
+#: cinder/virt/xenapi/vmops.py:1520
+msgid "Injecting hostname to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1545
+#, python-format
+msgid ""
+"The agent call to %(method)s returned an invalid response: %(ret)r. "
+"path=%(path)s; args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1566
+#, python-format
+msgid "TIMEOUT: The call to %(method)s timed out. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1570
+#, python-format
+msgid ""
+"NOT IMPLEMENTED: The call to %(method)s is not supported by the agent. "
+"args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1575
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1661
+#, python-format
+msgid "OpenSSL error: %s"
+msgstr "Erreur OpenSSL : %s"
+
+#: cinder/virt/xenapi/volume_utils.py:52
+msgid "creating sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:55 cinder/virt/xenapi/volume_utils.py:83
+#, python-format
+msgid "type is = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:58 cinder/virt/xenapi/volume_utils.py:86
+#, python-format
+msgid "name = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:71
+#, python-format
+msgid "Created %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:76 cinder/virt/xenapi/volume_utils.py:174
+msgid "Unable to create Storage Repository"
+msgstr "Impossible de créer le dépot de stockage"
+
+#: cinder/virt/xenapi/volume_utils.py:80
+msgid "introducing sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:103 cinder/virt/xenapi/volume_utils.py:170
+#: cinder/virt/xenapi/volumeops.py:156
+#, python-format
+msgid "Introduced %(label)s as %(sr_ref)s."
+msgstr "%(label)s introduit comme %(sr_ref)s."
+
+#: cinder/virt/xenapi/volume_utils.py:106
+msgid "Creating pbd for SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:108
+msgid "Plugging SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:116 cinder/virt/xenapi/volumeops.py:160
+msgid "Unable to introduce Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:127 cinder/virt/xenapi/volumeops.py:50
+msgid "Unable to get SR using uuid"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:129
+#, python-format
+msgid "Forgetting SR %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:137
+msgid "Unable to forget Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:157
+#, python-format
+msgid "Introducing %s..."
+msgstr "Introduction de %s"
+
+#: cinder/virt/xenapi/volume_utils.py:186
+#, python-format
+msgid "Unable to find SR from VBD %s"
+msgstr "Impossible de trouver SR du VDB %s"
+
+#: cinder/virt/xenapi/volume_utils.py:204
+#, python-format
+msgid "Ignoring exception %(exc)s when getting PBDs for %(sr_ref)s"
+msgstr "Exception %(exc)s ignorée pendant l'obtention de PBDs pour %(sr_ref)s"
+
+#: cinder/virt/xenapi/volume_utils.py:210
+#, python-format
+msgid "Ignoring exception %(exc)s when unplugging PBD %(pbd)s"
+msgstr "Exception %(exc)s ignorée pendant la deconnexion du PBD %(pbd)s"
+
+#: cinder/virt/xenapi/volume_utils.py:234
+#, python-format
+msgid "Unable to introduce VDI on SR %s"
+msgstr "Impossible d'introduire VDI sur SR %s"
+
+#: cinder/virt/xenapi/volume_utils.py:242
+#, python-format
+msgid "Unable to get record of VDI %s on"
+msgstr "Impossible de récuppérer l'enregistrement du VDI %s sur"
+
+#: cinder/virt/xenapi/volume_utils.py:264
+#, python-format
+msgid "Unable to introduce VDI for SR %s"
+msgstr "Impossible d'introduire le VDI pour SR %s"
+
+#: cinder/virt/xenapi/volume_utils.py:274
+#, python-format
+msgid "Error finding vdis in SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:281
+#, python-format
+msgid "Unable to find vbd for vdi %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:315
+#, python-format
+msgid "Unable to obtain target information %(data)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:341
+#, python-format
+msgid "Mountpoint cannot be translated: %s"
+msgstr "Le point de montage ne peut pas être traduit : %s"
+
+#: cinder/virt/xenapi/volumeops.py:64
+msgid "Could not find VDI ref"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:69
+#, python-format
+msgid "Creating SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:73
+msgid "Could not create SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:76
+msgid "Could not retrieve SR record"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:81
+#, python-format
+msgid "Introducing SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:85
+msgid "SR found in xapi database. No need to introduce"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:90
+msgid "Could not introduce SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:94
+#, python-format
+msgid "Checking for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:106
+#, python-format
+msgid "SR %s not found in the xapi database"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:112
+msgid "Could not forget SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:121
+#, python-format
+msgid "Attach_volume: %(connection_info)s, %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:178
+#, python-format
+msgid "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+msgstr ""
+"Impossible de créer VDI sur SR %(sr_ref)s pour l'instance "
+"%(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:189
+#, python-format
+msgid "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+msgstr "Impossible d'utiliser SR %(sr_ref)s pour l'instance %(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:197
+#, python-format
+msgid "Unable to attach volume to instance %s"
+msgstr "Impossible d'attacher le volume à l'instance %s"
+
+#: cinder/virt/xenapi/volumeops.py:200
+#, python-format
+msgid "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+msgstr ""
+"Le point de montage %(mountpoint)s a été attaché à l'instance "
+"%(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:210
+#, python-format
+msgid "Detach_volume: %(instance_name)s, %(mountpoint)s"
+msgstr "Detach_volume: %(instance_name)s, %(mountpoint)s"
+
+#: cinder/virt/xenapi/volumeops.py:219
+#, python-format
+msgid "Unable to locate volume %s"
+msgstr "Impossible de trouver le volume %s"
+
+#: cinder/virt/xenapi/volumeops.py:227
+#, python-format
+msgid "Unable to detach volume %s"
+msgstr "Impossible de détacher le volume %s"
+
+#: cinder/virt/xenapi/volumeops.py:232
+#, python-format
+msgid "Unable to destroy vbd %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:239
+#, python-format
+msgid "Error purging SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:241
+#, python-format
+msgid "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+msgstr ""
+"Le point de montage %(mountpoint)s à été détaché de l'instance "
+"%(instance_name)s"
+
+#: cinder/vnc/xvp_proxy.py:98 cinder/vnc/xvp_proxy.py:103
+#, python-format
+msgid "Error in handshake: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:119
+#, python-format
+msgid "Invalid request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:139
+#, python-format
+msgid "Request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:142
+#, python-format
+msgid "Request made with missing token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:153
+#, python-format
+msgid "Request made with invalid token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:160
+#, python-format
+msgid "Unexpected error: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:180
+#, python-format
+msgid "Starting cinder-xvpvncproxy node (version %s)"
+msgstr ""
+
+#: cinder/volume/api.py:74 cinder/volume/api.py:220
+msgid "status must be available"
+msgstr ""
+
+#: cinder/volume/api.py:85
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to create %(size)sG volume"
+msgstr ""
+
+#: cinder/volume/api.py:137
+#, fuzzy
+msgid "Volume status must be available or error"
+msgstr "Le status du volume doit être disponible"
+
+#: cinder/volume/api.py:142
+#, python-format
+msgid "Volume still has %d dependent snapshots"
+msgstr ""
+
+#: cinder/volume/api.py:223
+msgid "already attached"
+msgstr ""
+
+#: cinder/volume/api.py:230
+msgid "already detached"
+msgstr ""
+
+#: cinder/volume/api.py:292
+msgid "must be available"
+msgstr ""
+
+#: cinder/volume/api.py:325
+#, fuzzy
+msgid "Volume Snapshot status must be available or error"
+msgstr "Le status du volume doit être disponible"
+
+#: cinder/volume/driver.py:96
+#, python-format
+msgid "Recovering from a failed execute.  Try number %s"
+msgstr "Récupération après une exécution erronée. Tentative numéro %s"
+
+#: cinder/volume/driver.py:106
+#, python-format
+msgid "volume group %s doesn't exist"
+msgstr "Le groupe de volume %s n'existe pas"
+
+#: cinder/volume/driver.py:270
+#, python-format
+msgid "Skipping ensure_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:318
+#, python-format
+msgid "Skipping remove_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:327
+#, python-format
+msgid ""
+"Skipping remove_export. No iscsi_target is presently exported for volume:"
+" %d"
+msgstr ""
+
+#: cinder/volume/driver.py:337
+msgid "ISCSI provider_location not stored, using discovery"
+msgstr ""
+
+#: cinder/volume/driver.py:384
+#, python-format
+msgid "Could not find iSCSI export  for volume %s"
+msgstr "Imposible de trouver une exportation iSCSI pour le volume %s"
+
+#: cinder/volume/driver.py:388
+#, python-format
+msgid "ISCSI Discovery: Found %s"
+msgstr ""
+
+#: cinder/volume/driver.py:466
+#, python-format
+msgid "Cannot confirm exported volume id:%(volume_id)s."
+msgstr ""
+
+#: cinder/volume/driver.py:493
+#, python-format
+msgid "FAKE ISCSI: %s"
+msgstr "FAUX ISCSI: %s"
+
+#: cinder/volume/driver.py:505
+#, python-format
+msgid "rbd has no pool %s"
+msgstr "rbd n'as pas de file %s"
+
+#: cinder/volume/driver.py:579
+#, python-format
+msgid "Sheepdog is not working: %s"
+msgstr "Sheepdog n'est pas actif : %s"
+
+#: cinder/volume/driver.py:581
+msgid "Sheepdog is not working"
+msgstr "Sheepdog n'est pas actif"
+
+#: cinder/volume/driver.py:680 cinder/volume/driver.py:685
+#, python-format
+msgid "LoggingVolumeDriver: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:96
+#, python-format
+msgid "Re-exporting %s volumes"
+msgstr "Ré-exportation de %s volumes"
+
+#: cinder/volume/manager.py:101
+#, python-format
+msgid "volume %s: skipping export"
+msgstr "volume %s : exportation évitée"
+
+#: cinder/volume/manager.py:107
+#, python-format
+msgid "volume %s: creating"
+msgstr "volume %s: création"
+
+#: cinder/volume/manager.py:119
+#, python-format
+msgid "volume %(vol_name)s: creating lv of size %(vol_size)sG"
+msgstr "volume %(vol_name)s: cŕeation d'un volume logique de %(vol_size)sG"
+
+#: cinder/volume/manager.py:131
+#, python-format
+msgid "volume %s: creating export"
+msgstr "volume %s: exportation en cours"
+
+#: cinder/volume/manager.py:144
+#, python-format
+msgid "volume %s: created successfully"
+msgstr "volume %s: crée avec succès"
+
+#: cinder/volume/manager.py:153
+msgid "Volume is still attached"
+msgstr "Le volume est encore attaché"
+
+#: cinder/volume/manager.py:155
+msgid "Volume is not local to this node"
+msgstr "Le volume n'est pas local à ce noeud"
+
+#: cinder/volume/manager.py:159
+#, python-format
+msgid "volume %s: removing export"
+msgstr "volume %s: suppression de l'exportation"
+
+#: cinder/volume/manager.py:161
+#, python-format
+msgid "volume %s: deleting"
+msgstr "volume %s: suppression"
+
+#: cinder/volume/manager.py:164
+#, python-format
+msgid "volume %s: volume is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:176
+#, python-format
+msgid "volume %s: deleted successfully"
+msgstr "volume %s: supprimé avec succès"
+
+#: cinder/volume/manager.py:183
+#, python-format
+msgid "snapshot %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:187
+#, python-format
+msgid "snapshot %(snap_name)s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:202
+#, python-format
+msgid "snapshot %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:211
+#, python-format
+msgid "snapshot %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:214
+#, fuzzy, python-format
+msgid "snapshot %s: snapshot is busy"
+msgstr "instance %s: création d'un instantané (snapshot)"
+
+#: cinder/volume/manager.py:226
+#, python-format
+msgid "snapshot %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:310
+msgid "Checking volume capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:314
+#, python-format
+msgid "New capabilities found: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:325
+msgid "Clear capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:329
+#, python-format
+msgid "Notification {%s} received"
+msgstr ""
+
+#: cinder/volume/netapp.py:79
+#, python-format
+msgid "API %(name)sfailed: %(reason)s"
+msgstr ""
+
+#: cinder/volume/netapp.py:109
+#, python-format
+msgid "%s is not set"
+msgstr ""
+
+#: cinder/volume/netapp.py:128
+#, fuzzy
+msgid "Connected to DFM server"
+msgstr "Reconnection à la queue"
+
+#: cinder/volume/netapp.py:159
+#, fuzzy, python-format
+msgid "Job failed: %s"
+msgstr "\"Non trouvé\" remonté : %s"
+
+#: cinder/volume/netapp.py:240
+msgid "Failed to provision dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:252
+msgid "No LUN was created by the provision job"
+msgstr ""
+
+#: cinder/volume/netapp.py:261 cinder/volume/netapp.py:433
+#, fuzzy, python-format
+msgid "Failed to find LUN ID for volume %s"
+msgstr "Imposible de trouver une exportation iSCSI pour le volume %s"
+
+#: cinder/volume/netapp.py:280
+msgid "Failed to remove and delete dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:603 cinder/volume/netapp.py:657
+#, fuzzy, python-format
+msgid "No LUN ID for volume %s"
+msgstr "Imposible de trouver une exportation iSCSI pour le volume %s"
+
+#: cinder/volume/netapp.py:607 cinder/volume/netapp.py:661
+#, fuzzy, python-format
+msgid "Failed to get LUN details for LUN ID %s"
+msgstr "Impossible de récupérer les méta-donnérs pour l'IP : %s"
+
+#: cinder/volume/netapp.py:614
+#, fuzzy, python-format
+msgid "Failed to get host details for host ID %s"
+msgstr "Impossible de récupérer les méta-donnérs pour l'IP : %s"
+
+#: cinder/volume/netapp.py:620
+#, fuzzy, python-format
+msgid "Failed to get target portal for filer: %s"
+msgstr "Impossible de récupérer les méta-donnérs pour l'IP : %s"
+
+#: cinder/volume/netapp.py:625
+#, fuzzy, python-format
+msgid "Failed to get target IQN for filer: %s"
+msgstr "Impossible de récupérer les méta-donnérs pour l'IP : %s"
+
+#: cinder/volume/san.py:113 cinder/volume/san.py:151
+msgid "Specify san_password or san_private_key"
+msgstr ""
+
+#: cinder/volume/san.py:156
+msgid "san_ip must be set"
+msgstr ""
+
+#: cinder/volume/san.py:320
+#, python-format
+msgid "LUID not found for %(zfs_poolname)s. Output=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:452
+#, python-format
+msgid "CLIQ command returned %s"
+msgstr ""
+
+#: cinder/volume/san.py:458
+#, python-format
+msgid "Malformed response to CLIQ command %(verb)s %(cliq_args)s. Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:466
+#, python-format
+msgid "Error running CLIQ command %(verb)s %(cliq_args)s.  Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:496
+#, python-format
+msgid ""
+"Unexpected number of virtual ips for cluster  %(cluster_name)s. "
+"Result=%(_xml)s"
+msgstr ""
+
+#: cinder/volume/san.py:549
+#, python-format
+msgid "Volume info: %(volume_name)s => %(volume_attributes)s"
+msgstr ""
+
+#: cinder/volume/san.py:594
+msgid "local_path not supported"
+msgstr ""
+
+#: cinder/volume/san.py:626
+#, python-format
+msgid "Could not determine project for volume %s, can't export"
+msgstr ""
+
+#: cinder/volume/san.py:696
+#, python-format
+msgid "Payload for SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:713
+#, python-format
+msgid "Call to json.loads() raised an exception: %s"
+msgstr ""
+
+#: cinder/volume/san.py:718
+#, python-format
+msgid "Results of SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:732
+#, python-format
+msgid "Found solidfire account: %s"
+msgstr ""
+
+#: cinder/volume/san.py:746
+#, python-format
+msgid "solidfire account: %s does not exist, create it..."
+msgstr ""
+
+#: cinder/volume/san.py:804
+msgid "Enter SolidFire create_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:846
+msgid "Leaving SolidFire create_volume"
+msgstr ""
+
+#: cinder/volume/san.py:861
+msgid "Enter SolidFire delete_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:880
+#, python-format
+msgid "Deleting volumeID: %s "
+msgstr ""
+
+#: cinder/volume/san.py:888
+msgid "Leaving SolidFire delete_volume"
+msgstr ""
+
+#: cinder/volume/san.py:891
+msgid "Executing SolidFire ensure_export..."
+msgstr ""
+
+#: cinder/volume/san.py:895
+msgid "Executing SolidFire create_export..."
+msgstr ""
+
+#: cinder/volume/volume_types.py:49 cinder/volume/volume_types.py:108
+msgid "name cannot be None"
+msgstr ""
+
+#: cinder/volume/volume_types.py:96
+msgid "id cannot be None"
+msgstr ""
+
+#: cinder/volume/xensm.py:55
+#, python-format
+msgid "SR name = %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:56
+#, python-format
+msgid "Params: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:60
+#, python-format
+msgid "Failed to create sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:62
+msgid "Create failed"
+msgstr ""
+
+#: cinder/volume/xensm.py:64
+#, python-format
+msgid "SR UUID of new SR is: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:71
+msgid "Failed to update db"
+msgstr ""
+
+#: cinder/volume/xensm.py:80
+#, python-format
+msgid "Failed to introduce sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:91
+#, python-format
+msgid "Failed to reach backend %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:100
+msgid "XenSMDriver requires xenapi connection"
+msgstr ""
+
+#: cinder/volume/xensm.py:110
+msgid "Failed to initiate session"
+msgstr ""
+
+#: cinder/volume/xensm.py:142
+#, python-format
+msgid "Volume will be created in backend - %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:154
+msgid "Failed to update volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:157
+msgid "Unable to create volume"
+msgstr ""
+
+#: cinder/volume/xensm.py:171
+msgid "Failed to delete vdi"
+msgstr ""
+
+#: cinder/volume/xensm.py:177
+msgid "Failed to delete volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:210
+msgid "Failed to find volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:221
+msgid "Failed to find backend in db"
+msgstr ""
+
+#: cinder/volume/nexenta/__init__.py:27
+msgid "Nexenta SA returned the error"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:64
+#, python-format
+msgid "Sending JSON data: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:69
+#, python-format
+msgid "Auto switching to HTTPS connection to %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:75
+msgid "No headers in server response"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:76
+msgid "Bad response from server"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:79
+#, fuzzy, python-format
+msgid "Got response: %s"
+msgstr "réponse %s"
+
+#: cinder/volume/nexenta/volume.py:96
+#, fuzzy, python-format
+msgid "Volume %s does not exist in Nexenta SA"
+msgstr "Le groupe de volume %s n'existe pas"
+
+#: cinder/volume/nexenta/volume.py:180
+msgid ""
+"Call to local_path should not happen. Verify that use_local_volumes flag "
+"is turned off."
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:202
+#, python-format
+msgid "Ignored target creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:210
+#, python-format
+msgid "Ignored target group creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:219
+#, python-format
+msgid "Ignored target group member addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:227
+#, python-format
+msgid "Ignored LU creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:237
+#, python-format
+msgid "Ignored LUN mapping entry addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:273
+#, python-format
+msgid ""
+"Got error trying to destroy target group %(target_group)s, assuming it is"
+" already gone: %(exc)s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:280
+#, python-format
+msgid ""
+"Got error trying to delete target %(target)s, assuming it is already "
+"gone: %(exc)s"
+msgstr ""
+
+#~ msgid "Unable to locate account %(account_name) on Solidfire device"
+#~ msgstr ""
+
+#~ msgid "Zone %(zone_id)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Cinder access parameters were not specified."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(id)d could not be found."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(name)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Detected more than one volume with name %(vol_name)"
+#~ msgstr ""
+
+#~ msgid "Detected existing vlan with id %(vlan)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab semaphore \"%(lock)s\" "
+#~ "for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab file lock "
+#~ "\"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Parent group id and group id cannot be same"
+#~ msgstr ""
+
+#~ msgid "No body provided"
+#~ msgstr ""
+
+#~ msgid "Create VSA %(display_name)s of type %(vc_type)s"
+#~ msgstr ""
+
+#~ msgid "Delete VSA with id: %s"
+#~ msgstr ""
+
+#~ msgid "Associate address %(ip)s to VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "Disassociate address from VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "%(obj)s with ID %(id)s not found"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(obj)s with ID %(id)s belongs to "
+#~ "VSA %(own_vsa_id)s and not to VSA "
+#~ "%(vsa_id)s."
+#~ msgstr ""
+
+#~ msgid "Index. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Detail. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Create. vsa_id=%(vsa_id)s, body=%(body)s"
+#~ msgstr ""
+
+#~ msgid "Create volume of %(size)s GB from VSA ID %(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Update %(obj)s with id: %(id)s, changes: %(changes)s"
+#~ msgstr ""
+
+#~ msgid "Delete. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Show. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Index instances for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You cannot run"
+#~ " any more instances of this type."
+#~ msgstr ""
+
+#~ msgid "Going to try to soft delete %s"
+#~ msgstr ""
+
+#~ msgid "No host for instance %s, deleting immediately"
+#~ msgstr ""
+
+#~ msgid "Going to try to stop %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to start %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Going to force the deletion of the"
+#~ " vm %(instance_uuid)s, even if it is"
+#~ " deleted"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s did not exist "
+#~ "in the DB, but I will shut "
+#~ "it down anyway using a special "
+#~ "context"
+#~ msgstr ""
+
+#~ msgid "exception terminating the instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "trying to destroy already destroyed instance: %s"
+#~ msgstr "Tentative de destruction d'une instance déjà détruite: %s"
+
+#~ msgid ""
+#~ "Instance %(name)s found in database but"
+#~ " not known by hypervisor. Setting "
+#~ "power state to NOSTATE"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Detected instance  with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Destroying instance with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid "SQL connection failed (%(connstring)s). %(attempts)d attempts left."
+#~ msgstr ""
+
+#~ msgid "Can't downgrade without losing data"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_id)s not found"
+#~ msgstr ""
+
+#~ msgid "Network %s has active ports, cannot delete"
+#~ msgstr ""
+
+#~ msgid "No fixed IPs to deallocate for vif %sid"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "AMQP server on %(fl_host)s:%(fl_port)d is "
+#~ "unreachable: %(e)s. Trying again in "
+#~ "%(fl_intv)d seconds."
+#~ msgstr ""
+
+#~ msgid "Unable to connect to AMQP server after %(tries)d tries. Shutting down."
+#~ msgstr ""
+
+#~ msgid "Failed to fetch message from queue: %s"
+#~ msgstr ""
+
+#~ msgid "Initing the Adapter Consumer for %s"
+#~ msgstr "Initialisation du Consomateur d'Adapteur pour %s"
+
+#~ msgid "Created \"%(exchange)s\" fanout exchange with \"%(key)s\" routing key"
+#~ msgstr ""
+
+#~ msgid "Exception while processing consumer"
+#~ msgstr ""
+
+#~ msgid "Creating \"%(exchange)s\" fanout exchange"
+#~ msgstr ""
+
+#~ msgid "topic is %s"
+#~ msgstr "le sujet est %s"
+
+#~ msgid "message %s"
+#~ msgstr "message %s"
+
+#~ msgid ""
+#~ "Cannot confirm tmpfile at %(ipath)s is"
+#~ " on same shared storage between "
+#~ "%(src)s and %(dest)s."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of memory(host:%(avail)s <= "
+#~ "instance:%(mem_inst)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of disk(host:%(available)s <="
+#~ " instance:%(necessary)s)"
+#~ msgstr ""
+
+#~ msgid "Driver Method %(driver_method)s missing: %(e)s.Reverting to schedule()"
+#~ msgstr ""
+
+#~ msgid "Setting instance %(instance_uuid)s to ERROR state."
+#~ msgstr ""
+
+#~ msgid "_filter_hosts: %(request_spec)s"
+#~ msgstr ""
+
+#~ msgid "Filter hosts for drive type %s"
+#~ msgstr ""
+
+#~ msgid "Host %s has no free capacity. Skip"
+#~ msgstr ""
+
+#~ msgid "Filter hosts: %s"
+#~ msgstr ""
+
+#~ msgid "Must implement host selection mechanism"
+#~ msgstr ""
+
+#~ msgid "Maximum number of hosts selected (%d)"
+#~ msgstr ""
+
+#~ msgid "Selected excessive host %(host)s"
+#~ msgstr ""
+
+#~ msgid "Provision volume %(name)s of size %(size)s GB on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "volume_params %(volume_params)s"
+#~ msgstr ""
+
+#~ msgid "%(i)d: Volume %(name)s"
+#~ msgstr ""
+
+#~ msgid "Attempting to spawn %(num_volumes)d volume(s)"
+#~ msgstr ""
+
+#~ msgid "Error creating volumes"
+#~ msgstr ""
+
+#~ msgid "Non-VSA volume %d"
+#~ msgstr ""
+
+#~ msgid "Spawning volume %(volume_id)s with drive type %(drive_type)s"
+#~ msgstr ""
+
+#~ msgid "Error creating volume"
+#~ msgstr ""
+
+#~ msgid "No capability selected for volume of size %(size)s"
+#~ msgstr ""
+
+#~ msgid "Host %s:"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\tDrive %(qosgrp)-25s: total %(total)2s, "
+#~ "used %(used)2s, free %(free)2s. Available "
+#~ "capacity %(avail)-5s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t LeastUsedHost: Best host: %(best_host)s."
+#~ " (used capacity %(min_used)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t MostAvailCap: Best host: %(best_host)s. "
+#~ "(available %(max_avail)s %(type_str)s)"
+#~ msgstr ""
+
+#~ msgid "(%(nm)s) publish (key: %(routing_key)s) %(message)s"
+#~ msgstr "(%(nm)s) publication (key: %(routing_key)s) %(message)s"
+
+#~ msgid "Publishing to route %s"
+#~ msgstr "Publication vers la route %s"
+
+#~ msgid "Declaring queue %s"
+#~ msgstr "Déclaration de la queue %s"
+
+#~ msgid "Declaring exchange %s"
+#~ msgstr "Déclaration de l'échange %s"
+
+#~ msgid "Binding %(queue)s to %(exchange)s with key %(routing_key)s"
+#~ msgstr ""
+#~ "Rattachement de %(queue)s vers %(exchange)s"
+#~ " avec la clef %(routing_key)s"
+
+#~ msgid "Getting from %(queue)s: %(message)s"
+#~ msgstr "Récupération depuis %(queue)s: %(message)s"
+
+#~ msgid "Test: Emulate wrong VSA name. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate DB error. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: user_data = %s"
+#~ msgstr ""
+
+#~ msgid "_create: param=%s"
+#~ msgstr ""
+
+#~ msgid "Host %s"
+#~ msgstr ""
+
+#~ msgid "Test: provision vol %(name)s on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "\t vol=%(vol)s"
+#~ msgstr ""
+
+#~ msgid "Test: VSA update request: vsa_id=%(vsa_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume create: %s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get request: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume update request: id=%(volume_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: success    %(result)s"
+#~ msgstr "Tâche [%(name)s] %(task)s état : succès   %(result)s"
+
+#~ msgid "Task [%(name)s] %(task)s status: %(status)s    %(error_info)s"
+#~ msgstr "Tâche [%(name)s] %(task)s état : %(status)s    %(error_info)s"
+
+#~ msgid "Unable to get updated status: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "deactivate_node is called for                "
+#~ "node_id = %(id)s node_ip = %(ip)s"
+#~ msgstr ""
+
+#~ msgid "virsh said: %r"
+#~ msgstr "virsh a retourné : %r"
+
+#~ msgid "cool, it's a device"
+#~ msgstr "super, c'est un device"
+
+#~ msgid "Unable to read LXC console"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "to xml...\n"
+#~ ":%s "
+#~ msgstr ""
+
+#~ msgid "During wait running, %s disappeared."
+#~ msgstr ""
+
+#~ msgid "Instance %s running successfully."
+#~ msgstr ""
+
+#~ msgid "The nwfilter(%(instance_secgroup_filter_name)s) is not found."
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image verification failed"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): image "
+#~ "verification skipped, no hash stored"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): checking"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in use:"
+#~ " on this node %(local)d local, "
+#~ "%(remote)d on other nodes"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): warning "
+#~ "-- an absent base file is in "
+#~ "use! instances: %(instance_list)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in: on"
+#~ " other nodes (%(remote)d on other "
+#~ "nodes)"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is not in use"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is in use"
+#~ msgstr ""
+
+#~ msgid "Created VM %s..."
+#~ msgstr "VM %s crée..."
+
+#~ msgid "Created VM %(instance_name)s as %(vm_ref)s."
+#~ msgstr "VM %(instance_name)s crée en tant que %(vm_ref)s."
+
+#~ msgid "Creating a CDROM-specific VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Created a CDROM-specific VBD %(vbd_ref)s"
+#~ "  for VM %(vm_ref)s, VDI %(vdi_ref)s."
+#~ msgstr ""
+
+#~ msgid "No primary VDI found for%(vm_ref)s"
+#~ msgstr ""
+
+#~ msgid "Fetching image %(image)s"
+#~ msgstr ""
+
+#~ msgid "Image Type: %s"
+#~ msgstr ""
+
+#~ msgid "ISO: Found sr possibly containing the ISO image"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to fetch glance image"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s ... "
+#~ msgstr "Création de VBD pour la VDI %s ... "
+
+#~ msgid "Creating VBD for VDI %s done."
+#~ msgstr "La création de VBD pour la VDI %s est terminée."
+
+#~ msgid "VBD.unplug successful first time."
+#~ msgstr "VBD.unplug terminé dés la première tentative."
+
+#~ msgid "VBD.unplug rejected: retrying..."
+#~ msgstr "VBD.unplug refusé : nouvel essai..."
+
+#~ msgid "Not sleeping anymore!"
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful eventually."
+#~ msgstr "VBD.unplug à enfin été achevée."
+
+#~ msgid "Ignoring XenAPI.Failure in VBD.unplug: %s"
+#~ msgstr "XenAPI.Failure ignorée dans VBD.unplug: %s"
+
+#~ msgid "Ignoring XenAPI.Failure %s"
+#~ msgstr "XenAPI.Failure %s ignorée"
+
+#~ msgid "Starting instance %s"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn"
+#~ msgstr "instance %s: n'a pas pu être crée"
+
+#~ msgid "Instance %s failed to spawn - performing clean-up"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn - Unable to create VM"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Auto configuring disk for instance "
+#~ "%(instance_uuid)s, attempting to resize "
+#~ "partition..."
+#~ msgstr ""
+
+#~ msgid "Invalid value for injected_files: '%s'"
+#~ msgstr ""
+
+#~ msgid "Starting VM %s..."
+#~ msgstr "Démarrage de la VM %s..."
+
+#~ msgid "Spawning VM %(instance_uuid)s created %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Instance %s: waiting for running"
+#~ msgstr ""
+
+#~ msgid "Instance %s: running"
+#~ msgstr ""
+
+#~ msgid "Resources to remove:%s"
+#~ msgstr ""
+
+#~ msgid "Removing VDI %(vdi_ref)s(uuid:%(vdi_to_remove)s)"
+#~ msgstr ""
+
+#~ msgid "Skipping VDI destroy for %s"
+#~ msgstr ""
+
+#~ msgid "Unable to Snapshot instance %(instance_uuid)s: %(exc)s"
+#~ msgstr ""
+
+#~ msgid "Updating instance '%(instance_uuid)s' progress to %(progress)d"
+#~ msgstr ""
+
+#~ msgid "Resize instance %s complete"
+#~ msgstr ""
+
+#~ msgid "domid changed from %(olddomid)s to %(newdomid)s"
+#~ msgstr ""
+
+#~ msgid "VM %(instance_uuid)s already halted,skipping shutdown..."
+#~ msgstr ""
+
+#~ msgid "Shutting down VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Destroying VDIs for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s using RAW or "
+#~ "VHD, skipping kernel and ramdisk "
+#~ "deletion"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_uuid)s VM destroyed"
+#~ msgstr ""
+
+#~ msgid "Destroying VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Automatically hard rebooting %d"
+#~ msgstr ""
+
+#~ msgid "Instance for migration %d not found, skipping"
+#~ msgstr ""
+
+#~ msgid "injecting network info to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "creating vif(s) for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "Created VIF %(vif_ref)s for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr "VIF créé %(vif_ref)s pour la VM %(vm_ref)s, network %(network_ref)s."
+
+#~ msgid "injecting hostname to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The agent call to %(method)s returned"
+#~ " an invalid response: %(ret)r. VM "
+#~ "id=%(instance_uuid)s; path=%(path)s; args=%(addl_args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "TIMEOUT: The call to %(method)s timed"
+#~ " out. VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "NOT IMPLEMENTED: The call to %(method)s"
+#~ " is not supported by the agent. "
+#~ "VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The call to %(method)s returned an "
+#~ "error: %(e)s. VM id=%(instance_uuid)s; "
+#~ "args=%(args)r"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr "Création de VBD pour VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+
+#~ msgid "Error destroying VDI"
+#~ msgstr ""
+
+#~ msgid "\tVolume %s is NOT VSA volume"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s creation - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s succeeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s deletion - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s suceeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s local path call - call discover"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s ensure export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s create export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s remove export - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE remove_export for %s failed"
+#~ msgstr ""
+
+#~ msgid "Failed to retrieve QoS info"
+#~ msgstr ""
+
+#~ msgid "invalid drive data"
+#~ msgstr ""
+
+#~ msgid "drive_name not defined"
+#~ msgstr ""
+
+#~ msgid "invalid drive type name %s"
+#~ msgstr ""
+
+#~ msgid "*** Experimental VSA code ***"
+#~ msgstr ""
+
+#~ msgid "Requested number of VCs (%d) is too high. Setting to default"
+#~ msgstr ""
+
+#~ msgid "Creating VSA: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d %(vsa_name)s: Create "
+#~ "volume %(vol_name)s, %(vol_size)d GB, type "
+#~ "%(vol_type_id)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA status to %(status)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA call"
+#~ msgstr ""
+
+#~ msgid "Adding %(add_cnt)s VCs to VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "Deleting %(del_cnt)s VCs from VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Deleting %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Unable to delete volume %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Forced delete. %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate VSA ID %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Delete instance %(name)s"
+#~ msgstr ""
+
+#~ msgid "Create call received for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Failed to find VSA %(vsa_id)d"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Drive %(vol_id)s created. Status %(status)s"
+#~ msgstr ""
+
+#~ msgid "Drive %(vol_name)s (%(vol_disp_name)s) still in creating phase - wait"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Not all volumes "
+#~ "are created (%(cvol_real)d of %(cvol_exp)d)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Drive %(vol_name)s "
+#~ "(%(vol_disp_name)s) is in %(status)s state"
+#~ msgstr ""
+
+#~ msgid "Failed to update attach status for volume %(vol_name)s. %(ex)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Delete all BE volumes"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Start %(vc_count)d instances"
+#~ msgstr ""
+
diff --git a/cinder/locale/it/LC_MESSAGES/nova.po b/cinder/locale/it/LC_MESSAGES/nova.po
new file mode 100644
index 000000000..08fcd9be9
--- /dev/null
+++ b/cinder/locale/it/LC_MESSAGES/nova.po
@@ -0,0 +1,8210 @@
+# Italian translation for cinder
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the cinder package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version:  cinder\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-04-08 23:04+0000\n"
+"PO-Revision-Date: 2012-04-01 18:59+0000\n"
+"Last-Translator: simone.sandri <lexluxsox@hotmail.it>\n"
+"Language-Team: Italian <it@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: cinder/context.py:59
+#, python-format
+msgid "Arguments dropped when creating context: %s"
+msgstr ""
+
+#: cinder/context.py:90
+#, python-format
+msgid "read_deleted can only be one of 'no', 'yes' or 'only', not %r"
+msgstr ""
+
+#: cinder/crypto.py:48
+msgid "Filename of root CA"
+msgstr "Filename di root CA"
+
+#: cinder/crypto.py:51
+msgid "Filename of private key"
+msgstr "Nome file della chiave privata"
+
+#: cinder/crypto.py:54
+msgid "Filename of root Certificate Revocation List"
+msgstr ""
+
+#: cinder/crypto.py:57
+msgid "Where we keep our keys"
+msgstr "Dove si conservano le chiavi"
+
+#: cinder/crypto.py:60
+msgid "Where we keep our root CA"
+msgstr "Dove si conserva root CA"
+
+#: cinder/crypto.py:63
+msgid "Should we use a CA for each project?"
+msgstr "Si dovrebbe usare un CA per ogni progetto?"
+
+#: cinder/crypto.py:67
+#, python-format
+msgid "Subject for certificate for users, %s for project, user, timestamp"
+msgstr "Soggetto per il certificato degli utenti, %s per progetto, utente, orario"
+
+#: cinder/crypto.py:72
+#, python-format
+msgid "Subject for certificate for projects, %s for project, timestamp"
+msgstr "Soggetto per il certificato dei progetti, %s per progetto, orario"
+
+#: cinder/crypto.py:292
+#, python-format
+msgid "Flags path: %s"
+msgstr "Percorso dei flags: %s"
+
+#: cinder/exception.py:56
+msgid "Unexpected error while running command."
+msgstr "Si e' verificato un errore inatteso durante l'esecuzione del comando."
+
+#: cinder/exception.py:59
+#, python-format
+msgid ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+msgstr ""
+"%(description)s\n"
+"Comando: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+
+#: cinder/exception.py:94
+msgid "DB exception wrapped."
+msgstr ""
+
+#: cinder/exception.py:155
+msgid "An unknown exception occurred."
+msgstr "E' stato riscontrato un errore sconosciuto"
+
+#: cinder/exception.py:178
+msgid "Failed to decrypt text"
+msgstr ""
+
+#: cinder/exception.py:182
+msgid "Failed to paginate through images from image service"
+msgstr ""
+
+#: cinder/exception.py:186
+msgid "Virtual Interface creation failed"
+msgstr ""
+
+#: cinder/exception.py:190
+msgid "5 attempts to create virtual interfacewith unique mac address failed"
+msgstr ""
+
+#: cinder/exception.py:195
+msgid "Connection to glance failed"
+msgstr ""
+
+#: cinder/exception.py:199
+msgid "Connection to melange failed"
+msgstr ""
+
+#: cinder/exception.py:203
+msgid "Not authorized."
+msgstr ""
+
+#: cinder/exception.py:208
+msgid "User does not have admin privileges"
+msgstr "L'utente non ha i privilegi dell'amministratore"
+
+#: cinder/exception.py:212
+#, python-format
+msgid "Policy doesn't allow %(action)s to be performed."
+msgstr ""
+
+#: cinder/exception.py:216
+#, fuzzy, python-format
+msgid "Not authorized for image %(image_id)s."
+msgstr "nessun metodo per il messaggio: %s"
+
+#: cinder/exception.py:220
+msgid "Unacceptable parameters."
+msgstr "Parametri inaccettabili."
+
+#: cinder/exception.py:225
+msgid "Invalid snapshot"
+msgstr ""
+
+#: cinder/exception.py:229
+#, python-format
+msgid "Volume %(volume_id)s is not attached to anything"
+msgstr ""
+
+#: cinder/exception.py:233 cinder/api/openstack/compute/contrib/keypairs.py:113
+msgid "Keypair data is invalid"
+msgstr ""
+
+#: cinder/exception.py:237
+msgid "Failed to load data into json format"
+msgstr ""
+
+#: cinder/exception.py:241
+msgid "The request is invalid."
+msgstr "La richiesta non è valida."
+
+#: cinder/exception.py:245
+#, python-format
+msgid "Invalid signature %(signature)s for user %(user)s."
+msgstr ""
+
+#: cinder/exception.py:249
+msgid "Invalid input received"
+msgstr "E' stato ricevuto un input non valido"
+
+#: cinder/exception.py:253
+#, python-format
+msgid "Invalid instance type %(instance_type)s."
+msgstr ""
+
+#: cinder/exception.py:257
+msgid "Invalid volume type"
+msgstr "Tipo del volume non valido"
+
+#: cinder/exception.py:261
+msgid "Invalid volume"
+msgstr "Volume non valido"
+
+#: cinder/exception.py:265
+#, python-format
+msgid "Invalid port range %(from_port)s:%(to_port)s. %(msg)s"
+msgstr ""
+
+#: cinder/exception.py:269
+#, python-format
+msgid "Invalid IP protocol %(protocol)s."
+msgstr ""
+
+#: cinder/exception.py:273
+#, python-format
+msgid "Invalid content type %(content_type)s."
+msgstr ""
+
+#: cinder/exception.py:277
+#, python-format
+msgid "Invalid cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:281
+msgid "Invalid reuse of an RPC connection."
+msgstr ""
+
+#: cinder/exception.py:285
+msgid "Invalid Parameter: Unicode is not supported by the current database."
+msgstr ""
+
+#: cinder/exception.py:292
+#, python-format
+msgid "%(err)s"
+msgstr ""
+
+#: cinder/exception.py:296
+#, python-format
+msgid ""
+"Cannot perform action '%(action)s' on aggregate %(aggregate_id)s. Reason:"
+" %(reason)s."
+msgstr ""
+
+#: cinder/exception.py:301
+#, python-format
+msgid "Group not valid. Reason: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:305
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot %(method)s while"
+" the instance is in this state."
+msgstr ""
+
+#: cinder/exception.py:310
+#, python-format
+msgid "Instance %(instance_id)s is not running."
+msgstr ""
+
+#: cinder/exception.py:314
+#, python-format
+msgid "Instance %(instance_id)s is not suspended."
+msgstr ""
+
+#: cinder/exception.py:318
+#, python-format
+msgid "Instance %(instance_id)s is not in rescue mode"
+msgstr ""
+
+#: cinder/exception.py:322
+msgid "Failed to suspend instance"
+msgstr "Impossibile sospendere l'istanza"
+
+#: cinder/exception.py:326
+msgid "Failed to resume server"
+msgstr "Impossibile ripristinare il server"
+
+#: cinder/exception.py:330
+msgid "Failed to reboot instance"
+msgstr "Impossibile riavviare l'istanza"
+
+#: cinder/exception.py:334
+#, fuzzy
+msgid "Failed to terminate instance"
+msgstr "Impossibile riavviare l'istanza"
+
+#: cinder/exception.py:338
+msgid "Service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:342
+msgid "Volume service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:346
+msgid "Compute service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:350
+#, python-format
+msgid "Unable to migrate instance (%(instance_id)s) to current host (%(host)s)."
+msgstr ""
+
+#: cinder/exception.py:355
+msgid "Destination compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:359
+msgid "Original compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:363
+msgid "The supplied hypervisor type of is invalid."
+msgstr ""
+
+#: cinder/exception.py:367
+msgid "The instance requires a newer hypervisor version than has been provided."
+msgstr ""
+
+#: cinder/exception.py:372
+#, python-format
+msgid ""
+"The supplied disk path (%(path)s) already exists, it is expected not to "
+"exist."
+msgstr ""
+
+#: cinder/exception.py:377
+#, python-format
+msgid "The supplied device path (%(path)s) is invalid."
+msgstr ""
+
+#: cinder/exception.py:381
+#, python-format
+msgid "The supplied device (%(device)s) is busy."
+msgstr ""
+
+#: cinder/exception.py:385
+msgid "Unacceptable CPU info"
+msgstr ""
+
+#: cinder/exception.py:389
+#, python-format
+msgid "%(address)s is not a valid IP v4/6 address."
+msgstr ""
+
+#: cinder/exception.py:393
+#, python-format
+msgid ""
+"VLAN tag is not appropriate for the port group %(bridge)s. Expected VLAN "
+"tag is %(tag)s, but the one associated with the port group is %(pgroup)s."
+msgstr ""
+
+#: cinder/exception.py:399
+#, python-format
+msgid ""
+"vSwitch which contains the port group %(bridge)s is not associated with "
+"the desired physical adapter. Expected vSwitch is %(expected)s, but the "
+"one associated is %(actual)s."
+msgstr ""
+
+#: cinder/exception.py:406
+#, python-format
+msgid "Disk format %(disk_format)s is not acceptable"
+msgstr ""
+
+#: cinder/exception.py:410
+#, python-format
+msgid "Image %(image_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:414
+#, python-format
+msgid "Instance %(instance_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:418
+#, python-format
+msgid "Ec2 id %(ec2_id)s is unacceptable."
+msgstr ""
+
+#: cinder/exception.py:422
+msgid "Resource could not be found."
+msgstr ""
+
+#: cinder/exception.py:427
+#, python-format
+msgid "Required flag %(flag)s not set."
+msgstr ""
+
+#: cinder/exception.py:431
+#, python-format
+msgid "Volume %(volume_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:435
+#, python-format
+msgid "Unable to locate account %(account_name)s on Solidfire device"
+msgstr ""
+
+#: cinder/exception.py:440
+#, python-format
+msgid "Volume not found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:444
+#, python-format
+msgid "Volume %(volume_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:449
+msgid "Zero volume types found."
+msgstr ""
+
+#: cinder/exception.py:453
+#, python-format
+msgid "Volume type %(volume_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:457
+#, python-format
+msgid "Volume type with name %(volume_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:462
+#, python-format
+msgid ""
+"Volume Type %(volume_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:467
+#, python-format
+msgid "Snapshot %(snapshot_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:471
+#, python-format
+msgid "deleting volume %(volume_name)s that has snapshot"
+msgstr ""
+
+#: cinder/exception.py:475
+#, python-format
+msgid "deleting snapshot %(snapshot_name)s that has dependent volumes"
+msgstr ""
+
+#: cinder/exception.py:480
+#, python-format
+msgid "No target id found for volume %(volume_id)s."
+msgstr ""
+
+#: cinder/exception.py:484
+#, python-format
+msgid "No disk at %(location)s"
+msgstr ""
+
+#: cinder/exception.py:488
+#, python-format
+msgid "Could not find a handler for %(driver_type)s volume."
+msgstr ""
+
+#: cinder/exception.py:492
+#, python-format
+msgid "Invalid image href %(image_href)s."
+msgstr ""
+
+#: cinder/exception.py:496
+msgid ""
+"Some images have been stored via hrefs. This version of the api does not "
+"support displaying image hrefs."
+msgstr ""
+
+#: cinder/exception.py:501
+#, python-format
+msgid "Image %(image_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:505
+#, python-format
+msgid "Kernel not found for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:509
+#, python-format
+msgid "User %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:513
+#, python-format
+msgid "Project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:517
+#, python-format
+msgid "User %(user_id)s is not a member of project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:521
+#, python-format
+msgid "Role %(role_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:525
+msgid "Cannot find SR to read/write VDI."
+msgstr ""
+
+#: cinder/exception.py:529
+#, python-format
+msgid "%(req)s is required to create a network."
+msgstr ""
+
+#: cinder/exception.py:533
+#, python-format
+msgid "Network %(network_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:537
+#, python-format
+msgid "Network could not be found for bridge %(bridge)s"
+msgstr ""
+
+#: cinder/exception.py:541
+#, python-format
+msgid "Network could not be found for uuid %(uuid)s"
+msgstr ""
+
+#: cinder/exception.py:545
+#, python-format
+msgid "Network could not be found with cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:549
+#, python-format
+msgid "Network could not be found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:553
+msgid "No networks defined."
+msgstr ""
+
+#: cinder/exception.py:557
+#, python-format
+msgid ""
+"Either Network uuid %(network_uuid)s is not present or is not assigned to"
+" the project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:562
+#, python-format
+msgid "Host is not set to the network (%(network_id)s)."
+msgstr ""
+
+#: cinder/exception.py:566
+#, python-format
+msgid "Network %(network)s has active ports, cannot delete."
+msgstr ""
+
+#: cinder/exception.py:570
+msgid "Could not find the datastore reference(s) which the VM uses."
+msgstr ""
+
+#: cinder/exception.py:574
+#, python-format
+msgid "No fixed IP associated with id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:578
+#, python-format
+msgid "Fixed ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:582
+#, python-format
+msgid "Instance %(instance_id)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:586
+#, python-format
+msgid "Network host %(host)s has zero fixed ips in network %(network_id)s."
+msgstr ""
+
+#: cinder/exception.py:591
+#, python-format
+msgid "Instance %(instance_id)s doesn't have fixed ip '%(ip)s'."
+msgstr ""
+
+#: cinder/exception.py:595
+#, python-format
+msgid "Host %(host)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:599
+#, python-format
+msgid ""
+"Fixed IP address (%(address)s) does not exist in network "
+"(%(network_uuid)s)."
+msgstr ""
+
+#: cinder/exception.py:604
+#, python-format
+msgid "Fixed IP address %(address)s is already in use."
+msgstr ""
+
+#: cinder/exception.py:608
+#, python-format
+msgid "Fixed IP address %(address)s is invalid."
+msgstr ""
+
+#: cinder/exception.py:612
+msgid "Zero fixed ips available."
+msgstr ""
+
+#: cinder/exception.py:616
+msgid "Zero fixed ips could be found."
+msgstr ""
+
+#: cinder/exception.py:620
+#, python-format
+msgid "Floating ip not found for id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:624
+#, python-format
+msgid "The DNS entry %(name)s already exists in domain %(domain)s."
+msgstr ""
+
+#: cinder/exception.py:628
+#, python-format
+msgid "Floating ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:632
+#, python-format
+msgid "Floating ip not found for host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:636
+msgid "Zero floating ips available."
+msgstr ""
+
+#: cinder/exception.py:640
+#, python-format
+msgid "Floating ip %(address)s is associated."
+msgstr ""
+
+#: cinder/exception.py:644
+#, python-format
+msgid "Floating ip %(address)s is not associated."
+msgstr ""
+
+#: cinder/exception.py:648
+msgid "Zero floating ips exist."
+msgstr ""
+
+#: cinder/exception.py:652
+#, python-format
+msgid "Interface %(interface)s not found."
+msgstr ""
+
+#: cinder/exception.py:656
+#, python-format
+msgid "Keypair %(name)s not found for user %(user_id)s"
+msgstr ""
+
+#: cinder/exception.py:660
+#, python-format
+msgid "Certificate %(certificate_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:664
+#, python-format
+msgid "Service %(service_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:668
+#, python-format
+msgid "Host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:672
+#, python-format
+msgid "Compute host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:676
+#, python-format
+msgid "Could not find binary %(binary)s on host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:680
+#, python-format
+msgid "Auth token %(token)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:684
+#, python-format
+msgid "Access Key %(access_key)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:688
+msgid "Quota could not be found"
+msgstr ""
+
+#: cinder/exception.py:692
+#, python-format
+msgid "Quota for project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:696
+#, python-format
+msgid "Quota class %(class_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:700
+#, python-format
+msgid "Security group %(security_group_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:704
+#, python-format
+msgid "Security group %(security_group_id)s not found for project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:709
+#, python-format
+msgid "Security group with rule %(rule_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:713
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is already associated with the "
+"instance %(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:718
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is not associated with the instance "
+"%(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:723
+#, python-format
+msgid "Migration %(migration_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:727
+#, python-format
+msgid "Migration not found for instance %(instance_id)s with status %(status)s."
+msgstr ""
+
+#: cinder/exception.py:732
+#, python-format
+msgid "Console pool %(pool_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:736
+#, python-format
+msgid ""
+"Console pool of type %(console_type)s for compute host %(compute_host)s "
+"on proxy host %(host)s not found."
+msgstr ""
+
+#: cinder/exception.py:742
+#, python-format
+msgid "Console %(console_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:746
+#, python-format
+msgid "Console for instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:750
+#, python-format
+msgid ""
+"Console for instance %(instance_id)s in pool %(pool_id)s could not be "
+"found."
+msgstr ""
+
+#: cinder/exception.py:755
+#, python-format
+msgid "Invalid console type %(console_type)s "
+msgstr ""
+
+#: cinder/exception.py:759
+msgid "Zero instance types found."
+msgstr ""
+
+#: cinder/exception.py:763
+#, python-format
+msgid "Instance type %(instance_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:767
+#, python-format
+msgid "Instance type with name %(instance_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:772
+#, python-format
+msgid "Flavor %(flavor_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:776
+#, python-format
+msgid "Cell %(cell_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:780
+#, python-format
+msgid "Scheduler Host Filter %(filter_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:784
+#, python-format
+msgid "Scheduler cost function %(cost_fn_str)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:789
+#, python-format
+msgid "Scheduler weight flag not found: %(flag_name)s"
+msgstr ""
+
+#: cinder/exception.py:793
+#, python-format
+msgid "Instance %(instance_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:798
+#, python-format
+msgid ""
+"Instance Type %(instance_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:803
+msgid "LDAP object could not be found"
+msgstr ""
+
+#: cinder/exception.py:807
+#, python-format
+msgid "LDAP user %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:811
+#, python-format
+msgid "LDAP group %(group_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:815
+#, python-format
+msgid "LDAP user %(user_id)s is not a member of group %(group_id)s."
+msgstr ""
+
+#: cinder/exception.py:819
+#, python-format
+msgid "File %(file_path)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:823
+msgid "Zero files could be found."
+msgstr ""
+
+#: cinder/exception.py:827
+#, python-format
+msgid "Virtual switch associated with the network adapter %(adapter)s not found."
+msgstr ""
+
+#: cinder/exception.py:832
+#, python-format
+msgid "Network adapter %(adapter)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:836
+#, python-format
+msgid "Class %(class_name)s could not be found: %(exception)s"
+msgstr ""
+
+#: cinder/exception.py:840
+msgid "Action not allowed."
+msgstr ""
+
+#: cinder/exception.py:844
+#, python-format
+msgid "Unable to use global role %(role_id)s"
+msgstr ""
+
+#: cinder/exception.py:848
+msgid "Rotation is not allowed for snapshots"
+msgstr ""
+
+#: cinder/exception.py:852
+msgid "Rotation param is required for backup image_type"
+msgstr ""
+
+#: cinder/exception.py:861
+#, python-format
+msgid "Key pair %(key_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:865
+#, python-format
+msgid "User %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:869
+#, python-format
+msgid "LDAP user %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:873
+#, python-format
+msgid "LDAP group %(group)s already exists."
+msgstr ""
+
+#: cinder/exception.py:877
+#, python-format
+msgid "User %(uid)s is already a member of the group %(group_dn)s"
+msgstr ""
+
+#: cinder/exception.py:882
+#, python-format
+msgid "Project %(project)s already exists."
+msgstr ""
+
+#: cinder/exception.py:886
+#, python-format
+msgid "Instance %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:890
+#, python-format
+msgid "Instance Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:894
+#, python-format
+msgid "Volume Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:898
+#, python-format
+msgid "%(path)s is on shared storage: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:902
+msgid "Migration error"
+msgstr ""
+
+#: cinder/exception.py:906
+#, python-format
+msgid "Malformed message body: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:910
+#, python-format
+msgid "Could not find config at %(path)s"
+msgstr ""
+
+#: cinder/exception.py:914
+#, python-format
+msgid "Could not load paste app '%(name)s' from %(path)s"
+msgstr ""
+
+#: cinder/exception.py:918
+msgid "When resizing, instances must change size!"
+msgstr ""
+
+#: cinder/exception.py:922
+msgid "Image is larger than instance type allows"
+msgstr ""
+
+#: cinder/exception.py:926
+msgid "1 or more Zones could not complete the request"
+msgstr ""
+
+#: cinder/exception.py:930
+msgid "Instance type's memory is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:934
+msgid "Instance type's disk is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:938
+#, python-format
+msgid "Insufficient free memory on compute node to start %(uuid)s."
+msgstr ""
+
+#: cinder/exception.py:942
+msgid "Could not fetch bandwidth/cpu/disk metrics for this host."
+msgstr ""
+
+#: cinder/exception.py:946
+#, python-format
+msgid "No valid host was found. %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:950
+#, python-format
+msgid "Host %(host)s is not up or doesn't exist."
+msgstr ""
+
+#: cinder/exception.py:954
+msgid "Quota exceeded"
+msgstr ""
+
+#: cinder/exception.py:958
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: action '%(action)s' caused an error: "
+"%(reason)s."
+msgstr ""
+
+#: cinder/exception.py:963
+#, python-format
+msgid "Aggregate %(aggregate_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:967
+#, python-format
+msgid "Aggregate %(aggregate_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:971
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:975
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:980
+#, python-format
+msgid "Host %(host)s already member of another aggregate."
+msgstr ""
+
+#: cinder/exception.py:984
+#, python-format
+msgid "Aggregate %(aggregate_id)s already has host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:988
+#, python-format
+msgid "Detected more than one volume with name %(vol_name)s"
+msgstr ""
+
+#: cinder/exception.py:992
+#, python-format
+msgid "Cannot create volume_type with name %(name)s and specs %(extra_specs)s"
+msgstr ""
+
+#: cinder/exception.py:997
+msgid "Unable to create instance type"
+msgstr ""
+
+#: cinder/exception.py:1001
+msgid "Bad response from SolidFire API"
+msgstr ""
+
+#: cinder/exception.py:1005
+#, python-format
+msgid "Error in SolidFire API response: status=%(status)s"
+msgstr ""
+
+#: cinder/exception.py:1009
+#, python-format
+msgid "Error in SolidFire API response: data=%(data)s"
+msgstr ""
+
+#: cinder/exception.py:1013
+#, python-format
+msgid "Detected existing vlan with id %(vlan)d"
+msgstr ""
+
+#: cinder/exception.py:1017
+#, python-format
+msgid "Instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:1021
+#, python-format
+msgid "Invalid id: %(val)s (expecting \"i-...\")."
+msgstr ""
+
+#: cinder/exception.py:1025
+#, python-format
+msgid "Could not fetch image %(image)s"
+msgstr ""
+
+#: cinder/log.py:315
+#, python-format
+msgid "syslog facility must be one of: %s"
+msgstr ""
+
+#: cinder/manager.py:146
+#, python-format
+msgid "Skipping %(full_task_name)s, %(ticks_to_skip)s ticks left until next run"
+msgstr ""
+
+#: cinder/manager.py:152
+#, python-format
+msgid "Running periodic task %(full_task_name)s"
+msgstr ""
+
+#: cinder/manager.py:159
+#, python-format
+msgid "Error during %(full_task_name)s: %(e)s"
+msgstr ""
+
+#: cinder/manager.py:203
+msgid "Notifying Schedulers of capabilities ..."
+msgstr ""
+
+#: cinder/policy.py:30
+msgid "JSON file representing policy"
+msgstr ""
+
+#: cinder/policy.py:33
+msgid "Rule checked when requested rule is not found"
+msgstr ""
+
+#: cinder/service.py:137
+msgid "SIGTERM received"
+msgstr ""
+
+#: cinder/service.py:177
+#, python-format
+msgid "Starting %(topic)s node (version %(vcs_string)s)"
+msgstr ""
+
+#: cinder/service.py:195
+#, python-format
+msgid "Creating Consumer connection for Service %s"
+msgstr ""
+
+#: cinder/service.py:282
+msgid "Service killed that has no database entry"
+msgstr "Servizio terminato che non ha entry nel database"
+
+#: cinder/service.py:319
+msgid "The service database object disappeared, Recreating it."
+msgstr "Il servizio é scomparso dal database, ricreo."
+
+#: cinder/service.py:334
+msgid "Recovered model server connection!"
+msgstr "Connessione al model server ripristinata!"
+
+#: cinder/service.py:340
+msgid "model server went away"
+msgstr "model server é scomparso"
+
+#: cinder/service.py:433
+msgid "Full set of FLAGS:"
+msgstr "Insieme di FLAGS:"
+
+#: cinder/service.py:440
+#, python-format
+msgid "%(flag)s : FLAG SET "
+msgstr ""
+
+#: cinder/utils.py:79
+#, python-format
+msgid "Inner Exception: %s"
+msgstr "Eccezione interna: %s"
+
+#: cinder/utils.py:165
+#, python-format
+msgid "Fetching %s"
+msgstr "Prelievo %s"
+
+#: cinder/utils.py:210
+#, python-format
+msgid "Got unknown keyword args to utils.execute: %r"
+msgstr ""
+
+#: cinder/utils.py:220
+#, python-format
+msgid "Running cmd (subprocess): %s"
+msgstr "Esecuzione del comando (sottoprocesso): %s"
+
+#: cinder/utils.py:236 cinder/utils.py:315
+#, python-format
+msgid "Result was %s"
+msgstr "Il risultato é %s"
+
+#: cinder/utils.py:249
+#, python-format
+msgid "%r failed. Retrying."
+msgstr ""
+
+#: cinder/utils.py:291
+#, python-format
+msgid "Running cmd (SSH): %s"
+msgstr "Eseguendo cmd (SSH): %s"
+
+#: cinder/utils.py:293
+msgid "Environment not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:297
+msgid "process_input not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:352
+#, python-format
+msgid "debug in callback: %s"
+msgstr "debug in callback: %s"
+
+#: cinder/utils.py:534
+#, python-format
+msgid "Link Local address is not found.:%s"
+msgstr ""
+
+#: cinder/utils.py:537
+#, python-format
+msgid "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+msgstr ""
+
+#: cinder/utils.py:648
+#, python-format
+msgid "Invalid backend: %s"
+msgstr ""
+
+#: cinder/utils.py:659
+#, python-format
+msgid "backend %s"
+msgstr ""
+
+#: cinder/utils.py:709
+msgid "in looping call"
+msgstr ""
+
+#: cinder/utils.py:927
+#, python-format
+msgid "Attempting to grab semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:931
+#, python-format
+msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:935
+#, python-format
+msgid "Attempting to grab file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:942
+#, python-format
+msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:1001
+#, python-format
+msgid "Found sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1008
+#, python-format
+msgid "Cleaned sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1023
+#, python-format
+msgid "Found lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1028
+#, python-format
+msgid "Cleaned lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1138
+#, python-format
+msgid "Expected object of type: %s"
+msgstr ""
+
+#: cinder/utils.py:1169
+#, python-format
+msgid "Invalid server_string: %s"
+msgstr ""
+
+#: cinder/utils.py:1298
+#, python-format
+msgid "timefunc: '%(name)s' took %(total_time).2f secs"
+msgstr ""
+
+#: cinder/utils.py:1330
+msgid "Original exception being dropped"
+msgstr ""
+
+#: cinder/utils.py:1461
+#, python-format
+msgid "Class %(fullname)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1463
+#, python-format
+msgid "Class %(fullname)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1495
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1497
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1681
+#, python-format
+msgid "Could not remove tmpdir: %s"
+msgstr ""
+
+#: cinder/wsgi.py:97
+#, python-format
+msgid "Started %(name)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:108
+msgid "Stopping WSGI server."
+msgstr ""
+
+#: cinder/wsgi.py:111
+msgid "Stopping raw TCP server."
+msgstr ""
+
+#: cinder/wsgi.py:117
+#, python-format
+msgid "Starting TCP server %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:133
+msgid "WSGI server has stopped."
+msgstr ""
+
+#: cinder/wsgi.py:211
+msgid "You must implement __call__"
+msgstr ""
+
+#: cinder/api/direct.py:218
+msgid "not available"
+msgstr ""
+
+#: cinder/api/direct.py:299
+#, python-format
+msgid "Returned non-serializeable type: %s"
+msgstr ""
+
+#: cinder/api/sizelimit.py:51
+msgid "Request is too large."
+msgstr ""
+
+#: cinder/api/validator.py:142
+#, python-format
+msgid "%(key)s with value %(value)s failed validator  %(validator)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:73
+#, python-format
+msgid "%(code)s: %(message)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:95
+#, python-format
+msgid "FaultWrapper: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:170
+msgid "Too many failed authentications."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:180
+#, python-format
+msgid ""
+"Access key %(access_key)s has had %(failures)d failed authentications and"
+" will be locked out for %(lock_mins)d minutes."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:267
+msgid "Signature not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:271
+msgid "Access key not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:306 cinder/api/ec2/__init__.py:319
+msgid "Failure communicating with keystone"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:388
+#, python-format
+msgid "Authentication Failure: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:404
+#, python-format
+msgid "Authenticated Request For %(uname)s:%(pname)s)"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:435
+#, python-format
+msgid "action: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:437
+#, python-format
+msgid "arg: %(key)s\t\tval: %(value)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:512
+#, python-format
+msgid "Unauthorized request for controller=%(controller)s and action=%(action)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:584
+#, python-format
+msgid "InstanceNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:590
+#, python-format
+msgid "VolumeNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:596
+#, python-format
+msgid "SnapshotNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:602
+#, python-format
+msgid "NotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:605
+#, python-format
+msgid "EC2APIError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:613
+#, python-format
+msgid "KeyPairExists raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:617
+#, python-format
+msgid "InvalidParameterValue raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:621
+#, python-format
+msgid "InvalidPortRange raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:625
+#, python-format
+msgid "NotAuthorized raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:629
+#, python-format
+msgid "InvalidRequest raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:633
+#, python-format
+msgid "QuotaError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:637
+#, python-format
+msgid "Invalid id: bogus (expecting \"i-...\"): %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:646
+#, python-format
+msgid "Unexpected error raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:647
+#, python-format
+msgid "Environment: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:649 cinder/api/metadata/handler.py:248
+msgid "An unknown error has occurred. Please try your request again."
+msgstr ""
+
+#: cinder/api/ec2/apirequest.py:64
+#, python-format
+msgid "Unsupported API request: controller = %(controller)s, action = %(action)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:336
+#, python-format
+msgid "Create snapshot of volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:372
+#, python-format
+msgid ""
+"Value (%s) for KeyName is invalid. Content limited to Alphanumeric "
+"character, spaces, dashes, and underscore."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:378
+#, python-format
+msgid "Value (%s) for Keyname is invalid. Length exceeds maximum of 255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:382
+#, python-format
+msgid "Create key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:391
+#, python-format
+msgid "Import key %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:409
+#, python-format
+msgid "Delete key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:551
+msgid "Invalid CIDR"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:639 cinder/api/ec2/cloud.py:693
+#: cinder/api/ec2/cloud.py:800
+msgid "Not enough parameters, need group_name or group_id"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:654
+#: cinder/api/openstack/compute/contrib/security_groups.py:517
+#, python-format
+msgid "Revoke security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:666 cinder/api/ec2/cloud.py:719
+#, python-format
+msgid "%s Not enough parameters to build a valid rule"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:684 cinder/api/ec2/cloud.py:744
+msgid "No rule for the specified parameters."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:708
+#: cinder/api/openstack/compute/contrib/security_groups.py:354
+#, python-format
+msgid "Authorize security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:725
+#, python-format
+msgid "%s - This rule already exists in group"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:769
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Content limited to "
+"Alphanumeric characters, spaces, dashes, and underscores."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:776
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Length exceeds maximum of "
+"255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:780
+#: cinder/api/openstack/compute/contrib/security_groups.py:292
+#, python-format
+msgid "Create Security Group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:783
+#, python-format
+msgid "group %s already exists"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:815
+#: cinder/api/openstack/compute/contrib/security_groups.py:245
+#, python-format
+msgid "Delete security group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:823 cinder/compute/manager.py:1630
+#, python-format
+msgid "Get console output for instance %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:894
+#, python-format
+msgid "Create volume from snapshot %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:898 cinder/api/openstack/compute/contrib/volumes.py:186
+#: cinder/api/openstack/volume/volumes.py:222
+#, python-format
+msgid "Create volume of %s GB"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:921
+msgid "Delete Failed"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:931
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(instance_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:939
+msgid "Attach Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:952 cinder/api/openstack/compute/contrib/volumes.py:366
+#, python-format
+msgid "Detach volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:959
+msgid "Detach Volume Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:984 cinder/api/ec2/cloud.py:1041
+#: cinder/api/ec2/cloud.py:1518 cinder/api/ec2/cloud.py:1533
+#, python-format
+msgid "attribute not supported: %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1107
+#, python-format
+msgid "vol = %s\n"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1255
+msgid "Allocate address"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1267
+#, python-format
+msgid "Release address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1272
+#, python-format
+msgid "Associate address %(public_ip)s to instance %(instance_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1282
+#, python-format
+msgid "Disassociate address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1308
+msgid "Image must be available"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1329
+msgid "Going to start terminating instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1343
+#, python-format
+msgid "Reboot instance %r"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1354
+msgid "Going to stop instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1365
+msgid "Going to start instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1455
+#, python-format
+msgid "De-registering image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1471
+msgid "imageLocation is required"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1490
+#, python-format
+msgid "Registered image %(image_location)s with id %(image_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1536
+msgid "user or group not specified"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1538
+msgid "only group \"all\" is supported"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1540
+msgid "operation_type must be add or remove"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1542
+#, python-format
+msgid "Updating image %s publicity"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1555
+#, python-format
+msgid "Not allowed to modify attributes for image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1603
+#, python-format
+msgid "Couldn't stop instance with in %d sec"
+msgstr ""
+
+#: cinder/api/metadata/handler.py:246 cinder/api/metadata/handler.py:253
+#, python-format
+msgid "Failed to get metadata for ip: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:43
+#, python-format
+msgid "Caught error: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:45 cinder/api/openstack/wsgi.py:886
+#, python-format
+msgid "%(url)s returned with HTTP %(status)d"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:94
+msgid "Must specify an ExtensionManager class"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:105
+#, python-format
+msgid "Extended resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:130
+#, python-format
+msgid ""
+"Extension %(ext_name)s: Cannot extend resource %(collection)s: No such "
+"resource"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:135
+#, python-format
+msgid "Extension %(ext_name)s extending resource: %(collection)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:90
+#, python-format
+msgid "%(user_id)s could not be found with token '%(token)s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:134
+#, python-format
+msgid "%(user_id)s must be an admin or a member of %(project_id)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:152
+msgid "Authentication requests must be made against a version root (e.g. /v2)."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:167
+#, python-format
+msgid "Could not find %s in request."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:191
+#, python-format
+msgid "Successfully authenticated '%s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:241
+msgid "User not found with provided API key."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:258
+#, python-format
+msgid "Provided API key is valid, but not for user '%(username)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:133 cinder/api/openstack/common.py:167
+msgid "limit param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:136 cinder/api/openstack/common.py:171
+msgid "limit param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:161
+msgid "offset param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:175
+msgid "offset param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:203
+#, python-format
+msgid "marker [%s] not found"
+msgstr ""
+
+#: cinder/api/openstack/common.py:243
+#, python-format
+msgid "href %s does not contain version"
+msgstr ""
+
+#: cinder/api/openstack/common.py:278
+msgid "Image metadata limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/common.py:295
+#, python-format
+msgid "Converting nw_info: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:305
+#, python-format
+msgid "Converted networks: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:338
+#, python-format
+msgid "Cannot '%(action)s' while instance is in %(attr)s %(state)s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:341
+#, python-format
+msgid "Instance is in an invalid state for '%(action)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:421
+msgid "Rejecting snapshot request, snapshots currently disabled"
+msgstr ""
+
+#: cinder/api/openstack/common.py:423
+msgid "Instance snapshots are not permitted at this time."
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:188
+#, python-format
+msgid "Loaded extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:225
+#, python-format
+msgid "Ext name: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:226
+#, python-format
+msgid "Ext alias: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:227
+#, python-format
+msgid "Ext description: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:229
+#, python-format
+msgid "Ext namespace: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:230
+#, python-format
+msgid "Ext updated: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:232
+#, python-format
+msgid "Exception loading extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:246
+#, python-format
+msgid "Loading extension %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:252
+#, python-format
+msgid "Calling extension factory %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:264
+#, python-format
+msgid "Failed to load extension %(ext_factory)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:344
+#, python-format
+msgid "Failed to load extension %(classpath)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:368
+#, python-format
+msgid "Failed to load extension %(ext_name)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:135 cinder/api/openstack/wsgi.py:538
+msgid "cannot understand JSON"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:159
+#: cinder/api/openstack/compute/contrib/hosts.py:86
+msgid "cannot understand XML"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:543
+msgid "too many body keys"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:582
+#, python-format
+msgid "Exception handling resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:586
+#, python-format
+msgid "Fault thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:589
+#, python-format
+msgid "HTTP exception thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:697
+msgid "Unrecognized Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:701
+msgid "No Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:705
+msgid "Empty body provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:816
+#, python-format
+msgid "There is no such action: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:819 cinder/api/openstack/wsgi.py:832
+#: cinder/api/openstack/compute/server_metadata.py:58
+#: cinder/api/openstack/compute/server_metadata.py:76
+#: cinder/api/openstack/compute/server_metadata.py:101
+#: cinder/api/openstack/compute/server_metadata.py:126
+#: cinder/api/openstack/compute/contrib/admin_actions.py:211
+#: cinder/api/openstack/compute/contrib/console_output.py:52
+msgid "Malformed request body"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:829
+msgid "Unsupported Content-Type"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:841
+msgid "Malformed request url"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:889
+#, python-format
+msgid "%(url)s returned a fault: %(e)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:265
+msgid "element is not a child"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:414
+msgid "root element selecting a list"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:739
+#, python-format
+msgid "Template tree mismatch; adding slave %(slavetag)s to master %(mastertag)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:858
+msgid "subclasses must implement construct()!"
+msgstr ""
+
+#: cinder/api/openstack/compute/extensions.py:29
+#: cinder/api/openstack/volume/extensions.py:29
+msgid "Initializing extension manager."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:40
+#: cinder/api/openstack/compute/images.py:146
+#: cinder/api/openstack/compute/images.py:161
+msgid "Image not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:79
+msgid "Incorrect request body format"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:83
+#: cinder/api/openstack/compute/server_metadata.py:80
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:79
+#: cinder/api/openstack/compute/contrib/volumetypes.py:188
+msgid "Request body and URI mismatch"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:86
+#: cinder/api/openstack/compute/server_metadata.py:84
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:82
+#: cinder/api/openstack/compute/contrib/volumetypes.py:191
+msgid "Request body contains too many items"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:111
+msgid "Invalid metadata key"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:74
+msgid "Instance does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:97
+msgid "Instance is not a member of specified network"
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:140
+#, python-format
+msgid ""
+"Only %(value)s %(verb)s request(s) can be made to %(uri)s every "
+"%(unit_string)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:266
+msgid "This request was rate-limited."
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:38
+#: cinder/api/openstack/compute/server_metadata.py:122
+#: cinder/api/openstack/compute/server_metadata.py:159
+msgid "Server does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:141
+#: cinder/api/openstack/compute/server_metadata.py:152
+msgid "Metadata item was not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:425
+#, python-format
+msgid "Invalid server status: %(status)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:433
+msgid "Invalid changes-since value"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:483
+msgid "Personality file limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:485
+msgid "Personality file path too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:487
+msgid "Personality file content too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:501
+msgid "Server name is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:505
+msgid "Server name is an empty string"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:509
+msgid "Server name must be less than 256 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:527
+#, python-format
+msgid "Bad personality format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:530
+msgid "Bad personality format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:535
+#, python-format
+msgid "Personality content for %s cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:550
+#, python-format
+msgid "Bad networks format: network uuid is not in proper format (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:559
+#, python-format
+msgid "Invalid fixed IP address (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:566
+#, python-format
+msgid "Duplicate networks (%s) are not allowed"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:572
+#, python-format
+msgid "Bad network format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:575
+msgid "Bad networks format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:587
+msgid "Userdata content cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:594
+msgid "accessIPv4 is not proper IPv4 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:601
+msgid "accessIPv6 is not proper IPv6 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:633
+msgid "Server name is not defined"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:675
+#: cinder/api/openstack/compute/servers.py:740
+msgid "Invalid flavorRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:737
+msgid "Can not find requested image"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:743
+msgid "Invalid key_name provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:829
+#: cinder/api/openstack/compute/servers.py:849
+msgid "Instance has not been resized."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:835
+#, python-format
+msgid "Error in confirm-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:855
+#, python-format
+msgid "Error in revert-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:868
+msgid "Argument 'type' for reboot is not HARD or SOFT"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:872
+msgid "Missing argument 'type' for reboot"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:885
+#, python-format
+msgid "Error in reboot %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:897
+msgid "Unable to locate requested flavor."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:900
+msgid "Resize requires a change in size."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:924
+msgid "Malformed server entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:931
+msgid "Missing imageRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:940
+msgid "Invalid imageRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:949
+msgid "Missing flavorRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:962
+msgid "No adminPass was specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:966
+#: cinder/api/openstack/compute/servers.py:1144
+msgid "Invalid adminPass"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:980
+msgid "Unable to parse metadata key/value pairs."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:993
+msgid "Resize request has invalid 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:996
+msgid "Resize requests require 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1014
+#: cinder/api/openstack/compute/contrib/aggregates.py:142
+#: cinder/api/openstack/compute/contrib/networks.py:65
+msgid "Invalid request body"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1019
+msgid "Could not parse imageRef from request."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1071
+msgid "Instance could not be found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1074
+msgid "Cannot find image for rebuild"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1103
+msgid "createImage entity requires name attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1112
+#: cinder/api/openstack/compute/contrib/admin_actions.py:238
+msgid "Invalid metadata"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1167
+#, python-format
+msgid "Removing options '%(unk_opt_str)s' from query"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:60
+#, python-format
+msgid "Compute.api::pause %s"
+msgstr "Compute.api::pause %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:77
+#, python-format
+msgid "Compute.api::unpause %s"
+msgstr "Compute.api::unpause %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:94
+#, python-format
+msgid "compute.api::suspend %s"
+msgstr "compute.api::suspend %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:111
+#, python-format
+msgid "compute.api::resume %s"
+msgstr "compute.api::resume %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:127
+#, python-format
+msgid "Error in migrate %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:141
+#, python-format
+msgid "Compute.api::reset_network %s"
+msgstr "Compute.api::reset_network %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:154
+#: cinder/api/openstack/compute/contrib/admin_actions.py:170
+#: cinder/api/openstack/compute/contrib/admin_actions.py:186
+#: cinder/api/openstack/compute/contrib/multinic.py:41
+#: cinder/api/openstack/compute/contrib/rescue.py:44
+msgid "Server not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:157
+#, python-format
+msgid "Compute.api::inject_network_info %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:173
+#, python-format
+msgid "Compute.api::lock %s"
+msgstr "Compute.api::lock %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:189
+#, python-format
+msgid "Compute.api::unlock %s"
+msgstr "Compute.api::unlock %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:219
+#, python-format
+msgid "createBackup entity requires %s attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:223
+msgid "Malformed createBackup entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:229
+msgid "createBackup attribute 'rotation' must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:244
+#: cinder/api/openstack/compute/contrib/console_output.py:47
+#: cinder/api/openstack/compute/contrib/console_output.py:59
+#: cinder/api/openstack/compute/contrib/consoles.py:49
+#: cinder/api/openstack/compute/contrib/consoles.py:60
+#: cinder/api/openstack/compute/contrib/server_action_list.py:49
+#: cinder/api/openstack/compute/contrib/server_diagnostics.py:47
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:38
+msgid "Instance not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:272
+msgid "host and block_migration must be specified."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:284
+#, python-format
+msgid "Live migration of instance %(id)s to host %(host)s failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:76
+#, python-format
+msgid ""
+"Cannot create aggregate with name %(name)s and availability zone "
+"%(avail_zone)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:88
+#, python-format
+msgid "Cannot show aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:114
+#, python-format
+msgid "Cannot update aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:126
+#, python-format
+msgid "Cannot delete aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:139
+#, python-format
+msgid "Aggregates does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:152
+#: cinder/api/openstack/compute/contrib/aggregates.py:158
+#, python-format
+msgid "Cannot add host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:171
+#: cinder/api/openstack/compute/contrib/aggregates.py:175
+#, python-format
+msgid "Cannot remove host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:195
+#, python-format
+msgid "Cannot set metadata %(metadata)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/certificates.py:75
+msgid "Only root certificate can be retrieved."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/cloudpipe.py:146
+msgid ""
+"Unable to claim IP for VPN instances, ensure it isn't running, and try "
+"again in a few minutes"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:44
+msgid "Missing type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:56
+msgid "Invalid type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/disk_config.py:44
+#, python-format
+msgid "%s must be either 'MANUAL' or 'AUTO'."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/extended_server_attributes.py:77
+#: cinder/api/openstack/compute/contrib/extended_status.py:61
+msgid "Server not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:61
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:91
+msgid "Flavor not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:49
+#: cinder/api/openstack/compute/contrib/volumetypes.py:158
+msgid "No Request Body"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:159
+#, python-format
+msgid "No more floating ips in pool %s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:161
+msgid "No more floating ips available."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:201
+#: cinder/api/openstack/compute/contrib/floating_ips.py:230
+#: cinder/api/openstack/compute/contrib/security_groups.py:571
+#: cinder/api/openstack/compute/contrib/security_groups.py:604
+msgid "Missing parameter dict"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:204
+#: cinder/api/openstack/compute/contrib/floating_ips.py:233
+msgid "Address not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:213
+msgid "No fixed ips associated to instance"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:216
+msgid "Associate floating ip failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:144
+#, python-format
+msgid "Invalid status: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:148
+#, python-format
+msgid "Invalid mode: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:152
+#, python-format
+msgid "Invalid update setting: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:170
+#, python-format
+msgid "Putting host %(host)s in maintenance mode %(mode)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:181
+#, python-format
+msgid "Setting host %(host)s to %(state)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:230
+msgid "Describe-resource is admin only functionality"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:238
+msgid "Host not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:70
+msgid "Keypair name contains unsafe characters"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:95
+msgid "Keypair name must be between 1 and 255 characters long"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:100
+#, python-format
+msgid "Key pair '%s' already exists."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:52
+msgid "Missing 'networkId' argument for addFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:68
+msgid "Missing 'address' argument for removeFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:77
+#, python-format
+msgid "Unable to find address %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:62
+#, python-format
+msgid "Network does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:70
+#, python-format
+msgid "Disassociating network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:74
+#: cinder/api/openstack/compute/contrib/networks.py:91
+#: cinder/api/openstack/compute/contrib/networks.py:101
+msgid "Network not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:87
+#, python-format
+msgid "Showing network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:97
+#, python-format
+msgid "Deleting network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/scheduler_hints.py:41
+msgid "Malformed scheduler_hints attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:222
+msgid "Security group id should be integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:243
+msgid "Security group is still in use"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:295
+#, python-format
+msgid "Security group %s already exists"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:315
+#, python-format
+msgid "Security group %s is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:318
+#, python-format
+msgid "Security group %s cannot be empty."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:321
+#, python-format
+msgid "Security group %s should not be greater than 255 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:348
+msgid "Parent group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:351
+#, python-format
+msgid "Security group (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:369
+msgid "Not enough parameters to build a valid rule."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:376
+#, python-format
+msgid "This rule already exists in group %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:414
+msgid "Parent or group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:507
+msgid "Rule id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:510
+#, python-format
+msgid "Rule (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:574
+#: cinder/api/openstack/compute/contrib/security_groups.py:607
+msgid "Security group not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:578
+#: cinder/api/openstack/compute/contrib/security_groups.py:611
+msgid "Security group name cannot be empty"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:45
+#, python-format
+msgid "start instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:54
+#, python-format
+msgid "stop instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:73
+#: cinder/api/openstack/volume/volumes.py:106
+#, python-format
+msgid "vol=%s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:146
+#: cinder/api/openstack/volume/volumes.py:184
+#, python-format
+msgid "Delete volume with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:329
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(server_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:481
+#: cinder/api/openstack/volume/snapshots.py:110
+#, python-format
+msgid "Delete snapshot with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:524
+#: cinder/api/openstack/volume/snapshots.py:150
+#, python-format
+msgid "Create snapshot from volume %s"
+msgstr ""
+
+#: cinder/auth/fakeldap.py:33
+msgid "Attempted to instantiate singleton"
+msgstr ""
+
+#: cinder/auth/ldapdriver.py:650
+#, python-format
+msgid ""
+"Attempted to remove the last member of a group. Deleting the group at %s "
+"instead."
+msgstr ""
+
+#: cinder/auth/manager.py:298
+#, python-format
+msgid "Looking up user: %r"
+msgstr ""
+
+#: cinder/auth/manager.py:302
+#, python-format
+msgid "Failed authorization for access key %s"
+msgstr ""
+
+#: cinder/auth/manager.py:308
+#, python-format
+msgid "Using project name = user name (%s)"
+msgstr ""
+
+#: cinder/auth/manager.py:315
+#, python-format
+msgid "failed authorization: no project named %(pjid)s (user=%(uname)s)"
+msgstr ""
+
+#: cinder/auth/manager.py:324
+#, python-format
+msgid ""
+"Failed authorization: user %(uname)s not admin and not member of project "
+"%(pjname)s"
+msgstr ""
+
+#: cinder/auth/manager.py:331 cinder/auth/manager.py:343
+#, python-format
+msgid "user.secret: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:332 cinder/auth/manager.py:344
+#, python-format
+msgid "expected_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:333 cinder/auth/manager.py:345
+#, python-format
+msgid "signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:335 cinder/auth/manager.py:357
+#, python-format
+msgid "Invalid signature for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:353
+#, python-format
+msgid "host_only_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:449
+msgid "Must specify project"
+msgstr ""
+
+#: cinder/auth/manager.py:490
+#, python-format
+msgid "Adding role %(role)s to user %(uid)s in project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:493
+#, python-format
+msgid "Adding sitewide role %(role)s to user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:519
+#, python-format
+msgid "Removing role %(role)s from user %(uid)s on project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:522
+#, python-format
+msgid "Removing sitewide role %(role)s from user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:595
+#, python-format
+msgid "Created project %(name)s with manager %(manager_user)s"
+msgstr ""
+
+#: cinder/auth/manager.py:613
+#, python-format
+msgid "modifying project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:625
+#, python-format
+msgid "Adding user %(uid)s to project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:646
+#, python-format
+msgid "Remove user %(uid)s from project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:676
+#, python-format
+msgid "Deleting project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:734
+#, python-format
+msgid "Created user %(rvname)s (admin: %(rvadmin)r)"
+msgstr ""
+
+#: cinder/auth/manager.py:743
+#, python-format
+msgid "Deleting user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:753
+#, python-format
+msgid "Access Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:755
+#, python-format
+msgid "Secret Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:757
+#, python-format
+msgid "Admin status set to %(admin)r for user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:802
+#, python-format
+msgid "No vpn data for project %s"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:46
+msgid "Instance type for vpn instances"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:49
+msgid "Template for cloudpipe instance boot script"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:52
+msgid "Network to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:55
+msgid "Netmask to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:107
+#, python-format
+msgid "Launching VPN for %s"
+msgstr ""
+
+#: cinder/compute/api.py:141
+msgid "No compute host specified"
+msgstr ""
+
+#: cinder/compute/api.py:144
+#, python-format
+msgid "Unable to find host for Instance %s"
+msgstr ""
+
+#: cinder/compute/api.py:192
+#, python-format
+msgid ""
+"Quota exceeded for %(pid)s, tried to set %(num_metadata)s metadata "
+"properties"
+msgstr ""
+
+#: cinder/compute/api.py:203
+#, python-format
+msgid "Quota exceeded for %(pid)s, metadata property key or value too long"
+msgstr ""
+
+#: cinder/compute/api.py:257
+msgid "Cannot run any more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:259
+#, python-format
+msgid "Can only run %s more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:261
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances. "
+msgstr ""
+
+#: cinder/compute/api.py:310
+msgid "Creating a raw instance"
+msgstr ""
+
+#: cinder/compute/api.py:312
+#, python-format
+msgid "Using Kernel=%(kernel_id)s, Ramdisk=%(ramdisk_id)s"
+msgstr ""
+
+#: cinder/compute/api.py:383
+#, python-format
+msgid "Going to run %s instances..."
+msgstr ""
+
+#: cinder/compute/api.py:447
+#, python-format
+msgid "bdm %s"
+msgstr ""
+
+#: cinder/compute/api.py:474
+#, python-format
+msgid "block_device_mapping %s"
+msgstr ""
+
+#: cinder/compute/api.py:591
+#, python-format
+msgid "Sending create to scheduler for %(pid)s/%(uid)s's"
+msgstr ""
+
+#: cinder/compute/api.py:871
+msgid "Going to try to soft delete instance"
+msgstr ""
+
+#: cinder/compute/api.py:891
+msgid "No host for instance, deleting immediately"
+msgstr ""
+
+#: cinder/compute/api.py:939
+msgid "Going to try to terminate instance"
+msgstr ""
+
+#: cinder/compute/api.py:977
+#, fuzzy
+msgid "Going to try to stop instance"
+msgstr "Impossibile riavviare l'istanza"
+
+#: cinder/compute/api.py:996
+#, fuzzy
+msgid "Going to try to start instance"
+msgstr "Impossibile riavviare l'istanza"
+
+#: cinder/compute/api.py:1000
+#, python-format
+msgid "Instance %(instance_uuid)s is not stopped. (%(vm_state)s"
+msgstr ""
+
+#: cinder/compute/api.py:1071 cinder/volume/api.py:173
+#: cinder/volume/volume_types.py:64
+#, python-format
+msgid "Searching by: %s"
+msgstr ""
+
+#: cinder/compute/api.py:1201
+#, python-format
+msgid "Image type not recognized %s"
+msgstr ""
+
+#: cinder/compute/api.py:1369
+msgid "flavor_id is None. Assuming migration."
+msgstr ""
+
+#: cinder/compute/api.py:1377
+#, python-format
+msgid ""
+"Old instance type %(current_instance_type_name)s,  new instance type "
+"%(new_instance_type_name)s"
+msgstr ""
+
+#: cinder/compute/api.py:1644
+#, python-format
+msgid "multiple fixedips exist, using the first: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:57 cinder/compute/instance_types.py:65
+msgid "create arguments must be positive integers"
+msgstr ""
+
+#: cinder/compute/instance_types.py:76 cinder/volume/volume_types.py:41
+#, python-format
+msgid "DB error: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:86
+#, python-format
+msgid "Instance type %s not found for deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:138
+#, python-format
+msgid "check_instance_lock: decorating: |%s|"
+msgstr "check_instance_lock: decorazione: |%s|"
+
+#: cinder/compute/manager.py:140
+#, python-format
+msgid ""
+"check_instance_lock: arguments: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+msgstr ""
+
+#: cinder/compute/manager.py:144
+#, python-format
+msgid "check_instance_lock: locked: |%s|"
+msgstr "check_instance_lock: bloccato: |%s|"
+
+#: cinder/compute/manager.py:146
+#, python-format
+msgid "check_instance_lock: admin: |%s|"
+msgstr "check_instance_lock: admin: |%s|"
+
+#: cinder/compute/manager.py:151
+#, python-format
+msgid "check_instance_lock: executing: |%s|"
+msgstr "check_instance_lock: esecuzione: |%s|"
+
+#: cinder/compute/manager.py:155
+#, python-format
+msgid "check_instance_lock: not executing |%s|"
+msgstr "check_instance_lock: non esecuzione |%s|"
+
+#: cinder/compute/manager.py:201
+#, python-format
+msgid "Unable to load the virtualization driver: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:223
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s has been destroyed from under us while trying "
+"to set it to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:240
+#, python-format
+msgid "Current state is %(drv_state)s, state in DB is %(db_state)s."
+msgstr ""
+
+#: cinder/compute/manager.py:245
+msgid "Rebooting instance after cinder-compute restart."
+msgstr ""
+
+#: cinder/compute/manager.py:255
+msgid "Hypervisor driver does not support firewall rules"
+msgstr ""
+
+#: cinder/compute/manager.py:260
+msgid "Checking state"
+msgstr ""
+
+#: cinder/compute/manager.py:329
+#, python-format
+msgid "Setting up bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:400
+#, python-format
+msgid "Instance %s already deleted from database. Attempting forceful vm deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:406
+#, python-format
+msgid "Exception encountered while terminating the instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:444
+#, python-format
+msgid "Instance %s not found."
+msgstr ""
+
+#: cinder/compute/manager.py:480
+msgid "Instance has already been created"
+msgstr "L'istanza é stata già creata"
+
+#: cinder/compute/manager.py:523
+#, python-format
+msgid ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:528
+#, python-format
+msgid ""
+"Image '%(image_id)s' size %(size_bytes)d exceeded instance_type allowed "
+"size %(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:538
+msgid "Starting instance..."
+msgstr ""
+
+#: cinder/compute/manager.py:548
+msgid "Skipping network allocation for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:561
+msgid "Instance failed network setup"
+msgstr ""
+
+#: cinder/compute/manager.py:565
+#, python-format
+msgid "Instance network_info: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:578
+msgid "Instance failed block device setup"
+msgstr ""
+
+#: cinder/compute/manager.py:594
+msgid "Instance failed to spawn"
+msgstr ""
+
+#: cinder/compute/manager.py:615
+msgid "Deallocating network for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:672
+#, python-format
+msgid "%(action_str)s instance"
+msgstr ""
+
+#: cinder/compute/manager.py:699
+#, python-format
+msgid "Ignoring DiskNotFound: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:708
+#, python-format
+msgid "terminating bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:742 cinder/compute/manager.py:1328
+#: cinder/compute/manager.py:1416 cinder/compute/manager.py:2501
+#, python-format
+msgid "%s. Setting instance vm_state to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:811
+#, python-format
+msgid ""
+"Cannot rebuild instance [%(instance_uuid)s], because the given image does"
+" not exist."
+msgstr ""
+
+#: cinder/compute/manager.py:816
+#, python-format
+msgid "Cannot rebuild instance [%(instance_uuid)s]: %(exc)s"
+msgstr ""
+
+#: cinder/compute/manager.py:823
+#, python-format
+msgid "Rebuilding instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:876
+#, python-format
+msgid "Rebooting instance %s"
+msgstr "Riavviando l'istanza %s"
+
+#: cinder/compute/manager.py:891
+#, python-format
+msgid ""
+"trying to reboot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:933
+#, python-format
+msgid "instance %s: snapshotting"
+msgstr "istanza %s: creazione snapshot in corso"
+
+#: cinder/compute/manager.py:939
+#, python-format
+msgid ""
+"trying to snapshot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:995
+#, python-format
+msgid "Found %(num_images)d images (rotation: %(rotation)d)"
+msgstr ""
+
+#: cinder/compute/manager.py:1001
+#, python-format
+msgid "Rotating out %d backups"
+msgstr ""
+
+#: cinder/compute/manager.py:1005
+#, python-format
+msgid "Deleting image %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1035
+#, python-format
+msgid "Failed to set admin password. Instance %s is not running"
+msgstr ""
+
+#: cinder/compute/manager.py:1041
+#, python-format
+msgid "Instance %s: Root password set"
+msgstr ""
+
+#: cinder/compute/manager.py:1050
+msgid "set_admin_password is not implemented by this driver."
+msgstr ""
+
+#: cinder/compute/manager.py:1064
+msgid "Error setting admin password"
+msgstr ""
+
+#: cinder/compute/manager.py:1079
+#, python-format
+msgid ""
+"trying to inject a file into a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1084
+#, python-format
+msgid "instance %(instance_uuid)s: injecting file to %(path)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1098
+#, python-format
+msgid ""
+"trying to update agent on a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1103
+#, python-format
+msgid "instance %(instance_uuid)s: updating agent to %(url)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1116
+#, python-format
+msgid "instance %s: rescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1141
+#, python-format
+msgid "instance %s: unrescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1270
+msgid "destination same as source!"
+msgstr ""
+
+#: cinder/compute/manager.py:1287
+#, python-format
+msgid "instance %s: migrating"
+msgstr ""
+
+#: cinder/compute/manager.py:1471
+#, python-format
+msgid "instance %s: pausing"
+msgstr "istanza %s: in pausa"
+
+#: cinder/compute/manager.py:1489
+#, python-format
+msgid "instance %s: unpausing"
+msgstr "istanza %s: fuori pausa"
+
+#: cinder/compute/manager.py:1525
+#, python-format
+msgid "instance %s: retrieving diagnostics"
+msgstr "istanza %s: ricezione diagnostiche"
+
+#: cinder/compute/manager.py:1534
+#, python-format
+msgid "instance %s: suspending"
+msgstr "istanza %s: sospensione in corso"
+
+#: cinder/compute/manager.py:1556
+#, python-format
+msgid "instance %s: resuming"
+msgstr "istanza %s: ripristino"
+
+#: cinder/compute/manager.py:1579
+#, python-format
+msgid "instance %s: locking"
+msgstr "istanza %s: bloccato"
+
+#: cinder/compute/manager.py:1588
+#, python-format
+msgid "instance %s: unlocking"
+msgstr "istanza %s: sbloccato"
+
+#: cinder/compute/manager.py:1596
+#, python-format
+msgid "instance %s: getting locked state"
+msgstr ""
+
+#: cinder/compute/manager.py:1606
+#, python-format
+msgid "instance %s: reset network"
+msgstr "istanza %s: ripristino rete"
+
+#: cinder/compute/manager.py:1614
+#, python-format
+msgid "instance %s: inject network info"
+msgstr ""
+
+#: cinder/compute/manager.py:1618
+#, python-format
+msgid "network_info to inject: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:1655
+#, python-format
+msgid "instance %s: getting vnc console"
+msgstr ""
+
+#: cinder/compute/manager.py:1685
+#, python-format
+msgid "Booting with volume %(volume_id)s at %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1703
+#, python-format
+msgid ""
+"instance %(instance_uuid)s: attaching volume %(volume_id)s to "
+"%(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1705
+#, python-format
+msgid "Attaching volume %(volume_id)s to %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1714
+#, python-format
+msgid "instance %(instance_uuid)s: attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1724
+#, python-format
+msgid "Attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1752
+#, python-format
+msgid "Detach volume %(volume_id)s from mountpoint %(mp)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1756
+#, python-format
+msgid "Detaching volume from unknown instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1822
+#, python-format
+msgid ""
+"Creating tmpfile %s to notify to other compute nodes that they should "
+"mount the same storage."
+msgstr ""
+
+#: cinder/compute/manager.py:1884
+msgid "Instance has no volume."
+msgstr ""
+
+#: cinder/compute/manager.py:1916
+#, python-format
+msgid "plug_vifs() failed %(cnt)d.Retry up to %(max_retry)d for %(hostname)s."
+msgstr ""
+
+#: cinder/compute/manager.py:1973
+#, python-format
+msgid "Pre live migration failed at  %(dest)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2000
+msgid "post_live_migration() is started.."
+msgstr ""
+
+#: cinder/compute/manager.py:2030
+msgid "No floating_ip found"
+msgstr ""
+
+#: cinder/compute/manager.py:2038
+msgid "No floating_ip found."
+msgstr ""
+
+#: cinder/compute/manager.py:2040
+#, python-format
+msgid ""
+"Live migration: Unexpected error: cannot inherit floating ip.\n"
+"%(e)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2073
+#, python-format
+msgid "Migrating instance to %(dest)s finished successfully."
+msgstr ""
+
+#: cinder/compute/manager.py:2075
+msgid ""
+"You may see the error \"libvirt: QEMU error: Domain not found: no domain "
+"with matching name.\" This error can be safely ignored."
+msgstr ""
+
+#: cinder/compute/manager.py:2090
+msgid "Post operation of migraton started"
+msgstr ""
+
+#: cinder/compute/manager.py:2226
+#, python-format
+msgid "Updated the info_cache for instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:2255
+msgid "Updating bandwidth usage cache"
+msgstr ""
+
+#: cinder/compute/manager.py:2277
+msgid "Updating host status"
+msgstr ""
+
+#: cinder/compute/manager.py:2305
+#, python-format
+msgid ""
+"Found %(num_db_instances)s in the database and %(num_vm_instances)s on "
+"the hypervisor."
+msgstr ""
+
+#: cinder/compute/manager.py:2331
+#, python-format
+msgid ""
+"During the sync_power process the instance %(uuid)s has moved from host "
+"%(src)s to host %(dst)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2344
+#, python-format
+msgid ""
+"Instance %s is in the process of migrating to this host. Wait next "
+"sync_power cycle before setting power state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2350
+msgid ""
+"Instance found in database but not known by hypervisor. Setting power "
+"state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2380
+msgid "FLAGS.reclaim_instance_interval <= 0, skipping..."
+msgstr ""
+
+#: cinder/compute/manager.py:2392
+msgid "Reclaiming deleted instance"
+msgstr ""
+
+#: cinder/compute/manager.py:2458
+#, python-format
+msgid ""
+"Detected instance with name label '%(name)s' which is marked as DELETED "
+"but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2465
+#, python-format
+msgid ""
+"Destroying instance with name label '%(name)s' which is marked as DELETED"
+" but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2472
+#, python-format
+msgid "Unrecognized value '%(action)s' for FLAGS.running_deleted_instance_action"
+msgstr ""
+
+#: cinder/compute/manager.py:2542
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: unrecoverable state during operation on "
+"%(host)s"
+msgstr ""
+
+#: cinder/compute/utils.py:142
+msgid "v4 subnets are required for legacy nw_info"
+msgstr ""
+
+#: cinder/console/manager.py:77 cinder/console/vmrc_manager.py:70
+msgid "Adding console"
+msgstr ""
+
+#: cinder/console/manager.py:97
+#, python-format
+msgid "Tried to remove non-existant console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:122
+#, python-format
+msgid "Tried to remove non-existent console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:125
+#, python-format
+msgid "Removing console %(console_id)s."
+msgstr ""
+
+#: cinder/console/xvp.py:98
+msgid "Rebuilding xvp conf"
+msgstr ""
+
+#: cinder/console/xvp.py:116
+#, python-format
+msgid "Re-wrote %s"
+msgstr ""
+
+#: cinder/console/xvp.py:121
+msgid "Stopping xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:134
+msgid "Starting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:141
+#, python-format
+msgid "Error starting xvp: %s"
+msgstr ""
+
+#: cinder/console/xvp.py:144
+msgid "Restarting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:146
+msgid "xvp not running..."
+msgstr ""
+
+#: cinder/consoleauth/manager.py:63
+#, python-format
+msgid "Deleting Expired Token: (%s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:75
+#, python-format
+msgid "Received Token: %(token)s, %(token_dict)s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:79
+#, python-format
+msgid "Checking Token: %(token)s, %(token_valid)s)"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:57
+msgid "Use of empty request context is deprecated"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:198
+#, python-format
+msgid "Unrecognized read_deleted value '%s'"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:516 cinder/db/sqlalchemy/api.py:551
+#, python-format
+msgid "No ComputeNode for %(host)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4019 cinder/db/sqlalchemy/api.py:4045
+#, python-format
+msgid "No backend config with id %(sm_backend_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4103
+#, python-format
+msgid "No sm_flavor called %(sm_flavor)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4147
+#, python-format
+msgid "No sm_volume with id %(volume_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:66
+msgid "python-migrate is not installed. Exiting."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:78
+msgid "version should be an integer"
+msgstr ""
+
+#: cinder/db/sqlalchemy/session.py:137
+#, python-format
+msgid "SQL connection failed. %s attempts left."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:48
+msgid "interface column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:80
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:54
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:48
+#, python-format
+msgid "Table |%s| not created!"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:87
+msgid "VIF column not added to fixed_ips table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:97
+#, python-format
+msgid "join list for moving mac_addresses |%s|"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:39
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:60
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:99
+msgid "foreign key constraint couldn't be added"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:58
+msgid "foreign key constraint couldn't be dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py:34
+msgid "priority column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:41
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:42
+#: cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py:56
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:68
+msgid "foreign key constraint couldn't be removed"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py:34
+msgid "progress column not added to instances table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py:97
+#, python-format
+msgid ""
+"Could not cast flavorid to integer: %s. Set flavorid to an integer-like "
+"string to downgrade."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:69
+msgid "instance_info_caches tables not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py:41
+msgid "progress column not added to compute_nodes table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:76
+msgid "dns_domains table not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:60
+msgid "quota_classes table not dropped"
+msgstr ""
+
+#: cinder/image/glance.py:147
+msgid "Connection error contacting glance server, retrying"
+msgstr ""
+
+#: cinder/image/glance.py:153 cinder/network/quantum/melange_connection.py:104
+msgid "Maximum attempts reached"
+msgstr ""
+
+#: cinder/image/glance.py:278
+#, python-format
+msgid "Creating image in Glance. Metadata passed in %s"
+msgstr ""
+
+#: cinder/image/glance.py:281
+#, python-format
+msgid "Metadata after formatting for Glance %s"
+msgstr ""
+
+#: cinder/image/glance.py:289
+#, python-format
+msgid "Metadata returned from Glance formatted for Base %s"
+msgstr ""
+
+#: cinder/image/glance.py:331 cinder/image/glance.py:335
+msgid "Not the image owner"
+msgstr ""
+
+#: cinder/image/glance.py:410
+#, python-format
+msgid "%(timestamp)s does not follow any of the signatures: %(iso_formats)s"
+msgstr ""
+
+#: cinder/image/s3.py:309
+#, python-format
+msgid "Failed to download %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:328
+#, python-format
+msgid "Failed to decrypt %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:340
+#, python-format
+msgid "Failed to untar %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:353
+#, python-format
+msgid "Failed to upload %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:379
+#, python-format
+msgid "Failed to decrypt private key: %s"
+msgstr ""
+
+#: cinder/image/s3.py:387
+#, python-format
+msgid "Failed to decrypt initialization vector: %s"
+msgstr ""
+
+#: cinder/image/s3.py:398
+#, python-format
+msgid "Failed to decrypt image file %(image_file)s: %(err)s"
+msgstr ""
+
+#: cinder/image/s3.py:410
+msgid "Unsafe filenames in image"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:38 cinder/ipv6/rfc2462.py:34
+#, python-format
+msgid "Bad mac for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:40 cinder/ipv6/rfc2462.py:36
+#, python-format
+msgid "Bad prefix for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:42
+#, python-format
+msgid "Bad project_id for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/network/ldapdns.py:321
+msgid "This driver only supports type 'a' entries."
+msgstr ""
+
+#: cinder/network/linux_net.py:166
+#, python-format
+msgid "Attempted to remove chain %s which does not exist"
+msgstr ""
+
+#: cinder/network/linux_net.py:192
+#, python-format
+msgid "Unknown chain: %r"
+msgstr ""
+
+#: cinder/network/linux_net.py:215
+#, python-format
+msgid ""
+"Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r "
+"%(top)r"
+msgstr ""
+
+#: cinder/network/linux_net.py:335
+msgid "IPTablesManager.apply completed with success"
+msgstr ""
+
+#: cinder/network/linux_net.py:694
+#, python-format
+msgid "Hupping dnsmasq threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:696
+#, python-format
+msgid "Pid %d is stale, relaunching dnsmasq"
+msgstr ""
+
+#: cinder/network/linux_net.py:756
+#, python-format
+msgid "killing radvd threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:758
+#, python-format
+msgid "Pid %d is stale, relaunching radvd"
+msgstr ""
+
+#: cinder/network/linux_net.py:967
+#, python-format
+msgid "Starting VLAN inteface %s"
+msgstr "Avviando l'interfaccia VLAN %s"
+
+#: cinder/network/linux_net.py:999
+#, python-format
+msgid "Starting Bridge interface for %s"
+msgstr "Avviando l'interfaccia Bridge per %s"
+
+#: cinder/network/linux_net.py:1142
+#, fuzzy, python-format
+msgid "Starting bridge %s "
+msgstr "Avviando l'interfaccia Bridge per %s"
+
+#: cinder/network/linux_net.py:1149
+#, python-format
+msgid "Done starting bridge %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1167
+#, python-format
+msgid "Failed unplugging gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/linux_net.py:1170
+#, python-format
+msgid "Unplugged gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/manager.py:291
+#, python-format
+msgid "Fixed ip %(fixed_ip_id)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:300 cinder/network/manager.py:496
+#, python-format
+msgid "Interface %(interface)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:315
+#, python-format
+msgid "floating IP allocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:353
+#, python-format
+msgid "floating IP deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:386
+#, python-format
+msgid "Address |%(address)s| is not allocated"
+msgstr ""
+
+#: cinder/network/manager.py:390
+#, python-format
+msgid "Address |%(address)s| is not allocated to your project |%(project)s|"
+msgstr ""
+
+#: cinder/network/manager.py:402
+#, python-format
+msgid "Quota exceeded for %s, tried to allocate address"
+msgstr ""
+
+#: cinder/network/manager.py:614
+#, python-format
+msgid ""
+"Database inconsistency: DNS domain |%s| is registered in the Cinder db but "
+"not visible to either the floating or instance DNS driver. It will be "
+"ignored."
+msgstr ""
+
+#: cinder/network/manager.py:660
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing zone to |%(av_zone)s|."
+msgstr ""
+
+#: cinder/network/manager.py:670
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing project to |%(project)s|."
+msgstr ""
+
+#: cinder/network/manager.py:778
+#, python-format
+msgid "Disassociated %s stale fixed ip(s)"
+msgstr ""
+
+#: cinder/network/manager.py:782
+msgid "setting network host"
+msgstr ""
+
+#: cinder/network/manager.py:896
+#, python-format
+msgid "network allocations for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:901
+#, python-format
+msgid "networks retrieved for instance |%(instance_id)s|: |%(networks)s|"
+msgstr ""
+
+#: cinder/network/manager.py:930
+#, python-format
+msgid "network deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:1152
+#, python-format
+msgid ""
+"instance-dns-zone is |%(domain)s|, which is in availability zone "
+"|%(zone)s|. Instance |%(instance)s| is in zone |%(zone2)s|. No DNS record"
+" will be created."
+msgstr ""
+
+#: cinder/network/manager.py:1227
+#, python-format
+msgid "Unable to release %s because vif doesn't exist."
+msgstr ""
+
+#: cinder/network/manager.py:1244
+#, python-format
+msgid "Leased IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1248
+#, python-format
+msgid "IP %s leased that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1256
+#, python-format
+msgid "IP |%s| leased that isn't allocated"
+msgstr ""
+
+#: cinder/network/manager.py:1261
+#, python-format
+msgid "Released IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1265
+#, python-format
+msgid "IP %s released that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1268
+#, python-format
+msgid "IP %s released that was not leased"
+msgstr ""
+
+#: cinder/network/manager.py:1331
+msgid "cidr already in use"
+msgstr ""
+
+#: cinder/network/manager.py:1334
+#, python-format
+msgid "requested cidr (%(cidr)s) conflicts with existing supernet (%(super)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1345
+#, python-format
+msgid ""
+"requested cidr (%(cidr)s) conflicts with existing smaller cidr "
+"(%(smaller)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1404
+msgid "Network already exists!"
+msgstr ""
+
+#: cinder/network/manager.py:1423
+#, python-format
+msgid "Network must be disassociated from project %s before delete"
+msgstr ""
+
+#: cinder/network/manager.py:1832
+msgid ""
+"The sum between the number of networks and the vlan start cannot be "
+"greater than 4094"
+msgstr ""
+
+#: cinder/network/manager.py:1839
+#, python-format
+msgid ""
+"The network range is not big enough to fit %(num_networks)s. Network size"
+" is %(network_size)s"
+msgstr ""
+
+#: cinder/network/minidns.py:65
+msgid "This driver only supports type 'a'"
+msgstr ""
+
+#: cinder/network/quantum/client.py:154
+msgid "Tenant ID not set"
+msgstr ""
+
+#: cinder/network/quantum/client.py:180
+#, python-format
+msgid "Quantum Client Request: %(method)s %(action)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:196
+#, python-format
+msgid "Quantum entity not found: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:206
+#, python-format
+msgid "Server %(status_code)s error: %(data)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:210
+#, python-format
+msgid "Unable to connect to server. Got error: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:228
+#, python-format
+msgid "unable to deserialize object of type = '%s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:162
+msgid "QuantumManager does not use 'multi_host' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:166
+msgid "QuantumManager requires that only one network is created per call"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:176
+msgid "QuantumManager does not use 'vlan_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:182
+msgid "QuantumManager does not use 'vpn_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:186
+msgid "QuantumManager does not use 'bridge' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:190
+msgid "QuantumManager does not use 'bridge_interface' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:195
+msgid "QuantumManager requires a valid (.1) gateway address."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:204
+#, python-format
+msgid ""
+"Unable to find existing quantum network for tenant '%(q_tenant_id)s' with"
+" net-id '%(quantum_net_id)s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:301
+#, python-format
+msgid "network allocations for instance %s"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:588
+#, python-format
+msgid ""
+"port deallocation failed for instance: |%(instance_id)s|, port_id: "
+"|%(port_id)s|"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:606
+#, python-format
+msgid ""
+"ipam deallocation failed for instance: |%(instance_id)s|, vif_uuid: "
+"|%(vif_uuid)s|"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:96
+#, python-format
+msgid "Server returned error: %s"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:98
+msgid "Connection error contacting melange service, retrying"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:108
+#, python-format
+msgid ""
+"allocate IP on network |%(network_id)s| belonging to "
+"|%(network_tenant_id)s| to this vif |%(vif_id)s| with mac "
+"|%(mac_address)s| belonging to |%(project_id)s| "
+msgstr ""
+
+#: cinder/network/quantum/melange_ipam_lib.py:133
+msgid "get_project_and_global_net_ids must be called with a non-null project_id"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:75
+msgid "Error creating network entry"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:90
+#, python-format
+msgid "No network with net_id = %s"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:221
+#, python-format
+msgid "No fixed IPs to deallocate for vif %s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:99
+#, python-format
+msgid "Connecting interface %(interface_id)s to net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:113
+#, python-format
+msgid "Deleting port %(port_id)s on net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/notifier/api.py:115
+#, python-format
+msgid "%s not in valid priorities"
+msgstr ""
+
+#: cinder/notifier/api.py:130
+#, python-format
+msgid ""
+"Problem '%(e)s' attempting to send to notification system. "
+"Payload=%(payload)s"
+msgstr ""
+
+#: cinder/notifier/list_notifier.py:65
+#, python-format
+msgid "Problem '%(e)s' attempting to send to notification driver %(driver)s."
+msgstr ""
+
+#: cinder/notifier/rabbit_notifier.py:46
+#, python-format
+msgid "Could not send notification to %(topic)s. Payload=%(message)s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:146
+#, python-format
+msgid "Returning exception %s to caller"
+msgstr "Sollevando eccezione %s al chiamante"
+
+#: cinder/rpc/amqp.py:188
+#, python-format
+msgid "unpacked context: %s"
+msgstr "contesto decompresso: %s"
+
+#: cinder/rpc/amqp.py:231
+#, python-format
+msgid "received %s"
+msgstr "ricevuto %s"
+
+#: cinder/rpc/amqp.py:236
+#, python-format
+msgid "no method for message: %s"
+msgstr "nessun metodo per il messaggio: %s"
+
+#: cinder/rpc/amqp.py:237
+#, python-format
+msgid "No method for message: %s"
+msgstr "nessun metodo per il messagggio: %s"
+
+#: cinder/rpc/amqp.py:321
+#, python-format
+msgid "Making asynchronous call on %s ..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:324
+#, python-format
+msgid "MSG_ID is %s"
+msgstr "MSG_ID é %s"
+
+#: cinder/rpc/amqp.py:346
+#, python-format
+msgid "Making asynchronous cast on %s..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:354
+msgid "Making asynchronous fanout cast..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:379
+#, python-format
+msgid "Sending notification on %s..."
+msgstr ""
+
+#: cinder/rpc/common.py:54
+#, python-format
+msgid ""
+"Remote error: %(exc_type)s %(value)s\n"
+"%(traceback)s."
+msgstr ""
+
+#: cinder/rpc/common.py:71
+msgid "Timeout while waiting on RPC response."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:111
+msgid "Failed to process message... skipping it."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:407
+#, python-format
+msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:430
+#, python-format
+msgid "Connected to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:466
+#, python-format
+msgid ""
+"Unable to connect to AMQP server on %(hostname)s:%(port)d after "
+"%(max_retries)d tries: %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:482
+#, python-format
+msgid ""
+"AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying "
+"again in %(sleep_time)d seconds."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:533 cinder/rpc/impl_qpid.py:385
+#, python-format
+msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:551 cinder/rpc/impl_qpid.py:400
+#, python-format
+msgid "Timed out waiting for RPC response: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:555 cinder/rpc/impl_qpid.py:404
+#, python-format
+msgid "Failed to consume message from queue: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:589 cinder/rpc/impl_qpid.py:434
+#, python-format
+msgid "Failed to publish message to topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:341
+#, python-format
+msgid "Unable to connect to AMQP server: %s "
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:346
+#, python-format
+msgid "Connected to AMQP server on %s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:354
+msgid "Re-established AMQP queues"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:412
+msgid "Error processing message.  Skipping it."
+msgstr ""
+
+#: cinder/scheduler/chance.py:47 cinder/scheduler/simple.py:91
+#: cinder/scheduler/simple.py:143
+msgid "Is the appropriate service running?"
+msgstr ""
+
+#: cinder/scheduler/chance.py:52
+msgid "Could not find another compute"
+msgstr ""
+
+#: cinder/scheduler/driver.py:63
+#, python-format
+msgid "Casted '%(method)s' to volume '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:80
+#, python-format
+msgid "Casted '%(method)s' to compute '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:89
+#, python-format
+msgid "Casted '%(method)s' to network '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:107
+#, python-format
+msgid "Casted '%(method)s' to %(topic)s '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:181
+msgid "Must implement a fallback schedule"
+msgstr ""
+
+#: cinder/scheduler/driver.py:185
+msgid "Driver must implement schedule_prep_resize"
+msgstr ""
+
+#: cinder/scheduler/driver.py:190
+msgid "Driver must implement schedule_run_instance"
+msgstr ""
+
+#: cinder/scheduler/driver.py:325
+msgid "Block migration can not be used with shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:330
+msgid "Live migration can not be used without shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:367 cinder/scheduler/driver.py:457
+#, python-format
+msgid "host %(dest)s is not compatible with original host %(src)s."
+msgstr ""
+
+#: cinder/scheduler/driver.py:416
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"memory(host:%(avail)s <= instance:%(mem_inst)s)"
+msgstr ""
+
+#: cinder/scheduler/driver.py:472
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"disk(host:%(available)s <= instance:%(necessary)s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:51
+#, python-format
+msgid "No host selection for %s defined."
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:64
+#, python-format
+msgid "Attempting to build %(num_instances)d instance(s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:157
+msgid "Scheduler only understands Compute nodes (for now)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:199
+#, python-format
+msgid "Filtered %(hosts)s"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:209
+#, python-format
+msgid "Weighted %(weighted_host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:144
+#, python-format
+msgid "Host filter fails for ignored host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:151
+#, python-format
+msgid "Host filter fails for non-forced host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:157
+#, python-format
+msgid "Host filter function %(func)s failed for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:163
+#, python-format
+msgid "Host filter passes for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:272
+#, python-format
+msgid "Received %(service_name)s service update from %(host)s."
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:313
+msgid "host_manager only implemented for 'compute'"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:323
+#, python-format
+msgid "No service for compute ID %s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:85
+#, python-format
+msgid ""
+"Driver Method %(driver_method_name)s missing: %(e)s. Reverting to "
+"schedule()"
+msgstr ""
+
+#: cinder/scheduler/manager.py:150
+#, python-format
+msgid "Failed to schedule_%(method)s: %(ex)s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:159
+#, python-format
+msgid "Setting instance %(instance_uuid)s to %(state)s state."
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:66
+#, python-format
+msgid "Could not stat scheduler options file %(filename)s: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:75
+#, python-format
+msgid "Could not decode scheduler options: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/simple.py:87
+msgid "Not enough allocatable CPU cores remaining"
+msgstr ""
+
+#: cinder/scheduler/simple.py:137
+msgid "Not enough allocatable volume gigabytes remaining"
+msgstr ""
+
+#: cinder/scheduler/filters/core_filter.py:45
+msgid "VCPUs not set; assuming CPU collection broken"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:72
+#, python-format
+msgid "Faking execution of cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:80
+#, python-format
+msgid "Faked command matched %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:96
+#, python-format
+msgid "Faked command raised an exception %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:101
+#, python-format
+msgid "Reply to faked command is stdout='%(stdout)s' stderr='%(stderr)s'"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:784
+msgid "Please extend mock libvirt module to support flags"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:790
+msgid "Please extend fake libvirt module to support this auth method"
+msgstr ""
+
+#: cinder/tests/test_compute.py:365 cinder/tests/test_compute.py:1419
+#, python-format
+msgid "Running instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:371
+#, python-format
+msgid "After terminating instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:589
+msgid "Internal error"
+msgstr ""
+
+#: cinder/tests/test_compute.py:1430
+#, python-format
+msgid "After force-killing instances: %s"
+msgstr ""
+
+#: cinder/tests/test_misc.py:92
+#, python-format
+msgid ""
+"The following migrations are missing a downgrade:\n"
+"\t%s"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:169
+msgid "id"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:170
+msgid "IPv4"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:171
+msgid "IPv6"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:172
+msgid "start address"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:173
+msgid "DNS1"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:174
+msgid "DNS2"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:175
+msgid "VlanID"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:176
+msgid "project"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:177
+msgid "uuid"
+msgstr ""
+
+#: cinder/tests/test_volume.py:216
+#, python-format
+msgid "Target %s allocated"
+msgstr ""
+
+#: cinder/tests/test_volume.py:468
+#, python-format
+msgid "Cannot confirm exported volume id:%s."
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:58
+#, python-format
+msgid "Given data: %s"
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:59
+#, python-format
+msgid "Result data: %s"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:626
+#, python-format
+msgid "Creating files in %s to simulate guest agent"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:637
+#, python-format
+msgid "Removing simulated guest agent files in %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/test_servers.py:2144
+#, python-format
+msgid "Quota exceeded: code=%(code)s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:57
+#, python-format
+msgid "_create: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:66
+#, python-format
+msgid "_delete: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:75
+#, python-format
+msgid "_get: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:85
+#, python-format
+msgid "_get_all: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:125
+#, python-format
+msgid "test_snapshot_create: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:134
+#, python-format
+msgid "test_snapshot_create: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:156
+#, python-format
+msgid "test_snapshot_create_force: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:165
+#, python-format
+msgid "test_snapshot_create_force: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:205
+#, python-format
+msgid "test_snapshot_show: resp=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:231
+#, python-format
+msgid "test_snapshot_detail: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/integrated/test_login.py:31
+#, python-format
+msgid "flavor: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:38
+#, python-format
+msgid ""
+"%(message)s\n"
+"Status Code: %(_status)s\n"
+"Body: %(_body)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:47
+msgid "Authentication error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:55
+msgid "Authorization error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:63
+msgid "Item not found"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:105
+#, python-format
+msgid "Doing %(method)s on %(relative_url)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:107
+#, python-format
+msgid "Body: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:125
+#, python-format
+msgid "%(auth_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:151
+#, python-format
+msgid "%(relative_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:161
+msgid "Unexpected status code"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:168
+#, python-format
+msgid "Decoding JSON: %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:133
+#, python-format
+msgid "Nested received %(queue)s, %(value)s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:142
+#, python-format
+msgid "Nested return %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:160
+msgid "RPC backend does not support timeouts"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:227 cinder/tests/rpc/common.py:233
+#, python-format
+msgid "Received %s"
+msgstr ""
+
+#: cinder/virt/connection.py:85
+msgid "Failed to open connection to the hypervisor"
+msgstr "Fallita l'apertura della connessione verso l'hypervisor"
+
+#: cinder/virt/fake.py:270 cinder/virt/xenapi_conn.py:396
+#: cinder/virt/baremetal/proxy.py:716 cinder/virt/libvirt/connection.py:2045
+#, python-format
+msgid "Compute_service record created for %s "
+msgstr ""
+
+#: cinder/virt/fake.py:273 cinder/virt/xenapi_conn.py:399
+#: cinder/virt/baremetal/proxy.py:720 cinder/virt/libvirt/connection.py:2048
+#, python-format
+msgid "Compute_service record updated for %s "
+msgstr ""
+
+#: cinder/virt/firewall.py:130
+#, python-format
+msgid "Attempted to unfilter instance %s which is not filtered"
+msgstr ""
+
+#: cinder/virt/firewall.py:137
+#, python-format
+msgid "Filters added to instance %s"
+msgstr ""
+
+#: cinder/virt/firewall.py:139
+msgid "Provider Firewall Rules refreshed"
+msgstr ""
+
+#: cinder/virt/firewall.py:291
+#, python-format
+msgid "Adding security group rule: %r"
+msgstr ""
+
+#: cinder/virt/firewall.py:403 cinder/virt/xenapi/firewall.py:87
+#, python-format
+msgid "Adding provider rule: %s"
+msgstr ""
+
+#: cinder/virt/images.py:86
+msgid "'qemu-img info' parsing failed."
+msgstr ""
+
+#: cinder/virt/images.py:92
+#, python-format
+msgid "fmt=%(fmt)s backed by: %(backing_file)s"
+msgstr ""
+
+#: cinder/virt/images.py:104
+#, python-format
+msgid "Converted to raw, but format is now %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:105
+msgid ""
+"Must specify vmwareapi_host_ip,vmwareapi_host_username and "
+"vmwareapi_host_password to useconnection_type=vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:276
+#, python-format
+msgid "In vmwareapi:_create_session, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:359
+#, python-format
+msgid "In vmwareapi:_call_method, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:398
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: success"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:404
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: error %(error_info)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:409
+#, python-format
+msgid "In vmwareapi:_poll_task, Got this error %s"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:140
+msgid ""
+"Must specify xenapi_connection_url, xenapi_connection_username "
+"(optionally), and xenapi_connection_password to use "
+"connection_type=xenapi"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:329 cinder/virt/libvirt/connection.py:472
+msgid "Could not determine iscsi initiator name"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:460
+msgid "Host startup on XenServer is not supported."
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:489
+msgid "Unable to log in to XenAPI (is the Dom0 disk full?)"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:527
+msgid "Host is member of a pool, but DB says otherwise"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:599 cinder/virt/xenapi_conn.py:612
+#, python-format
+msgid "Got exception: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:93
+msgid "No domains exist."
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:95
+#, python-format
+msgid "============= initial domains =========== : %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:99
+msgid "Building domain: to be removed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:103
+msgid "Not running domain: remove"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:111
+msgid "domain running on an unknown node: discarded"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:127
+#, python-format
+msgid "No such domain (%s)"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:134
+#, python-format
+msgid "Failed power down Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:143
+msgid "deactivate -> activate fails"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:153
+msgid "destroy_domain: no such domain"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:154
+#, python-format
+msgid "No such domain %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:161
+#, python-format
+msgid "Domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:163
+#, python-format
+msgid "Nodes: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:166
+#, python-format
+msgid "After storing domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:169
+msgid "deactivation/removing domain failed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:176
+msgid "===== Domain is being created ====="
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:179
+msgid "Same domain name already exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:181
+msgid "create_domain: before get_idle_node"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:198
+#, python-format
+msgid "Created new domain: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:213
+#, python-format
+msgid "Failed to boot Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:222
+msgid "No such domain exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:226
+#, python-format
+msgid "change_domain_state: to new state %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:233
+#, python-format
+msgid "Stored fake domains to the file: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:244
+msgid "domain does not exist"
+msgstr ""
+
+#: cinder/virt/baremetal/nodes.py:42
+#, python-format
+msgid "Unknown baremetal driver %(d)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:148
+#, python-format
+msgid "Error encountered when destroying instance '%(name)s': %(ex)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:162
+#, python-format
+msgid "instance %(instance_name)s: deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:189
+#, python-format
+msgid "instance %s: rebooted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:192
+msgid "_wait_for_reboot failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:222
+#, python-format
+msgid "instance %s: rescued"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:225
+msgid "_wait_for_rescue failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:242
+msgid "<============= spawn of baremetal =============>"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:255
+#, python-format
+msgid "instance %s: is building"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:260
+msgid "Key is injected but instance is not running yet"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:265
+#, python-format
+msgid "instance %s: booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:268
+#, python-format
+msgid "~~~~~~ current state = %s ~~~~~~"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:269
+#, python-format
+msgid "instance %s spawned successfully"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:272
+#, python-format
+msgid "instance %s:not booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:274
+msgid "Bremetal assignment is overcommitted."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:354
+#, python-format
+msgid "instance %s: Creating image"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:473
+#, python-format
+msgid "instance %(inst_name)s: injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:484
+#, python-format
+msgid ""
+"instance %(inst_name)s: ignoring error injecting data into image "
+"%(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:529
+#, python-format
+msgid "instance %s: starting toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:531
+#, python-format
+msgid "instance %s: finished toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:574 cinder/virt/libvirt/connection.py:1815
+msgid ""
+"Cannot get the number of cpu, because this function is not implemented "
+"for this platform. This error can be safely ignored for now."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:714
+#, python-format
+msgid "#### RLK: cpu_arch = %s "
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:746
+msgid "Updating!"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:773 cinder/virt/libvirt/connection.py:2609
+#: cinder/virt/xenapi/host.py:129
+msgid "Updating host stats"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:185
+msgid "free_node...."
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:216
+#, python-format
+msgid "deactivate_node is called for node_id = %(id)s node_ip = %(ip)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:221
+msgid "status of node is set to 0"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:232
+msgid "rootfs is already removed"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:264
+msgid "Before ping to the bare-metal node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:275
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is ready"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:279
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is not ready, out_msg=%(out_msg)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:292
+msgid "Noting to do for tilera nodes: vmlinux is in CF"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:316
+msgid "activate_node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:330
+msgid "Node is unknown error state."
+msgstr ""
+
+#: cinder/virt/disk/api.py:165
+msgid "no capable image handler configured"
+msgstr ""
+
+#: cinder/virt/disk/api.py:178
+#, python-format
+msgid "unknown disk image handler: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:189
+msgid "image already mounted"
+msgstr ""
+
+#: cinder/virt/disk/api.py:276 cinder/virt/disk/guestfs.py:64
+#: cinder/virt/disk/guestfs.py:78 cinder/virt/disk/mount.py:100
+#, python-format
+msgid "Failed to mount filesystem: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:291
+#, python-format
+msgid "Failed to remove container: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:441
+#, python-format
+msgid "User %(username)s not found in password file."
+msgstr ""
+
+#: cinder/virt/disk/api.py:457
+#, python-format
+msgid "User %(username)s not found in shadow file."
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:39
+#, python-format
+msgid "unsupported partition: %s"
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:77
+msgid "unknown guestmount error"
+msgstr ""
+
+#: cinder/virt/disk/loop.py:30
+#, python-format
+msgid "Could not attach image to loopback: %s"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:76
+msgid "no partitions found"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:77
+#, python-format
+msgid "Failed to map partitions: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:58
+msgid "nbd unavailable: module not loaded"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:63
+msgid "No free nbd devices"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:81
+#, python-format
+msgid "qemu-nbd error: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:93
+#, python-format
+msgid "nbd device %s did not show up"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:265
+#, python-format
+msgid "Connecting to libvirt: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:286
+msgid "Connection to libvirt broke"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:388
+#, python-format
+msgid "Error from libvirt during destroy. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:400
+#, python-format
+msgid ""
+"Error from libvirt during saved instance removal. Code=%(errcode)s "
+"Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:411
+#, python-format
+msgid "Error from libvirt during undefine. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:423
+msgid "Instance destroyed successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:435
+#, python-format
+msgid "Error from libvirt during unfilter. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:461
+#, python-format
+msgid "Deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:554
+msgid "attaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:567
+msgid "detaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:692
+#, fuzzy, python-format
+msgid "Instance soft rebooted successfully."
+msgstr "volume %s: creato con successo"
+
+#: cinder/virt/libvirt/connection.py:696
+#, fuzzy
+msgid "Failed to soft reboot instance."
+msgstr "Impossibile riavviare l'istanza"
+
+#: cinder/virt/libvirt/connection.py:725
+msgid "Instance shutdown successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:761 cinder/virt/libvirt/connection.py:905
+msgid "During reboot, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:766
+msgid "Instance rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:867 cinder/virt/xenapi/vmops.py:1358
+#, python-format
+msgid ""
+"Found %(migration_count)d unconfirmed migrations older than "
+"%(confirm_window)d seconds"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:871
+#, python-format
+msgid "Automatically confirming migration %d"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:896
+msgid "Instance is running"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:910
+msgid "Instance spawned successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:926
+#, python-format
+msgid "data: %(data)r, fpath: %(fpath)r"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:978
+#, fuzzy
+msgid "Guest does not have a console available"
+msgstr "L'utente non ha i privilegi dell'amministratore"
+
+#: cinder/virt/libvirt/connection.py:1020
+#, python-format
+msgid "Path '%(path)s' supports direct I/O"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1024
+#, python-format
+msgid "Path '%(path)s' does not support direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1028 cinder/virt/libvirt/connection.py:1032
+#, python-format
+msgid "Error on '%(path)s' while checking direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1153
+msgid "Creating image"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1339
+#, python-format
+msgid "Injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1349
+#, python-format
+msgid "Ignoring error injecting data into image %(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1381
+#, python-format
+msgid "block_device_list %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1658
+msgid "Starting toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1662
+msgid "Finished toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1679
+#, python-format
+msgid ""
+"Error from libvirt while looking up %(instance_name)s: [Error Code "
+"%(error_code)s] %(ex)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1920
+msgid "libvirt version is too old (does not support getVersion)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1942
+#, python-format
+msgid "'<cpu>' must be 1, but %d\n"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1969
+#, python-format
+msgid "topology (%(topology)s) must have %(ks)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2067
+#, python-format
+msgid ""
+"Instance launched has CPU info:\n"
+"%s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2079
+#, python-format
+msgid ""
+"CPU doesn't have compatibility.\n"
+"\n"
+"%(ret)s\n"
+"\n"
+"Refer to %(u)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2136
+#, python-format
+msgid "Timeout migrating for %s. nwfilter not found."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2352
+#, python-format
+msgid "skipping %(path)s since it looks like volume"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2407
+#, python-format
+msgid "Getting disk size of %(i_name)s: %(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2458
+#, python-format
+msgid "Instance %s: Starting migrate_disk_and_power_off"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2513
+msgid "During wait running, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2518
+msgid "Instance running successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2525
+#, python-format
+msgid "Instance %s: Starting finish_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2565
+#, python-format
+msgid "Instance %s: Starting finish_revert_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:42
+msgid ""
+"Libvirt module could not be loaded. NWFilterFirewall will not work "
+"correctly."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:93
+msgid "Called setup_basic_filtering in nwfilter"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:101
+msgid "Ensuring static filters"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:171
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:217
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) for%(name)s is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:233
+msgid "iptables firewall: Setup Basic Filtering"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:252
+msgid "Attempted to unfilter instance which is not filtered"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:170
+#, python-format
+msgid "%s is a valid instance name"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:173
+#, python-format
+msgid "%s has a disk file"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:175
+#, python-format
+msgid "Instance %(instance)s is backed by %(backing)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:186
+#, python-format
+msgid ""
+"Instance %(instance)s is using a backing file %(backing)s which does not "
+"appear in the image service"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:237
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification failed"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:247
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification skipped, no hash stored"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:266
+#, python-format
+msgid "Cannot remove %(base_file)s, it does not exist"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:278
+#, python-format
+msgid "Base file too young to remove: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:281
+#, python-format
+msgid "Removing base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:288
+#, python-format
+msgid "Failed to remove %(base_file)s, error was %(error)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:299
+#, python-format
+msgid "%(id)s (%(base_file)s): checking"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:318
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): in use: on this node %(local)d local, %(remote)d "
+"on other nodes"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:330
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): warning -- an absent base file is in use! "
+"instances: %(instance_list)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:338
+#, python-format
+msgid "%(id)s (%(base_file)s): in use on (%(remote)d on other nodes)"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:348
+#, python-format
+msgid "%(id)s (%(base_file)s): image is not in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:354
+#, python-format
+msgid "%(id)s (%(base_file)s): image is in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:377
+#, python-format
+msgid "Skipping verification, no base directory at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:381
+msgid "Verify base images"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:388
+#, python-format
+msgid "Image id %(id)s yields fingerprint %(fingerprint)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:406
+#, python-format
+msgid "Unknown base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:411
+#, python-format
+msgid "Active base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:414
+#, python-format
+msgid "Corrupt base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:418
+#, python-format
+msgid "Removable base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:426
+msgid "Verification complete"
+msgstr ""
+
+#: cinder/virt/libvirt/utils.py:264
+msgid "Unable to find an open port"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:90
+#, python-format
+msgid "Ensuring vlan %(vlan)s and bridge %(bridge)s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:99
+#, python-format
+msgid "Ensuring bridge %s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:165 cinder/virt/libvirt/vif.py:220
+#, python-format
+msgid "Failed while unplugging vif of instance '%s'"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:163
+#, python-format
+msgid "iSCSI device not found at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:166
+#, python-format
+msgid ""
+"ISCSI volume not yet found at: %(mount_device)s. Will rescan & retry.  "
+"Try number: %(tries)s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:178
+#, python-format
+msgid "Found iSCSI node %(mount_device)s (after %(tries)s rescans)"
+msgstr ""
+
+#: cinder/virt/vmwareapi/error_util.py:93
+#, python-format
+msgid "Error(s) %s occurred in the call to RetrieveProperties"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:44 cinder/virt/xenapi/fake.py:77
+#, python-format
+msgid "%(text)s: _db_content => %(content)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:131
+#, python-format
+msgid "Property %(attr)s not set for the managed object %(objName)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:437
+msgid "There is no VM registered"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:439 cinder/virt/vmwareapi/fake.py:609
+#, python-format
+msgid "Virtual Machine with ref %s is not there"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:502
+#, python-format
+msgid "Logging out a session that is invalid or already logged out: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:517
+msgid "Session is faulty"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:520
+msgid "Session Invalid"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:606
+msgid " No Virtual Machine has been registered yet"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:99
+#, python-format
+msgid "Glance image %s is in killed state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:107
+#, python-format
+msgid "Glance image %(image_id)s is in unknown state - %(state)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:128
+msgid ""
+"ESX SOAP server returned an empty port group for the host system in its "
+"response"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:155
+#, python-format
+msgid "Creating Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:169
+#, python-format
+msgid "Created Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/read_write_util.py:150
+#, python-format
+msgid "Exception during HTTP connection close in VMWareHTTpWrite. Exception is %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:84
+msgid "Unable to import suds."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:90
+msgid "Must specify vmwareapi_wsdl_loc"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:145
+#, python-format
+msgid "No such SOAP method '%s' provided by VI SDK"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:150
+#, python-format
+msgid "httplib error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:157
+#, python-format
+msgid "Socket error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:162
+#, python-format
+msgid "Type error in  %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:166
+#, python-format
+msgid "Exception in %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:66
+msgid "Getting list of instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:82
+#, python-format
+msgid "Got total of %s instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:126
+msgid "Couldn't get a local Datastore reference"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:196
+#, python-format
+msgid "Creating VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:205
+#, python-format
+msgid "Created VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:234
+#, python-format
+msgid ""
+"Creating Virtual Disk of size  %(vmdk_file_size_in_kb)s KB and adapter "
+"type  %(adapter_type)s on the ESX host local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:251
+#, python-format
+msgid ""
+"Created Virtual Disk of size %(vmdk_file_size_in_kb)s KB on the ESX host "
+"local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:260
+#, python-format
+msgid ""
+"Deleting the file %(flat_uploaded_vmdk_path)s on the ESX host localstore "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:272
+#, python-format
+msgid ""
+"Deleted the file %(flat_uploaded_vmdk_path)s on the ESX host local store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:283
+#, python-format
+msgid ""
+"Downloading image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:298
+#, python-format
+msgid ""
+"Downloaded image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:315
+#, python-format
+msgid "Reconfiguring VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:322
+#, python-format
+msgid "Reconfigured VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:329
+#, python-format
+msgid "Powering on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:335
+#, python-format
+msgid "Powered on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:381
+#, python-format
+msgid "Creating Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:391
+#, python-format
+msgid "Created Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:434
+#, python-format
+msgid "Copying disk data before snapshot of the VM  instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:447
+#, python-format
+msgid "Copied disk data before snapshot of the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:456
+#, python-format
+msgid "Uploading image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:469
+#, python-format
+msgid "Uploaded image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:479
+#, python-format
+msgid "Deleting temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:488
+#, python-format
+msgid "Deleted temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:520
+msgid "instance is not powered on"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:527
+#, python-format
+msgid "Rebooting guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:530
+#, python-format
+msgid "Rebooted guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:532
+#, python-format
+msgid "Doing hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:536
+#, python-format
+msgid "Did hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:548
+#, python-format
+msgid "instance - %s not present"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:567
+#, python-format
+msgid "Powering off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:572
+#, python-format
+msgid "Powered off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:576
+#, python-format
+msgid "Unregistering the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:579
+#, python-format
+msgid "Unregistered the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:581
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while un-registering the "
+"VM: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:592
+#, python-format
+msgid "Deleting contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:602
+#, python-format
+msgid "Deleted contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:607
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while deleting the VM "
+"contents from the disk: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:615
+msgid "pause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:619
+msgid "unpause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:633
+#, python-format
+msgid "Suspending the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:637
+#, python-format
+msgid "Suspended the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:640
+msgid "instance is powered off and can not be suspended."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:643
+#, python-format
+msgid "VM %s was already in suspended state. So returning without doing anything"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:656
+#, python-format
+msgid "Resuming the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:661
+#, python-format
+msgid "Resumed the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:663
+msgid "instance is not in a suspended state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:699
+msgid "get_diagnostics not implemented for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:757
+#, python-format
+msgid ""
+"Reconfiguring VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:765
+#, python-format
+msgid ""
+"Reconfigured VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:802
+#, python-format
+msgid "Creating directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:806
+#, python-format
+msgid "Created directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:89
+#, python-format
+msgid "Downloading image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:103
+#, python-format
+msgid "Downloaded image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:108
+#, python-format
+msgid "Uploading image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:129
+#, python-format
+msgid "Uploaded image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:139
+#, python-format
+msgid "Getting image size for the image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:143
+#, python-format
+msgid "Got image size of %(size)s for the image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:553 cinder/virt/xenapi/fake.py:652
+#: cinder/virt/xenapi/fake.py:670 cinder/virt/xenapi/fake.py:732
+msgid "Raising NotImplemented"
+msgstr "Sollevando NotImplemented"
+
+#: cinder/virt/xenapi/fake.py:555
+#, python-format
+msgid "xenapi.fake does not have an implementation for %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:589
+#, python-format
+msgid "Calling %(localname)s %(impl)s"
+msgstr "Chiamando %(localname)s %(impl)s"
+
+#: cinder/virt/xenapi/fake.py:594
+#, python-format
+msgid "Calling getter %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:654
+#, python-format
+msgid ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:67
+#, python-format
+msgid ""
+"Instance %(name)s running on %(host)s could not be found in the database:"
+" assuming it is a worker VM and skipping migration to a new host"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:137
+#, python-format
+msgid "Unable to get SR for this host: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:169
+msgid "Unable to get updated status"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:172
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:37
+#, python-format
+msgid "Found non-unique network for name_label %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:55
+#, python-format
+msgid "Found non-unique network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:58
+#, python-format
+msgid "Found no network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:111
+#, python-format
+msgid "Unable to eject %(host)s from the pool; pool not empty"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:126
+#, python-format
+msgid "Unable to eject %(host)s from the pool; No master found"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:143
+#, python-format
+msgid "Pool-Join failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:146
+#, python-format
+msgid "Unable to join %(host)s in the pool"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:162
+#, python-format
+msgid "Pool-eject failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:174
+#, fuzzy, python-format
+msgid "Unable to set up pool: %(e)s."
+msgstr "Impossibile smontare il volume %s"
+
+#: cinder/virt/xenapi/pool.py:185
+#, python-format
+msgid "Pool-set_name_label failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:103
+#, python-format
+msgid "Found no PIF for device %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:122
+#, python-format
+msgid ""
+"PIF %(pif_rec['uuid'])s for network %(bridge)s has VLAN id %(pif_vlan)d. "
+"Expected %(vlan_num)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:218
+msgid "Created VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:245
+#, python-format
+msgid "VBD not found in instance %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:262
+#, python-format
+msgid "VBD %s already detached"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:265
+#, python-format
+msgid "VBD %(vbd_ref)s detach rejected, attempt %(num_attempt)d/%(max_attempts)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:270
+#, python-format
+msgid "Unable to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:275
+#, python-format
+msgid "Reached maximum number of retries trying to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:286
+#, python-format
+msgid "Unable to destroy VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:305
+#, python-format
+msgid "Creating %(vbd_type)s-type VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:308
+#, python-format
+msgid "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:319
+#, python-format
+msgid "Unable to destroy VDI %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:336
+#, python-format
+msgid ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:345
+#, python-format
+msgid "Copied VDI %(vdi_ref)s from VDI %(vdi_to_copy_ref)s on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:353
+#, python-format
+msgid "Cloned VDI %(vdi_ref)s from VDI %(vdi_to_clone_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:372
+#, python-format
+msgid "No primary VDI found for %(vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:379
+#, python-format
+msgid "Snapshotting with label '%(label)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:392
+#, python-format
+msgid "Created snapshot %(template_vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:431
+#, python-format
+msgid "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:583
+#, python-format
+msgid "Creating blank HD of size %(req_size)d gigs"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:634
+#, python-format
+msgid ""
+"Fast cloning is only supported on default local SR of type ext. SR on "
+"this system was found to be of type %(sr_type)s. Ignoring the cow flag."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:724
+#, python-format
+msgid ""
+"download_vhd %(image)s attempt %(attempt_num)d/%(max_attempts)d from "
+"%(glance_host)s:%(glance_port)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:734
+#, python-format
+msgid "download_vhd failed: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:750
+#, python-format
+msgid "Asking xapi to fetch vhd image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:760
+#, python-format
+msgid ""
+"xapi 'download_vhd' returned VDI of type '%(vdi_type)s' with UUID "
+"'%(vdi_uuid)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:789
+#, python-format
+msgid "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:805
+#, python-format
+msgid "image_size_bytes=%(size_bytes)d, allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:809
+#, python-format
+msgid ""
+"Image size %(size_bytes)d exceeded instance_type allowed size "
+"%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:831
+#, python-format
+msgid "Fetching image %(image)s, type %(image_type_str)"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:844
+#, python-format
+msgid "Size for image %(image)s: %(virtual_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:853
+#, python-format
+msgid ""
+"Kernel/Ramdisk image is too large: %(vdi_size)d bytes, max %(max_size)d "
+"bytes"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:870
+#, python-format
+msgid "Copying VDI %s to /boot/guest on dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:884
+#, python-format
+msgid "Kernel/Ramdisk VDI %s destroyed"
+msgstr "Kernel/Ramdisk VDI %s distrutti"
+
+#: cinder/virt/xenapi/vm_utils.py:895
+#, fuzzy
+msgid "Failed to fetch glance image"
+msgstr "Impossibile riavviare l'istanza"
+
+#: cinder/virt/xenapi/vm_utils.py:934
+#, python-format
+msgid "Detected %(image_type_str)s format for image %(image_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:955
+#, python-format
+msgid "Looking up vdi %s for PV kernel"
+msgstr "Cercando vdi %s per kernel PV"
+
+#: cinder/virt/xenapi/vm_utils.py:973
+#, python-format
+msgid "Unknown image format %(disk_image_type)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1016
+#, python-format
+msgid "VDI %s is still available"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1059
+#, python-format
+msgid "(VM_UTILS) xenserver vm state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1061
+#, python-format
+msgid "(VM_UTILS) xenapi power_state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1088
+#, python-format
+msgid "Unable to parse rrd of %(vm_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1108
+#, python-format
+msgid "Re-scanning SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1136
+#, python-format
+msgid "Flag sr_matching_filter '%s' does not respect formatting convention"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1154
+msgid ""
+"XenAPI is unable to find a Storage Repository to install guest instances "
+"on. Please check your configuration and/or configure the flag "
+"'sr_matching_filter'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1167
+msgid "Cannot find SR of content-type ISO"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1175
+#, python-format
+msgid "ISO: looking at SR %(sr_rec)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1177
+msgid "ISO: not iso content"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1180
+msgid "ISO: iso content_type, no 'i18n-key' key"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1183
+msgid "ISO: iso content_type, i18n-key value not 'local-storage-iso'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1187
+msgid "ISO: SR MATCHing our criteria"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1189
+msgid "ISO: ISO, looking to see if it is host local"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1192
+#, python-format
+msgid "ISO: PBD %(pbd_ref)s disappeared"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1195
+#, python-format
+msgid "ISO: PBD matching, want %(pbd_rec)s, have %(host)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1198
+msgid "ISO: SR with local PBD"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1220
+#, python-format
+msgid ""
+"Unable to obtain RRD XML for VM %(vm_uuid)s with server details: "
+"%(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1236
+#, python-format
+msgid "Unable to obtain RRD XML updates with server details: %(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1290
+#, python-format
+msgid "Invalid statistics data from Xenserver: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1343
+#, python-format
+msgid "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1417
+#, python-format
+msgid ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1427
+#, python-format
+msgid "VHD coalesce attempts exceeded (%(max_attempts)d), giving up..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1462
+#, python-format
+msgid "Timeout waiting for device %s to be created"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1473
+#, python-format
+msgid "Plugging VBD %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1476
+#, python-format
+msgid "Plugging VBD %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1478
+#, python-format
+msgid "VBD %(vbd_ref)s plugged as %(orig_dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1481
+#, python-format
+msgid "VBD %(vbd_ref)s plugged into wrong dev, remapping to %(dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1490
+#, python-format
+msgid "Destroying VBD for VDI %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1498
+#, python-format
+msgid "Destroying VBD for VDI %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1511
+#, python-format
+msgid "Running pygrub against %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1518
+#, python-format
+msgid "Found Xen kernel %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1520
+msgid "No Xen kernel found.  Booting HVM."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1533
+msgid "Partitions:"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1539
+#, python-format
+msgid "  %(num)s: %(ptype)s %(size)d sectors"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1565
+#, python-format
+msgid ""
+"Writing partition table %(primary_first)d %(primary_last)d to "
+"%(dev_path)s..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1578
+#, python-format
+msgid "Writing partition table %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1632
+#, python-format
+msgid ""
+"Starting sparse_copy src=%(src_path)s dst=%(dst_path)s "
+"virtual_size=%(virtual_size)d block_size=%(block_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1664
+#, python-format
+msgid ""
+"Finished sparse_copy in %(duration).2f secs, %(compression_pct).2f%% "
+"reduction in size"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1714
+msgid ""
+"XenServer tools installed in this image are capable of network injection."
+"  Networking files will not bemanipulated"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1722
+msgid ""
+"XenServer tools are present in this image but are not capable of network "
+"injection"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1726
+msgid "XenServer tools are not installed in this image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1742
+msgid "Manipulating interface files directly"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1751
+#, python-format
+msgid "Failed to mount filesystem (expected for non-linux instances): %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:131 cinder/virt/xenapi/vmops.py:722
+#, python-format
+msgid "Updating progress to %(progress)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:231
+#, python-format
+msgid "Attempted to power on non-existent instance bad instance id %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:233
+#, fuzzy, python-format
+msgid "Starting instance"
+msgstr "Riavviando l'istanza %s"
+
+#: cinder/virt/xenapi/vmops.py:303
+msgid "Removing kernel/ramdisk files from dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:358
+#, fuzzy
+msgid "Failed to spawn, rolling back"
+msgstr "Impossibile sospendere l'istanza"
+
+#: cinder/virt/xenapi/vmops.py:443
+msgid "Detected ISO image type, creating blank VM for install"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:462
+msgid "Auto configuring disk, attempting to resize partition..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:515
+#, python-format
+msgid "Invalid value for injected_files: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:520
+#, python-format
+msgid "Injecting file path: '%s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:527
+msgid "Setting admin password"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:531
+msgid "Resetting network"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:538
+msgid "Setting VCPU weight"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:544
+msgid "Starting VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:551
+#, python-format
+msgid ""
+"Latest agent build for %(hypervisor)s/%(os)s/%(architecture)s is "
+"%(version)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:554
+#, python-format
+msgid "No agent build found for %(hypervisor)s/%(os)s/%(architecture)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:561
+msgid "Waiting for instance state to become running"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:573
+msgid "Querying agent version"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:576
+#, python-format
+msgid "Instance agent version: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:581
+#, python-format
+msgid "Updating Agent to %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:616
+#, python-format
+msgid "No opaque_ref could be determined for '%s'."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:670
+msgid "Finished snapshot and upload for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:677
+msgid "Starting snapshot for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:686
+#, fuzzy, python-format
+msgid "Unable to Snapshot instance: %(exc)s"
+msgstr "Impossibile montare il volume all'istanza %s"
+
+#: cinder/virt/xenapi/vmops.py:702
+msgid "Failed to transfer vhd to new host"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:770
+#, python-format
+msgid "Resizing down VDI %(cow_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:893
+#, python-format
+msgid "Resizing up VDI %(vdi_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:901
+msgid "Resize complete"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:928
+#, python-format
+msgid "Failed to query agent version: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:949
+#, python-format
+msgid "domid changed from %(domid)s to %(newdomid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:962
+#, python-format
+msgid "Failed to update agent: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:983
+#, python-format
+msgid "Failed to exchange keys: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:998
+#, python-format
+msgid "Failed to update password: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1023
+#, python-format
+msgid "Failed to inject file: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1032
+msgid "VM already halted, skipping shutdown..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1036
+msgid "Shutting down VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1054
+msgid "Unable to find VBD for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1097
+msgid "Using RAW or VHD, skipping kernel and ramdisk deletion"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1104
+msgid "instance has a kernel or ramdisk but not both"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1111
+msgid "kernel/ramdisk files removed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1121
+msgid "VM destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1147
+msgid "Destroying VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1169
+msgid "VM is not present, skipping destroy..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1222
+#, python-format
+msgid "Instance is already in Rescue Mode: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1296
+#, python-format
+msgid "Found %(instance_count)d hung reboots older than %(timeout)d seconds"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1300
+msgid "Automatically hard rebooting"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1363
+#, python-format
+msgid "Setting migration %(migration_id)s to error: %(reason)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1374
+#, python-format
+msgid ""
+"Automatically confirming migration %(migration_id)s for instance "
+"%(instance_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1379
+#, python-format
+msgid "Instance %(instance_uuid)s not found"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1383
+msgid "In ERROR state"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1389
+#, python-format
+msgid "In %(task_state)s task_state, not RESIZE_VERIFY"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1396
+#, python-format
+msgid "Error auto-confirming resize: %(e)s. Will retry later."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1418
+msgid "Could not get bandwidth info."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1469
+msgid "Injecting network info to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1483
+msgid "Creating vifs"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1492
+#, python-format
+msgid "Creating VIF for network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1495
+#, python-format
+msgid "Created VIF %(vif_ref)s, network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1520
+msgid "Injecting hostname to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1545
+#, python-format
+msgid ""
+"The agent call to %(method)s returned an invalid response: %(ret)r. "
+"path=%(path)s; args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1566
+#, python-format
+msgid "TIMEOUT: The call to %(method)s timed out. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1570
+#, python-format
+msgid ""
+"NOT IMPLEMENTED: The call to %(method)s is not supported by the agent. "
+"args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1575
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1661
+#, python-format
+msgid "OpenSSL error: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:52
+msgid "creating sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:55 cinder/virt/xenapi/volume_utils.py:83
+#, python-format
+msgid "type is = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:58 cinder/virt/xenapi/volume_utils.py:86
+#, python-format
+msgid "name = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:71
+#, python-format
+msgid "Created %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:76 cinder/virt/xenapi/volume_utils.py:174
+msgid "Unable to create Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:80
+msgid "introducing sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:103 cinder/virt/xenapi/volume_utils.py:170
+#: cinder/virt/xenapi/volumeops.py:156
+#, python-format
+msgid "Introduced %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:106
+msgid "Creating pbd for SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:108
+msgid "Plugging SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:116 cinder/virt/xenapi/volumeops.py:160
+msgid "Unable to introduce Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:127 cinder/virt/xenapi/volumeops.py:50
+msgid "Unable to get SR using uuid"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:129
+#, python-format
+msgid "Forgetting SR %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:137
+msgid "Unable to forget Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:157
+#, python-format
+msgid "Introducing %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:186
+#, python-format
+msgid "Unable to find SR from VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:204
+#, python-format
+msgid "Ignoring exception %(exc)s when getting PBDs for %(sr_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:210
+#, python-format
+msgid "Ignoring exception %(exc)s when unplugging PBD %(pbd)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:234
+#, python-format
+msgid "Unable to introduce VDI on SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:242
+#, python-format
+msgid "Unable to get record of VDI %s on"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:264
+#, python-format
+msgid "Unable to introduce VDI for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:274
+#, python-format
+msgid "Error finding vdis in SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:281
+#, python-format
+msgid "Unable to find vbd for vdi %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:315
+#, python-format
+msgid "Unable to obtain target information %(data)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:341
+#, python-format
+msgid "Mountpoint cannot be translated: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:64
+msgid "Could not find VDI ref"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:69
+#, python-format
+msgid "Creating SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:73
+msgid "Could not create SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:76
+msgid "Could not retrieve SR record"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:81
+#, python-format
+msgid "Introducing SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:85
+msgid "SR found in xapi database. No need to introduce"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:90
+msgid "Could not introduce SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:94
+#, python-format
+msgid "Checking for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:106
+#, python-format
+msgid "SR %s not found in the xapi database"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:112
+msgid "Could not forget SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:121
+#, python-format
+msgid "Attach_volume: %(connection_info)s, %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:178
+#, python-format
+msgid "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+msgstr "Impossible creare il VDI su SR %(sr_ref)s per l'istanza %(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:189
+#, python-format
+msgid "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+msgstr "Impossibile usare SR %(sr_ref)s per l'istanza %(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:197
+#, python-format
+msgid "Unable to attach volume to instance %s"
+msgstr "Impossibile montare il volume all'istanza %s"
+
+#: cinder/virt/xenapi/volumeops.py:200
+#, python-format
+msgid "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+msgstr "Mountpoint %(mountpoint)s montato all'istanza %(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:210
+#, python-format
+msgid "Detach_volume: %(instance_name)s, %(mountpoint)s"
+msgstr "Detach_volume: %(instance_name)s, %(mountpoint)s"
+
+#: cinder/virt/xenapi/volumeops.py:219
+#, python-format
+msgid "Unable to locate volume %s"
+msgstr "Impossibile localizzare il volume %s"
+
+#: cinder/virt/xenapi/volumeops.py:227
+#, python-format
+msgid "Unable to detach volume %s"
+msgstr "Impossibile smontare il volume %s"
+
+#: cinder/virt/xenapi/volumeops.py:232
+#, python-format
+msgid "Unable to destroy vbd %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:239
+#, python-format
+msgid "Error purging SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:241
+#, python-format
+msgid "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+msgstr "Mountpoint %(mountpoint)s smontato dall'istanza %(instance_name)s"
+
+#: cinder/vnc/xvp_proxy.py:98 cinder/vnc/xvp_proxy.py:103
+#, python-format
+msgid "Error in handshake: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:119
+#, python-format
+msgid "Invalid request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:139
+#, python-format
+msgid "Request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:142
+#, python-format
+msgid "Request made with missing token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:153
+#, python-format
+msgid "Request made with invalid token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:160
+#, python-format
+msgid "Unexpected error: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:180
+#, python-format
+msgid "Starting cinder-xvpvncproxy node (version %s)"
+msgstr ""
+
+#: cinder/volume/api.py:74 cinder/volume/api.py:220
+msgid "status must be available"
+msgstr ""
+
+#: cinder/volume/api.py:85
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to create %(size)sG volume"
+msgstr ""
+
+#: cinder/volume/api.py:137
+#, fuzzy
+msgid "Volume status must be available or error"
+msgstr "Lo stato del volume deve essere disponibile"
+
+#: cinder/volume/api.py:142
+#, python-format
+msgid "Volume still has %d dependent snapshots"
+msgstr ""
+
+#: cinder/volume/api.py:223
+msgid "already attached"
+msgstr ""
+
+#: cinder/volume/api.py:230
+msgid "already detached"
+msgstr ""
+
+#: cinder/volume/api.py:292
+msgid "must be available"
+msgstr ""
+
+#: cinder/volume/api.py:325
+#, fuzzy
+msgid "Volume Snapshot status must be available or error"
+msgstr "Lo stato del volume deve essere disponibile"
+
+#: cinder/volume/driver.py:96
+#, python-format
+msgid "Recovering from a failed execute.  Try number %s"
+msgstr ""
+
+#: cinder/volume/driver.py:106
+#, python-format
+msgid "volume group %s doesn't exist"
+msgstr ""
+
+#: cinder/volume/driver.py:270
+#, python-format
+msgid "Skipping ensure_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:318
+#, python-format
+msgid "Skipping remove_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:327
+#, python-format
+msgid ""
+"Skipping remove_export. No iscsi_target is presently exported for volume:"
+" %d"
+msgstr ""
+
+#: cinder/volume/driver.py:337
+msgid "ISCSI provider_location not stored, using discovery"
+msgstr ""
+
+#: cinder/volume/driver.py:384
+#, python-format
+msgid "Could not find iSCSI export  for volume %s"
+msgstr ""
+
+#: cinder/volume/driver.py:388
+#, python-format
+msgid "ISCSI Discovery: Found %s"
+msgstr ""
+
+#: cinder/volume/driver.py:466
+#, python-format
+msgid "Cannot confirm exported volume id:%(volume_id)s."
+msgstr ""
+
+#: cinder/volume/driver.py:493
+#, python-format
+msgid "FAKE ISCSI: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:505
+#, python-format
+msgid "rbd has no pool %s"
+msgstr ""
+
+#: cinder/volume/driver.py:579
+#, python-format
+msgid "Sheepdog is not working: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:581
+msgid "Sheepdog is not working"
+msgstr ""
+
+#: cinder/volume/driver.py:680 cinder/volume/driver.py:685
+#, python-format
+msgid "LoggingVolumeDriver: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:96
+#, python-format
+msgid "Re-exporting %s volumes"
+msgstr ""
+
+#: cinder/volume/manager.py:101
+#, python-format
+msgid "volume %s: skipping export"
+msgstr ""
+
+#: cinder/volume/manager.py:107
+#, python-format
+msgid "volume %s: creating"
+msgstr "volume %s: creazione in corso"
+
+#: cinder/volume/manager.py:119
+#, python-format
+msgid "volume %(vol_name)s: creating lv of size %(vol_size)sG"
+msgstr ""
+
+#: cinder/volume/manager.py:131
+#, python-format
+msgid "volume %s: creating export"
+msgstr "volume %s: creazione in corso per l'esportazione"
+
+#: cinder/volume/manager.py:144
+#, python-format
+msgid "volume %s: created successfully"
+msgstr "volume %s: creato con successo"
+
+#: cinder/volume/manager.py:153
+msgid "Volume is still attached"
+msgstr "Volume ancora collegato"
+
+#: cinder/volume/manager.py:155
+msgid "Volume is not local to this node"
+msgstr ""
+
+#: cinder/volume/manager.py:159
+#, python-format
+msgid "volume %s: removing export"
+msgstr ""
+
+#: cinder/volume/manager.py:161
+#, python-format
+msgid "volume %s: deleting"
+msgstr "volume %s: rimuovendo"
+
+#: cinder/volume/manager.py:164
+#, python-format
+msgid "volume %s: volume is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:176
+#, python-format
+msgid "volume %s: deleted successfully"
+msgstr "volume %s: rimosso con successo"
+
+#: cinder/volume/manager.py:183
+#, python-format
+msgid "snapshot %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:187
+#, python-format
+msgid "snapshot %(snap_name)s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:202
+#, python-format
+msgid "snapshot %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:211
+#, python-format
+msgid "snapshot %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:214
+#, fuzzy, python-format
+msgid "snapshot %s: snapshot is busy"
+msgstr "istanza %s: creazione snapshot in corso"
+
+#: cinder/volume/manager.py:226
+#, python-format
+msgid "snapshot %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:310
+msgid "Checking volume capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:314
+#, python-format
+msgid "New capabilities found: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:325
+msgid "Clear capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:329
+#, python-format
+msgid "Notification {%s} received"
+msgstr ""
+
+#: cinder/volume/netapp.py:79
+#, python-format
+msgid "API %(name)sfailed: %(reason)s"
+msgstr ""
+
+#: cinder/volume/netapp.py:109
+#, python-format
+msgid "%s is not set"
+msgstr ""
+
+#: cinder/volume/netapp.py:128
+#, fuzzy
+msgid "Connected to DFM server"
+msgstr "Riconnesso alla coda"
+
+#: cinder/volume/netapp.py:159
+#, python-format
+msgid "Job failed: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:240
+msgid "Failed to provision dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:252
+msgid "No LUN was created by the provision job"
+msgstr ""
+
+#: cinder/volume/netapp.py:261 cinder/volume/netapp.py:433
+#, fuzzy, python-format
+msgid "Failed to find LUN ID for volume %s"
+msgstr "Impossibile localizzare il volume %s"
+
+#: cinder/volume/netapp.py:280
+msgid "Failed to remove and delete dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:603 cinder/volume/netapp.py:657
+#, fuzzy, python-format
+msgid "No LUN ID for volume %s"
+msgstr "Impossibile localizzare il volume %s"
+
+#: cinder/volume/netapp.py:607 cinder/volume/netapp.py:661
+#, python-format
+msgid "Failed to get LUN details for LUN ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:614
+#, python-format
+msgid "Failed to get host details for host ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:620
+#, python-format
+msgid "Failed to get target portal for filer: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:625
+#, python-format
+msgid "Failed to get target IQN for filer: %s"
+msgstr ""
+
+#: cinder/volume/san.py:113 cinder/volume/san.py:151
+msgid "Specify san_password or san_private_key"
+msgstr ""
+
+#: cinder/volume/san.py:156
+msgid "san_ip must be set"
+msgstr ""
+
+#: cinder/volume/san.py:320
+#, python-format
+msgid "LUID not found for %(zfs_poolname)s. Output=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:452
+#, python-format
+msgid "CLIQ command returned %s"
+msgstr ""
+
+#: cinder/volume/san.py:458
+#, python-format
+msgid "Malformed response to CLIQ command %(verb)s %(cliq_args)s. Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:466
+#, python-format
+msgid "Error running CLIQ command %(verb)s %(cliq_args)s.  Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:496
+#, python-format
+msgid ""
+"Unexpected number of virtual ips for cluster  %(cluster_name)s. "
+"Result=%(_xml)s"
+msgstr ""
+
+#: cinder/volume/san.py:549
+#, python-format
+msgid "Volume info: %(volume_name)s => %(volume_attributes)s"
+msgstr ""
+
+#: cinder/volume/san.py:594
+msgid "local_path not supported"
+msgstr ""
+
+#: cinder/volume/san.py:626
+#, python-format
+msgid "Could not determine project for volume %s, can't export"
+msgstr ""
+
+#: cinder/volume/san.py:696
+#, python-format
+msgid "Payload for SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:713
+#, python-format
+msgid "Call to json.loads() raised an exception: %s"
+msgstr ""
+
+#: cinder/volume/san.py:718
+#, python-format
+msgid "Results of SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:732
+#, python-format
+msgid "Found solidfire account: %s"
+msgstr ""
+
+#: cinder/volume/san.py:746
+#, python-format
+msgid "solidfire account: %s does not exist, create it..."
+msgstr ""
+
+#: cinder/volume/san.py:804
+msgid "Enter SolidFire create_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:846
+msgid "Leaving SolidFire create_volume"
+msgstr ""
+
+#: cinder/volume/san.py:861
+msgid "Enter SolidFire delete_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:880
+#, python-format
+msgid "Deleting volumeID: %s "
+msgstr ""
+
+#: cinder/volume/san.py:888
+msgid "Leaving SolidFire delete_volume"
+msgstr ""
+
+#: cinder/volume/san.py:891
+msgid "Executing SolidFire ensure_export..."
+msgstr ""
+
+#: cinder/volume/san.py:895
+msgid "Executing SolidFire create_export..."
+msgstr ""
+
+#: cinder/volume/volume_types.py:49 cinder/volume/volume_types.py:108
+msgid "name cannot be None"
+msgstr ""
+
+#: cinder/volume/volume_types.py:96
+msgid "id cannot be None"
+msgstr ""
+
+#: cinder/volume/xensm.py:55
+#, python-format
+msgid "SR name = %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:56
+#, python-format
+msgid "Params: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:60
+#, python-format
+msgid "Failed to create sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:62
+msgid "Create failed"
+msgstr ""
+
+#: cinder/volume/xensm.py:64
+#, python-format
+msgid "SR UUID of new SR is: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:71
+msgid "Failed to update db"
+msgstr ""
+
+#: cinder/volume/xensm.py:80
+#, python-format
+msgid "Failed to introduce sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:91
+#, python-format
+msgid "Failed to reach backend %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:100
+msgid "XenSMDriver requires xenapi connection"
+msgstr ""
+
+#: cinder/volume/xensm.py:110
+msgid "Failed to initiate session"
+msgstr ""
+
+#: cinder/volume/xensm.py:142
+#, python-format
+msgid "Volume will be created in backend - %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:154
+msgid "Failed to update volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:157
+msgid "Unable to create volume"
+msgstr ""
+
+#: cinder/volume/xensm.py:171
+msgid "Failed to delete vdi"
+msgstr ""
+
+#: cinder/volume/xensm.py:177
+msgid "Failed to delete volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:210
+msgid "Failed to find volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:221
+msgid "Failed to find backend in db"
+msgstr ""
+
+#: cinder/volume/nexenta/__init__.py:27
+msgid "Nexenta SA returned the error"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:64
+#, python-format
+msgid "Sending JSON data: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:69
+#, python-format
+msgid "Auto switching to HTTPS connection to %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:75
+msgid "No headers in server response"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:76
+msgid "Bad response from server"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:79
+#, fuzzy, python-format
+msgid "Got response: %s"
+msgstr "risposta %s"
+
+#: cinder/volume/nexenta/volume.py:96
+#, python-format
+msgid "Volume %s does not exist in Nexenta SA"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:180
+msgid ""
+"Call to local_path should not happen. Verify that use_local_volumes flag "
+"is turned off."
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:202
+#, python-format
+msgid "Ignored target creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:210
+#, python-format
+msgid "Ignored target group creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:219
+#, python-format
+msgid "Ignored target group member addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:227
+#, python-format
+msgid "Ignored LU creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:237
+#, python-format
+msgid "Ignored LUN mapping entry addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:273
+#, python-format
+msgid ""
+"Got error trying to destroy target group %(target_group)s, assuming it is"
+" already gone: %(exc)s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:280
+#, python-format
+msgid ""
+"Got error trying to delete target %(target)s, assuming it is already "
+"gone: %(exc)s"
+msgstr ""
+
+#~ msgid "Unable to locate account %(account_name) on Solidfire device"
+#~ msgstr ""
+
+#~ msgid "Zone %(zone_id)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Cinder access parameters were not specified."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(id)d could not be found."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(name)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Detected more than one volume with name %(vol_name)"
+#~ msgstr ""
+
+#~ msgid "Detected existing vlan with id %(vlan)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab semaphore \"%(lock)s\" "
+#~ "for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab file lock "
+#~ "\"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Parent group id and group id cannot be same"
+#~ msgstr ""
+
+#~ msgid "No body provided"
+#~ msgstr ""
+
+#~ msgid "Create VSA %(display_name)s of type %(vc_type)s"
+#~ msgstr ""
+
+#~ msgid "Delete VSA with id: %s"
+#~ msgstr ""
+
+#~ msgid "Associate address %(ip)s to VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "Disassociate address from VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "%(obj)s with ID %(id)s not found"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(obj)s with ID %(id)s belongs to "
+#~ "VSA %(own_vsa_id)s and not to VSA "
+#~ "%(vsa_id)s."
+#~ msgstr ""
+
+#~ msgid "Index. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Detail. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Create. vsa_id=%(vsa_id)s, body=%(body)s"
+#~ msgstr ""
+
+#~ msgid "Create volume of %(size)s GB from VSA ID %(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Update %(obj)s with id: %(id)s, changes: %(changes)s"
+#~ msgstr ""
+
+#~ msgid "Delete. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Show. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Index instances for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You cannot run"
+#~ " any more instances of this type."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You can only"
+#~ " run %s more instances of this "
+#~ "type."
+#~ msgstr ""
+
+#~ msgid "Going to try to soft delete %s"
+#~ msgstr ""
+
+#~ msgid "No host for instance %s, deleting immediately"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to stop %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to start %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Going to force the deletion of the"
+#~ " vm %(instance_uuid)s, even if it is"
+#~ " deleted"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s did not exist "
+#~ "in the DB, but I will shut "
+#~ "it down anyway using a special "
+#~ "context"
+#~ msgstr ""
+
+#~ msgid "exception terminating the instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "trying to destroy already destroyed instance: %s"
+#~ msgstr "Provando a distruggere una istanza già distrutta: %s"
+
+#~ msgid ""
+#~ "Instance %(name)s found in database but"
+#~ " not known by hypervisor. Setting "
+#~ "power state to NOSTATE"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Detected instance  with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Destroying instance with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid "SQL connection failed (%(connstring)s). %(attempts)d attempts left."
+#~ msgstr ""
+
+#~ msgid "Can't downgrade without losing data"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_id)s not found"
+#~ msgstr ""
+
+#~ msgid "Network %s has active ports, cannot delete"
+#~ msgstr ""
+
+#~ msgid "No fixed IPs to deallocate for vif %sid"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "AMQP server on %(fl_host)s:%(fl_port)d is "
+#~ "unreachable: %(e)s. Trying again in "
+#~ "%(fl_intv)d seconds."
+#~ msgstr ""
+
+#~ msgid "Unable to connect to AMQP server after %(tries)d tries. Shutting down."
+#~ msgstr ""
+
+#~ msgid "Failed to fetch message from queue: %s"
+#~ msgstr ""
+
+#~ msgid "Initing the Adapter Consumer for %s"
+#~ msgstr "Inizializzando il Consumer Adapter per %s"
+
+#~ msgid "Created \"%(exchange)s\" fanout exchange with \"%(key)s\" routing key"
+#~ msgstr ""
+
+#~ msgid "Exception while processing consumer"
+#~ msgstr ""
+
+#~ msgid "Creating \"%(exchange)s\" fanout exchange"
+#~ msgstr ""
+
+#~ msgid "topic is %s"
+#~ msgstr "argomento é %s"
+
+#~ msgid "message %s"
+#~ msgstr "messaggio %s"
+
+#~ msgid ""
+#~ "Cannot confirm tmpfile at %(ipath)s is"
+#~ " on same shared storage between "
+#~ "%(src)s and %(dest)s."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of memory(host:%(avail)s <= "
+#~ "instance:%(mem_inst)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of disk(host:%(available)s <="
+#~ " instance:%(necessary)s)"
+#~ msgstr ""
+
+#~ msgid "Driver Method %(driver_method)s missing: %(e)s.Reverting to schedule()"
+#~ msgstr ""
+
+#~ msgid "Setting instance %(instance_uuid)s to ERROR state."
+#~ msgstr ""
+
+#~ msgid "_filter_hosts: %(request_spec)s"
+#~ msgstr ""
+
+#~ msgid "Filter hosts for drive type %s"
+#~ msgstr ""
+
+#~ msgid "Host %s has no free capacity. Skip"
+#~ msgstr ""
+
+#~ msgid "Filter hosts: %s"
+#~ msgstr ""
+
+#~ msgid "Must implement host selection mechanism"
+#~ msgstr ""
+
+#~ msgid "Maximum number of hosts selected (%d)"
+#~ msgstr ""
+
+#~ msgid "Selected excessive host %(host)s"
+#~ msgstr ""
+
+#~ msgid "Provision volume %(name)s of size %(size)s GB on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "volume_params %(volume_params)s"
+#~ msgstr ""
+
+#~ msgid "%(i)d: Volume %(name)s"
+#~ msgstr ""
+
+#~ msgid "Attempting to spawn %(num_volumes)d volume(s)"
+#~ msgstr ""
+
+#~ msgid "Error creating volumes"
+#~ msgstr ""
+
+#~ msgid "Non-VSA volume %d"
+#~ msgstr ""
+
+#~ msgid "Spawning volume %(volume_id)s with drive type %(drive_type)s"
+#~ msgstr ""
+
+#~ msgid "Error creating volume"
+#~ msgstr ""
+
+#~ msgid "No capability selected for volume of size %(size)s"
+#~ msgstr ""
+
+#~ msgid "Host %s:"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\tDrive %(qosgrp)-25s: total %(total)2s, "
+#~ "used %(used)2s, free %(free)2s. Available "
+#~ "capacity %(avail)-5s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t LeastUsedHost: Best host: %(best_host)s."
+#~ " (used capacity %(min_used)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t MostAvailCap: Best host: %(best_host)s. "
+#~ "(available %(max_avail)s %(type_str)s)"
+#~ msgstr ""
+
+#~ msgid "(%(nm)s) publish (key: %(routing_key)s) %(message)s"
+#~ msgstr ""
+
+#~ msgid "Publishing to route %s"
+#~ msgstr "Pubblicando sulla route %s"
+
+#~ msgid "Declaring queue %s"
+#~ msgstr "Dichiarando la coda %s"
+
+#~ msgid "Declaring exchange %s"
+#~ msgstr "Dichiarando il centralino %s"
+
+#~ msgid "Binding %(queue)s to %(exchange)s with key %(routing_key)s"
+#~ msgstr ""
+
+#~ msgid "Getting from %(queue)s: %(message)s"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate wrong VSA name. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate DB error. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: user_data = %s"
+#~ msgstr ""
+
+#~ msgid "_create: param=%s"
+#~ msgstr ""
+
+#~ msgid "Host %s"
+#~ msgstr ""
+
+#~ msgid "Test: provision vol %(name)s on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "\t vol=%(vol)s"
+#~ msgstr ""
+
+#~ msgid "Test: VSA update request: vsa_id=%(vsa_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume create: %s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get request: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume update request: id=%(volume_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: success    %(result)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: %(status)s    %(error_info)s"
+#~ msgstr ""
+
+#~ msgid "Unable to get updated status: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "deactivate_node is called for                "
+#~ "node_id = %(id)s node_ip = %(ip)s"
+#~ msgstr ""
+
+#~ msgid "virsh said: %r"
+#~ msgstr ""
+
+#~ msgid "cool, it's a device"
+#~ msgstr ""
+
+#~ msgid "Unable to read LXC console"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "to xml...\n"
+#~ ":%s "
+#~ msgstr ""
+
+#~ msgid "During wait running, %s disappeared."
+#~ msgstr ""
+
+#~ msgid "Instance %s running successfully."
+#~ msgstr ""
+
+#~ msgid "The nwfilter(%(instance_secgroup_filter_name)s) is not found."
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image verification failed"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): image "
+#~ "verification skipped, no hash stored"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): checking"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in use:"
+#~ " on this node %(local)d local, "
+#~ "%(remote)d on other nodes"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): warning "
+#~ "-- an absent base file is in "
+#~ "use! instances: %(instance_list)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in: on"
+#~ " other nodes (%(remote)d on other "
+#~ "nodes)"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is not in use"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is in use"
+#~ msgstr ""
+
+#~ msgid "Created VM %s..."
+#~ msgstr "Creata VM %s.."
+
+#~ msgid "Created VM %(instance_name)s as %(vm_ref)s."
+#~ msgstr "Creata VM %(instance_name)s come %(vm_ref)s"
+
+#~ msgid "Creating a CDROM-specific VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Created a CDROM-specific VBD %(vbd_ref)s"
+#~ "  for VM %(vm_ref)s, VDI %(vdi_ref)s."
+#~ msgstr ""
+
+#~ msgid "No primary VDI found for%(vm_ref)s"
+#~ msgstr ""
+
+#~ msgid "Snapshotting VM %(vm_ref)s with label '%(label)s'..."
+#~ msgstr ""
+
+#~ msgid "Created snapshot %(template_vm_ref)s from VM %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Fetching image %(image)s"
+#~ msgstr ""
+
+#~ msgid "Image Type: %s"
+#~ msgstr ""
+
+#~ msgid "ISO: Found sr possibly containing the ISO image"
+#~ msgstr ""
+
+#~ msgid "Size for image %(image)s:%(virtual_size)d"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to fetch glance image"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s ... "
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s done."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful first time."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug rejected: retrying..."
+#~ msgstr ""
+
+#~ msgid "Not sleeping anymore!"
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful eventually."
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure in VBD.unplug: %s"
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure %s"
+#~ msgstr ""
+
+#~ msgid "Starting instance %s"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn"
+#~ msgstr "Istanza %s: esecuzione fallita..."
+
+#~ msgid "Instance %s failed to spawn - performing clean-up"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn - Unable to create VM"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Auto configuring disk for instance "
+#~ "%(instance_uuid)s, attempting to resize "
+#~ "partition..."
+#~ msgstr ""
+
+#~ msgid "Invalid value for injected_files: '%s'"
+#~ msgstr ""
+
+#~ msgid "Starting VM %s..."
+#~ msgstr ""
+
+#~ msgid "Spawning VM %(instance_uuid)s created %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Instance %s: waiting for running"
+#~ msgstr ""
+
+#~ msgid "Instance %s: running"
+#~ msgstr ""
+
+#~ msgid "Resources to remove:%s"
+#~ msgstr ""
+
+#~ msgid "Removing VDI %(vdi_ref)s(uuid:%(vdi_to_remove)s)"
+#~ msgstr ""
+
+#~ msgid "Skipping VDI destroy for %s"
+#~ msgstr ""
+
+#~ msgid "Finished snapshot and upload for VM %s"
+#~ msgstr ""
+
+#~ msgid "Starting snapshot for VM %s"
+#~ msgstr ""
+
+#~ msgid "Unable to Snapshot instance %(instance_uuid)s: %(exc)s"
+#~ msgstr ""
+
+#~ msgid "Updating instance '%(instance_uuid)s' progress to %(progress)d"
+#~ msgstr ""
+
+#~ msgid "Resize instance %s complete"
+#~ msgstr ""
+
+#~ msgid "domid changed from %(olddomid)s to %(newdomid)s"
+#~ msgstr ""
+
+#~ msgid "VM %(instance_uuid)s already halted,skipping shutdown..."
+#~ msgstr ""
+
+#~ msgid "Shutting down VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Destroying VDIs for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s using RAW or "
+#~ "VHD, skipping kernel and ramdisk "
+#~ "deletion"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_uuid)s VM destroyed"
+#~ msgstr ""
+
+#~ msgid "Destroying VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Automatically hard rebooting %d"
+#~ msgstr ""
+
+#~ msgid "Instance for migration %d not found, skipping"
+#~ msgstr ""
+
+#~ msgid "injecting network info to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "creating vif(s) for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "Creating VIF for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr ""
+
+#~ msgid "Created VIF %(vif_ref)s for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr ""
+
+#~ msgid "injecting hostname to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The agent call to %(method)s returned"
+#~ " an invalid response: %(ret)r. VM "
+#~ "id=%(instance_uuid)s; path=%(path)s; args=%(addl_args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "TIMEOUT: The call to %(method)s timed"
+#~ " out. VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "NOT IMPLEMENTED: The call to %(method)s"
+#~ " is not supported by the agent. "
+#~ "VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The call to %(method)s returned an "
+#~ "error: %(e)s. VM id=%(instance_uuid)s; "
+#~ "args=%(args)r"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid "Error destroying VDI"
+#~ msgstr ""
+
+#~ msgid "\tVolume %s is NOT VSA volume"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s creation - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s succeeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s deletion - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s suceeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s local path call - call discover"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s ensure export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s create export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s remove export - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE remove_export for %s failed"
+#~ msgstr ""
+
+#~ msgid "Failed to retrieve QoS info"
+#~ msgstr ""
+
+#~ msgid "invalid drive data"
+#~ msgstr ""
+
+#~ msgid "drive_name not defined"
+#~ msgstr ""
+
+#~ msgid "invalid drive type name %s"
+#~ msgstr ""
+
+#~ msgid "*** Experimental VSA code ***"
+#~ msgstr ""
+
+#~ msgid "Requested number of VCs (%d) is too high. Setting to default"
+#~ msgstr ""
+
+#~ msgid "Creating VSA: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d %(vsa_name)s: Create "
+#~ "volume %(vol_name)s, %(vol_size)d GB, type "
+#~ "%(vol_type_id)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA status to %(status)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA call"
+#~ msgstr ""
+
+#~ msgid "Adding %(add_cnt)s VCs to VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "Deleting %(del_cnt)s VCs from VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Deleting %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Unable to delete volume %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Forced delete. %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate VSA ID %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Delete instance %(name)s"
+#~ msgstr ""
+
+#~ msgid "Create call received for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Failed to find VSA %(vsa_id)d"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Drive %(vol_id)s created. Status %(status)s"
+#~ msgstr ""
+
+#~ msgid "Drive %(vol_name)s (%(vol_disp_name)s) still in creating phase - wait"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Not all volumes "
+#~ "are created (%(cvol_real)d of %(cvol_exp)d)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Drive %(vol_name)s "
+#~ "(%(vol_disp_name)s) is in %(status)s state"
+#~ msgstr ""
+
+#~ msgid "Failed to update attach status for volume %(vol_name)s. %(ex)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Delete all BE volumes"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Start %(vc_count)d instances"
+#~ msgstr ""
+
diff --git a/cinder/locale/ja/LC_MESSAGES/nova.po b/cinder/locale/ja/LC_MESSAGES/nova.po
new file mode 100644
index 000000000..65a927593
--- /dev/null
+++ b/cinder/locale/ja/LC_MESSAGES/nova.po
@@ -0,0 +1,8196 @@
+# Japanese translation for cinder
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the cinder package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version:  cinder\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-04-08 23:04+0000\n"
+"PO-Revision-Date: 2011-08-23 11:22+0000\n"
+"Last-Translator: Thierry Carrez <thierry.carrez+lp@gmail.com>\n"
+"Language-Team: \n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: cinder/context.py:59
+#, python-format
+msgid "Arguments dropped when creating context: %s"
+msgstr ""
+
+#: cinder/context.py:90
+#, python-format
+msgid "read_deleted can only be one of 'no', 'yes' or 'only', not %r"
+msgstr ""
+
+#: cinder/crypto.py:48
+msgid "Filename of root CA"
+msgstr "ルートCAのファイル名"
+
+#: cinder/crypto.py:51
+msgid "Filename of private key"
+msgstr "プライベートキーのファイル名"
+
+#: cinder/crypto.py:54
+msgid "Filename of root Certificate Revocation List"
+msgstr ""
+
+#: cinder/crypto.py:57
+msgid "Where we keep our keys"
+msgstr "キーを格納するパス"
+
+#: cinder/crypto.py:60
+msgid "Where we keep our root CA"
+msgstr "ルートCAを格納するパス"
+
+#: cinder/crypto.py:63
+msgid "Should we use a CA for each project?"
+msgstr "プロジェクトごとにCAを使用するか否かのフラグ"
+
+#: cinder/crypto.py:67
+#, python-format
+msgid "Subject for certificate for users, %s for project, user, timestamp"
+msgstr "ユーザの証明書のサブジェクト、%s はプロジェクト、ユーザ、タイムスタンプ"
+
+#: cinder/crypto.py:72
+#, python-format
+msgid "Subject for certificate for projects, %s for project, timestamp"
+msgstr "プロジェクトの証明書のサブジェクト、%s はプロジェクト、およびタイムスタンプ"
+
+#: cinder/crypto.py:292
+#, python-format
+msgid "Flags path: %s"
+msgstr "Flags のパス: %s"
+
+#: cinder/exception.py:56
+msgid "Unexpected error while running command."
+msgstr "コマンド実行において予期しないエラーが発生しました。"
+
+#: cinder/exception.py:59
+#, python-format
+msgid ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+msgstr ""
+"%(description)s\n"
+"コマンド: %(cmd)s\n"
+"終了コード: %(exit_code)s\n"
+"標準出力: %(stdout)r\n"
+"標準エラー出力: %(stderr)r"
+
+#: cinder/exception.py:94
+msgid "DB exception wrapped."
+msgstr ""
+
+#: cinder/exception.py:155
+msgid "An unknown exception occurred."
+msgstr ""
+
+#: cinder/exception.py:178
+msgid "Failed to decrypt text"
+msgstr ""
+
+#: cinder/exception.py:182
+msgid "Failed to paginate through images from image service"
+msgstr ""
+
+#: cinder/exception.py:186
+msgid "Virtual Interface creation failed"
+msgstr ""
+
+#: cinder/exception.py:190
+msgid "5 attempts to create virtual interfacewith unique mac address failed"
+msgstr ""
+
+#: cinder/exception.py:195
+msgid "Connection to glance failed"
+msgstr ""
+
+#: cinder/exception.py:199
+msgid "Connection to melange failed"
+msgstr ""
+
+#: cinder/exception.py:203
+msgid "Not authorized."
+msgstr ""
+
+#: cinder/exception.py:208
+msgid "User does not have admin privileges"
+msgstr ""
+
+#: cinder/exception.py:212
+#, python-format
+msgid "Policy doesn't allow %(action)s to be performed."
+msgstr ""
+
+#: cinder/exception.py:216
+#, fuzzy, python-format
+msgid "Not authorized for image %(image_id)s."
+msgstr "メッセージ %s に対するメソッドが存在しません。"
+
+#: cinder/exception.py:220
+msgid "Unacceptable parameters."
+msgstr ""
+
+#: cinder/exception.py:225
+msgid "Invalid snapshot"
+msgstr ""
+
+#: cinder/exception.py:229
+#, python-format
+msgid "Volume %(volume_id)s is not attached to anything"
+msgstr ""
+
+#: cinder/exception.py:233 cinder/api/openstack/compute/contrib/keypairs.py:113
+msgid "Keypair data is invalid"
+msgstr ""
+
+#: cinder/exception.py:237
+msgid "Failed to load data into json format"
+msgstr ""
+
+#: cinder/exception.py:241
+msgid "The request is invalid."
+msgstr ""
+
+#: cinder/exception.py:245
+#, python-format
+msgid "Invalid signature %(signature)s for user %(user)s."
+msgstr ""
+
+#: cinder/exception.py:249
+msgid "Invalid input received"
+msgstr ""
+
+#: cinder/exception.py:253
+#, python-format
+msgid "Invalid instance type %(instance_type)s."
+msgstr ""
+
+#: cinder/exception.py:257
+msgid "Invalid volume type"
+msgstr ""
+
+#: cinder/exception.py:261
+msgid "Invalid volume"
+msgstr ""
+
+#: cinder/exception.py:265
+#, python-format
+msgid "Invalid port range %(from_port)s:%(to_port)s. %(msg)s"
+msgstr ""
+
+#: cinder/exception.py:269
+#, python-format
+msgid "Invalid IP protocol %(protocol)s."
+msgstr ""
+
+#: cinder/exception.py:273
+#, python-format
+msgid "Invalid content type %(content_type)s."
+msgstr ""
+
+#: cinder/exception.py:277
+#, python-format
+msgid "Invalid cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:281
+msgid "Invalid reuse of an RPC connection."
+msgstr ""
+
+#: cinder/exception.py:285
+msgid "Invalid Parameter: Unicode is not supported by the current database."
+msgstr ""
+
+#: cinder/exception.py:292
+#, python-format
+msgid "%(err)s"
+msgstr ""
+
+#: cinder/exception.py:296
+#, python-format
+msgid ""
+"Cannot perform action '%(action)s' on aggregate %(aggregate_id)s. Reason:"
+" %(reason)s."
+msgstr ""
+
+#: cinder/exception.py:301
+#, python-format
+msgid "Group not valid. Reason: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:305
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot %(method)s while"
+" the instance is in this state."
+msgstr ""
+
+#: cinder/exception.py:310
+#, python-format
+msgid "Instance %(instance_id)s is not running."
+msgstr ""
+
+#: cinder/exception.py:314
+#, python-format
+msgid "Instance %(instance_id)s is not suspended."
+msgstr ""
+
+#: cinder/exception.py:318
+#, python-format
+msgid "Instance %(instance_id)s is not in rescue mode"
+msgstr ""
+
+#: cinder/exception.py:322
+msgid "Failed to suspend instance"
+msgstr ""
+
+#: cinder/exception.py:326
+msgid "Failed to resume server"
+msgstr ""
+
+#: cinder/exception.py:330
+msgid "Failed to reboot instance"
+msgstr ""
+
+#: cinder/exception.py:334
+#, fuzzy
+msgid "Failed to terminate instance"
+msgstr "インスタンス終了処理を開始します。"
+
+#: cinder/exception.py:338
+msgid "Service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:342
+msgid "Volume service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:346
+msgid "Compute service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:350
+#, python-format
+msgid "Unable to migrate instance (%(instance_id)s) to current host (%(host)s)."
+msgstr ""
+
+#: cinder/exception.py:355
+msgid "Destination compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:359
+msgid "Original compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:363
+msgid "The supplied hypervisor type of is invalid."
+msgstr ""
+
+#: cinder/exception.py:367
+msgid "The instance requires a newer hypervisor version than has been provided."
+msgstr ""
+
+#: cinder/exception.py:372
+#, python-format
+msgid ""
+"The supplied disk path (%(path)s) already exists, it is expected not to "
+"exist."
+msgstr ""
+
+#: cinder/exception.py:377
+#, python-format
+msgid "The supplied device path (%(path)s) is invalid."
+msgstr ""
+
+#: cinder/exception.py:381
+#, python-format
+msgid "The supplied device (%(device)s) is busy."
+msgstr ""
+
+#: cinder/exception.py:385
+msgid "Unacceptable CPU info"
+msgstr ""
+
+#: cinder/exception.py:389
+#, python-format
+msgid "%(address)s is not a valid IP v4/6 address."
+msgstr ""
+
+#: cinder/exception.py:393
+#, python-format
+msgid ""
+"VLAN tag is not appropriate for the port group %(bridge)s. Expected VLAN "
+"tag is %(tag)s, but the one associated with the port group is %(pgroup)s."
+msgstr ""
+
+#: cinder/exception.py:399
+#, python-format
+msgid ""
+"vSwitch which contains the port group %(bridge)s is not associated with "
+"the desired physical adapter. Expected vSwitch is %(expected)s, but the "
+"one associated is %(actual)s."
+msgstr ""
+
+#: cinder/exception.py:406
+#, python-format
+msgid "Disk format %(disk_format)s is not acceptable"
+msgstr ""
+
+#: cinder/exception.py:410
+#, python-format
+msgid "Image %(image_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:414
+#, python-format
+msgid "Instance %(instance_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:418
+#, python-format
+msgid "Ec2 id %(ec2_id)s is unacceptable."
+msgstr ""
+
+#: cinder/exception.py:422
+msgid "Resource could not be found."
+msgstr ""
+
+#: cinder/exception.py:427
+#, python-format
+msgid "Required flag %(flag)s not set."
+msgstr ""
+
+#: cinder/exception.py:431
+#, python-format
+msgid "Volume %(volume_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:435
+#, python-format
+msgid "Unable to locate account %(account_name)s on Solidfire device"
+msgstr ""
+
+#: cinder/exception.py:440
+#, python-format
+msgid "Volume not found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:444
+#, python-format
+msgid "Volume %(volume_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:449
+msgid "Zero volume types found."
+msgstr ""
+
+#: cinder/exception.py:453
+#, python-format
+msgid "Volume type %(volume_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:457
+#, python-format
+msgid "Volume type with name %(volume_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:462
+#, python-format
+msgid ""
+"Volume Type %(volume_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:467
+#, python-format
+msgid "Snapshot %(snapshot_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:471
+#, python-format
+msgid "deleting volume %(volume_name)s that has snapshot"
+msgstr ""
+
+#: cinder/exception.py:475
+#, python-format
+msgid "deleting snapshot %(snapshot_name)s that has dependent volumes"
+msgstr ""
+
+#: cinder/exception.py:480
+#, python-format
+msgid "No target id found for volume %(volume_id)s."
+msgstr ""
+
+#: cinder/exception.py:484
+#, python-format
+msgid "No disk at %(location)s"
+msgstr ""
+
+#: cinder/exception.py:488
+#, python-format
+msgid "Could not find a handler for %(driver_type)s volume."
+msgstr ""
+
+#: cinder/exception.py:492
+#, python-format
+msgid "Invalid image href %(image_href)s."
+msgstr ""
+
+#: cinder/exception.py:496
+msgid ""
+"Some images have been stored via hrefs. This version of the api does not "
+"support displaying image hrefs."
+msgstr ""
+
+#: cinder/exception.py:501
+#, python-format
+msgid "Image %(image_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:505
+#, python-format
+msgid "Kernel not found for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:509
+#, python-format
+msgid "User %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:513
+#, python-format
+msgid "Project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:517
+#, python-format
+msgid "User %(user_id)s is not a member of project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:521
+#, python-format
+msgid "Role %(role_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:525
+msgid "Cannot find SR to read/write VDI."
+msgstr ""
+
+#: cinder/exception.py:529
+#, python-format
+msgid "%(req)s is required to create a network."
+msgstr ""
+
+#: cinder/exception.py:533
+#, python-format
+msgid "Network %(network_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:537
+#, python-format
+msgid "Network could not be found for bridge %(bridge)s"
+msgstr ""
+
+#: cinder/exception.py:541
+#, python-format
+msgid "Network could not be found for uuid %(uuid)s"
+msgstr ""
+
+#: cinder/exception.py:545
+#, python-format
+msgid "Network could not be found with cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:549
+#, python-format
+msgid "Network could not be found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:553
+msgid "No networks defined."
+msgstr ""
+
+#: cinder/exception.py:557
+#, python-format
+msgid ""
+"Either Network uuid %(network_uuid)s is not present or is not assigned to"
+" the project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:562
+#, python-format
+msgid "Host is not set to the network (%(network_id)s)."
+msgstr ""
+
+#: cinder/exception.py:566
+#, python-format
+msgid "Network %(network)s has active ports, cannot delete."
+msgstr ""
+
+#: cinder/exception.py:570
+msgid "Could not find the datastore reference(s) which the VM uses."
+msgstr ""
+
+#: cinder/exception.py:574
+#, python-format
+msgid "No fixed IP associated with id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:578
+#, python-format
+msgid "Fixed ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:582
+#, python-format
+msgid "Instance %(instance_id)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:586
+#, python-format
+msgid "Network host %(host)s has zero fixed ips in network %(network_id)s."
+msgstr ""
+
+#: cinder/exception.py:591
+#, python-format
+msgid "Instance %(instance_id)s doesn't have fixed ip '%(ip)s'."
+msgstr ""
+
+#: cinder/exception.py:595
+#, python-format
+msgid "Host %(host)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:599
+#, python-format
+msgid ""
+"Fixed IP address (%(address)s) does not exist in network "
+"(%(network_uuid)s)."
+msgstr ""
+
+#: cinder/exception.py:604
+#, python-format
+msgid "Fixed IP address %(address)s is already in use."
+msgstr ""
+
+#: cinder/exception.py:608
+#, python-format
+msgid "Fixed IP address %(address)s is invalid."
+msgstr ""
+
+#: cinder/exception.py:612
+msgid "Zero fixed ips available."
+msgstr ""
+
+#: cinder/exception.py:616
+msgid "Zero fixed ips could be found."
+msgstr ""
+
+#: cinder/exception.py:620
+#, python-format
+msgid "Floating ip not found for id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:624
+#, python-format
+msgid "The DNS entry %(name)s already exists in domain %(domain)s."
+msgstr ""
+
+#: cinder/exception.py:628
+#, python-format
+msgid "Floating ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:632
+#, python-format
+msgid "Floating ip not found for host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:636
+msgid "Zero floating ips available."
+msgstr ""
+
+#: cinder/exception.py:640
+#, python-format
+msgid "Floating ip %(address)s is associated."
+msgstr ""
+
+#: cinder/exception.py:644
+#, python-format
+msgid "Floating ip %(address)s is not associated."
+msgstr ""
+
+#: cinder/exception.py:648
+msgid "Zero floating ips exist."
+msgstr ""
+
+#: cinder/exception.py:652
+#, python-format
+msgid "Interface %(interface)s not found."
+msgstr ""
+
+#: cinder/exception.py:656
+#, python-format
+msgid "Keypair %(name)s not found for user %(user_id)s"
+msgstr ""
+
+#: cinder/exception.py:660
+#, python-format
+msgid "Certificate %(certificate_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:664
+#, python-format
+msgid "Service %(service_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:668
+#, python-format
+msgid "Host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:672
+#, python-format
+msgid "Compute host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:676
+#, python-format
+msgid "Could not find binary %(binary)s on host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:680
+#, python-format
+msgid "Auth token %(token)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:684
+#, python-format
+msgid "Access Key %(access_key)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:688
+msgid "Quota could not be found"
+msgstr ""
+
+#: cinder/exception.py:692
+#, python-format
+msgid "Quota for project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:696
+#, python-format
+msgid "Quota class %(class_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:700
+#, python-format
+msgid "Security group %(security_group_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:704
+#, python-format
+msgid "Security group %(security_group_id)s not found for project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:709
+#, python-format
+msgid "Security group with rule %(rule_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:713
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is already associated with the "
+"instance %(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:718
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is not associated with the instance "
+"%(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:723
+#, python-format
+msgid "Migration %(migration_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:727
+#, python-format
+msgid "Migration not found for instance %(instance_id)s with status %(status)s."
+msgstr ""
+
+#: cinder/exception.py:732
+#, python-format
+msgid "Console pool %(pool_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:736
+#, python-format
+msgid ""
+"Console pool of type %(console_type)s for compute host %(compute_host)s "
+"on proxy host %(host)s not found."
+msgstr ""
+
+#: cinder/exception.py:742
+#, python-format
+msgid "Console %(console_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:746
+#, python-format
+msgid "Console for instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:750
+#, python-format
+msgid ""
+"Console for instance %(instance_id)s in pool %(pool_id)s could not be "
+"found."
+msgstr ""
+
+#: cinder/exception.py:755
+#, python-format
+msgid "Invalid console type %(console_type)s "
+msgstr ""
+
+#: cinder/exception.py:759
+msgid "Zero instance types found."
+msgstr ""
+
+#: cinder/exception.py:763
+#, python-format
+msgid "Instance type %(instance_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:767
+#, python-format
+msgid "Instance type with name %(instance_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:772
+#, python-format
+msgid "Flavor %(flavor_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:776
+#, python-format
+msgid "Cell %(cell_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:780
+#, python-format
+msgid "Scheduler Host Filter %(filter_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:784
+#, python-format
+msgid "Scheduler cost function %(cost_fn_str)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:789
+#, python-format
+msgid "Scheduler weight flag not found: %(flag_name)s"
+msgstr ""
+
+#: cinder/exception.py:793
+#, python-format
+msgid "Instance %(instance_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:798
+#, python-format
+msgid ""
+"Instance Type %(instance_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:803
+msgid "LDAP object could not be found"
+msgstr ""
+
+#: cinder/exception.py:807
+#, python-format
+msgid "LDAP user %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:811
+#, python-format
+msgid "LDAP group %(group_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:815
+#, python-format
+msgid "LDAP user %(user_id)s is not a member of group %(group_id)s."
+msgstr ""
+
+#: cinder/exception.py:819
+#, python-format
+msgid "File %(file_path)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:823
+msgid "Zero files could be found."
+msgstr ""
+
+#: cinder/exception.py:827
+#, python-format
+msgid "Virtual switch associated with the network adapter %(adapter)s not found."
+msgstr ""
+
+#: cinder/exception.py:832
+#, python-format
+msgid "Network adapter %(adapter)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:836
+#, python-format
+msgid "Class %(class_name)s could not be found: %(exception)s"
+msgstr ""
+
+#: cinder/exception.py:840
+msgid "Action not allowed."
+msgstr ""
+
+#: cinder/exception.py:844
+#, python-format
+msgid "Unable to use global role %(role_id)s"
+msgstr ""
+
+#: cinder/exception.py:848
+msgid "Rotation is not allowed for snapshots"
+msgstr ""
+
+#: cinder/exception.py:852
+msgid "Rotation param is required for backup image_type"
+msgstr ""
+
+#: cinder/exception.py:861
+#, python-format
+msgid "Key pair %(key_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:865
+#, python-format
+msgid "User %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:869
+#, python-format
+msgid "LDAP user %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:873
+#, python-format
+msgid "LDAP group %(group)s already exists."
+msgstr ""
+
+#: cinder/exception.py:877
+#, python-format
+msgid "User %(uid)s is already a member of the group %(group_dn)s"
+msgstr "ユーザ %(uid)s はすでにグループ %(group_dn)s のメンバです。"
+
+#: cinder/exception.py:882
+#, python-format
+msgid "Project %(project)s already exists."
+msgstr ""
+
+#: cinder/exception.py:886
+#, python-format
+msgid "Instance %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:890
+#, python-format
+msgid "Instance Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:894
+#, python-format
+msgid "Volume Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:898
+#, python-format
+msgid "%(path)s is on shared storage: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:902
+msgid "Migration error"
+msgstr ""
+
+#: cinder/exception.py:906
+#, python-format
+msgid "Malformed message body: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:910
+#, python-format
+msgid "Could not find config at %(path)s"
+msgstr ""
+
+#: cinder/exception.py:914
+#, python-format
+msgid "Could not load paste app '%(name)s' from %(path)s"
+msgstr ""
+
+#: cinder/exception.py:918
+msgid "When resizing, instances must change size!"
+msgstr ""
+
+#: cinder/exception.py:922
+msgid "Image is larger than instance type allows"
+msgstr ""
+
+#: cinder/exception.py:926
+msgid "1 or more Zones could not complete the request"
+msgstr ""
+
+#: cinder/exception.py:930
+msgid "Instance type's memory is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:934
+msgid "Instance type's disk is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:938
+#, python-format
+msgid "Insufficient free memory on compute node to start %(uuid)s."
+msgstr ""
+
+#: cinder/exception.py:942
+msgid "Could not fetch bandwidth/cpu/disk metrics for this host."
+msgstr ""
+
+#: cinder/exception.py:946
+#, python-format
+msgid "No valid host was found. %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:950
+#, python-format
+msgid "Host %(host)s is not up or doesn't exist."
+msgstr ""
+
+#: cinder/exception.py:954
+msgid "Quota exceeded"
+msgstr ""
+
+#: cinder/exception.py:958
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: action '%(action)s' caused an error: "
+"%(reason)s."
+msgstr ""
+
+#: cinder/exception.py:963
+#, python-format
+msgid "Aggregate %(aggregate_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:967
+#, python-format
+msgid "Aggregate %(aggregate_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:971
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:975
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:980
+#, python-format
+msgid "Host %(host)s already member of another aggregate."
+msgstr ""
+
+#: cinder/exception.py:984
+#, python-format
+msgid "Aggregate %(aggregate_id)s already has host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:988
+#, python-format
+msgid "Detected more than one volume with name %(vol_name)s"
+msgstr ""
+
+#: cinder/exception.py:992
+#, python-format
+msgid "Cannot create volume_type with name %(name)s and specs %(extra_specs)s"
+msgstr ""
+
+#: cinder/exception.py:997
+msgid "Unable to create instance type"
+msgstr ""
+
+#: cinder/exception.py:1001
+msgid "Bad response from SolidFire API"
+msgstr ""
+
+#: cinder/exception.py:1005
+#, python-format
+msgid "Error in SolidFire API response: status=%(status)s"
+msgstr ""
+
+#: cinder/exception.py:1009
+#, python-format
+msgid "Error in SolidFire API response: data=%(data)s"
+msgstr ""
+
+#: cinder/exception.py:1013
+#, python-format
+msgid "Detected existing vlan with id %(vlan)d"
+msgstr ""
+
+#: cinder/exception.py:1017
+#, python-format
+msgid "Instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:1021
+#, python-format
+msgid "Invalid id: %(val)s (expecting \"i-...\")."
+msgstr ""
+
+#: cinder/exception.py:1025
+#, fuzzy, python-format
+msgid "Could not fetch image %(image)s"
+msgstr "イメージをループバック %s にアタッチできません。"
+
+#: cinder/log.py:315
+#, python-format
+msgid "syslog facility must be one of: %s"
+msgstr ""
+
+#: cinder/manager.py:146
+#, python-format
+msgid "Skipping %(full_task_name)s, %(ticks_to_skip)s ticks left until next run"
+msgstr ""
+
+#: cinder/manager.py:152
+#, python-format
+msgid "Running periodic task %(full_task_name)s"
+msgstr ""
+
+#: cinder/manager.py:159
+#, python-format
+msgid "Error during %(full_task_name)s: %(e)s"
+msgstr ""
+
+#: cinder/manager.py:203
+msgid "Notifying Schedulers of capabilities ..."
+msgstr ""
+
+#: cinder/policy.py:30
+msgid "JSON file representing policy"
+msgstr ""
+
+#: cinder/policy.py:33
+msgid "Rule checked when requested rule is not found"
+msgstr ""
+
+#: cinder/service.py:137
+msgid "SIGTERM received"
+msgstr ""
+
+#: cinder/service.py:177
+#, python-format
+msgid "Starting %(topic)s node (version %(vcs_string)s)"
+msgstr "%(topic)s ノードを開始しています (バージョン %(vcs_string)s)"
+
+#: cinder/service.py:195
+#, python-format
+msgid "Creating Consumer connection for Service %s"
+msgstr ""
+
+#: cinder/service.py:282
+msgid "Service killed that has no database entry"
+msgstr "データベースにエントリの存在しないサービスを終了します。"
+
+#: cinder/service.py:319
+msgid "The service database object disappeared, Recreating it."
+msgstr "サービスデータベースオブジェクトが消滅しました。再作成します。"
+
+#: cinder/service.py:334
+msgid "Recovered model server connection!"
+msgstr "モデルサーバへの接続を復旧しました。"
+
+#: cinder/service.py:340
+msgid "model server went away"
+msgstr "モデルサーバが消滅しました。"
+
+#: cinder/service.py:433
+msgid "Full set of FLAGS:"
+msgstr "FLAGSの一覧:"
+
+#: cinder/service.py:440
+#, python-format
+msgid "%(flag)s : FLAG SET "
+msgstr ""
+
+#: cinder/utils.py:79
+#, python-format
+msgid "Inner Exception: %s"
+msgstr "内側で発生した例外: %s"
+
+#: cinder/utils.py:165
+#, python-format
+msgid "Fetching %s"
+msgstr "ファイルをフェッチ: %s"
+
+#: cinder/utils.py:210
+#, python-format
+msgid "Got unknown keyword args to utils.execute: %r"
+msgstr ""
+
+#: cinder/utils.py:220
+#, python-format
+msgid "Running cmd (subprocess): %s"
+msgstr "コマンド実行(subprocess): %s"
+
+#: cinder/utils.py:236 cinder/utils.py:315
+#, python-format
+msgid "Result was %s"
+msgstr "コマンド実行結果: %s"
+
+#: cinder/utils.py:249
+#, python-format
+msgid "%r failed. Retrying."
+msgstr ""
+
+#: cinder/utils.py:291
+#, python-format
+msgid "Running cmd (SSH): %s"
+msgstr "コマンド(SSH)を実行: %s"
+
+#: cinder/utils.py:293
+msgid "Environment not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:297
+msgid "process_input not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:352
+#, python-format
+msgid "debug in callback: %s"
+msgstr "コールバック中のデバッグ: %s"
+
+#: cinder/utils.py:534
+#, python-format
+msgid "Link Local address is not found.:%s"
+msgstr "リンクローカルアドレスが見つかりません: %s"
+
+#: cinder/utils.py:537
+#, python-format
+msgid "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+msgstr "%(interface)s のローカルIPアドレスのリンクが取得できません:%(ex)s"
+
+#: cinder/utils.py:648
+#, python-format
+msgid "Invalid backend: %s"
+msgstr "不正なバックエンドです: %s"
+
+#: cinder/utils.py:659
+#, python-format
+msgid "backend %s"
+msgstr "バックエンドは %s です。"
+
+#: cinder/utils.py:709
+msgid "in looping call"
+msgstr ""
+
+#: cinder/utils.py:927
+#, python-format
+msgid "Attempting to grab semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:931
+#, python-format
+msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:935
+#, python-format
+msgid "Attempting to grab file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:942
+#, python-format
+msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:1001
+#, python-format
+msgid "Found sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1008
+#, python-format
+msgid "Cleaned sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1023
+#, python-format
+msgid "Found lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1028
+#, python-format
+msgid "Cleaned lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1138
+#, python-format
+msgid "Expected object of type: %s"
+msgstr ""
+
+#: cinder/utils.py:1169
+#, python-format
+msgid "Invalid server_string: %s"
+msgstr ""
+
+#: cinder/utils.py:1298
+#, python-format
+msgid "timefunc: '%(name)s' took %(total_time).2f secs"
+msgstr ""
+
+#: cinder/utils.py:1330
+msgid "Original exception being dropped"
+msgstr ""
+
+#: cinder/utils.py:1461
+#, python-format
+msgid "Class %(fullname)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1463
+#, python-format
+msgid "Class %(fullname)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1495
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1497
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1681
+#, python-format
+msgid "Could not remove tmpdir: %s"
+msgstr ""
+
+#: cinder/wsgi.py:97
+#, python-format
+msgid "Started %(name)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:108
+msgid "Stopping WSGI server."
+msgstr ""
+
+#: cinder/wsgi.py:111
+msgid "Stopping raw TCP server."
+msgstr ""
+
+#: cinder/wsgi.py:117
+#, python-format
+msgid "Starting TCP server %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:133
+msgid "WSGI server has stopped."
+msgstr ""
+
+#: cinder/wsgi.py:211
+msgid "You must implement __call__"
+msgstr "__call__ を実装しなければなりません"
+
+#: cinder/api/direct.py:218
+msgid "not available"
+msgstr "利用できません"
+
+#: cinder/api/direct.py:299
+#, python-format
+msgid "Returned non-serializeable type: %s"
+msgstr ""
+
+#: cinder/api/sizelimit.py:51
+msgid "Request is too large."
+msgstr ""
+
+#: cinder/api/validator.py:142
+#, python-format
+msgid "%(key)s with value %(value)s failed validator  %(validator)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:73
+#, python-format
+msgid "%(code)s: %(message)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:95
+#, python-format
+msgid "FaultWrapper: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:170
+msgid "Too many failed authentications."
+msgstr "認証失敗の回数が多すぎます。"
+
+#: cinder/api/ec2/__init__.py:180
+#, python-format
+msgid ""
+"Access key %(access_key)s has had %(failures)d failed authentications and"
+" will be locked out for %(lock_mins)d minutes."
+msgstr "アクセスキー %(access_key)s は %(failures)d 回認証に失敗しましたので、%(lock_mins)d 分間ロックします。"
+
+#: cinder/api/ec2/__init__.py:267
+msgid "Signature not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:271
+msgid "Access key not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:306 cinder/api/ec2/__init__.py:319
+msgid "Failure communicating with keystone"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:388
+#, python-format
+msgid "Authentication Failure: %s"
+msgstr "%s の認証に失敗しました。"
+
+#: cinder/api/ec2/__init__.py:404
+#, python-format
+msgid "Authenticated Request For %(uname)s:%(pname)s)"
+msgstr "%(uname)s 用の認証リクエスト:%(pname)s)"
+
+#: cinder/api/ec2/__init__.py:435
+#, python-format
+msgid "action: %s"
+msgstr "アクション(action): %s"
+
+#: cinder/api/ec2/__init__.py:437
+#, python-format
+msgid "arg: %(key)s\t\tval: %(value)s"
+msgstr "引数: %(key)s\t\t値: %(value)s"
+
+#: cinder/api/ec2/__init__.py:512
+#, python-format
+msgid "Unauthorized request for controller=%(controller)s and action=%(action)s"
+msgstr "コントローラ=%(controller)s とアクション=%(action)s 用の許可されていないリクエスト"
+
+#: cinder/api/ec2/__init__.py:584
+#, python-format
+msgid "InstanceNotFound raised: %s"
+msgstr "InstanceNotFound が発行されました: %s"
+
+#: cinder/api/ec2/__init__.py:590
+#, python-format
+msgid "VolumeNotFound raised: %s"
+msgstr "VolumeNotFound が発行されました: %s"
+
+#: cinder/api/ec2/__init__.py:596
+#, python-format
+msgid "SnapshotNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:602
+#, python-format
+msgid "NotFound raised: %s"
+msgstr "NotFound 発生: %s"
+
+#: cinder/api/ec2/__init__.py:605
+#, python-format
+msgid "EC2APIError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:613
+#, python-format
+msgid "KeyPairExists raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:617
+#, python-format
+msgid "InvalidParameterValue raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:621
+#, python-format
+msgid "InvalidPortRange raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:625
+#, python-format
+msgid "NotAuthorized raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:629
+#, python-format
+msgid "InvalidRequest raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:633
+#, fuzzy, python-format
+msgid "QuotaError raised: %s"
+msgstr "予期しないエラー発生: %s"
+
+#: cinder/api/ec2/__init__.py:637
+#, python-format
+msgid "Invalid id: bogus (expecting \"i-...\"): %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:646
+#, python-format
+msgid "Unexpected error raised: %s"
+msgstr "予期しないエラー発生: %s"
+
+#: cinder/api/ec2/__init__.py:647
+#, python-format
+msgid "Environment: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:649 cinder/api/metadata/handler.py:248
+msgid "An unknown error has occurred. Please try your request again."
+msgstr "未知のエラーが発生しました。再度リクエストを実行してください。"
+
+#: cinder/api/ec2/apirequest.py:64
+#, python-format
+msgid "Unsupported API request: controller = %(controller)s, action = %(action)s"
+msgstr "未サポートの API リクエスト: コントローラ = %(controller)s, アクション = %(action)s"
+
+#: cinder/api/ec2/cloud.py:336
+#, python-format
+msgid "Create snapshot of volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:372
+#, python-format
+msgid ""
+"Value (%s) for KeyName is invalid. Content limited to Alphanumeric "
+"character, spaces, dashes, and underscore."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:378
+#, python-format
+msgid "Value (%s) for Keyname is invalid. Length exceeds maximum of 255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:382
+#, python-format
+msgid "Create key pair %s"
+msgstr "Create key pair: キーペア %s を作成します。"
+
+#: cinder/api/ec2/cloud.py:391
+#, python-format
+msgid "Import key %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:409
+#, python-format
+msgid "Delete key pair %s"
+msgstr "Delete key pair: キーペア %s を削除します。"
+
+#: cinder/api/ec2/cloud.py:551
+msgid "Invalid CIDR"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:639 cinder/api/ec2/cloud.py:693
+#: cinder/api/ec2/cloud.py:800
+msgid "Not enough parameters, need group_name or group_id"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:654
+#: cinder/api/openstack/compute/contrib/security_groups.py:517
+#, python-format
+msgid "Revoke security group ingress %s"
+msgstr "Revoke security group ingress: セキュリティグループ許可 %s の取消"
+
+#: cinder/api/ec2/cloud.py:666 cinder/api/ec2/cloud.py:719
+#, fuzzy, python-format
+msgid "%s Not enough parameters to build a valid rule"
+msgstr "有効なルールを作成する為の十分なパラメータがありません"
+
+#: cinder/api/ec2/cloud.py:684 cinder/api/ec2/cloud.py:744
+msgid "No rule for the specified parameters."
+msgstr "指定されたパラメータに該当するルールがありません。"
+
+#: cinder/api/ec2/cloud.py:708
+#: cinder/api/openstack/compute/contrib/security_groups.py:354
+#, python-format
+msgid "Authorize security group ingress %s"
+msgstr "Authorize security group ingress: セキュリティグループ許可 %s"
+
+#: cinder/api/ec2/cloud.py:725
+#, fuzzy, python-format
+msgid "%s - This rule already exists in group"
+msgstr "指定されたルールは既にグループ %s に存在しています。"
+
+#: cinder/api/ec2/cloud.py:769
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Content limited to "
+"Alphanumeric characters, spaces, dashes, and underscores."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:776
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Length exceeds maximum of "
+"255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:780
+#: cinder/api/openstack/compute/contrib/security_groups.py:292
+#, python-format
+msgid "Create Security Group %s"
+msgstr "Create Security Group: セキュリティグループ %s を作成します。"
+
+#: cinder/api/ec2/cloud.py:783
+#, python-format
+msgid "group %s already exists"
+msgstr "グループ %s は既に存在しています。"
+
+#: cinder/api/ec2/cloud.py:815
+#: cinder/api/openstack/compute/contrib/security_groups.py:245
+#, python-format
+msgid "Delete security group %s"
+msgstr "Delete security group: セキュリティグループ %s を削除します。"
+
+#: cinder/api/ec2/cloud.py:823 cinder/compute/manager.py:1630
+#, python-format
+msgid "Get console output for instance %s"
+msgstr "Get console output: インスタンス %s のコンソール出力を取得します。"
+
+#: cinder/api/ec2/cloud.py:894
+#, python-format
+msgid "Create volume from snapshot %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:898 cinder/api/openstack/compute/contrib/volumes.py:186
+#: cinder/api/openstack/volume/volumes.py:222
+#, python-format
+msgid "Create volume of %s GB"
+msgstr "Create volume: %s GBのボリュームを作成します。"
+
+#: cinder/api/ec2/cloud.py:921
+msgid "Delete Failed"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:931
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(instance_id)s at %(device)s"
+msgstr "ボリューム %(volume_id)s をインスタンス %(instance_id)s のデバイス %(device)s に接続"
+
+#: cinder/api/ec2/cloud.py:939
+msgid "Attach Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:952 cinder/api/openstack/compute/contrib/volumes.py:366
+#, python-format
+msgid "Detach volume %s"
+msgstr "Detach volume: ボリューム %s をデタッチします"
+
+#: cinder/api/ec2/cloud.py:959
+#, fuzzy, python-format
+msgid "Detach Volume Failed."
+msgstr "Detach volume: ボリューム %s をデタッチします"
+
+#: cinder/api/ec2/cloud.py:984 cinder/api/ec2/cloud.py:1041
+#: cinder/api/ec2/cloud.py:1518 cinder/api/ec2/cloud.py:1533
+#, python-format
+msgid "attribute not supported: %s"
+msgstr "アトリビュート %s はサポートされていません。"
+
+#: cinder/api/ec2/cloud.py:1107
+#, python-format
+msgid "vol = %s\n"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1255
+msgid "Allocate address"
+msgstr "Allocate address: アドレスを割り当てます。"
+
+#: cinder/api/ec2/cloud.py:1267
+#, python-format
+msgid "Release address %s"
+msgstr "Release address: アドレス %s を開放します。"
+
+#: cinder/api/ec2/cloud.py:1272
+#, python-format
+msgid "Associate address %(public_ip)s to instance %(instance_id)s"
+msgstr "インスタンス %(instance_id)s にアドレス %(public_ip)s を割り当て"
+
+#: cinder/api/ec2/cloud.py:1282
+#, python-format
+msgid "Disassociate address %s"
+msgstr "Disassociate address: アドレス %s の関連付けを解除します。"
+
+#: cinder/api/ec2/cloud.py:1308
+msgid "Image must be available"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1329
+msgid "Going to start terminating instances"
+msgstr "インスタンス終了処理を開始します。"
+
+#: cinder/api/ec2/cloud.py:1343
+#, python-format
+msgid "Reboot instance %r"
+msgstr "Reboot instance: インスタンス %r を再起動します。"
+
+#: cinder/api/ec2/cloud.py:1354
+msgid "Going to stop instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1365
+msgid "Going to start instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1455
+#, python-format
+msgid "De-registering image %s"
+msgstr "De-registering image: イメージ %s を登録解除します。"
+
+#: cinder/api/ec2/cloud.py:1471
+msgid "imageLocation is required"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1490
+#, python-format
+msgid "Registered image %(image_location)s with id %(image_id)s"
+msgstr "イメージ %(image_location)s が ID %(image_id)s で登録されました"
+
+#: cinder/api/ec2/cloud.py:1536
+msgid "user or group not specified"
+msgstr "ユーザまたはグループが指定されていません。"
+
+#: cinder/api/ec2/cloud.py:1538
+msgid "only group \"all\" is supported"
+msgstr "グループ  \"all\" のみサポートされています。"
+
+#: cinder/api/ec2/cloud.py:1540
+msgid "operation_type must be add or remove"
+msgstr "operation_type は add または remove の何れかである必要があります。"
+
+#: cinder/api/ec2/cloud.py:1542
+#, python-format
+msgid "Updating image %s publicity"
+msgstr "イメージ %s の公開設定を更新します。"
+
+#: cinder/api/ec2/cloud.py:1555
+#, python-format
+msgid "Not allowed to modify attributes for image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1603
+#, python-format
+msgid "Couldn't stop instance with in %d sec"
+msgstr ""
+
+#: cinder/api/metadata/handler.py:246 cinder/api/metadata/handler.py:253
+#, python-format
+msgid "Failed to get metadata for ip: %s"
+msgstr "ip %s に対するメタデータの取得に失敗しました。"
+
+#: cinder/api/openstack/__init__.py:43
+#, python-format
+msgid "Caught error: %s"
+msgstr "エラー %s をキャッチしました。"
+
+#: cinder/api/openstack/__init__.py:45 cinder/api/openstack/wsgi.py:886
+#, python-format
+msgid "%(url)s returned with HTTP %(status)d"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:94
+msgid "Must specify an ExtensionManager class"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:105
+#, python-format
+msgid "Extended resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:130
+#, python-format
+msgid ""
+"Extension %(ext_name)s: Cannot extend resource %(collection)s: No such "
+"resource"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:135
+#, python-format
+msgid "Extension %(ext_name)s extending resource: %(collection)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:90
+#, python-format
+msgid "%(user_id)s could not be found with token '%(token)s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:134
+#, python-format
+msgid "%(user_id)s must be an admin or a member of %(project_id)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:152
+msgid "Authentication requests must be made against a version root (e.g. /v2)."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:167
+#, python-format
+msgid "Could not find %s in request."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:191
+#, python-format
+msgid "Successfully authenticated '%s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:241
+msgid "User not found with provided API key."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:258
+#, python-format
+msgid "Provided API key is valid, but not for user '%(username)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:133 cinder/api/openstack/common.py:167
+msgid "limit param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:136 cinder/api/openstack/common.py:171
+msgid "limit param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:161
+msgid "offset param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:175
+msgid "offset param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:203
+#, python-format
+msgid "marker [%s] not found"
+msgstr ""
+
+#: cinder/api/openstack/common.py:243
+#, python-format
+msgid "href %s does not contain version"
+msgstr ""
+
+#: cinder/api/openstack/common.py:278
+msgid "Image metadata limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/common.py:295
+#, python-format
+msgid "Converting nw_info: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:305
+#, python-format
+msgid "Converted networks: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:338
+#, python-format
+msgid "Cannot '%(action)s' while instance is in %(attr)s %(state)s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:341
+#, python-format
+msgid "Instance is in an invalid state for '%(action)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:421
+msgid "Rejecting snapshot request, snapshots currently disabled"
+msgstr ""
+
+#: cinder/api/openstack/common.py:423
+msgid "Instance snapshots are not permitted at this time."
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:188
+#, python-format
+msgid "Loaded extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:225
+#, python-format
+msgid "Ext name: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:226
+#, python-format
+msgid "Ext alias: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:227
+#, python-format
+msgid "Ext description: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:229
+#, python-format
+msgid "Ext namespace: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:230
+#, python-format
+msgid "Ext updated: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:232
+#, python-format
+msgid "Exception loading extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:246
+#, python-format
+msgid "Loading extension %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:252
+#, python-format
+msgid "Calling extension factory %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:264
+#, python-format
+msgid "Failed to load extension %(ext_factory)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:344
+#, python-format
+msgid "Failed to load extension %(classpath)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:368
+#, python-format
+msgid "Failed to load extension %(ext_name)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:135 cinder/api/openstack/wsgi.py:538
+msgid "cannot understand JSON"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:159
+#: cinder/api/openstack/compute/contrib/hosts.py:86
+msgid "cannot understand XML"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:543
+msgid "too many body keys"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:582
+#, python-format
+msgid "Exception handling resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:586
+#, python-format
+msgid "Fault thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:589
+#, python-format
+msgid "HTTP exception thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:697
+msgid "Unrecognized Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:701
+msgid "No Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:705
+msgid "Empty body provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:816
+#, python-format
+msgid "There is no such action: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:819 cinder/api/openstack/wsgi.py:832
+#: cinder/api/openstack/compute/server_metadata.py:58
+#: cinder/api/openstack/compute/server_metadata.py:76
+#: cinder/api/openstack/compute/server_metadata.py:101
+#: cinder/api/openstack/compute/server_metadata.py:126
+#: cinder/api/openstack/compute/contrib/admin_actions.py:211
+#: cinder/api/openstack/compute/contrib/console_output.py:52
+msgid "Malformed request body"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:829
+msgid "Unsupported Content-Type"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:841
+msgid "Malformed request url"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:889
+#, python-format
+msgid "%(url)s returned a fault: %(e)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:265
+msgid "element is not a child"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:414
+msgid "root element selecting a list"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:739
+#, python-format
+msgid "Template tree mismatch; adding slave %(slavetag)s to master %(mastertag)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:858
+msgid "subclasses must implement construct()!"
+msgstr ""
+
+#: cinder/api/openstack/compute/extensions.py:29
+#: cinder/api/openstack/volume/extensions.py:29
+msgid "Initializing extension manager."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:40
+#: cinder/api/openstack/compute/images.py:146
+#: cinder/api/openstack/compute/images.py:161
+msgid "Image not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:79
+msgid "Incorrect request body format"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:83
+#: cinder/api/openstack/compute/server_metadata.py:80
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:79
+#: cinder/api/openstack/compute/contrib/volumetypes.py:188
+msgid "Request body and URI mismatch"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:86
+#: cinder/api/openstack/compute/server_metadata.py:84
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:82
+#: cinder/api/openstack/compute/contrib/volumetypes.py:191
+msgid "Request body contains too many items"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:111
+msgid "Invalid metadata key"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:74
+msgid "Instance does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:97
+msgid "Instance is not a member of specified network"
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:140
+#, python-format
+msgid ""
+"Only %(value)s %(verb)s request(s) can be made to %(uri)s every "
+"%(unit_string)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:266
+msgid "This request was rate-limited."
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:38
+#: cinder/api/openstack/compute/server_metadata.py:122
+#: cinder/api/openstack/compute/server_metadata.py:159
+msgid "Server does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:141
+#: cinder/api/openstack/compute/server_metadata.py:152
+msgid "Metadata item was not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:425
+#, python-format
+msgid "Invalid server status: %(status)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:433
+msgid "Invalid changes-since value"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:483
+msgid "Personality file limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:485
+msgid "Personality file path too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:487
+msgid "Personality file content too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:501
+msgid "Server name is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:505
+msgid "Server name is an empty string"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:509
+msgid "Server name must be less than 256 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:527
+#, python-format
+msgid "Bad personality format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:530
+msgid "Bad personality format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:535
+#, python-format
+msgid "Personality content for %s cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:550
+#, python-format
+msgid "Bad networks format: network uuid is not in proper format (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:559
+#, python-format
+msgid "Invalid fixed IP address (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:566
+#, python-format
+msgid "Duplicate networks (%s) are not allowed"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:572
+#, python-format
+msgid "Bad network format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:575
+msgid "Bad networks format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:587
+msgid "Userdata content cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:594
+msgid "accessIPv4 is not proper IPv4 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:601
+msgid "accessIPv6 is not proper IPv6 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:633
+msgid "Server name is not defined"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:675
+#: cinder/api/openstack/compute/servers.py:740
+msgid "Invalid flavorRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:737
+msgid "Can not find requested image"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:743
+msgid "Invalid key_name provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:829
+#: cinder/api/openstack/compute/servers.py:849
+msgid "Instance has not been resized."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:835
+#, python-format
+msgid "Error in confirm-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:855
+#, python-format
+msgid "Error in revert-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:868
+msgid "Argument 'type' for reboot is not HARD or SOFT"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:872
+msgid "Missing argument 'type' for reboot"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:885
+#, python-format
+msgid "Error in reboot %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:897
+msgid "Unable to locate requested flavor."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:900
+msgid "Resize requires a change in size."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:924
+msgid "Malformed server entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:931
+msgid "Missing imageRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:940
+msgid "Invalid imageRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:949
+msgid "Missing flavorRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:962
+msgid "No adminPass was specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:966
+#: cinder/api/openstack/compute/servers.py:1144
+msgid "Invalid adminPass"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:980
+msgid "Unable to parse metadata key/value pairs."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:993
+msgid "Resize request has invalid 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:996
+msgid "Resize requests require 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1014
+#: cinder/api/openstack/compute/contrib/aggregates.py:142
+#: cinder/api/openstack/compute/contrib/networks.py:65
+msgid "Invalid request body"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1019
+msgid "Could not parse imageRef from request."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1071
+msgid "Instance could not be found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1074
+msgid "Cannot find image for rebuild"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1103
+msgid "createImage entity requires name attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1112
+#: cinder/api/openstack/compute/contrib/admin_actions.py:238
+msgid "Invalid metadata"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1167
+#, python-format
+msgid "Removing options '%(unk_opt_str)s' from query"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:60
+#, python-format
+msgid "Compute.api::pause %s"
+msgstr "例外: Compute.api::pause %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:77
+#, python-format
+msgid "Compute.api::unpause %s"
+msgstr "例外: Compute.api::unpause %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:94
+#, python-format
+msgid "compute.api::suspend %s"
+msgstr "例外: compute.api::suspend %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:111
+#, python-format
+msgid "compute.api::resume %s"
+msgstr "例外: compute.api::resume %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:127
+#, python-format
+msgid "Error in migrate %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:141
+#, python-format
+msgid "Compute.api::reset_network %s"
+msgstr "例外: Compute.api::reset_network %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:154
+#: cinder/api/openstack/compute/contrib/admin_actions.py:170
+#: cinder/api/openstack/compute/contrib/admin_actions.py:186
+#: cinder/api/openstack/compute/contrib/multinic.py:41
+#: cinder/api/openstack/compute/contrib/rescue.py:44
+msgid "Server not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:157
+#, python-format
+msgid "Compute.api::inject_network_info %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:173
+#, python-format
+msgid "Compute.api::lock %s"
+msgstr "例外: Compute.api::lock %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:189
+#, python-format
+msgid "Compute.api::unlock %s"
+msgstr "例外: Compute.api::unlock %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:219
+#, python-format
+msgid "createBackup entity requires %s attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:223
+msgid "Malformed createBackup entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:229
+msgid "createBackup attribute 'rotation' must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:244
+#: cinder/api/openstack/compute/contrib/console_output.py:47
+#: cinder/api/openstack/compute/contrib/console_output.py:59
+#: cinder/api/openstack/compute/contrib/consoles.py:49
+#: cinder/api/openstack/compute/contrib/consoles.py:60
+#: cinder/api/openstack/compute/contrib/server_action_list.py:49
+#: cinder/api/openstack/compute/contrib/server_diagnostics.py:47
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:38
+msgid "Instance not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:272
+msgid "host and block_migration must be specified."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:284
+#, python-format
+msgid "Live migration of instance %(id)s to host %(host)s failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:76
+#, python-format
+msgid ""
+"Cannot create aggregate with name %(name)s and availability zone "
+"%(avail_zone)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:88
+#, python-format
+msgid "Cannot show aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:114
+#, python-format
+msgid "Cannot update aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:126
+#, python-format
+msgid "Cannot delete aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:139
+#, python-format
+msgid "Aggregates does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:152
+#: cinder/api/openstack/compute/contrib/aggregates.py:158
+#, python-format
+msgid "Cannot add host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:171
+#: cinder/api/openstack/compute/contrib/aggregates.py:175
+#, python-format
+msgid "Cannot remove host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:195
+#, python-format
+msgid "Cannot set metadata %(metadata)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/certificates.py:75
+msgid "Only root certificate can be retrieved."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/cloudpipe.py:146
+msgid ""
+"Unable to claim IP for VPN instances, ensure it isn't running, and try "
+"again in a few minutes"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:44
+msgid "Missing type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:56
+msgid "Invalid type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/disk_config.py:44
+#, python-format
+msgid "%s must be either 'MANUAL' or 'AUTO'."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/extended_server_attributes.py:77
+#: cinder/api/openstack/compute/contrib/extended_status.py:61
+msgid "Server not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:61
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:91
+msgid "Flavor not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:49
+#: cinder/api/openstack/compute/contrib/volumetypes.py:158
+msgid "No Request Body"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:159
+#, python-format
+msgid "No more floating ips in pool %s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:161
+msgid "No more floating ips available."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:201
+#: cinder/api/openstack/compute/contrib/floating_ips.py:230
+#: cinder/api/openstack/compute/contrib/security_groups.py:571
+#: cinder/api/openstack/compute/contrib/security_groups.py:604
+msgid "Missing parameter dict"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:204
+#: cinder/api/openstack/compute/contrib/floating_ips.py:233
+msgid "Address not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:213
+msgid "No fixed ips associated to instance"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:216
+msgid "Associate floating ip failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:144
+#, python-format
+msgid "Invalid status: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:148
+#, fuzzy, python-format
+msgid "Invalid mode: '%s'"
+msgstr "不正なバックエンドです: %s"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:152
+#, python-format
+msgid "Invalid update setting: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:170
+#, python-format
+msgid "Putting host %(host)s in maintenance mode %(mode)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:181
+#, python-format
+msgid "Setting host %(host)s to %(state)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:230
+msgid "Describe-resource is admin only functionality"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:238
+msgid "Host not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:70
+msgid "Keypair name contains unsafe characters"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:95
+msgid "Keypair name must be between 1 and 255 characters long"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:100
+#, python-format
+msgid "Key pair '%s' already exists."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:52
+msgid "Missing 'networkId' argument for addFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:68
+msgid "Missing 'address' argument for removeFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:77
+#, python-format
+msgid "Unable to find address %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:62
+#, python-format
+msgid "Network does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:70
+#, python-format
+msgid "Disassociating network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:74
+#: cinder/api/openstack/compute/contrib/networks.py:91
+#: cinder/api/openstack/compute/contrib/networks.py:101
+msgid "Network not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:87
+#, python-format
+msgid "Showing network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:97
+#, python-format
+msgid "Deleting network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/scheduler_hints.py:41
+msgid "Malformed scheduler_hints attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:222
+msgid "Security group id should be integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:243
+#, fuzzy, python-format
+msgid "Security group is still in use"
+msgstr "Revoke security group ingress: セキュリティグループ許可 %s の取消"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:295
+#, python-format
+msgid "Security group %s already exists"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:315
+#, python-format
+msgid "Security group %s is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:318
+#, python-format
+msgid "Security group %s cannot be empty."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:321
+#, python-format
+msgid "Security group %s should not be greater than 255 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:348
+msgid "Parent group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:351
+#, python-format
+msgid "Security group (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:369
+msgid "Not enough parameters to build a valid rule."
+msgstr "有効なルールを作成する為の十分なパラメータがありません"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:376
+#, python-format
+msgid "This rule already exists in group %s"
+msgstr "指定されたルールは既にグループ %s に存在しています。"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:414
+msgid "Parent or group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:507
+msgid "Rule id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:510
+#, python-format
+msgid "Rule (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:574
+#: cinder/api/openstack/compute/contrib/security_groups.py:607
+msgid "Security group not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:578
+#: cinder/api/openstack/compute/contrib/security_groups.py:611
+msgid "Security group name cannot be empty"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:45
+#, python-format
+msgid "start instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:54
+#, python-format
+msgid "stop instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:73
+#: cinder/api/openstack/volume/volumes.py:106
+#, python-format
+msgid "vol=%s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:146
+#: cinder/api/openstack/volume/volumes.py:184
+#, python-format
+msgid "Delete volume with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:329
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(server_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:481
+#: cinder/api/openstack/volume/snapshots.py:110
+#, python-format
+msgid "Delete snapshot with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:524
+#: cinder/api/openstack/volume/snapshots.py:150
+#, python-format
+msgid "Create snapshot from volume %s"
+msgstr ""
+
+#: cinder/auth/fakeldap.py:33
+msgid "Attempted to instantiate singleton"
+msgstr "シングルトンをインスタンス化しようとしました。"
+
+#: cinder/auth/ldapdriver.py:650
+#, python-format
+msgid ""
+"Attempted to remove the last member of a group. Deleting the group at %s "
+"instead."
+msgstr "グループの最後のメンバーを削除しようとしました。代わりにグループ %s を削除してください。"
+
+#: cinder/auth/manager.py:298
+#, python-format
+msgid "Looking up user: %r"
+msgstr "ユーザ %r を検索します。"
+
+#: cinder/auth/manager.py:302
+#, python-format
+msgid "Failed authorization for access key %s"
+msgstr "Failed authorization: アクセスキー %s の認証に失敗しました。"
+
+#: cinder/auth/manager.py:308
+#, python-format
+msgid "Using project name = user name (%s)"
+msgstr "ユーザ名 (%s) をプロジェクト名として使用します。"
+
+#: cinder/auth/manager.py:315
+#, python-format
+msgid "failed authorization: no project named %(pjid)s (user=%(uname)s)"
+msgstr "許可されません: %(pjid)s という名称のプロジェクトはありません (ユーザ=%(uname)s)"
+
+#: cinder/auth/manager.py:324
+#, python-format
+msgid ""
+"Failed authorization: user %(uname)s not admin and not member of project "
+"%(pjname)s"
+msgstr "許可されません: ユーザ %(uname)s は管理者でもプロジェクト %(pjname)s のメンバでもありません。"
+
+#: cinder/auth/manager.py:331 cinder/auth/manager.py:343
+#, python-format
+msgid "user.secret: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:332 cinder/auth/manager.py:344
+#, python-format
+msgid "expected_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:333 cinder/auth/manager.py:345
+#, python-format
+msgid "signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:335 cinder/auth/manager.py:357
+#, python-format
+msgid "Invalid signature for user %s"
+msgstr "Invalid signature: ユーザ %s の署名が不正です。"
+
+#: cinder/auth/manager.py:353
+#, python-format
+msgid "host_only_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:449
+msgid "Must specify project"
+msgstr "プロジェクトを指定してください。"
+
+#: cinder/auth/manager.py:490
+#, python-format
+msgid "Adding role %(role)s to user %(uid)s in project %(pid)s"
+msgstr "プロジェクト %(pid)s のユーザ %(uid)s にロール %(role)s を付与します。"
+
+#: cinder/auth/manager.py:493
+#, python-format
+msgid "Adding sitewide role %(role)s to user %(uid)s"
+msgstr "サイト共通のロール %(role)s をユーザ %(uid)s に付与します。"
+
+#: cinder/auth/manager.py:519
+#, python-format
+msgid "Removing role %(role)s from user %(uid)s on project %(pid)s"
+msgstr "プロジェクト %(pid)s のユーザ  %(uid)s  からロール %(role)s を削除します。"
+
+#: cinder/auth/manager.py:522
+#, python-format
+msgid "Removing sitewide role %(role)s from user %(uid)s"
+msgstr "ユーザ %(uid)s からサイト共通のロール %(role)s を削除します。"
+
+#: cinder/auth/manager.py:595
+#, python-format
+msgid "Created project %(name)s with manager %(manager_user)s"
+msgstr "プロジェクト %(name)s を管理者 %(manager_user)s で作成しました。"
+
+#: cinder/auth/manager.py:613
+#, python-format
+msgid "modifying project %s"
+msgstr "modifying project: プロジェクト %s を更新します。"
+
+#: cinder/auth/manager.py:625
+#, python-format
+msgid "Adding user %(uid)s to project %(pid)s"
+msgstr "ユーザ %(uid)s をプロジェクト %(pid)s に追加します。"
+
+#: cinder/auth/manager.py:646
+#, python-format
+msgid "Remove user %(uid)s from project %(pid)s"
+msgstr "ユーザ %(uid)s をプロジェクト %(pid)s から削除します。"
+
+#: cinder/auth/manager.py:676
+#, python-format
+msgid "Deleting project %s"
+msgstr "Deleting project: プロジェクト %s を削除します。"
+
+#: cinder/auth/manager.py:734
+#, python-format
+msgid "Created user %(rvname)s (admin: %(rvadmin)r)"
+msgstr "ユーザ %(rvname)s を作成しました。(管理者: %(rvadmin)r)"
+
+#: cinder/auth/manager.py:743
+#, python-format
+msgid "Deleting user %s"
+msgstr "Deleting user: ユーザ %s を削除します。"
+
+#: cinder/auth/manager.py:753
+#, python-format
+msgid "Access Key change for user %s"
+msgstr "Access Key change: ユーザ %s のアクセスキーを更新します。"
+
+#: cinder/auth/manager.py:755
+#, python-format
+msgid "Secret Key change for user %s"
+msgstr "Secret Key change: ユーザ %s のシークレットキーを更新します。"
+
+#: cinder/auth/manager.py:757
+#, python-format
+msgid "Admin status set to %(admin)r for user %(uid)s"
+msgstr "ユーザ %(uid)s に対して管理者状態が %(admin)r に設定されました。"
+
+#: cinder/auth/manager.py:802
+#, python-format
+msgid "No vpn data for project %s"
+msgstr "プロジェクト %s に関するvpnデータがありません。"
+
+#: cinder/cloudpipe/pipelib.py:46
+#, fuzzy, python-format
+msgid "Instance type for vpn instances"
+msgstr "Get console output: インスタンス %s のコンソール出力を取得します。"
+
+#: cinder/cloudpipe/pipelib.py:49
+msgid "Template for cloudpipe instance boot script"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:52
+msgid "Network to push into openvpn config"
+msgstr "openvpnの設定に入れるネットワークの値"
+
+#: cinder/cloudpipe/pipelib.py:55
+msgid "Netmask to push into openvpn config"
+msgstr "openvpnの設定に入れるネットマスクの値"
+
+#: cinder/cloudpipe/pipelib.py:107
+#, python-format
+msgid "Launching VPN for %s"
+msgstr "%s 用のVPNを起動します。"
+
+#: cinder/compute/api.py:141
+msgid "No compute host specified"
+msgstr ""
+
+#: cinder/compute/api.py:144
+#, python-format
+msgid "Unable to find host for Instance %s"
+msgstr ""
+
+#: cinder/compute/api.py:192
+#, python-format
+msgid ""
+"Quota exceeded for %(pid)s, tried to set %(num_metadata)s metadata "
+"properties"
+msgstr ""
+
+#: cinder/compute/api.py:203
+#, python-format
+msgid "Quota exceeded for %(pid)s, metadata property key or value too long"
+msgstr ""
+
+#: cinder/compute/api.py:257
+#, fuzzy, python-format
+msgid "Cannot run any more instances of this type."
+msgstr "インスタンスのクオータを超えました。このタイプにおいてはあと %s インスタンスしか実行できません。"
+
+#: cinder/compute/api.py:259
+#, fuzzy, python-format
+msgid "Can only run %s more instances of this type."
+msgstr "インスタンスのクオータを超えました。このタイプにおいてはあと %s インスタンスしか実行できません。"
+
+#: cinder/compute/api.py:261
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances. "
+msgstr ""
+
+#: cinder/compute/api.py:310
+msgid "Creating a raw instance"
+msgstr "raw instanceを生成します。"
+
+#: cinder/compute/api.py:312
+#, python-format
+msgid "Using Kernel=%(kernel_id)s, Ramdisk=%(ramdisk_id)s"
+msgstr ""
+
+#: cinder/compute/api.py:383
+#, python-format
+msgid "Going to run %s instances..."
+msgstr "%s 個のインスタンスの起動を始めます…"
+
+#: cinder/compute/api.py:447
+#, python-format
+msgid "bdm %s"
+msgstr ""
+
+#: cinder/compute/api.py:474
+#, python-format
+msgid "block_device_mapping %s"
+msgstr ""
+
+#: cinder/compute/api.py:591
+#, python-format
+msgid "Sending create to scheduler for %(pid)s/%(uid)s's"
+msgstr ""
+
+#: cinder/compute/api.py:871
+#, fuzzy, python-format
+msgid "Going to try to soft delete instance"
+msgstr "%s を停止しようとしています"
+
+#: cinder/compute/api.py:891
+msgid "No host for instance, deleting immediately"
+msgstr ""
+
+#: cinder/compute/api.py:939
+#, fuzzy, python-format
+msgid "Going to try to terminate instance"
+msgstr "%s を停止しようとしています"
+
+#: cinder/compute/api.py:977
+#, fuzzy, python-format
+msgid "Going to try to stop instance"
+msgstr "%s を停止しようとしています"
+
+#: cinder/compute/api.py:996
+#, fuzzy, python-format
+msgid "Going to try to start instance"
+msgstr "%s を停止しようとしています"
+
+#: cinder/compute/api.py:1000
+#, python-format
+msgid "Instance %(instance_uuid)s is not stopped. (%(vm_state)s"
+msgstr ""
+
+#: cinder/compute/api.py:1071 cinder/volume/api.py:173
+#: cinder/volume/volume_types.py:64
+#, python-format
+msgid "Searching by: %s"
+msgstr ""
+
+#: cinder/compute/api.py:1201
+#, python-format
+msgid "Image type not recognized %s"
+msgstr ""
+
+#: cinder/compute/api.py:1369
+msgid "flavor_id is None. Assuming migration."
+msgstr ""
+
+#: cinder/compute/api.py:1377
+#, python-format
+msgid ""
+"Old instance type %(current_instance_type_name)s,  new instance type "
+"%(new_instance_type_name)s"
+msgstr ""
+
+#: cinder/compute/api.py:1644
+#, python-format
+msgid "multiple fixedips exist, using the first: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:57 cinder/compute/instance_types.py:65
+msgid "create arguments must be positive integers"
+msgstr ""
+
+#: cinder/compute/instance_types.py:76 cinder/volume/volume_types.py:41
+#, python-format
+msgid "DB error: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:86
+#, python-format
+msgid "Instance type %s not found for deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:138
+#, python-format
+msgid "check_instance_lock: decorating: |%s|"
+msgstr "check_instance_lock: decorating: |%s|"
+
+#: cinder/compute/manager.py:140
+#, python-format
+msgid ""
+"check_instance_lock: arguments: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+msgstr ""
+
+#: cinder/compute/manager.py:144
+#, python-format
+msgid "check_instance_lock: locked: |%s|"
+msgstr "check_instance_lock: locked: |%s|"
+
+#: cinder/compute/manager.py:146
+#, python-format
+msgid "check_instance_lock: admin: |%s|"
+msgstr "check_instance_lock: admin: |%s|"
+
+#: cinder/compute/manager.py:151
+#, python-format
+msgid "check_instance_lock: executing: |%s|"
+msgstr "check_instance_lock: executing: |%s|"
+
+#: cinder/compute/manager.py:155
+#, python-format
+msgid "check_instance_lock: not executing |%s|"
+msgstr "check_instance_lock: not executing |%s|"
+
+#: cinder/compute/manager.py:201
+#, python-format
+msgid "Unable to load the virtualization driver: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:223
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s has been destroyed from under us while trying "
+"to set it to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:240
+#, python-format
+msgid "Current state is %(drv_state)s, state in DB is %(db_state)s."
+msgstr ""
+
+#: cinder/compute/manager.py:245
+msgid "Rebooting instance after cinder-compute restart."
+msgstr ""
+
+#: cinder/compute/manager.py:255
+msgid "Hypervisor driver does not support firewall rules"
+msgstr ""
+
+#: cinder/compute/manager.py:260
+msgid "Checking state"
+msgstr ""
+
+#: cinder/compute/manager.py:329
+#, python-format
+msgid "Setting up bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:400
+#, python-format
+msgid "Instance %s already deleted from database. Attempting forceful vm deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:406
+#, fuzzy, python-format
+msgid "Exception encountered while terminating the instance %s"
+msgstr "インスタンス %s を終了した後です。"
+
+#: cinder/compute/manager.py:444
+#, python-format
+msgid "Instance %s not found."
+msgstr ""
+
+#: cinder/compute/manager.py:480
+msgid "Instance has already been created"
+msgstr "インスタンスは既に生成されています。"
+
+#: cinder/compute/manager.py:523
+#, python-format
+msgid ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:528
+#, python-format
+msgid ""
+"Image '%(image_id)s' size %(size_bytes)d exceeded instance_type allowed "
+"size %(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:538
+msgid "Starting instance..."
+msgstr ""
+
+#: cinder/compute/manager.py:548
+msgid "Skipping network allocation for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:561
+msgid "Instance failed network setup"
+msgstr ""
+
+#: cinder/compute/manager.py:565
+#, python-format
+msgid "Instance network_info: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:578
+msgid "Instance failed block device setup"
+msgstr ""
+
+#: cinder/compute/manager.py:594
+msgid "Instance failed to spawn"
+msgstr ""
+
+#: cinder/compute/manager.py:615
+msgid "Deallocating network for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:672
+#, python-format
+msgid "%(action_str)s instance"
+msgstr ""
+
+#: cinder/compute/manager.py:699
+#, python-format
+msgid "Ignoring DiskNotFound: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:708
+#, python-format
+msgid "terminating bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:742 cinder/compute/manager.py:1328
+#: cinder/compute/manager.py:1416 cinder/compute/manager.py:2501
+#, python-format
+msgid "%s. Setting instance vm_state to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:811
+#, python-format
+msgid ""
+"Cannot rebuild instance [%(instance_uuid)s], because the given image does"
+" not exist."
+msgstr ""
+
+#: cinder/compute/manager.py:816
+#, python-format
+msgid "Cannot rebuild instance [%(instance_uuid)s]: %(exc)s"
+msgstr ""
+
+#: cinder/compute/manager.py:823
+#, python-format
+msgid "Rebuilding instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:876
+#, python-format
+msgid "Rebooting instance %s"
+msgstr "Rebooting instance: インスタンス %s を再起動します。"
+
+#: cinder/compute/manager.py:891
+#, python-format
+msgid ""
+"trying to reboot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:933
+#, python-format
+msgid "instance %s: snapshotting"
+msgstr "snapshotting: インスタンス %s のスナップショットを取得中"
+
+#: cinder/compute/manager.py:939
+#, python-format
+msgid ""
+"trying to snapshot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:995
+#, python-format
+msgid "Found %(num_images)d images (rotation: %(rotation)d)"
+msgstr ""
+
+#: cinder/compute/manager.py:1001
+#, python-format
+msgid "Rotating out %d backups"
+msgstr ""
+
+#: cinder/compute/manager.py:1005
+#, python-format
+msgid "Deleting image %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1035
+#, python-format
+msgid "Failed to set admin password. Instance %s is not running"
+msgstr ""
+
+#: cinder/compute/manager.py:1041
+#, python-format
+msgid "Instance %s: Root password set"
+msgstr ""
+
+#: cinder/compute/manager.py:1050
+msgid "set_admin_password is not implemented by this driver."
+msgstr ""
+
+#: cinder/compute/manager.py:1064
+msgid "Error setting admin password"
+msgstr ""
+
+#: cinder/compute/manager.py:1079
+#, python-format
+msgid ""
+"trying to inject a file into a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1084
+#, python-format
+msgid "instance %(instance_uuid)s: injecting file to %(path)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1098
+#, python-format
+msgid ""
+"trying to update agent on a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1103
+#, python-format
+msgid "instance %(instance_uuid)s: updating agent to %(url)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1116
+#, python-format
+msgid "instance %s: rescuing"
+msgstr "Rescuing: インスタンス %s をレスキューします。"
+
+#: cinder/compute/manager.py:1141
+#, python-format
+msgid "instance %s: unrescuing"
+msgstr "Unrescuing: インスタンス %s をアンレスキューします。"
+
+#: cinder/compute/manager.py:1270
+msgid "destination same as source!"
+msgstr ""
+
+#: cinder/compute/manager.py:1287
+#, python-format
+msgid "instance %s: migrating"
+msgstr ""
+
+#: cinder/compute/manager.py:1471
+#, python-format
+msgid "instance %s: pausing"
+msgstr "pausing: インスタンス %s を一時停止します。"
+
+#: cinder/compute/manager.py:1489
+#, python-format
+msgid "instance %s: unpausing"
+msgstr "unpausing: インスタンス %s の一時停止を解除します。"
+
+#: cinder/compute/manager.py:1525
+#, python-format
+msgid "instance %s: retrieving diagnostics"
+msgstr "retrieving diagnostics: インスタンス %s の診断情報を取得します。"
+
+#: cinder/compute/manager.py:1534
+#, python-format
+msgid "instance %s: suspending"
+msgstr "suspending: インスタンス %s をサスペンドします。"
+
+#: cinder/compute/manager.py:1556
+#, python-format
+msgid "instance %s: resuming"
+msgstr "resuming: インスタンス %s をレジュームします。"
+
+#: cinder/compute/manager.py:1579
+#, python-format
+msgid "instance %s: locking"
+msgstr "locking: インスタンス %s をロックします。"
+
+#: cinder/compute/manager.py:1588
+#, python-format
+msgid "instance %s: unlocking"
+msgstr "unlocking: インスタンス %s のロックを解除します。"
+
+#: cinder/compute/manager.py:1596
+#, python-format
+msgid "instance %s: getting locked state"
+msgstr "getting locked state: インスタンス %s のロックを取得しました。"
+
+#: cinder/compute/manager.py:1606
+#, python-format
+msgid "instance %s: reset network"
+msgstr "インスタンス %s: ネットワークをリセットします"
+
+#: cinder/compute/manager.py:1614
+#, python-format
+msgid "instance %s: inject network info"
+msgstr ""
+
+#: cinder/compute/manager.py:1618
+#, python-format
+msgid "network_info to inject: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:1655
+#, python-format
+msgid "instance %s: getting vnc console"
+msgstr ""
+
+#: cinder/compute/manager.py:1685
+#, python-format
+msgid "Booting with volume %(volume_id)s at %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1703
+#, python-format
+msgid ""
+"instance %(instance_uuid)s: attaching volume %(volume_id)s to "
+"%(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1705
+#, python-format
+msgid "Attaching volume %(volume_id)s to %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1714
+#, python-format
+msgid "instance %(instance_uuid)s: attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1724
+#, python-format
+msgid "Attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1752
+#, python-format
+msgid "Detach volume %(volume_id)s from mountpoint %(mp)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1756
+#, python-format
+msgid "Detaching volume from unknown instance %s"
+msgstr "ボリュームを未知のインスタンス %s からデタッチします。"
+
+#: cinder/compute/manager.py:1822
+#, python-format
+msgid ""
+"Creating tmpfile %s to notify to other compute nodes that they should "
+"mount the same storage."
+msgstr ""
+
+#: cinder/compute/manager.py:1884
+msgid "Instance has no volume."
+msgstr ""
+
+#: cinder/compute/manager.py:1916
+#, python-format
+msgid "plug_vifs() failed %(cnt)d.Retry up to %(max_retry)d for %(hostname)s."
+msgstr ""
+
+#: cinder/compute/manager.py:1973
+#, python-format
+msgid "Pre live migration failed at  %(dest)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2000
+msgid "post_live_migration() is started.."
+msgstr ""
+
+#: cinder/compute/manager.py:2030
+msgid "No floating_ip found"
+msgstr ""
+
+#: cinder/compute/manager.py:2038
+msgid "No floating_ip found."
+msgstr ""
+
+#: cinder/compute/manager.py:2040
+#, python-format
+msgid ""
+"Live migration: Unexpected error: cannot inherit floating ip.\n"
+"%(e)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2073
+#, python-format
+msgid "Migrating instance to %(dest)s finished successfully."
+msgstr ""
+
+#: cinder/compute/manager.py:2075
+msgid ""
+"You may see the error \"libvirt: QEMU error: Domain not found: no domain "
+"with matching name.\" This error can be safely ignored."
+msgstr ""
+
+#: cinder/compute/manager.py:2090
+msgid "Post operation of migraton started"
+msgstr ""
+
+#: cinder/compute/manager.py:2226
+#, python-format
+msgid "Updated the info_cache for instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:2255
+msgid "Updating bandwidth usage cache"
+msgstr ""
+
+#: cinder/compute/manager.py:2277
+msgid "Updating host status"
+msgstr ""
+
+#: cinder/compute/manager.py:2305
+#, python-format
+msgid ""
+"Found %(num_db_instances)s in the database and %(num_vm_instances)s on "
+"the hypervisor."
+msgstr ""
+
+#: cinder/compute/manager.py:2331
+#, python-format
+msgid ""
+"During the sync_power process the instance %(uuid)s has moved from host "
+"%(src)s to host %(dst)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2344
+#, python-format
+msgid ""
+"Instance %s is in the process of migrating to this host. Wait next "
+"sync_power cycle before setting power state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2350
+msgid ""
+"Instance found in database but not known by hypervisor. Setting power "
+"state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2380
+msgid "FLAGS.reclaim_instance_interval <= 0, skipping..."
+msgstr ""
+
+#: cinder/compute/manager.py:2392
+msgid "Reclaiming deleted instance"
+msgstr ""
+
+#: cinder/compute/manager.py:2458
+#, python-format
+msgid ""
+"Detected instance with name label '%(name)s' which is marked as DELETED "
+"but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2465
+#, python-format
+msgid ""
+"Destroying instance with name label '%(name)s' which is marked as DELETED"
+" but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2472
+#, python-format
+msgid "Unrecognized value '%(action)s' for FLAGS.running_deleted_instance_action"
+msgstr ""
+
+#: cinder/compute/manager.py:2542
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: unrecoverable state during operation on "
+"%(host)s"
+msgstr ""
+
+#: cinder/compute/utils.py:142
+msgid "v4 subnets are required for legacy nw_info"
+msgstr ""
+
+#: cinder/console/manager.py:77 cinder/console/vmrc_manager.py:70
+msgid "Adding console"
+msgstr "コンソールを追加しています"
+
+#: cinder/console/manager.py:97
+#, python-format
+msgid "Tried to remove non-existant console %(console_id)s."
+msgstr "存在しないコンソール %(console_id)s を削除しようとしました"
+
+#: cinder/console/vmrc_manager.py:122
+#, python-format
+msgid "Tried to remove non-existent console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:125
+#, python-format
+msgid "Removing console %(console_id)s."
+msgstr ""
+
+#: cinder/console/xvp.py:98
+msgid "Rebuilding xvp conf"
+msgstr "xvp 設定を再構築しています"
+
+#: cinder/console/xvp.py:116
+#, python-format
+msgid "Re-wrote %s"
+msgstr "%s を再度書き込みました"
+
+#: cinder/console/xvp.py:121
+msgid "Stopping xvp"
+msgstr "xvp を停止しています"
+
+#: cinder/console/xvp.py:134
+msgid "Starting xvp"
+msgstr "xvp を開始しています"
+
+#: cinder/console/xvp.py:141
+#, python-format
+msgid "Error starting xvp: %s"
+msgstr "xvp の開始中にエラー: %s"
+
+#: cinder/console/xvp.py:144
+msgid "Restarting xvp"
+msgstr "xvp を再起動しています"
+
+#: cinder/console/xvp.py:146
+msgid "xvp not running..."
+msgstr "xvp が実行されていません…"
+
+#: cinder/consoleauth/manager.py:63
+#, python-format
+msgid "Deleting Expired Token: (%s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:75
+#, python-format
+msgid "Received Token: %(token)s, %(token_dict)s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:79
+#, python-format
+msgid "Checking Token: %(token)s, %(token_valid)s)"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:57
+msgid "Use of empty request context is deprecated"
+msgstr "Request context を空とすることは非推奨です。"
+
+#: cinder/db/sqlalchemy/api.py:198
+#, python-format
+msgid "Unrecognized read_deleted value '%s'"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:516 cinder/db/sqlalchemy/api.py:551
+#, python-format
+msgid "No ComputeNode for %(host)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4019 cinder/db/sqlalchemy/api.py:4045
+#, python-format
+msgid "No backend config with id %(sm_backend_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4103
+#, python-format
+msgid "No sm_flavor called %(sm_flavor)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4147
+#, python-format
+msgid "No sm_volume with id %(volume_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:66
+msgid "python-migrate is not installed. Exiting."
+msgstr "python-migrate がインストールされていません。終了します。"
+
+#: cinder/db/sqlalchemy/migration.py:78
+msgid "version should be an integer"
+msgstr ""
+
+#: cinder/db/sqlalchemy/session.py:137
+#, python-format
+msgid "SQL connection failed. %s attempts left."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:48
+msgid "interface column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:80
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:54
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:48
+#, python-format
+msgid "Table |%s| not created!"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:87
+msgid "VIF column not added to fixed_ips table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:97
+#, python-format
+msgid "join list for moving mac_addresses |%s|"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:39
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:60
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:99
+msgid "foreign key constraint couldn't be added"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:58
+msgid "foreign key constraint couldn't be dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py:34
+msgid "priority column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:41
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:42
+#: cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py:56
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:68
+msgid "foreign key constraint couldn't be removed"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py:34
+msgid "progress column not added to instances table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py:97
+#, python-format
+msgid ""
+"Could not cast flavorid to integer: %s. Set flavorid to an integer-like "
+"string to downgrade."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:69
+msgid "instance_info_caches tables not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py:41
+msgid "progress column not added to compute_nodes table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:76
+msgid "dns_domains table not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:60
+msgid "quota_classes table not dropped"
+msgstr ""
+
+#: cinder/image/glance.py:147
+msgid "Connection error contacting glance server, retrying"
+msgstr ""
+
+#: cinder/image/glance.py:153 cinder/network/quantum/melange_connection.py:104
+msgid "Maximum attempts reached"
+msgstr ""
+
+#: cinder/image/glance.py:278
+#, python-format
+msgid "Creating image in Glance. Metadata passed in %s"
+msgstr ""
+
+#: cinder/image/glance.py:281
+#, python-format
+msgid "Metadata after formatting for Glance %s"
+msgstr ""
+
+#: cinder/image/glance.py:289
+#, python-format
+msgid "Metadata returned from Glance formatted for Base %s"
+msgstr ""
+
+#: cinder/image/glance.py:331 cinder/image/glance.py:335
+msgid "Not the image owner"
+msgstr ""
+
+#: cinder/image/glance.py:410
+#, python-format
+msgid "%(timestamp)s does not follow any of the signatures: %(iso_formats)s"
+msgstr ""
+
+#: cinder/image/s3.py:309
+#, python-format
+msgid "Failed to download %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:328
+#, python-format
+msgid "Failed to decrypt %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:340
+#, python-format
+msgid "Failed to untar %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:353
+#, python-format
+msgid "Failed to upload %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:379
+#, python-format
+msgid "Failed to decrypt private key: %s"
+msgstr "プライベートキーの復号に失敗しました: %s"
+
+#: cinder/image/s3.py:387
+#, python-format
+msgid "Failed to decrypt initialization vector: %s"
+msgstr "初期化ベクタの復号に失敗しました: %s"
+
+#: cinder/image/s3.py:398
+#, python-format
+msgid "Failed to decrypt image file %(image_file)s: %(err)s"
+msgstr "イメージファイル %(image_file)s の復号に失敗しました: %(err)s"
+
+#: cinder/image/s3.py:410
+msgid "Unsafe filenames in image"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:38 cinder/ipv6/rfc2462.py:34
+#, python-format
+msgid "Bad mac for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:40 cinder/ipv6/rfc2462.py:36
+#, python-format
+msgid "Bad prefix for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:42
+#, python-format
+msgid "Bad project_id for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/network/ldapdns.py:321
+msgid "This driver only supports type 'a' entries."
+msgstr ""
+
+#: cinder/network/linux_net.py:166
+#, python-format
+msgid "Attempted to remove chain %s which does not exist"
+msgstr ""
+
+#: cinder/network/linux_net.py:192
+#, python-format
+msgid "Unknown chain: %r"
+msgstr ""
+
+#: cinder/network/linux_net.py:215
+#, python-format
+msgid ""
+"Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r "
+"%(top)r"
+msgstr ""
+
+#: cinder/network/linux_net.py:335
+msgid "IPTablesManager.apply completed with success"
+msgstr ""
+
+#: cinder/network/linux_net.py:694
+#, python-format
+msgid "Hupping dnsmasq threw %s"
+msgstr "dnsmasqに対してhupを送信しましたが %s が発生しました。"
+
+#: cinder/network/linux_net.py:696
+#, python-format
+msgid "Pid %d is stale, relaunching dnsmasq"
+msgstr "Pid %d は無効です。dnsmasqを再実行します。"
+
+#: cinder/network/linux_net.py:756
+#, python-format
+msgid "killing radvd threw %s"
+msgstr "radvd  停止が %s 例外を発行しました"
+
+#: cinder/network/linux_net.py:758
+#, python-format
+msgid "Pid %d is stale, relaunching radvd"
+msgstr "Pid %d がストールしているので radvd を再実行しています…"
+
+#: cinder/network/linux_net.py:967
+#, python-format
+msgid "Starting VLAN inteface %s"
+msgstr "VLANインタフェース %s を開始します。"
+
+#: cinder/network/linux_net.py:999
+#, python-format
+msgid "Starting Bridge interface for %s"
+msgstr "%s 用のブリッジインタフェースを開始します。"
+
+#: cinder/network/linux_net.py:1142
+#, fuzzy, python-format
+msgid "Starting bridge %s "
+msgstr "%s 用のブリッジインタフェースを開始します。"
+
+#: cinder/network/linux_net.py:1149
+#, fuzzy, python-format
+msgid "Done starting bridge %s"
+msgstr "xvp の開始中にエラー: %s"
+
+#: cinder/network/linux_net.py:1167
+#, python-format
+msgid "Failed unplugging gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/linux_net.py:1170
+#, python-format
+msgid "Unplugged gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/manager.py:291
+#, python-format
+msgid "Fixed ip %(fixed_ip_id)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:300 cinder/network/manager.py:496
+#, python-format
+msgid "Interface %(interface)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:315
+#, python-format
+msgid "floating IP allocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:353
+#, python-format
+msgid "floating IP deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:386
+#, python-format
+msgid "Address |%(address)s| is not allocated"
+msgstr ""
+
+#: cinder/network/manager.py:390
+#, python-format
+msgid "Address |%(address)s| is not allocated to your project |%(project)s|"
+msgstr ""
+
+#: cinder/network/manager.py:402
+#, python-format
+msgid "Quota exceeded for %s, tried to allocate address"
+msgstr ""
+
+#: cinder/network/manager.py:614
+#, python-format
+msgid ""
+"Database inconsistency: DNS domain |%s| is registered in the Cinder db but "
+"not visible to either the floating or instance DNS driver. It will be "
+"ignored."
+msgstr ""
+
+#: cinder/network/manager.py:660
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing zone to |%(av_zone)s|."
+msgstr ""
+
+#: cinder/network/manager.py:670
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing project to |%(project)s|."
+msgstr ""
+
+#: cinder/network/manager.py:778
+#, python-format
+msgid "Disassociated %s stale fixed ip(s)"
+msgstr ""
+
+#: cinder/network/manager.py:782
+msgid "setting network host"
+msgstr "ネットワークホストの設定をします。"
+
+#: cinder/network/manager.py:896
+#, python-format
+msgid "network allocations for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:901
+#, python-format
+msgid "networks retrieved for instance |%(instance_id)s|: |%(networks)s|"
+msgstr ""
+
+#: cinder/network/manager.py:930
+#, python-format
+msgid "network deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:1152
+#, python-format
+msgid ""
+"instance-dns-zone is |%(domain)s|, which is in availability zone "
+"|%(zone)s|. Instance |%(instance)s| is in zone |%(zone2)s|. No DNS record"
+" will be created."
+msgstr ""
+
+#: cinder/network/manager.py:1227
+#, python-format
+msgid "Unable to release %s because vif doesn't exist."
+msgstr ""
+
+#: cinder/network/manager.py:1244
+#, python-format
+msgid "Leased IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1248
+#, python-format
+msgid "IP %s leased that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1256
+#, python-format
+msgid "IP |%s| leased that isn't allocated"
+msgstr ""
+
+#: cinder/network/manager.py:1261
+#, python-format
+msgid "Released IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1265
+#, python-format
+msgid "IP %s released that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1268
+#, python-format
+msgid "IP %s released that was not leased"
+msgstr "リースしていないIP %s が開放されました。"
+
+#: cinder/network/manager.py:1331
+msgid "cidr already in use"
+msgstr ""
+
+#: cinder/network/manager.py:1334
+#, python-format
+msgid "requested cidr (%(cidr)s) conflicts with existing supernet (%(super)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1345
+#, python-format
+msgid ""
+"requested cidr (%(cidr)s) conflicts with existing smaller cidr "
+"(%(smaller)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1404
+msgid "Network already exists!"
+msgstr ""
+
+#: cinder/network/manager.py:1423
+#, python-format
+msgid "Network must be disassociated from project %s before delete"
+msgstr ""
+
+#: cinder/network/manager.py:1832
+msgid ""
+"The sum between the number of networks and the vlan start cannot be "
+"greater than 4094"
+msgstr "ネットワークの数とVLANの開始番号の和は 4094 より大きくできません。"
+
+#: cinder/network/manager.py:1839
+#, python-format
+msgid ""
+"The network range is not big enough to fit %(num_networks)s. Network size"
+" is %(network_size)s"
+msgstr ""
+
+#: cinder/network/minidns.py:65
+msgid "This driver only supports type 'a'"
+msgstr ""
+
+#: cinder/network/quantum/client.py:154
+msgid "Tenant ID not set"
+msgstr ""
+
+#: cinder/network/quantum/client.py:180
+#, python-format
+msgid "Quantum Client Request: %(method)s %(action)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:196
+#, python-format
+msgid "Quantum entity not found: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:206
+#, python-format
+msgid "Server %(status_code)s error: %(data)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:210
+#, python-format
+msgid "Unable to connect to server. Got error: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:228
+#, python-format
+msgid "unable to deserialize object of type = '%s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:162
+msgid "QuantumManager does not use 'multi_host' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:166
+msgid "QuantumManager requires that only one network is created per call"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:176
+msgid "QuantumManager does not use 'vlan_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:182
+msgid "QuantumManager does not use 'vpn_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:186
+msgid "QuantumManager does not use 'bridge' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:190
+msgid "QuantumManager does not use 'bridge_interface' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:195
+msgid "QuantumManager requires a valid (.1) gateway address."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:204
+#, python-format
+msgid ""
+"Unable to find existing quantum network for tenant '%(q_tenant_id)s' with"
+" net-id '%(quantum_net_id)s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:301
+#, python-format
+msgid "network allocations for instance %s"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:588
+#, python-format
+msgid ""
+"port deallocation failed for instance: |%(instance_id)s|, port_id: "
+"|%(port_id)s|"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:606
+#, python-format
+msgid ""
+"ipam deallocation failed for instance: |%(instance_id)s|, vif_uuid: "
+"|%(vif_uuid)s|"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:96
+#, python-format
+msgid "Server returned error: %s"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:98
+msgid "Connection error contacting melange service, retrying"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:108
+#, python-format
+msgid ""
+"allocate IP on network |%(network_id)s| belonging to "
+"|%(network_tenant_id)s| to this vif |%(vif_id)s| with mac "
+"|%(mac_address)s| belonging to |%(project_id)s| "
+msgstr ""
+
+#: cinder/network/quantum/melange_ipam_lib.py:133
+msgid "get_project_and_global_net_ids must be called with a non-null project_id"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:75
+msgid "Error creating network entry"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:90
+#, python-format
+msgid "No network with net_id = %s"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:221
+#, python-format
+msgid "No fixed IPs to deallocate for vif %s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:99
+#, python-format
+msgid "Connecting interface %(interface_id)s to net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:113
+#, python-format
+msgid "Deleting port %(port_id)s on net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/notifier/api.py:115
+#, python-format
+msgid "%s not in valid priorities"
+msgstr ""
+
+#: cinder/notifier/api.py:130
+#, python-format
+msgid ""
+"Problem '%(e)s' attempting to send to notification system. "
+"Payload=%(payload)s"
+msgstr ""
+
+#: cinder/notifier/list_notifier.py:65
+#, python-format
+msgid "Problem '%(e)s' attempting to send to notification driver %(driver)s."
+msgstr ""
+
+#: cinder/notifier/rabbit_notifier.py:46
+#, python-format
+msgid "Could not send notification to %(topic)s. Payload=%(message)s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:146
+#, python-format
+msgid "Returning exception %s to caller"
+msgstr "呼び出し元に 例外 %s を返却します。"
+
+#: cinder/rpc/amqp.py:188
+#, python-format
+msgid "unpacked context: %s"
+msgstr "context  %s をアンパックしました。"
+
+#: cinder/rpc/amqp.py:231
+#, python-format
+msgid "received %s"
+msgstr "受信: %s"
+
+#: cinder/rpc/amqp.py:236
+#, python-format
+msgid "no method for message: %s"
+msgstr "メッセージ %s に対するメソッドが存在しません。"
+
+#: cinder/rpc/amqp.py:237
+#, python-format
+msgid "No method for message: %s"
+msgstr "メッセージ %s に対するメソッドが存在しません。"
+
+#: cinder/rpc/amqp.py:321
+#, python-format
+msgid "Making asynchronous call on %s ..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:324
+#, python-format
+msgid "MSG_ID is %s"
+msgstr "MSG_IDは %s です。"
+
+#: cinder/rpc/amqp.py:346
+#, python-format
+msgid "Making asynchronous cast on %s..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:354
+msgid "Making asynchronous fanout cast..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:379
+#, python-format
+msgid "Sending notification on %s..."
+msgstr ""
+
+#: cinder/rpc/common.py:54
+#, python-format
+msgid ""
+"Remote error: %(exc_type)s %(value)s\n"
+"%(traceback)s."
+msgstr ""
+
+#: cinder/rpc/common.py:71
+msgid "Timeout while waiting on RPC response."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:111
+msgid "Failed to process message... skipping it."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:407
+#, python-format
+msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:430
+#, python-format
+msgid "Connected to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:466
+#, python-format
+msgid ""
+"Unable to connect to AMQP server on %(hostname)s:%(port)d after "
+"%(max_retries)d tries: %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:482
+#, python-format
+msgid ""
+"AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying "
+"again in %(sleep_time)d seconds."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:533 cinder/rpc/impl_qpid.py:385
+#, python-format
+msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:551 cinder/rpc/impl_qpid.py:400
+#, python-format
+msgid "Timed out waiting for RPC response: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:555 cinder/rpc/impl_qpid.py:404
+#, python-format
+msgid "Failed to consume message from queue: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:589 cinder/rpc/impl_qpid.py:434
+#, python-format
+msgid "Failed to publish message to topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:341
+#, python-format
+msgid "Unable to connect to AMQP server: %s "
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:346
+#, python-format
+msgid "Connected to AMQP server on %s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:354
+msgid "Re-established AMQP queues"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:412
+msgid "Error processing message.  Skipping it."
+msgstr ""
+
+#: cinder/scheduler/chance.py:47 cinder/scheduler/simple.py:91
+#: cinder/scheduler/simple.py:143
+msgid "Is the appropriate service running?"
+msgstr ""
+
+#: cinder/scheduler/chance.py:52
+msgid "Could not find another compute"
+msgstr ""
+
+#: cinder/scheduler/driver.py:63
+#, python-format
+msgid "Casted '%(method)s' to volume '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:80
+#, python-format
+msgid "Casted '%(method)s' to compute '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:89
+#, python-format
+msgid "Casted '%(method)s' to network '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:107
+#, python-format
+msgid "Casted '%(method)s' to %(topic)s '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:181
+msgid "Must implement a fallback schedule"
+msgstr "予備の(fallback)スケジューラを実装する必要があります。"
+
+#: cinder/scheduler/driver.py:185
+msgid "Driver must implement schedule_prep_resize"
+msgstr ""
+
+#: cinder/scheduler/driver.py:190
+msgid "Driver must implement schedule_run_instance"
+msgstr ""
+
+#: cinder/scheduler/driver.py:325
+msgid "Block migration can not be used with shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:330
+msgid "Live migration can not be used without shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:367 cinder/scheduler/driver.py:457
+#, python-format
+msgid "host %(dest)s is not compatible with original host %(src)s."
+msgstr ""
+
+#: cinder/scheduler/driver.py:416
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"memory(host:%(avail)s <= instance:%(mem_inst)s)"
+msgstr ""
+
+#: cinder/scheduler/driver.py:472
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"disk(host:%(available)s <= instance:%(necessary)s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:51
+#, python-format
+msgid "No host selection for %s defined."
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:64
+#, python-format
+msgid "Attempting to build %(num_instances)d instance(s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:157
+msgid "Scheduler only understands Compute nodes (for now)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:199
+#, python-format
+msgid "Filtered %(hosts)s"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:209
+#, python-format
+msgid "Weighted %(weighted_host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:144
+#, python-format
+msgid "Host filter fails for ignored host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:151
+#, python-format
+msgid "Host filter fails for non-forced host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:157
+#, python-format
+msgid "Host filter function %(func)s failed for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:163
+#, python-format
+msgid "Host filter passes for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:272
+#, python-format
+msgid "Received %(service_name)s service update from %(host)s."
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:313
+msgid "host_manager only implemented for 'compute'"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:323
+#, python-format
+msgid "No service for compute ID %s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:85
+#, python-format
+msgid ""
+"Driver Method %(driver_method_name)s missing: %(e)s. Reverting to "
+"schedule()"
+msgstr ""
+
+#: cinder/scheduler/manager.py:150
+#, python-format
+msgid "Failed to schedule_%(method)s: %(ex)s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:159
+#, python-format
+msgid "Setting instance %(instance_uuid)s to %(state)s state."
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:66
+#, python-format
+msgid "Could not stat scheduler options file %(filename)s: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:75
+#, python-format
+msgid "Could not decode scheduler options: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/simple.py:87
+msgid "Not enough allocatable CPU cores remaining"
+msgstr ""
+
+#: cinder/scheduler/simple.py:137
+msgid "Not enough allocatable volume gigabytes remaining"
+msgstr ""
+
+#: cinder/scheduler/filters/core_filter.py:45
+msgid "VCPUs not set; assuming CPU collection broken"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:72
+#, python-format
+msgid "Faking execution of cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:80
+#, python-format
+msgid "Faked command matched %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:96
+#, python-format
+msgid "Faked command raised an exception %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:101
+#, python-format
+msgid "Reply to faked command is stdout='%(stdout)s' stderr='%(stderr)s'"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:784
+msgid "Please extend mock libvirt module to support flags"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:790
+msgid "Please extend fake libvirt module to support this auth method"
+msgstr ""
+
+#: cinder/tests/test_compute.py:365 cinder/tests/test_compute.py:1419
+#, python-format
+msgid "Running instances: %s"
+msgstr "インスタンス %s は実行中です。"
+
+#: cinder/tests/test_compute.py:371
+#, python-format
+msgid "After terminating instances: %s"
+msgstr "インスタンス %s を終了した後です。"
+
+#: cinder/tests/test_compute.py:589
+msgid "Internal error"
+msgstr ""
+
+#: cinder/tests/test_compute.py:1430
+#, python-format
+msgid "After force-killing instances: %s"
+msgstr ""
+
+#: cinder/tests/test_misc.py:92
+#, python-format
+msgid ""
+"The following migrations are missing a downgrade:\n"
+"\t%s"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:169
+msgid "id"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:170
+msgid "IPv4"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:171
+msgid "IPv6"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:172
+msgid "start address"
+msgstr "開始アドレス"
+
+#: cinder/tests/test_cinder_manage.py:173
+msgid "DNS1"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:174
+msgid "DNS2"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:175
+msgid "VlanID"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:176
+msgid "project"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:177
+msgid "uuid"
+msgstr ""
+
+#: cinder/tests/test_volume.py:216
+#, python-format
+msgid "Target %s allocated"
+msgstr "ターゲット %s をアロケートしました。"
+
+#: cinder/tests/test_volume.py:468
+#, python-format
+msgid "Cannot confirm exported volume id:%s."
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:58
+#, python-format
+msgid "Given data: %s"
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:59
+#, python-format
+msgid "Result data: %s"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:626
+#, python-format
+msgid "Creating files in %s to simulate guest agent"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:637
+#, python-format
+msgid "Removing simulated guest agent files in %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/test_servers.py:2144
+#, python-format
+msgid "Quota exceeded: code=%(code)s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:57
+#, python-format
+msgid "_create: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:66
+#, python-format
+msgid "_delete: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:75
+#, python-format
+msgid "_get: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:85
+#, python-format
+msgid "_get_all: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:125
+#, python-format
+msgid "test_snapshot_create: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:134
+#, python-format
+msgid "test_snapshot_create: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:156
+#, python-format
+msgid "test_snapshot_create_force: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:165
+#, python-format
+msgid "test_snapshot_create_force: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:205
+#, python-format
+msgid "test_snapshot_show: resp=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:231
+#, python-format
+msgid "test_snapshot_detail: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/integrated/test_login.py:31
+#, python-format
+msgid "flavor: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:38
+#, python-format
+msgid ""
+"%(message)s\n"
+"Status Code: %(_status)s\n"
+"Body: %(_body)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:47
+msgid "Authentication error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:55
+msgid "Authorization error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:63
+msgid "Item not found"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:105
+#, python-format
+msgid "Doing %(method)s on %(relative_url)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:107
+#, python-format
+msgid "Body: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:125
+#, python-format
+msgid "%(auth_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:151
+#, python-format
+msgid "%(relative_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:161
+msgid "Unexpected status code"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:168
+#, python-format
+msgid "Decoding JSON: %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:133
+#, python-format
+msgid "Nested received %(queue)s, %(value)s"
+msgstr "Nested received %(queue)s, %(value)s"
+
+#: cinder/tests/rpc/common.py:142
+#, python-format
+msgid "Nested return %s"
+msgstr "ネストした戻り値: %s"
+
+#: cinder/tests/rpc/common.py:160
+msgid "RPC backend does not support timeouts"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:227 cinder/tests/rpc/common.py:233
+#, python-format
+msgid "Received %s"
+msgstr "%s を受信。"
+
+#: cinder/virt/connection.py:85
+msgid "Failed to open connection to the hypervisor"
+msgstr "ハイパーバイザへの接続に失敗しました。"
+
+#: cinder/virt/fake.py:270 cinder/virt/xenapi_conn.py:396
+#: cinder/virt/baremetal/proxy.py:716 cinder/virt/libvirt/connection.py:2045
+#, python-format
+msgid "Compute_service record created for %s "
+msgstr ""
+
+#: cinder/virt/fake.py:273 cinder/virt/xenapi_conn.py:399
+#: cinder/virt/baremetal/proxy.py:720 cinder/virt/libvirt/connection.py:2048
+#, python-format
+msgid "Compute_service record updated for %s "
+msgstr ""
+
+#: cinder/virt/firewall.py:130
+#, python-format
+msgid "Attempted to unfilter instance %s which is not filtered"
+msgstr "フィルタされていないインスタンス %s のフィルタ解除を試行しました"
+
+#: cinder/virt/firewall.py:137
+#, python-format
+msgid "Filters added to instance %s"
+msgstr ""
+
+#: cinder/virt/firewall.py:139
+msgid "Provider Firewall Rules refreshed"
+msgstr ""
+
+#: cinder/virt/firewall.py:291
+#, python-format
+msgid "Adding security group rule: %r"
+msgstr ""
+
+#: cinder/virt/firewall.py:403 cinder/virt/xenapi/firewall.py:87
+#, python-format
+msgid "Adding provider rule: %s"
+msgstr ""
+
+#: cinder/virt/images.py:86
+msgid "'qemu-img info' parsing failed."
+msgstr ""
+
+#: cinder/virt/images.py:92
+#, python-format
+msgid "fmt=%(fmt)s backed by: %(backing_file)s"
+msgstr ""
+
+#: cinder/virt/images.py:104
+#, python-format
+msgid "Converted to raw, but format is now %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:105
+msgid ""
+"Must specify vmwareapi_host_ip,vmwareapi_host_username and "
+"vmwareapi_host_password to useconnection_type=vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:276
+#, python-format
+msgid "In vmwareapi:_create_session, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:359
+#, python-format
+msgid "In vmwareapi:_call_method, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:398
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: success"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:404
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: error %(error_info)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:409
+#, python-format
+msgid "In vmwareapi:_poll_task, Got this error %s"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:140
+msgid ""
+"Must specify xenapi_connection_url, xenapi_connection_username "
+"(optionally), and xenapi_connection_password to use "
+"connection_type=xenapi"
+msgstr ""
+"connection_type=xenapi を使用するには、以下の指定が必要です: xenapi_connection_url, "
+"xenapi_connection_username (オプション), xenapi_connection_password"
+
+#: cinder/virt/xenapi_conn.py:329 cinder/virt/libvirt/connection.py:472
+msgid "Could not determine iscsi initiator name"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:460
+msgid "Host startup on XenServer is not supported."
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:489
+msgid "Unable to log in to XenAPI (is the Dom0 disk full?)"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:527
+msgid "Host is member of a pool, but DB says otherwise"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:599 cinder/virt/xenapi_conn.py:612
+#, python-format
+msgid "Got exception: %s"
+msgstr "例外 %s が発生しました。"
+
+#: cinder/virt/baremetal/dom.py:93
+msgid "No domains exist."
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:95
+#, python-format
+msgid "============= initial domains =========== : %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:99
+msgid "Building domain: to be removed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:103
+msgid "Not running domain: remove"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:111
+msgid "domain running on an unknown node: discarded"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:127
+#, python-format
+msgid "No such domain (%s)"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:134
+#, python-format
+msgid "Failed power down Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:143
+msgid "deactivate -> activate fails"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:153
+msgid "destroy_domain: no such domain"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:154
+#, python-format
+msgid "No such domain %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:161
+#, python-format
+msgid "Domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:163
+#, python-format
+msgid "Nodes: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:166
+#, python-format
+msgid "After storing domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:169
+msgid "deactivation/removing domain failed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:176
+msgid "===== Domain is being created ====="
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:179
+msgid "Same domain name already exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:181
+msgid "create_domain: before get_idle_node"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:198
+#, python-format
+msgid "Created new domain: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:213
+#, python-format
+msgid "Failed to boot Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:222
+msgid "No such domain exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:226
+#, python-format
+msgid "change_domain_state: to new state %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:233
+#, python-format
+msgid "Stored fake domains to the file: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:244
+msgid "domain does not exist"
+msgstr ""
+
+#: cinder/virt/baremetal/nodes.py:42
+#, python-format
+msgid "Unknown baremetal driver %(d)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:148
+#, python-format
+msgid "Error encountered when destroying instance '%(name)s': %(ex)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:162
+#, python-format
+msgid "instance %(instance_name)s: deleting instance files %(target)s"
+msgstr "インスタンス %(instance_name)s: インスタンスファイル群 %(target)s を削除しています"
+
+#: cinder/virt/baremetal/proxy.py:189
+#, python-format
+msgid "instance %s: rebooted"
+msgstr "インスタンス%s: 再起動しました。"
+
+#: cinder/virt/baremetal/proxy.py:192
+msgid "_wait_for_reboot failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:222
+#, python-format
+msgid "instance %s: rescued"
+msgstr "インスタンス %s: rescued"
+
+#: cinder/virt/baremetal/proxy.py:225
+msgid "_wait_for_rescue failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:242
+msgid "<============= spawn of baremetal =============>"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:255
+#, python-format
+msgid "instance %s: is building"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:260
+msgid "Key is injected but instance is not running yet"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:265
+#, python-format
+msgid "instance %s: booted"
+msgstr "インスタンス %s: 起動しました。"
+
+#: cinder/virt/baremetal/proxy.py:268
+#, python-format
+msgid "~~~~~~ current state = %s ~~~~~~"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:269
+#, python-format
+msgid "instance %s spawned successfully"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:272
+#, python-format
+msgid "instance %s:not booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:274
+msgid "Bremetal assignment is overcommitted."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:354
+#, python-format
+msgid "instance %s: Creating image"
+msgstr "インスタンス %s のイメージを生成します。"
+
+#: cinder/virt/baremetal/proxy.py:473
+#, python-format
+msgid "instance %(inst_name)s: injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:484
+#, python-format
+msgid ""
+"instance %(inst_name)s: ignoring error injecting data into image "
+"%(img_id)s (%(e)s)"
+msgstr "インスタンス %(inst_name)s: イメージ %(img_id)s へのデータ埋め込みのエラーを無視しています (%(e)s)"
+
+#: cinder/virt/baremetal/proxy.py:529
+#, python-format
+msgid "instance %s: starting toXML method"
+msgstr "インスタンス %s: toXML メソッドを開始。"
+
+#: cinder/virt/baremetal/proxy.py:531
+#, python-format
+msgid "instance %s: finished toXML method"
+msgstr "インスタンス %s: toXML メソッドを完了。"
+
+#: cinder/virt/baremetal/proxy.py:574 cinder/virt/libvirt/connection.py:1815
+msgid ""
+"Cannot get the number of cpu, because this function is not implemented "
+"for this platform. This error can be safely ignored for now."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:714
+#, python-format
+msgid "#### RLK: cpu_arch = %s "
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:746
+msgid "Updating!"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:773 cinder/virt/libvirt/connection.py:2609
+#: cinder/virt/xenapi/host.py:129
+msgid "Updating host stats"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:185
+msgid "free_node...."
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:216
+#, python-format
+msgid "deactivate_node is called for node_id = %(id)s node_ip = %(ip)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:221
+msgid "status of node is set to 0"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:232
+msgid "rootfs is already removed"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:264
+msgid "Before ping to the bare-metal node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:275
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is ready"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:279
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is not ready, out_msg=%(out_msg)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:292
+msgid "Noting to do for tilera nodes: vmlinux is in CF"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:316
+msgid "activate_node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:330
+msgid "Node is unknown error state."
+msgstr ""
+
+#: cinder/virt/disk/api.py:165
+msgid "no capable image handler configured"
+msgstr ""
+
+#: cinder/virt/disk/api.py:178
+#, python-format
+msgid "unknown disk image handler: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:189
+msgid "image already mounted"
+msgstr ""
+
+#: cinder/virt/disk/api.py:276 cinder/virt/disk/guestfs.py:64
+#: cinder/virt/disk/guestfs.py:78 cinder/virt/disk/mount.py:100
+#, python-format
+msgid "Failed to mount filesystem: %s"
+msgstr "ファイルシステム %s のマウントに失敗しました。"
+
+#: cinder/virt/disk/api.py:291
+#, python-format
+msgid "Failed to remove container: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:441
+#, python-format
+msgid "User %(username)s not found in password file."
+msgstr ""
+
+#: cinder/virt/disk/api.py:457
+#, python-format
+msgid "User %(username)s not found in shadow file."
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:39
+#, python-format
+msgid "unsupported partition: %s"
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:77
+msgid "unknown guestmount error"
+msgstr ""
+
+#: cinder/virt/disk/loop.py:30
+#, python-format
+msgid "Could not attach image to loopback: %s"
+msgstr "イメージをループバック %s にアタッチできません。"
+
+#: cinder/virt/disk/mount.py:76
+msgid "no partitions found"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:77
+#, python-format
+msgid "Failed to map partitions: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:58
+msgid "nbd unavailable: module not loaded"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:63
+msgid "No free nbd devices"
+msgstr "空きの nbd デバイスがありません"
+
+#: cinder/virt/disk/nbd.py:81
+#, python-format
+msgid "qemu-nbd error: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:93
+#, python-format
+msgid "nbd device %s did not show up"
+msgstr "nbd デバイス %s が出現しません"
+
+#: cinder/virt/libvirt/connection.py:265
+#, python-format
+msgid "Connecting to libvirt: %s"
+msgstr "libvirt %s へ接続します。"
+
+#: cinder/virt/libvirt/connection.py:286
+msgid "Connection to libvirt broke"
+msgstr "libvirtへの接続が切れています。"
+
+#: cinder/virt/libvirt/connection.py:388
+#, python-format
+msgid "Error from libvirt during destroy. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:400
+#, python-format
+msgid ""
+"Error from libvirt during saved instance removal. Code=%(errcode)s "
+"Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:411
+#, python-format
+msgid "Error from libvirt during undefine. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:423
+msgid "Instance destroyed successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:435
+#, python-format
+msgid "Error from libvirt during unfilter. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:461
+#, python-format
+msgid "Deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:554
+msgid "attaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:567
+msgid "detaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:692
+#, fuzzy, python-format
+msgid "Instance soft rebooted successfully."
+msgstr "インスタンス%s: 再起動しました。"
+
+#: cinder/virt/libvirt/connection.py:696
+msgid "Failed to soft reboot instance."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:725
+msgid "Instance shutdown successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:761 cinder/virt/libvirt/connection.py:905
+msgid "During reboot, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:766
+msgid "Instance rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:867 cinder/virt/xenapi/vmops.py:1358
+#, python-format
+msgid ""
+"Found %(migration_count)d unconfirmed migrations older than "
+"%(confirm_window)d seconds"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:871
+#, python-format
+msgid "Automatically confirming migration %d"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:896
+msgid "Instance is running"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:910
+msgid "Instance spawned successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:926
+#, python-format
+msgid "data: %(data)r, fpath: %(fpath)r"
+msgstr "データ: %(data)r, ファイルパス: %(fpath)r"
+
+#: cinder/virt/libvirt/connection.py:978
+msgid "Guest does not have a console available"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1020
+#, python-format
+msgid "Path '%(path)s' supports direct I/O"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1024
+#, python-format
+msgid "Path '%(path)s' does not support direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1028 cinder/virt/libvirt/connection.py:1032
+#, python-format
+msgid "Error on '%(path)s' while checking direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1153
+msgid "Creating image"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1339
+#, python-format
+msgid "Injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1349
+#, python-format
+msgid "Ignoring error injecting data into image %(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1381
+#, python-format
+msgid "block_device_list %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1658
+msgid "Starting toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1662
+msgid "Finished toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1679
+#, python-format
+msgid ""
+"Error from libvirt while looking up %(instance_name)s: [Error Code "
+"%(error_code)s] %(ex)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1920
+msgid "libvirt version is too old (does not support getVersion)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1942
+#, python-format
+msgid "'<cpu>' must be 1, but %d\n"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1969
+#, python-format
+msgid "topology (%(topology)s) must have %(ks)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2067
+#, python-format
+msgid ""
+"Instance launched has CPU info:\n"
+"%s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2079
+#, python-format
+msgid ""
+"CPU doesn't have compatibility.\n"
+"\n"
+"%(ret)s\n"
+"\n"
+"Refer to %(u)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2136
+#, python-format
+msgid "Timeout migrating for %s. nwfilter not found."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2352
+#, python-format
+msgid "skipping %(path)s since it looks like volume"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2407
+#, python-format
+msgid "Getting disk size of %(i_name)s: %(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2458
+#, python-format
+msgid "Instance %s: Starting migrate_disk_and_power_off"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2513
+msgid "During wait running, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2518
+msgid "Instance running successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2525
+#, python-format
+msgid "Instance %s: Starting finish_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2565
+#, python-format
+msgid "Instance %s: Starting finish_revert_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:42
+msgid ""
+"Libvirt module could not be loaded. NWFilterFirewall will not work "
+"correctly."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:93
+msgid "Called setup_basic_filtering in nwfilter"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:101
+msgid "Ensuring static filters"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:171
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:217
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) for%(name)s is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:233
+msgid "iptables firewall: Setup Basic Filtering"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:252
+msgid "Attempted to unfilter instance which is not filtered"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:170
+#, python-format
+msgid "%s is a valid instance name"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:173
+#, python-format
+msgid "%s has a disk file"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:175
+#, python-format
+msgid "Instance %(instance)s is backed by %(backing)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:186
+#, python-format
+msgid ""
+"Instance %(instance)s is using a backing file %(backing)s which does not "
+"appear in the image service"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:237
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification failed"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:247
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification skipped, no hash stored"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:266
+#, python-format
+msgid "Cannot remove %(base_file)s, it does not exist"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:278
+#, python-format
+msgid "Base file too young to remove: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:281
+#, python-format
+msgid "Removing base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:288
+#, python-format
+msgid "Failed to remove %(base_file)s, error was %(error)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:299
+#, python-format
+msgid "%(id)s (%(base_file)s): checking"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:318
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): in use: on this node %(local)d local, %(remote)d "
+"on other nodes"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:330
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): warning -- an absent base file is in use! "
+"instances: %(instance_list)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:338
+#, python-format
+msgid "%(id)s (%(base_file)s): in use on (%(remote)d on other nodes)"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:348
+#, python-format
+msgid "%(id)s (%(base_file)s): image is not in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:354
+#, python-format
+msgid "%(id)s (%(base_file)s): image is in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:377
+#, python-format
+msgid "Skipping verification, no base directory at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:381
+msgid "Verify base images"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:388
+#, python-format
+msgid "Image id %(id)s yields fingerprint %(fingerprint)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:406
+#, python-format
+msgid "Unknown base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:411
+#, python-format
+msgid "Active base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:414
+#, python-format
+msgid "Corrupt base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:418
+#, python-format
+msgid "Removable base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:426
+msgid "Verification complete"
+msgstr ""
+
+#: cinder/virt/libvirt/utils.py:264
+msgid "Unable to find an open port"
+msgstr "開いたポートが見つかりません"
+
+#: cinder/virt/libvirt/vif.py:90
+#, python-format
+msgid "Ensuring vlan %(vlan)s and bridge %(bridge)s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:99
+#, python-format
+msgid "Ensuring bridge %s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:165 cinder/virt/libvirt/vif.py:220
+#, python-format
+msgid "Failed while unplugging vif of instance '%s'"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:163
+#, python-format
+msgid "iSCSI device not found at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:166
+#, python-format
+msgid ""
+"ISCSI volume not yet found at: %(mount_device)s. Will rescan & retry.  "
+"Try number: %(tries)s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:178
+#, python-format
+msgid "Found iSCSI node %(mount_device)s (after %(tries)s rescans)"
+msgstr ""
+
+#: cinder/virt/vmwareapi/error_util.py:93
+#, python-format
+msgid "Error(s) %s occurred in the call to RetrieveProperties"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:44 cinder/virt/xenapi/fake.py:77
+#, python-format
+msgid "%(text)s: _db_content => %(content)s"
+msgstr "%(text)s: _db_content => %(content)s"
+
+#: cinder/virt/vmwareapi/fake.py:131
+#, python-format
+msgid "Property %(attr)s not set for the managed object %(objName)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:437
+msgid "There is no VM registered"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:439 cinder/virt/vmwareapi/fake.py:609
+#, python-format
+msgid "Virtual Machine with ref %s is not there"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:502
+#, python-format
+msgid "Logging out a session that is invalid or already logged out: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:517
+msgid "Session is faulty"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:520
+msgid "Session Invalid"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:606
+msgid " No Virtual Machine has been registered yet"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:99
+#, python-format
+msgid "Glance image %s is in killed state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:107
+#, python-format
+msgid "Glance image %(image_id)s is in unknown state - %(state)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:128
+msgid ""
+"ESX SOAP server returned an empty port group for the host system in its "
+"response"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:155
+#, python-format
+msgid "Creating Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:169
+#, python-format
+msgid "Created Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/read_write_util.py:150
+#, python-format
+msgid "Exception during HTTP connection close in VMWareHTTpWrite. Exception is %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:84
+msgid "Unable to import suds."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:90
+msgid "Must specify vmwareapi_wsdl_loc"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:145
+#, python-format
+msgid "No such SOAP method '%s' provided by VI SDK"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:150
+#, python-format
+msgid "httplib error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:157
+#, python-format
+msgid "Socket error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:162
+#, python-format
+msgid "Type error in  %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:166
+#, python-format
+msgid "Exception in %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:66
+msgid "Getting list of instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:82
+#, python-format
+msgid "Got total of %s instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:126
+msgid "Couldn't get a local Datastore reference"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:196
+#, python-format
+msgid "Creating VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:205
+#, python-format
+msgid "Created VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:234
+#, python-format
+msgid ""
+"Creating Virtual Disk of size  %(vmdk_file_size_in_kb)s KB and adapter "
+"type  %(adapter_type)s on the ESX host local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:251
+#, python-format
+msgid ""
+"Created Virtual Disk of size %(vmdk_file_size_in_kb)s KB on the ESX host "
+"local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:260
+#, python-format
+msgid ""
+"Deleting the file %(flat_uploaded_vmdk_path)s on the ESX host localstore "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:272
+#, python-format
+msgid ""
+"Deleted the file %(flat_uploaded_vmdk_path)s on the ESX host local store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:283
+#, python-format
+msgid ""
+"Downloading image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:298
+#, python-format
+msgid ""
+"Downloaded image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:315
+#, python-format
+msgid "Reconfiguring VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:322
+#, python-format
+msgid "Reconfigured VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:329
+#, python-format
+msgid "Powering on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:335
+#, python-format
+msgid "Powered on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:381
+#, python-format
+msgid "Creating Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:391
+#, python-format
+msgid "Created Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:434
+#, python-format
+msgid "Copying disk data before snapshot of the VM  instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:447
+#, python-format
+msgid "Copied disk data before snapshot of the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:456
+#, python-format
+msgid "Uploading image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:469
+#, python-format
+msgid "Uploaded image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:479
+#, python-format
+msgid "Deleting temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:488
+#, python-format
+msgid "Deleted temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:520
+msgid "instance is not powered on"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:527
+#, python-format
+msgid "Rebooting guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:530
+#, python-format
+msgid "Rebooted guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:532
+#, python-format
+msgid "Doing hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:536
+#, python-format
+msgid "Did hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:548
+#, python-format
+msgid "instance - %s not present"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:567
+#, python-format
+msgid "Powering off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:572
+#, python-format
+msgid "Powered off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:576
+#, python-format
+msgid "Unregistering the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:579
+#, python-format
+msgid "Unregistered the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:581
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while un-registering the "
+"VM: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:592
+#, python-format
+msgid "Deleting contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:602
+#, python-format
+msgid "Deleted contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:607
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while deleting the VM "
+"contents from the disk: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:615
+msgid "pause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:619
+msgid "unpause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:633
+#, python-format
+msgid "Suspending the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:637
+#, python-format
+msgid "Suspended the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:640
+msgid "instance is powered off and can not be suspended."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:643
+#, python-format
+msgid "VM %s was already in suspended state. So returning without doing anything"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:656
+#, python-format
+msgid "Resuming the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:661
+#, python-format
+msgid "Resumed the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:663
+msgid "instance is not in a suspended state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:699
+msgid "get_diagnostics not implemented for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:757
+#, python-format
+msgid ""
+"Reconfiguring VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:765
+#, python-format
+msgid ""
+"Reconfigured VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:802
+#, python-format
+msgid "Creating directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:806
+#, python-format
+msgid "Created directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:89
+#, python-format
+msgid "Downloading image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:103
+#, python-format
+msgid "Downloaded image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:108
+#, python-format
+msgid "Uploading image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:129
+#, python-format
+msgid "Uploaded image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:139
+#, python-format
+msgid "Getting image size for the image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:143
+#, python-format
+msgid "Got image size of %(size)s for the image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:553 cinder/virt/xenapi/fake.py:652
+#: cinder/virt/xenapi/fake.py:670 cinder/virt/xenapi/fake.py:732
+msgid "Raising NotImplemented"
+msgstr "NotImplemented 例外を発生させます。"
+
+#: cinder/virt/xenapi/fake.py:555
+#, python-format
+msgid "xenapi.fake does not have an implementation for %s"
+msgstr "xenapi.fake には %s が実装されていません。"
+
+#: cinder/virt/xenapi/fake.py:589
+#, python-format
+msgid "Calling %(localname)s %(impl)s"
+msgstr "%(localname)s %(impl)s を呼び出します。"
+
+#: cinder/virt/xenapi/fake.py:594
+#, python-format
+msgid "Calling getter %s"
+msgstr "getter %s をコールします。"
+
+#: cinder/virt/xenapi/fake.py:654
+#, python-format
+msgid ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+msgstr "xenapi.fake に %s に関する実装がないか、引数の数が誤っています。"
+
+#: cinder/virt/xenapi/host.py:67
+#, python-format
+msgid ""
+"Instance %(name)s running on %(host)s could not be found in the database:"
+" assuming it is a worker VM and skipping migration to a new host"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:137
+#, python-format
+msgid "Unable to get SR for this host: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:169
+msgid "Unable to get updated status"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:172
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:37
+#, python-format
+msgid "Found non-unique network for name_label %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:55
+#, python-format
+msgid "Found non-unique network for bridge %s"
+msgstr "ブリッジ %s に対してブリッジが複数存在します。"
+
+#: cinder/virt/xenapi/network_utils.py:58
+#, python-format
+msgid "Found no network for bridge %s"
+msgstr "ブリッジ %s に対するネットワークが存在しません。"
+
+#: cinder/virt/xenapi/pool.py:111
+#, python-format
+msgid "Unable to eject %(host)s from the pool; pool not empty"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:126
+#, python-format
+msgid "Unable to eject %(host)s from the pool; No master found"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:143
+#, python-format
+msgid "Pool-Join failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:146
+#, python-format
+msgid "Unable to join %(host)s in the pool"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:162
+#, python-format
+msgid "Pool-eject failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:174
+#, fuzzy, python-format
+msgid "Unable to set up pool: %(e)s."
+msgstr "ボリューム %s を切断(detach)できません"
+
+#: cinder/virt/xenapi/pool.py:185
+#, python-format
+msgid "Pool-set_name_label failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:103
+#, python-format
+msgid "Found no PIF for device %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:122
+#, python-format
+msgid ""
+"PIF %(pif_rec['uuid'])s for network %(bridge)s has VLAN id %(pif_vlan)d. "
+"Expected %(vlan_num)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:218
+msgid "Created VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:245
+#, python-format
+msgid "VBD not found in instance %s"
+msgstr "インスタンス %s のVBDが見つかりません。"
+
+#: cinder/virt/xenapi/vm_utils.py:262
+#, fuzzy, python-format
+msgid "VBD %s already detached"
+msgstr "グループ %s は既に存在しています。"
+
+#: cinder/virt/xenapi/vm_utils.py:265
+#, python-format
+msgid "VBD %(vbd_ref)s detach rejected, attempt %(num_attempt)d/%(max_attempts)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:270
+#, python-format
+msgid "Unable to unplug VBD %s"
+msgstr "VBD %s の unplug に失敗しました。"
+
+#: cinder/virt/xenapi/vm_utils.py:275
+#, python-format
+msgid "Reached maximum number of retries trying to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:286
+#, python-format
+msgid "Unable to destroy VBD %s"
+msgstr "VBD %s の削除に失敗しました。"
+
+#: cinder/virt/xenapi/vm_utils.py:305
+#, fuzzy, python-format
+msgid "Creating %(vbd_type)s-type VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+msgstr "VM %(vm_ref)s, VDI %(vdi_ref)s 用仮想ブロックデバイス(VBD) %(vbd_ref)s を作成しました。"
+
+#: cinder/virt/xenapi/vm_utils.py:308
+#, python-format
+msgid "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+msgstr "VM %(vm_ref)s, VDI %(vdi_ref)s 用仮想ブロックデバイス(VBD) %(vbd_ref)s を作成しました。"
+
+#: cinder/virt/xenapi/vm_utils.py:319
+#, python-format
+msgid "Unable to destroy VDI %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:336
+#, python-format
+msgid ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+msgstr ""
+"%(sr_ref)s 上に VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, "
+"%(read_only)s) を作成しました。"
+
+#: cinder/virt/xenapi/vm_utils.py:345
+#, python-format
+msgid "Copied VDI %(vdi_ref)s from VDI %(vdi_to_copy_ref)s on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:353
+#, python-format
+msgid "Cloned VDI %(vdi_ref)s from VDI %(vdi_to_clone_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:372
+#, python-format
+msgid "No primary VDI found for %(vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:379
+#, fuzzy, python-format
+msgid "Snapshotting with label '%(label)s'"
+msgstr "ラベル '%(label)s' 付き VM %(vm_ref)s のスナップショットを作成しています…"
+
+#: cinder/virt/xenapi/vm_utils.py:392
+#, fuzzy, python-format
+msgid "Created snapshot %(template_vm_ref)s"
+msgstr "VM %(vm_ref)s からスナップショット %(template_vm_ref)s を作成しました。"
+
+#: cinder/virt/xenapi/vm_utils.py:431
+#, python-format
+msgid "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+msgstr "ID %(image_id)s として %(vdi_uuids)s のアップロードの為に xapi を問い合わせしています"
+
+#: cinder/virt/xenapi/vm_utils.py:583
+#, python-format
+msgid "Creating blank HD of size %(req_size)d gigs"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:634
+#, python-format
+msgid ""
+"Fast cloning is only supported on default local SR of type ext. SR on "
+"this system was found to be of type %(sr_type)s. Ignoring the cow flag."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:724
+#, python-format
+msgid ""
+"download_vhd %(image)s attempt %(attempt_num)d/%(max_attempts)d from "
+"%(glance_host)s:%(glance_port)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:734
+#, python-format
+msgid "download_vhd failed: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:750
+#, python-format
+msgid "Asking xapi to fetch vhd image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:760
+#, python-format
+msgid ""
+"xapi 'download_vhd' returned VDI of type '%(vdi_type)s' with UUID "
+"'%(vdi_uuid)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:789
+#, python-format
+msgid "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:805
+#, python-format
+msgid "image_size_bytes=%(size_bytes)d, allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:809
+#, python-format
+msgid ""
+"Image size %(size_bytes)d exceeded instance_type allowed size "
+"%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:831
+#, python-format
+msgid "Fetching image %(image)s, type %(image_type_str)"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:844
+#, fuzzy, python-format
+msgid "Size for image %(image)s: %(virtual_size)d"
+msgstr "イメージ %(image)s のサイズ:%(virtual_size)d"
+
+#: cinder/virt/xenapi/vm_utils.py:853
+#, python-format
+msgid ""
+"Kernel/Ramdisk image is too large: %(vdi_size)d bytes, max %(max_size)d "
+"bytes"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:870
+#, python-format
+msgid "Copying VDI %s to /boot/guest on dom0"
+msgstr "ドメイン0 上の /boot/guest に VDI %s をコピー中"
+
+#: cinder/virt/xenapi/vm_utils.py:884
+#, python-format
+msgid "Kernel/Ramdisk VDI %s destroyed"
+msgstr "カーネル/RAMディスク VDI %s が削除されました"
+
+#: cinder/virt/xenapi/vm_utils.py:895
+msgid "Failed to fetch glance image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:934
+#, python-format
+msgid "Detected %(image_type_str)s format for image %(image_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:955
+#, python-format
+msgid "Looking up vdi %s for PV kernel"
+msgstr "PV kernelのvdi %s を取得します。"
+
+#: cinder/virt/xenapi/vm_utils.py:973
+#, python-format
+msgid "Unknown image format %(disk_image_type)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1016
+#, python-format
+msgid "VDI %s is still available"
+msgstr "VDI %s は依然として存在しています。"
+
+#: cinder/virt/xenapi/vm_utils.py:1059
+#, python-format
+msgid "(VM_UTILS) xenserver vm state -> |%s|"
+msgstr "(VM_UTILS) xenserver の vm state -> |%s|"
+
+#: cinder/virt/xenapi/vm_utils.py:1061
+#, python-format
+msgid "(VM_UTILS) xenapi power_state -> |%s|"
+msgstr "(VM_UTILS) xenapi の power_state -> |%s|"
+
+#: cinder/virt/xenapi/vm_utils.py:1088
+#, python-format
+msgid "Unable to parse rrd of %(vm_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1108
+#, python-format
+msgid "Re-scanning SR %s"
+msgstr "SR %s を再スキャンします。"
+
+#: cinder/virt/xenapi/vm_utils.py:1136
+#, python-format
+msgid "Flag sr_matching_filter '%s' does not respect formatting convention"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1154
+msgid ""
+"XenAPI is unable to find a Storage Repository to install guest instances "
+"on. Please check your configuration and/or configure the flag "
+"'sr_matching_filter'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1167
+msgid "Cannot find SR of content-type ISO"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1175
+#, python-format
+msgid "ISO: looking at SR %(sr_rec)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1177
+msgid "ISO: not iso content"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1180
+msgid "ISO: iso content_type, no 'i18n-key' key"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1183
+msgid "ISO: iso content_type, i18n-key value not 'local-storage-iso'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1187
+msgid "ISO: SR MATCHing our criteria"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1189
+msgid "ISO: ISO, looking to see if it is host local"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1192
+#, python-format
+msgid "ISO: PBD %(pbd_ref)s disappeared"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1195
+#, python-format
+msgid "ISO: PBD matching, want %(pbd_rec)s, have %(host)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1198
+msgid "ISO: SR with local PBD"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1220
+#, python-format
+msgid ""
+"Unable to obtain RRD XML for VM %(vm_uuid)s with server details: "
+"%(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1236
+#, python-format
+msgid "Unable to obtain RRD XML updates with server details: %(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1290
+#, python-format
+msgid "Invalid statistics data from Xenserver: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1343
+#, python-format
+msgid "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+msgstr "VHD %(vdi_uuid)s の親は %(parent_ref)s です"
+
+#: cinder/virt/xenapi/vm_utils.py:1417
+#, python-format
+msgid ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+msgstr "親 %(parent_uuid)s が元々の親 %(original_parent_uuid)s と一致しません。作成を待機しています…"
+
+#: cinder/virt/xenapi/vm_utils.py:1427
+#, python-format
+msgid "VHD coalesce attempts exceeded (%(max_attempts)d), giving up..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1462
+#, python-format
+msgid "Timeout waiting for device %s to be created"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1473
+#, python-format
+msgid "Plugging VBD %s ... "
+msgstr "VBD %s を接続しています… "
+
+#: cinder/virt/xenapi/vm_utils.py:1476
+#, python-format
+msgid "Plugging VBD %s done."
+msgstr "仮想ブロックデバイス(VBD) %s の接続が完了しました。"
+
+#: cinder/virt/xenapi/vm_utils.py:1478
+#, python-format
+msgid "VBD %(vbd_ref)s plugged as %(orig_dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1481
+#, python-format
+msgid "VBD %(vbd_ref)s plugged into wrong dev, remapping to %(dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1490
+#, python-format
+msgid "Destroying VBD for VDI %s ... "
+msgstr "VDI %s 用の仮想ブロックデバイス(VBD)を削除しています… "
+
+#: cinder/virt/xenapi/vm_utils.py:1498
+#, python-format
+msgid "Destroying VBD for VDI %s done."
+msgstr "VDI %s 用の仮想ブロックデバイス(VBD)の削除が完了しました。"
+
+#: cinder/virt/xenapi/vm_utils.py:1511
+#, python-format
+msgid "Running pygrub against %s"
+msgstr "%s に対して pygrub を実行しています"
+
+#: cinder/virt/xenapi/vm_utils.py:1518
+#, python-format
+msgid "Found Xen kernel %s"
+msgstr "Xen Kernel %s が見つかりました。"
+
+#: cinder/virt/xenapi/vm_utils.py:1520
+msgid "No Xen kernel found.  Booting HVM."
+msgstr ""
+"No Xen kernel found.  Booting HVM.\r\n"
+"Xen 用カーネルが見つかりません。完全仮想化モード(HVM)で起動しています。"
+
+#: cinder/virt/xenapi/vm_utils.py:1533
+msgid "Partitions:"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1539
+#, python-format
+msgid "  %(num)s: %(ptype)s %(size)d sectors"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1565
+#, python-format
+msgid ""
+"Writing partition table %(primary_first)d %(primary_last)d to "
+"%(dev_path)s..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1578
+#, python-format
+msgid "Writing partition table %s done."
+msgstr "パーティションテーブル %s の書き込みが完了しました。"
+
+#: cinder/virt/xenapi/vm_utils.py:1632
+#, python-format
+msgid ""
+"Starting sparse_copy src=%(src_path)s dst=%(dst_path)s "
+"virtual_size=%(virtual_size)d block_size=%(block_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1664
+#, python-format
+msgid ""
+"Finished sparse_copy in %(duration).2f secs, %(compression_pct).2f%% "
+"reduction in size"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1714
+msgid ""
+"XenServer tools installed in this image are capable of network injection."
+"  Networking files will not bemanipulated"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1722
+msgid ""
+"XenServer tools are present in this image but are not capable of network "
+"injection"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1726
+msgid "XenServer tools are not installed in this image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1742
+msgid "Manipulating interface files directly"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1751
+#, python-format
+msgid "Failed to mount filesystem (expected for non-linux instances): %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:131 cinder/virt/xenapi/vmops.py:722
+#, python-format
+msgid "Updating progress to %(progress)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:231
+#, python-format
+msgid "Attempted to power on non-existent instance bad instance id %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:233
+#, fuzzy
+msgid "Starting instance"
+msgstr "raw instanceを生成します。"
+
+#: cinder/virt/xenapi/vmops.py:303
+msgid "Removing kernel/ramdisk files from dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:358
+msgid "Failed to spawn, rolling back"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:443
+msgid "Detected ISO image type, creating blank VM for install"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:462
+msgid "Auto configuring disk, attempting to resize partition..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:515
+#, python-format
+msgid "Invalid value for injected_files: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:520
+#, python-format
+msgid "Injecting file path: '%s'"
+msgstr "ファイルパス '%s' を埋め込んでいます"
+
+#: cinder/virt/xenapi/vmops.py:527
+msgid "Setting admin password"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:531
+msgid "Resetting network"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:538
+msgid "Setting VCPU weight"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:544
+#, fuzzy
+msgid "Starting VM"
+msgstr "xvp を再起動しています"
+
+#: cinder/virt/xenapi/vmops.py:551
+#, python-format
+msgid ""
+"Latest agent build for %(hypervisor)s/%(os)s/%(architecture)s is "
+"%(version)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:554
+#, python-format
+msgid "No agent build found for %(hypervisor)s/%(os)s/%(architecture)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:561
+msgid "Waiting for instance state to become running"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:573
+msgid "Querying agent version"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:576
+#, python-format
+msgid "Instance agent version: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:581
+#, python-format
+msgid "Updating Agent to %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:616
+#, python-format
+msgid "No opaque_ref could be determined for '%s'."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:670
+#, fuzzy, python-format
+msgid "Finished snapshot and upload for VM"
+msgstr "VM %s のスナップショットとアップロードが完了しました。"
+
+#: cinder/virt/xenapi/vmops.py:677
+#, fuzzy, python-format
+msgid "Starting snapshot for VM"
+msgstr "VM %s に対するスナップショットを開始します。"
+
+#: cinder/virt/xenapi/vmops.py:686
+#, fuzzy, python-format
+msgid "Unable to Snapshot instance: %(exc)s"
+msgstr "インスタンス %s にボリュームを接続(attach)できません。"
+
+#: cinder/virt/xenapi/vmops.py:702
+msgid "Failed to transfer vhd to new host"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:770
+#, python-format
+msgid "Resizing down VDI %(cow_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:893
+#, python-format
+msgid "Resizing up VDI %(vdi_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:901
+msgid "Resize complete"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:928
+#, python-format
+msgid "Failed to query agent version: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:949
+#, python-format
+msgid "domid changed from %(domid)s to %(newdomid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:962
+#, python-format
+msgid "Failed to update agent: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:983
+#, python-format
+msgid "Failed to exchange keys: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:998
+#, python-format
+msgid "Failed to update password: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1023
+#, python-format
+msgid "Failed to inject file: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1032
+msgid "VM already halted, skipping shutdown..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1036
+msgid "Shutting down VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1054
+msgid "Unable to find VBD for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1097
+msgid "Using RAW or VHD, skipping kernel and ramdisk deletion"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1104
+msgid "instance has a kernel or ramdisk but not both"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1111
+msgid "kernel/ramdisk files removed"
+msgstr "カーネル/RAMディスクファイルが削除されました"
+
+#: cinder/virt/xenapi/vmops.py:1121
+msgid "VM destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1147
+#, fuzzy
+msgid "Destroying VM"
+msgstr "xvp を再起動しています"
+
+#: cinder/virt/xenapi/vmops.py:1169
+msgid "VM is not present, skipping destroy..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1222
+#, python-format
+msgid "Instance is already in Rescue Mode: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1296
+#, python-format
+msgid "Found %(instance_count)d hung reboots older than %(timeout)d seconds"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1300
+msgid "Automatically hard rebooting"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1363
+#, python-format
+msgid "Setting migration %(migration_id)s to error: %(reason)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1374
+#, python-format
+msgid ""
+"Automatically confirming migration %(migration_id)s for instance "
+"%(instance_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1379
+#, python-format
+msgid "Instance %(instance_uuid)s not found"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1383
+msgid "In ERROR state"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1389
+#, python-format
+msgid "In %(task_state)s task_state, not RESIZE_VERIFY"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1396
+#, python-format
+msgid "Error auto-confirming resize: %(e)s. Will retry later."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1418
+msgid "Could not get bandwidth info."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1469
+#, fuzzy
+msgid "Injecting network info to xenstore"
+msgstr "ネットワークホストの設定をします。"
+
+#: cinder/virt/xenapi/vmops.py:1483
+msgid "Creating vifs"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1492
+#, fuzzy, python-format
+msgid "Creating VIF for network %(network_ref)s"
+msgstr "VM %(vm_ref)s, network %(network_ref)s 用仮想インターフェース(VIF)を作成しています。"
+
+#: cinder/virt/xenapi/vmops.py:1495
+#, fuzzy, python-format
+msgid "Created VIF %(vif_ref)s, network %(network_ref)s"
+msgstr "VM %(vm_ref)s, network %(network_ref)s 用仮想インターフェース(VIF)を作成しています。"
+
+#: cinder/virt/xenapi/vmops.py:1520
+msgid "Injecting hostname to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1545
+#, python-format
+msgid ""
+"The agent call to %(method)s returned an invalid response: %(ret)r. "
+"path=%(path)s; args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1566
+#, python-format
+msgid "TIMEOUT: The call to %(method)s timed out. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1570
+#, python-format
+msgid ""
+"NOT IMPLEMENTED: The call to %(method)s is not supported by the agent. "
+"args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1575
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1661
+#, python-format
+msgid "OpenSSL error: %s"
+msgstr "OpenSSL エラー: %s"
+
+#: cinder/virt/xenapi/volume_utils.py:52
+msgid "creating sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:55 cinder/virt/xenapi/volume_utils.py:83
+#, python-format
+msgid "type is = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:58 cinder/virt/xenapi/volume_utils.py:86
+#, python-format
+msgid "name = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:71
+#, python-format
+msgid "Created %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:76 cinder/virt/xenapi/volume_utils.py:174
+msgid "Unable to create Storage Repository"
+msgstr "Storage Repository を作成できません。"
+
+#: cinder/virt/xenapi/volume_utils.py:80
+msgid "introducing sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:103 cinder/virt/xenapi/volume_utils.py:170
+#: cinder/virt/xenapi/volumeops.py:156
+#, python-format
+msgid "Introduced %(label)s as %(sr_ref)s."
+msgstr "%(sr_ref)s として %(label)s を導入しました"
+
+#: cinder/virt/xenapi/volume_utils.py:106
+msgid "Creating pbd for SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:108
+msgid "Plugging SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:116 cinder/virt/xenapi/volumeops.py:160
+msgid "Unable to introduce Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:127 cinder/virt/xenapi/volumeops.py:50
+msgid "Unable to get SR using uuid"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:129
+#, python-format
+msgid "Forgetting SR %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:137
+msgid "Unable to forget Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:157
+#, python-format
+msgid "Introducing %s..."
+msgstr "%s を introduce します…"
+
+#: cinder/virt/xenapi/volume_utils.py:186
+#, python-format
+msgid "Unable to find SR from VBD %s"
+msgstr "VBD %s から SRを取得できません。"
+
+#: cinder/virt/xenapi/volume_utils.py:204
+#, python-format
+msgid "Ignoring exception %(exc)s when getting PBDs for %(sr_ref)s"
+msgstr "%(sr_ref)s 用の物理ブロックデバイス(PBD)取得時に例外 %(exc)s を無視しています"
+
+#: cinder/virt/xenapi/volume_utils.py:210
+#, python-format
+msgid "Ignoring exception %(exc)s when unplugging PBD %(pbd)s"
+msgstr "物理ブロックデバイス(PBD) %(pbd)s の取り外し時に例外 %(exc)s を無視しています"
+
+#: cinder/virt/xenapi/volume_utils.py:234
+#, python-format
+msgid "Unable to introduce VDI on SR %s"
+msgstr "SR %s のVDIのintroduceができません。"
+
+#: cinder/virt/xenapi/volume_utils.py:242
+#, python-format
+msgid "Unable to get record of VDI %s on"
+msgstr "VDI %s のレコードを取得できません。"
+
+#: cinder/virt/xenapi/volume_utils.py:264
+#, python-format
+msgid "Unable to introduce VDI for SR %s"
+msgstr "SR %s のVDIをintroduceできません。"
+
+#: cinder/virt/xenapi/volume_utils.py:274
+#, python-format
+msgid "Error finding vdis in SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:281
+#, python-format
+msgid "Unable to find vbd for vdi %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:315
+#, python-format
+msgid "Unable to obtain target information %(data)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:341
+#, python-format
+msgid "Mountpoint cannot be translated: %s"
+msgstr "マウントポイントを変換できません。 %s"
+
+#: cinder/virt/xenapi/volumeops.py:64
+msgid "Could not find VDI ref"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:69
+#, python-format
+msgid "Creating SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:73
+msgid "Could not create SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:76
+msgid "Could not retrieve SR record"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:81
+#, python-format
+msgid "Introducing SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:85
+msgid "SR found in xapi database. No need to introduce"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:90
+msgid "Could not introduce SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:94
+#, python-format
+msgid "Checking for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:106
+#, python-format
+msgid "SR %s not found in the xapi database"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:112
+msgid "Could not forget SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:121
+#, python-format
+msgid "Attach_volume: %(connection_info)s, %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:178
+#, python-format
+msgid "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+msgstr "インスタンス %(instance_name)s 用のSR %(sr_ref)s における VDI を作成できません"
+
+#: cinder/virt/xenapi/volumeops.py:189
+#, python-format
+msgid "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+msgstr "インスタンス %(instance_name)s 用のSR %(sr_ref)s が使用できません"
+
+#: cinder/virt/xenapi/volumeops.py:197
+#, python-format
+msgid "Unable to attach volume to instance %s"
+msgstr "インスタンス %s にボリュームを接続(attach)できません。"
+
+#: cinder/virt/xenapi/volumeops.py:200
+#, python-format
+msgid "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+msgstr "インスタンス %(instance_name)s にマウントポイント %(mountpoint)s を接続(attach)しました"
+
+#: cinder/virt/xenapi/volumeops.py:210
+#, python-format
+msgid "Detach_volume: %(instance_name)s, %(mountpoint)s"
+msgstr "ボリューム切断: %(instance_name)s, %(mountpoint)s"
+
+#: cinder/virt/xenapi/volumeops.py:219
+#, python-format
+msgid "Unable to locate volume %s"
+msgstr "ボリューム %s の存在が確認できません。"
+
+#: cinder/virt/xenapi/volumeops.py:227
+#, python-format
+msgid "Unable to detach volume %s"
+msgstr "ボリューム %s を切断(detach)できません"
+
+#: cinder/virt/xenapi/volumeops.py:232
+#, python-format
+msgid "Unable to destroy vbd %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:239
+#, python-format
+msgid "Error purging SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:241
+#, python-format
+msgid "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+msgstr "インスタンス %(instance_name)s からマウントポイント %(mountpoint)s を切断(detach)しました"
+
+#: cinder/vnc/xvp_proxy.py:98 cinder/vnc/xvp_proxy.py:103
+#, python-format
+msgid "Error in handshake: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:119
+#, python-format
+msgid "Invalid request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:139
+#, python-format
+msgid "Request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:142
+#, python-format
+msgid "Request made with missing token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:153
+#, python-format
+msgid "Request made with invalid token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:160
+#, python-format
+msgid "Unexpected error: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:180
+#, python-format
+msgid "Starting cinder-xvpvncproxy node (version %s)"
+msgstr ""
+
+#: cinder/volume/api.py:74 cinder/volume/api.py:220
+msgid "status must be available"
+msgstr ""
+
+#: cinder/volume/api.py:85
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to create %(size)sG volume"
+msgstr ""
+
+#: cinder/volume/api.py:137
+#, fuzzy
+msgid "Volume status must be available or error"
+msgstr "ボリュームのステータス(status)は available でなければなりません。"
+
+#: cinder/volume/api.py:142
+#, python-format
+msgid "Volume still has %d dependent snapshots"
+msgstr ""
+
+#: cinder/volume/api.py:223
+msgid "already attached"
+msgstr ""
+
+#: cinder/volume/api.py:230
+msgid "already detached"
+msgstr ""
+
+#: cinder/volume/api.py:292
+msgid "must be available"
+msgstr ""
+
+#: cinder/volume/api.py:325
+#, fuzzy
+msgid "Volume Snapshot status must be available or error"
+msgstr "ボリュームのステータス(status)は available でなければなりません。"
+
+#: cinder/volume/driver.py:96
+#, python-format
+msgid "Recovering from a failed execute.  Try number %s"
+msgstr "実行失敗からリカバリーします。%s 回目のトライ。"
+
+#: cinder/volume/driver.py:106
+#, python-format
+msgid "volume group %s doesn't exist"
+msgstr "ボリュームグループ%sが存在しません。"
+
+#: cinder/volume/driver.py:270
+#, python-format
+msgid "Skipping ensure_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:318
+#, python-format
+msgid "Skipping remove_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:327
+#, python-format
+msgid ""
+"Skipping remove_export. No iscsi_target is presently exported for volume:"
+" %d"
+msgstr ""
+
+#: cinder/volume/driver.py:337
+msgid "ISCSI provider_location not stored, using discovery"
+msgstr ""
+
+#: cinder/volume/driver.py:384
+#, python-format
+msgid "Could not find iSCSI export  for volume %s"
+msgstr "ボリューム %s 用の iSCSI エクスポートが見つかりません"
+
+#: cinder/volume/driver.py:388
+#, python-format
+msgid "ISCSI Discovery: Found %s"
+msgstr ""
+
+#: cinder/volume/driver.py:466
+#, python-format
+msgid "Cannot confirm exported volume id:%(volume_id)s."
+msgstr ""
+
+#: cinder/volume/driver.py:493
+#, python-format
+msgid "FAKE ISCSI: %s"
+msgstr "偽のISCSI: %s"
+
+#: cinder/volume/driver.py:505
+#, python-format
+msgid "rbd has no pool %s"
+msgstr "rbd にプール %s がありません。"
+
+#: cinder/volume/driver.py:579
+#, python-format
+msgid "Sheepdog is not working: %s"
+msgstr "Sheepdog が動作していません: %s"
+
+#: cinder/volume/driver.py:581
+msgid "Sheepdog is not working"
+msgstr "Sheepdog が機能していません"
+
+#: cinder/volume/driver.py:680 cinder/volume/driver.py:685
+#, python-format
+msgid "LoggingVolumeDriver: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:96
+#, python-format
+msgid "Re-exporting %s volumes"
+msgstr "%s 個のボリュームを再エクスポートします。"
+
+#: cinder/volume/manager.py:101
+#, python-format
+msgid "volume %s: skipping export"
+msgstr "ボリューム %s のエキスポートをスキップします。"
+
+#: cinder/volume/manager.py:107
+#, python-format
+msgid "volume %s: creating"
+msgstr "ボリューム%sを作成します。"
+
+#: cinder/volume/manager.py:119
+#, python-format
+msgid "volume %(vol_name)s: creating lv of size %(vol_size)sG"
+msgstr "ボリューム %(vol_name)s: サイズ %(vol_size)sG のlvを作成します。"
+
+#: cinder/volume/manager.py:131
+#, python-format
+msgid "volume %s: creating export"
+msgstr "ボリューム %s をエクスポートします。"
+
+#: cinder/volume/manager.py:144
+#, python-format
+msgid "volume %s: created successfully"
+msgstr "ボリューム %s の作成に成功しました。"
+
+#: cinder/volume/manager.py:153
+msgid "Volume is still attached"
+msgstr "ボリュームはアタッチされたままです。"
+
+#: cinder/volume/manager.py:155
+msgid "Volume is not local to this node"
+msgstr "ボリュームはこのノードのローカルではありません。"
+
+#: cinder/volume/manager.py:159
+#, python-format
+msgid "volume %s: removing export"
+msgstr "ボリューム %s のエクスポートを解除します。"
+
+#: cinder/volume/manager.py:161
+#, python-format
+msgid "volume %s: deleting"
+msgstr "ボリューム %s を削除します。"
+
+#: cinder/volume/manager.py:164
+#, python-format
+msgid "volume %s: volume is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:176
+#, python-format
+msgid "volume %s: deleted successfully"
+msgstr "ボリューム %s の削除に成功しました。"
+
+#: cinder/volume/manager.py:183
+#, python-format
+msgid "snapshot %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:187
+#, python-format
+msgid "snapshot %(snap_name)s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:202
+#, python-format
+msgid "snapshot %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:211
+#, python-format
+msgid "snapshot %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:214
+#, fuzzy, python-format
+msgid "snapshot %s: snapshot is busy"
+msgstr "snapshotting: インスタンス %s のスナップショットを取得中"
+
+#: cinder/volume/manager.py:226
+#, python-format
+msgid "snapshot %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:310
+msgid "Checking volume capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:314
+#, python-format
+msgid "New capabilities found: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:325
+msgid "Clear capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:329
+#, python-format
+msgid "Notification {%s} received"
+msgstr ""
+
+#: cinder/volume/netapp.py:79
+#, python-format
+msgid "API %(name)sfailed: %(reason)s"
+msgstr ""
+
+#: cinder/volume/netapp.py:109
+#, python-format
+msgid "%s is not set"
+msgstr ""
+
+#: cinder/volume/netapp.py:128
+#, fuzzy
+msgid "Connected to DFM server"
+msgstr "キューに再接続しました。"
+
+#: cinder/volume/netapp.py:159
+#, fuzzy, python-format
+msgid "Job failed: %s"
+msgstr "NotFound 発生: %s"
+
+#: cinder/volume/netapp.py:240
+msgid "Failed to provision dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:252
+msgid "No LUN was created by the provision job"
+msgstr ""
+
+#: cinder/volume/netapp.py:261 cinder/volume/netapp.py:433
+#, fuzzy, python-format
+msgid "Failed to find LUN ID for volume %s"
+msgstr "ボリューム %s 用の iSCSI エクスポートが見つかりません"
+
+#: cinder/volume/netapp.py:280
+msgid "Failed to remove and delete dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:603 cinder/volume/netapp.py:657
+#, fuzzy, python-format
+msgid "No LUN ID for volume %s"
+msgstr "ボリューム %s 用の iSCSI エクスポートが見つかりません"
+
+#: cinder/volume/netapp.py:607 cinder/volume/netapp.py:661
+#, fuzzy, python-format
+msgid "Failed to get LUN details for LUN ID %s"
+msgstr "ip %s に対するメタデータの取得に失敗しました。"
+
+#: cinder/volume/netapp.py:614
+#, fuzzy, python-format
+msgid "Failed to get host details for host ID %s"
+msgstr "ip %s に対するメタデータの取得に失敗しました。"
+
+#: cinder/volume/netapp.py:620
+#, fuzzy, python-format
+msgid "Failed to get target portal for filer: %s"
+msgstr "ip %s に対するメタデータの取得に失敗しました。"
+
+#: cinder/volume/netapp.py:625
+#, fuzzy, python-format
+msgid "Failed to get target IQN for filer: %s"
+msgstr "ip %s に対するメタデータの取得に失敗しました。"
+
+#: cinder/volume/san.py:113 cinder/volume/san.py:151
+msgid "Specify san_password or san_private_key"
+msgstr ""
+
+#: cinder/volume/san.py:156
+msgid "san_ip must be set"
+msgstr ""
+
+#: cinder/volume/san.py:320
+#, python-format
+msgid "LUID not found for %(zfs_poolname)s. Output=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:452
+#, python-format
+msgid "CLIQ command returned %s"
+msgstr ""
+
+#: cinder/volume/san.py:458
+#, python-format
+msgid "Malformed response to CLIQ command %(verb)s %(cliq_args)s. Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:466
+#, python-format
+msgid "Error running CLIQ command %(verb)s %(cliq_args)s.  Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:496
+#, python-format
+msgid ""
+"Unexpected number of virtual ips for cluster  %(cluster_name)s. "
+"Result=%(_xml)s"
+msgstr ""
+
+#: cinder/volume/san.py:549
+#, python-format
+msgid "Volume info: %(volume_name)s => %(volume_attributes)s"
+msgstr ""
+
+#: cinder/volume/san.py:594
+msgid "local_path not supported"
+msgstr ""
+
+#: cinder/volume/san.py:626
+#, python-format
+msgid "Could not determine project for volume %s, can't export"
+msgstr ""
+
+#: cinder/volume/san.py:696
+#, python-format
+msgid "Payload for SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:713
+#, python-format
+msgid "Call to json.loads() raised an exception: %s"
+msgstr ""
+
+#: cinder/volume/san.py:718
+#, python-format
+msgid "Results of SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:732
+#, python-format
+msgid "Found solidfire account: %s"
+msgstr ""
+
+#: cinder/volume/san.py:746
+#, python-format
+msgid "solidfire account: %s does not exist, create it..."
+msgstr ""
+
+#: cinder/volume/san.py:804
+msgid "Enter SolidFire create_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:846
+msgid "Leaving SolidFire create_volume"
+msgstr ""
+
+#: cinder/volume/san.py:861
+msgid "Enter SolidFire delete_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:880
+#, python-format
+msgid "Deleting volumeID: %s "
+msgstr ""
+
+#: cinder/volume/san.py:888
+msgid "Leaving SolidFire delete_volume"
+msgstr ""
+
+#: cinder/volume/san.py:891
+msgid "Executing SolidFire ensure_export..."
+msgstr ""
+
+#: cinder/volume/san.py:895
+msgid "Executing SolidFire create_export..."
+msgstr ""
+
+#: cinder/volume/volume_types.py:49 cinder/volume/volume_types.py:108
+msgid "name cannot be None"
+msgstr ""
+
+#: cinder/volume/volume_types.py:96
+msgid "id cannot be None"
+msgstr ""
+
+#: cinder/volume/xensm.py:55
+#, python-format
+msgid "SR name = %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:56
+#, python-format
+msgid "Params: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:60
+#, python-format
+msgid "Failed to create sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:62
+msgid "Create failed"
+msgstr ""
+
+#: cinder/volume/xensm.py:64
+#, python-format
+msgid "SR UUID of new SR is: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:71
+msgid "Failed to update db"
+msgstr ""
+
+#: cinder/volume/xensm.py:80
+#, python-format
+msgid "Failed to introduce sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:91
+#, python-format
+msgid "Failed to reach backend %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:100
+msgid "XenSMDriver requires xenapi connection"
+msgstr ""
+
+#: cinder/volume/xensm.py:110
+msgid "Failed to initiate session"
+msgstr ""
+
+#: cinder/volume/xensm.py:142
+#, python-format
+msgid "Volume will be created in backend - %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:154
+msgid "Failed to update volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:157
+msgid "Unable to create volume"
+msgstr ""
+
+#: cinder/volume/xensm.py:171
+msgid "Failed to delete vdi"
+msgstr ""
+
+#: cinder/volume/xensm.py:177
+msgid "Failed to delete volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:210
+msgid "Failed to find volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:221
+msgid "Failed to find backend in db"
+msgstr ""
+
+#: cinder/volume/nexenta/__init__.py:27
+msgid "Nexenta SA returned the error"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:64
+#, python-format
+msgid "Sending JSON data: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:69
+#, python-format
+msgid "Auto switching to HTTPS connection to %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:75
+msgid "No headers in server response"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:76
+msgid "Bad response from server"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:79
+#, fuzzy, python-format
+msgid "Got response: %s"
+msgstr "応答 %s"
+
+#: cinder/volume/nexenta/volume.py:96
+#, fuzzy, python-format
+msgid "Volume %s does not exist in Nexenta SA"
+msgstr "ボリュームグループ%sが存在しません。"
+
+#: cinder/volume/nexenta/volume.py:180
+msgid ""
+"Call to local_path should not happen. Verify that use_local_volumes flag "
+"is turned off."
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:202
+#, python-format
+msgid "Ignored target creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:210
+#, python-format
+msgid "Ignored target group creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:219
+#, python-format
+msgid "Ignored target group member addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:227
+#, python-format
+msgid "Ignored LU creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:237
+#, python-format
+msgid "Ignored LUN mapping entry addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:273
+#, python-format
+msgid ""
+"Got error trying to destroy target group %(target_group)s, assuming it is"
+" already gone: %(exc)s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:280
+#, python-format
+msgid ""
+"Got error trying to delete target %(target)s, assuming it is already "
+"gone: %(exc)s"
+msgstr ""
+
+#~ msgid "Unable to locate account %(account_name) on Solidfire device"
+#~ msgstr ""
+
+#~ msgid "Zone %(zone_id)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Cinder access parameters were not specified."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(id)d could not be found."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(name)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Detected more than one volume with name %(vol_name)"
+#~ msgstr ""
+
+#~ msgid "Detected existing vlan with id %(vlan)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab semaphore \"%(lock)s\" "
+#~ "for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab file lock "
+#~ "\"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Parent group id and group id cannot be same"
+#~ msgstr ""
+
+#~ msgid "No body provided"
+#~ msgstr ""
+
+#~ msgid "Create VSA %(display_name)s of type %(vc_type)s"
+#~ msgstr ""
+
+#~ msgid "Delete VSA with id: %s"
+#~ msgstr ""
+
+#~ msgid "Associate address %(ip)s to VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "Disassociate address from VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "%(obj)s with ID %(id)s not found"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(obj)s with ID %(id)s belongs to "
+#~ "VSA %(own_vsa_id)s and not to VSA "
+#~ "%(vsa_id)s."
+#~ msgstr ""
+
+#~ msgid "Index. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Detail. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Create. vsa_id=%(vsa_id)s, body=%(body)s"
+#~ msgstr ""
+
+#~ msgid "Create volume of %(size)s GB from VSA ID %(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Update %(obj)s with id: %(id)s, changes: %(changes)s"
+#~ msgstr ""
+
+#~ msgid "Delete. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Show. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Index instances for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You cannot run"
+#~ " any more instances of this type."
+#~ msgstr ""
+
+#~ msgid "Going to try to soft delete %s"
+#~ msgstr ""
+
+#~ msgid "No host for instance %s, deleting immediately"
+#~ msgstr ""
+
+#~ msgid "Going to try to stop %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to start %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Going to force the deletion of the"
+#~ " vm %(instance_uuid)s, even if it is"
+#~ " deleted"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s did not exist "
+#~ "in the DB, but I will shut "
+#~ "it down anyway using a special "
+#~ "context"
+#~ msgstr ""
+
+#~ msgid "exception terminating the instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "trying to destroy already destroyed instance: %s"
+#~ msgstr "既に消去済みのインスタンス%sを消去しようとしました。"
+
+#~ msgid ""
+#~ "Instance %(name)s found in database but"
+#~ " not known by hypervisor. Setting "
+#~ "power state to NOSTATE"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Detected instance  with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Destroying instance with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid "SQL connection failed (%(connstring)s). %(attempts)d attempts left."
+#~ msgstr ""
+
+#~ msgid "Can't downgrade without losing data"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_id)s not found"
+#~ msgstr ""
+
+#~ msgid "Network %s has active ports, cannot delete"
+#~ msgstr ""
+
+#~ msgid "No fixed IPs to deallocate for vif %sid"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "AMQP server on %(fl_host)s:%(fl_port)d is "
+#~ "unreachable: %(e)s. Trying again in "
+#~ "%(fl_intv)d seconds."
+#~ msgstr ""
+
+#~ msgid "Unable to connect to AMQP server after %(tries)d tries. Shutting down."
+#~ msgstr ""
+
+#~ msgid "Failed to fetch message from queue: %s"
+#~ msgstr ""
+
+#~ msgid "Initing the Adapter Consumer for %s"
+#~ msgstr "%sのアダプターコンシューマー(Adapter Consumer)を初期化しています。"
+
+#~ msgid "Created \"%(exchange)s\" fanout exchange with \"%(key)s\" routing key"
+#~ msgstr ""
+
+#~ msgid "Exception while processing consumer"
+#~ msgstr ""
+
+#~ msgid "Creating \"%(exchange)s\" fanout exchange"
+#~ msgstr ""
+
+#~ msgid "topic is %s"
+#~ msgstr "topic は %s です。"
+
+#~ msgid "message %s"
+#~ msgstr "メッセージ %s"
+
+#~ msgid ""
+#~ "Cannot confirm tmpfile at %(ipath)s is"
+#~ " on same shared storage between "
+#~ "%(src)s and %(dest)s."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of memory(host:%(avail)s <= "
+#~ "instance:%(mem_inst)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of disk(host:%(available)s <="
+#~ " instance:%(necessary)s)"
+#~ msgstr ""
+
+#~ msgid "Driver Method %(driver_method)s missing: %(e)s.Reverting to schedule()"
+#~ msgstr ""
+
+#~ msgid "Setting instance %(instance_uuid)s to ERROR state."
+#~ msgstr ""
+
+#~ msgid "_filter_hosts: %(request_spec)s"
+#~ msgstr ""
+
+#~ msgid "Filter hosts for drive type %s"
+#~ msgstr ""
+
+#~ msgid "Host %s has no free capacity. Skip"
+#~ msgstr ""
+
+#~ msgid "Filter hosts: %s"
+#~ msgstr ""
+
+#~ msgid "Must implement host selection mechanism"
+#~ msgstr ""
+
+#~ msgid "Maximum number of hosts selected (%d)"
+#~ msgstr ""
+
+#~ msgid "Selected excessive host %(host)s"
+#~ msgstr ""
+
+#~ msgid "Provision volume %(name)s of size %(size)s GB on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "volume_params %(volume_params)s"
+#~ msgstr ""
+
+#~ msgid "%(i)d: Volume %(name)s"
+#~ msgstr ""
+
+#~ msgid "Attempting to spawn %(num_volumes)d volume(s)"
+#~ msgstr ""
+
+#~ msgid "Error creating volumes"
+#~ msgstr ""
+
+#~ msgid "Non-VSA volume %d"
+#~ msgstr ""
+
+#~ msgid "Spawning volume %(volume_id)s with drive type %(drive_type)s"
+#~ msgstr ""
+
+#~ msgid "Error creating volume"
+#~ msgstr ""
+
+#~ msgid "No capability selected for volume of size %(size)s"
+#~ msgstr ""
+
+#~ msgid "Host %s:"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\tDrive %(qosgrp)-25s: total %(total)2s, "
+#~ "used %(used)2s, free %(free)2s. Available "
+#~ "capacity %(avail)-5s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t LeastUsedHost: Best host: %(best_host)s."
+#~ " (used capacity %(min_used)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t MostAvailCap: Best host: %(best_host)s. "
+#~ "(available %(max_avail)s %(type_str)s)"
+#~ msgstr ""
+
+#~ msgid "(%(nm)s) publish (key: %(routing_key)s) %(message)s"
+#~ msgstr "(%(nm)s) 公開 (キー: %(routing_key)s) %(message)s"
+
+#~ msgid "Publishing to route %s"
+#~ msgstr "ルート %s へパブリッシュ"
+
+#~ msgid "Declaring queue %s"
+#~ msgstr "queue %s の宣言"
+
+#~ msgid "Declaring exchange %s"
+#~ msgstr "exchange %s の宣言"
+
+#~ msgid "Binding %(queue)s to %(exchange)s with key %(routing_key)s"
+#~ msgstr "キー %(routing_key)s 付きで %(exchange)s に %(queue)s をバインドしています"
+
+#~ msgid "Getting from %(queue)s: %(message)s"
+#~ msgstr "%(queue)s から取得しています: %(message)s"
+
+#~ msgid "Test: Emulate wrong VSA name. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate DB error. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: user_data = %s"
+#~ msgstr ""
+
+#~ msgid "_create: param=%s"
+#~ msgstr ""
+
+#~ msgid "Host %s"
+#~ msgstr ""
+
+#~ msgid "Test: provision vol %(name)s on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "\t vol=%(vol)s"
+#~ msgstr ""
+
+#~ msgid "Test: VSA update request: vsa_id=%(vsa_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume create: %s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get request: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume update request: id=%(volume_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: success    %(result)s"
+#~ msgstr "タスク [%(name)s] %(task)s 状態: 成功    %(result)s"
+
+#~ msgid "Task [%(name)s] %(task)s status: %(status)s    %(error_info)s"
+#~ msgstr "タスク [%(name)s] %(task)s 状態: %(status)s    %(error_info)s"
+
+#~ msgid "Unable to get updated status: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "deactivate_node is called for                "
+#~ "node_id = %(id)s node_ip = %(ip)s"
+#~ msgstr ""
+
+#~ msgid "virsh said: %r"
+#~ msgstr "virsh の出力: %r"
+
+#~ msgid "cool, it's a device"
+#~ msgstr "デバイスです。"
+
+#~ msgid "Unable to read LXC console"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "to xml...\n"
+#~ ":%s "
+#~ msgstr ""
+
+#~ msgid "During wait running, %s disappeared."
+#~ msgstr ""
+
+#~ msgid "Instance %s running successfully."
+#~ msgstr ""
+
+#~ msgid "The nwfilter(%(instance_secgroup_filter_name)s) is not found."
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image verification failed"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): image "
+#~ "verification skipped, no hash stored"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): checking"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in use:"
+#~ " on this node %(local)d local, "
+#~ "%(remote)d on other nodes"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): warning "
+#~ "-- an absent base file is in "
+#~ "use! instances: %(instance_list)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in: on"
+#~ " other nodes (%(remote)d on other "
+#~ "nodes)"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is not in use"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is in use"
+#~ msgstr ""
+
+#~ msgid "Created VM %s..."
+#~ msgstr "VM %s を作成します。"
+
+#~ msgid "Created VM %(instance_name)s as %(vm_ref)s."
+#~ msgstr "%(vm_ref)s として VM %(instance_name)s を作成しています"
+
+#~ msgid "Creating a CDROM-specific VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Created a CDROM-specific VBD %(vbd_ref)s"
+#~ "  for VM %(vm_ref)s, VDI %(vdi_ref)s."
+#~ msgstr ""
+
+#~ msgid "No primary VDI found for%(vm_ref)s"
+#~ msgstr ""
+
+#~ msgid "Fetching image %(image)s"
+#~ msgstr ""
+
+#~ msgid "Image Type: %s"
+#~ msgstr ""
+
+#~ msgid "ISO: Found sr possibly containing the ISO image"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to fetch glance image"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s ... "
+#~ msgstr "VDI %s 用に VBD を作成しています… "
+
+#~ msgid "Creating VBD for VDI %s done."
+#~ msgstr "VDI %s 用 VBD の作成が完了しました。"
+
+#~ msgid "VBD.unplug successful first time."
+#~ msgstr "VBD.unplug は1回目で成功しました。"
+
+#~ msgid "VBD.unplug rejected: retrying..."
+#~ msgstr "VBD.unplug が拒否されました: 再試行しています…"
+
+#~ msgid "Not sleeping anymore!"
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful eventually."
+#~ msgstr "VBD.unplug は最終的に成功しました。"
+
+#~ msgid "Ignoring XenAPI.Failure in VBD.unplug: %s"
+#~ msgstr "VBD.unplug 中の XenAPI.Failure を無視しています: %s"
+
+#~ msgid "Ignoring XenAPI.Failure %s"
+#~ msgstr "XenAPI.Failure %s を無視しています"
+
+#~ msgid "Starting instance %s"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn"
+#~ msgstr "インスタンス %s: 起動に失敗しました"
+
+#~ msgid "Instance %s failed to spawn - performing clean-up"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn - Unable to create VM"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Auto configuring disk for instance "
+#~ "%(instance_uuid)s, attempting to resize "
+#~ "partition..."
+#~ msgstr ""
+
+#~ msgid "Invalid value for injected_files: '%s'"
+#~ msgstr ""
+
+#~ msgid "Starting VM %s..."
+#~ msgstr "VM %s を開始します…"
+
+#~ msgid "Spawning VM %(instance_uuid)s created %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Instance %s: waiting for running"
+#~ msgstr ""
+
+#~ msgid "Instance %s: running"
+#~ msgstr ""
+
+#~ msgid "Resources to remove:%s"
+#~ msgstr ""
+
+#~ msgid "Removing VDI %(vdi_ref)s(uuid:%(vdi_to_remove)s)"
+#~ msgstr ""
+
+#~ msgid "Skipping VDI destroy for %s"
+#~ msgstr ""
+
+#~ msgid "Unable to Snapshot instance %(instance_uuid)s: %(exc)s"
+#~ msgstr ""
+
+#~ msgid "Updating instance '%(instance_uuid)s' progress to %(progress)d"
+#~ msgstr ""
+
+#~ msgid "Resize instance %s complete"
+#~ msgstr ""
+
+#~ msgid "domid changed from %(olddomid)s to %(newdomid)s"
+#~ msgstr ""
+
+#~ msgid "VM %(instance_uuid)s already halted,skipping shutdown..."
+#~ msgstr ""
+
+#~ msgid "Shutting down VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Destroying VDIs for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s using RAW or "
+#~ "VHD, skipping kernel and ramdisk "
+#~ "deletion"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_uuid)s VM destroyed"
+#~ msgstr ""
+
+#~ msgid "Destroying VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Automatically hard rebooting %d"
+#~ msgstr ""
+
+#~ msgid "Instance for migration %d not found, skipping"
+#~ msgstr ""
+
+#~ msgid "injecting network info to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "creating vif(s) for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "Created VIF %(vif_ref)s for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr "VM %(vm_ref)s, network %(network_ref)s 用 VIF %(vif_ref)s を作成しました。"
+
+#~ msgid "injecting hostname to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The agent call to %(method)s returned"
+#~ " an invalid response: %(ret)r. VM "
+#~ "id=%(instance_uuid)s; path=%(path)s; args=%(addl_args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "TIMEOUT: The call to %(method)s timed"
+#~ " out. VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "NOT IMPLEMENTED: The call to %(method)s"
+#~ " is not supported by the agent. "
+#~ "VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The call to %(method)s returned an "
+#~ "error: %(e)s. VM id=%(instance_uuid)s; "
+#~ "args=%(args)r"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr "VM %(vm_ref)s, VDI %(vdi_ref)s 用 VBD を作成しています… "
+
+#~ msgid "Error destroying VDI"
+#~ msgstr ""
+
+#~ msgid "\tVolume %s is NOT VSA volume"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s creation - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s succeeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s deletion - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s suceeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s local path call - call discover"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s ensure export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s create export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s remove export - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE remove_export for %s failed"
+#~ msgstr ""
+
+#~ msgid "Failed to retrieve QoS info"
+#~ msgstr ""
+
+#~ msgid "invalid drive data"
+#~ msgstr ""
+
+#~ msgid "drive_name not defined"
+#~ msgstr ""
+
+#~ msgid "invalid drive type name %s"
+#~ msgstr ""
+
+#~ msgid "*** Experimental VSA code ***"
+#~ msgstr ""
+
+#~ msgid "Requested number of VCs (%d) is too high. Setting to default"
+#~ msgstr ""
+
+#~ msgid "Creating VSA: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d %(vsa_name)s: Create "
+#~ "volume %(vol_name)s, %(vol_size)d GB, type "
+#~ "%(vol_type_id)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA status to %(status)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA call"
+#~ msgstr ""
+
+#~ msgid "Adding %(add_cnt)s VCs to VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "Deleting %(del_cnt)s VCs from VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Deleting %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Unable to delete volume %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Forced delete. %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate VSA ID %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Delete instance %(name)s"
+#~ msgstr ""
+
+#~ msgid "Create call received for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Failed to find VSA %(vsa_id)d"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Drive %(vol_id)s created. Status %(status)s"
+#~ msgstr ""
+
+#~ msgid "Drive %(vol_name)s (%(vol_disp_name)s) still in creating phase - wait"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Not all volumes "
+#~ "are created (%(cvol_real)d of %(cvol_exp)d)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Drive %(vol_name)s "
+#~ "(%(vol_disp_name)s) is in %(status)s state"
+#~ msgstr ""
+
+#~ msgid "Failed to update attach status for volume %(vol_name)s. %(ex)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Delete all BE volumes"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Start %(vc_count)d instances"
+#~ msgstr ""
+
diff --git a/cinder/locale/ko/LC_MESSAGES/nova.po b/cinder/locale/ko/LC_MESSAGES/nova.po
new file mode 100644
index 000000000..0c934a398
--- /dev/null
+++ b/cinder/locale/ko/LC_MESSAGES/nova.po
@@ -0,0 +1,8207 @@
+# Korean translation for cinder
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the cinder package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version:  cinder\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-04-08 23:04+0000\n"
+"PO-Revision-Date: 2011-12-16 04:42+0000\n"
+"Last-Translator: Zhongyue Luo <lzyeval@gmail.com>\n"
+"Language-Team: Korean <ko@li.org>\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: cinder/context.py:59
+#, python-format
+msgid "Arguments dropped when creating context: %s"
+msgstr ""
+
+#: cinder/context.py:90
+#, python-format
+msgid "read_deleted can only be one of 'no', 'yes' or 'only', not %r"
+msgstr ""
+
+#: cinder/crypto.py:48
+msgid "Filename of root CA"
+msgstr "CA 루트의 파일이름"
+
+#: cinder/crypto.py:51
+msgid "Filename of private key"
+msgstr "비밀키의 파일명"
+
+#: cinder/crypto.py:54
+msgid "Filename of root Certificate Revocation List"
+msgstr ""
+
+#: cinder/crypto.py:57
+msgid "Where we keep our keys"
+msgstr "키를 저장하는 경로"
+
+#: cinder/crypto.py:60
+msgid "Where we keep our root CA"
+msgstr "CA 루트를 저장하는 경로"
+
+#: cinder/crypto.py:63
+msgid "Should we use a CA for each project?"
+msgstr "각 프로젝트마다 CA를 사용하시겠습니까?"
+
+#: cinder/crypto.py:67
+#, python-format
+msgid "Subject for certificate for users, %s for project, user, timestamp"
+msgstr ""
+
+#: cinder/crypto.py:72
+#, python-format
+msgid "Subject for certificate for projects, %s for project, timestamp"
+msgstr ""
+
+#: cinder/crypto.py:292
+#, python-format
+msgid "Flags path: %s"
+msgstr "플래그 경로: %s"
+
+#: cinder/exception.py:56
+msgid "Unexpected error while running command."
+msgstr "명령 실행도중 예측하지 못한 에러가 발생했습니다"
+
+#: cinder/exception.py:59
+#, python-format
+msgid ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+msgstr ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+
+#: cinder/exception.py:94
+msgid "DB exception wrapped."
+msgstr ""
+
+#: cinder/exception.py:155
+msgid "An unknown exception occurred."
+msgstr ""
+
+#: cinder/exception.py:178
+msgid "Failed to decrypt text"
+msgstr ""
+
+#: cinder/exception.py:182
+msgid "Failed to paginate through images from image service"
+msgstr ""
+
+#: cinder/exception.py:186
+msgid "Virtual Interface creation failed"
+msgstr ""
+
+#: cinder/exception.py:190
+msgid "5 attempts to create virtual interfacewith unique mac address failed"
+msgstr ""
+
+#: cinder/exception.py:195
+msgid "Connection to glance failed"
+msgstr ""
+
+#: cinder/exception.py:199
+msgid "Connection to melange failed"
+msgstr ""
+
+#: cinder/exception.py:203
+msgid "Not authorized."
+msgstr ""
+
+#: cinder/exception.py:208
+msgid "User does not have admin privileges"
+msgstr ""
+
+#: cinder/exception.py:212
+#, python-format
+msgid "Policy doesn't allow %(action)s to be performed."
+msgstr ""
+
+#: cinder/exception.py:216
+#, python-format
+msgid "Not authorized for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:220
+msgid "Unacceptable parameters."
+msgstr ""
+
+#: cinder/exception.py:225
+msgid "Invalid snapshot"
+msgstr ""
+
+#: cinder/exception.py:229
+#, python-format
+msgid "Volume %(volume_id)s is not attached to anything"
+msgstr ""
+
+#: cinder/exception.py:233 cinder/api/openstack/compute/contrib/keypairs.py:113
+msgid "Keypair data is invalid"
+msgstr ""
+
+#: cinder/exception.py:237
+msgid "Failed to load data into json format"
+msgstr ""
+
+#: cinder/exception.py:241
+msgid "The request is invalid."
+msgstr ""
+
+#: cinder/exception.py:245
+#, python-format
+msgid "Invalid signature %(signature)s for user %(user)s."
+msgstr ""
+
+#: cinder/exception.py:249
+msgid "Invalid input received"
+msgstr ""
+
+#: cinder/exception.py:253
+#, python-format
+msgid "Invalid instance type %(instance_type)s."
+msgstr ""
+
+#: cinder/exception.py:257
+msgid "Invalid volume type"
+msgstr ""
+
+#: cinder/exception.py:261
+msgid "Invalid volume"
+msgstr ""
+
+#: cinder/exception.py:265
+#, python-format
+msgid "Invalid port range %(from_port)s:%(to_port)s. %(msg)s"
+msgstr ""
+
+#: cinder/exception.py:269
+#, python-format
+msgid "Invalid IP protocol %(protocol)s."
+msgstr ""
+
+#: cinder/exception.py:273
+#, python-format
+msgid "Invalid content type %(content_type)s."
+msgstr ""
+
+#: cinder/exception.py:277
+#, python-format
+msgid "Invalid cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:281
+msgid "Invalid reuse of an RPC connection."
+msgstr ""
+
+#: cinder/exception.py:285
+msgid "Invalid Parameter: Unicode is not supported by the current database."
+msgstr ""
+
+#: cinder/exception.py:292
+#, python-format
+msgid "%(err)s"
+msgstr ""
+
+#: cinder/exception.py:296
+#, python-format
+msgid ""
+"Cannot perform action '%(action)s' on aggregate %(aggregate_id)s. Reason:"
+" %(reason)s."
+msgstr ""
+
+#: cinder/exception.py:301
+#, python-format
+msgid "Group not valid. Reason: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:305
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot %(method)s while"
+" the instance is in this state."
+msgstr ""
+
+#: cinder/exception.py:310
+#, python-format
+msgid "Instance %(instance_id)s is not running."
+msgstr ""
+
+#: cinder/exception.py:314
+#, python-format
+msgid "Instance %(instance_id)s is not suspended."
+msgstr ""
+
+#: cinder/exception.py:318
+#, python-format
+msgid "Instance %(instance_id)s is not in rescue mode"
+msgstr ""
+
+#: cinder/exception.py:322
+msgid "Failed to suspend instance"
+msgstr ""
+
+#: cinder/exception.py:326
+msgid "Failed to resume server"
+msgstr ""
+
+#: cinder/exception.py:330
+msgid "Failed to reboot instance"
+msgstr ""
+
+#: cinder/exception.py:334
+msgid "Failed to terminate instance"
+msgstr ""
+
+#: cinder/exception.py:338
+msgid "Service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:342
+msgid "Volume service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:346
+msgid "Compute service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:350
+#, python-format
+msgid "Unable to migrate instance (%(instance_id)s) to current host (%(host)s)."
+msgstr ""
+
+#: cinder/exception.py:355
+msgid "Destination compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:359
+msgid "Original compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:363
+msgid "The supplied hypervisor type of is invalid."
+msgstr ""
+
+#: cinder/exception.py:367
+msgid "The instance requires a newer hypervisor version than has been provided."
+msgstr ""
+
+#: cinder/exception.py:372
+#, python-format
+msgid ""
+"The supplied disk path (%(path)s) already exists, it is expected not to "
+"exist."
+msgstr ""
+
+#: cinder/exception.py:377
+#, python-format
+msgid "The supplied device path (%(path)s) is invalid."
+msgstr ""
+
+#: cinder/exception.py:381
+#, python-format
+msgid "The supplied device (%(device)s) is busy."
+msgstr ""
+
+#: cinder/exception.py:385
+msgid "Unacceptable CPU info"
+msgstr ""
+
+#: cinder/exception.py:389
+#, python-format
+msgid "%(address)s is not a valid IP v4/6 address."
+msgstr ""
+
+#: cinder/exception.py:393
+#, python-format
+msgid ""
+"VLAN tag is not appropriate for the port group %(bridge)s. Expected VLAN "
+"tag is %(tag)s, but the one associated with the port group is %(pgroup)s."
+msgstr ""
+
+#: cinder/exception.py:399
+#, python-format
+msgid ""
+"vSwitch which contains the port group %(bridge)s is not associated with "
+"the desired physical adapter. Expected vSwitch is %(expected)s, but the "
+"one associated is %(actual)s."
+msgstr ""
+
+#: cinder/exception.py:406
+#, python-format
+msgid "Disk format %(disk_format)s is not acceptable"
+msgstr ""
+
+#: cinder/exception.py:410
+#, python-format
+msgid "Image %(image_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:414
+#, python-format
+msgid "Instance %(instance_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:418
+#, python-format
+msgid "Ec2 id %(ec2_id)s is unacceptable."
+msgstr ""
+
+#: cinder/exception.py:422
+msgid "Resource could not be found."
+msgstr ""
+
+#: cinder/exception.py:427
+#, python-format
+msgid "Required flag %(flag)s not set."
+msgstr ""
+
+#: cinder/exception.py:431
+#, python-format
+msgid "Volume %(volume_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:435
+#, python-format
+msgid "Unable to locate account %(account_name)s on Solidfire device"
+msgstr ""
+
+#: cinder/exception.py:440
+#, python-format
+msgid "Volume not found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:444
+#, python-format
+msgid "Volume %(volume_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:449
+msgid "Zero volume types found."
+msgstr ""
+
+#: cinder/exception.py:453
+#, python-format
+msgid "Volume type %(volume_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:457
+#, python-format
+msgid "Volume type with name %(volume_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:462
+#, python-format
+msgid ""
+"Volume Type %(volume_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:467
+#, python-format
+msgid "Snapshot %(snapshot_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:471
+#, python-format
+msgid "deleting volume %(volume_name)s that has snapshot"
+msgstr ""
+
+#: cinder/exception.py:475
+#, python-format
+msgid "deleting snapshot %(snapshot_name)s that has dependent volumes"
+msgstr ""
+
+#: cinder/exception.py:480
+#, python-format
+msgid "No target id found for volume %(volume_id)s."
+msgstr ""
+
+#: cinder/exception.py:484
+#, python-format
+msgid "No disk at %(location)s"
+msgstr ""
+
+#: cinder/exception.py:488
+#, python-format
+msgid "Could not find a handler for %(driver_type)s volume."
+msgstr ""
+
+#: cinder/exception.py:492
+#, python-format
+msgid "Invalid image href %(image_href)s."
+msgstr ""
+
+#: cinder/exception.py:496
+msgid ""
+"Some images have been stored via hrefs. This version of the api does not "
+"support displaying image hrefs."
+msgstr ""
+
+#: cinder/exception.py:501
+#, python-format
+msgid "Image %(image_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:505
+#, python-format
+msgid "Kernel not found for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:509
+#, python-format
+msgid "User %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:513
+#, python-format
+msgid "Project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:517
+#, python-format
+msgid "User %(user_id)s is not a member of project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:521
+#, python-format
+msgid "Role %(role_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:525
+msgid "Cannot find SR to read/write VDI."
+msgstr ""
+
+#: cinder/exception.py:529
+#, python-format
+msgid "%(req)s is required to create a network."
+msgstr ""
+
+#: cinder/exception.py:533
+#, python-format
+msgid "Network %(network_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:537
+#, python-format
+msgid "Network could not be found for bridge %(bridge)s"
+msgstr ""
+
+#: cinder/exception.py:541
+#, python-format
+msgid "Network could not be found for uuid %(uuid)s"
+msgstr ""
+
+#: cinder/exception.py:545
+#, python-format
+msgid "Network could not be found with cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:549
+#, python-format
+msgid "Network could not be found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:553
+msgid "No networks defined."
+msgstr ""
+
+#: cinder/exception.py:557
+#, python-format
+msgid ""
+"Either Network uuid %(network_uuid)s is not present or is not assigned to"
+" the project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:562
+#, python-format
+msgid "Host is not set to the network (%(network_id)s)."
+msgstr ""
+
+#: cinder/exception.py:566
+#, python-format
+msgid "Network %(network)s has active ports, cannot delete."
+msgstr ""
+
+#: cinder/exception.py:570
+msgid "Could not find the datastore reference(s) which the VM uses."
+msgstr ""
+
+#: cinder/exception.py:574
+#, python-format
+msgid "No fixed IP associated with id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:578
+#, python-format
+msgid "Fixed ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:582
+#, python-format
+msgid "Instance %(instance_id)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:586
+#, python-format
+msgid "Network host %(host)s has zero fixed ips in network %(network_id)s."
+msgstr ""
+
+#: cinder/exception.py:591
+#, python-format
+msgid "Instance %(instance_id)s doesn't have fixed ip '%(ip)s'."
+msgstr ""
+
+#: cinder/exception.py:595
+#, python-format
+msgid "Host %(host)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:599
+#, python-format
+msgid ""
+"Fixed IP address (%(address)s) does not exist in network "
+"(%(network_uuid)s)."
+msgstr ""
+
+#: cinder/exception.py:604
+#, python-format
+msgid "Fixed IP address %(address)s is already in use."
+msgstr ""
+
+#: cinder/exception.py:608
+#, python-format
+msgid "Fixed IP address %(address)s is invalid."
+msgstr ""
+
+#: cinder/exception.py:612
+msgid "Zero fixed ips available."
+msgstr ""
+
+#: cinder/exception.py:616
+msgid "Zero fixed ips could be found."
+msgstr ""
+
+#: cinder/exception.py:620
+#, python-format
+msgid "Floating ip not found for id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:624
+#, python-format
+msgid "The DNS entry %(name)s already exists in domain %(domain)s."
+msgstr ""
+
+#: cinder/exception.py:628
+#, python-format
+msgid "Floating ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:632
+#, python-format
+msgid "Floating ip not found for host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:636
+msgid "Zero floating ips available."
+msgstr ""
+
+#: cinder/exception.py:640
+#, python-format
+msgid "Floating ip %(address)s is associated."
+msgstr ""
+
+#: cinder/exception.py:644
+#, python-format
+msgid "Floating ip %(address)s is not associated."
+msgstr ""
+
+#: cinder/exception.py:648
+msgid "Zero floating ips exist."
+msgstr ""
+
+#: cinder/exception.py:652
+#, python-format
+msgid "Interface %(interface)s not found."
+msgstr ""
+
+#: cinder/exception.py:656
+#, python-format
+msgid "Keypair %(name)s not found for user %(user_id)s"
+msgstr ""
+
+#: cinder/exception.py:660
+#, python-format
+msgid "Certificate %(certificate_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:664
+#, python-format
+msgid "Service %(service_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:668
+#, python-format
+msgid "Host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:672
+#, python-format
+msgid "Compute host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:676
+#, python-format
+msgid "Could not find binary %(binary)s on host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:680
+#, python-format
+msgid "Auth token %(token)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:684
+#, python-format
+msgid "Access Key %(access_key)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:688
+msgid "Quota could not be found"
+msgstr ""
+
+#: cinder/exception.py:692
+#, python-format
+msgid "Quota for project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:696
+#, python-format
+msgid "Quota class %(class_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:700
+#, python-format
+msgid "Security group %(security_group_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:704
+#, python-format
+msgid "Security group %(security_group_id)s not found for project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:709
+#, python-format
+msgid "Security group with rule %(rule_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:713
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is already associated with the "
+"instance %(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:718
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is not associated with the instance "
+"%(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:723
+#, python-format
+msgid "Migration %(migration_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:727
+#, python-format
+msgid "Migration not found for instance %(instance_id)s with status %(status)s."
+msgstr ""
+
+#: cinder/exception.py:732
+#, python-format
+msgid "Console pool %(pool_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:736
+#, python-format
+msgid ""
+"Console pool of type %(console_type)s for compute host %(compute_host)s "
+"on proxy host %(host)s not found."
+msgstr ""
+
+#: cinder/exception.py:742
+#, python-format
+msgid "Console %(console_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:746
+#, python-format
+msgid "Console for instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:750
+#, python-format
+msgid ""
+"Console for instance %(instance_id)s in pool %(pool_id)s could not be "
+"found."
+msgstr ""
+
+#: cinder/exception.py:755
+#, python-format
+msgid "Invalid console type %(console_type)s "
+msgstr ""
+
+#: cinder/exception.py:759
+msgid "Zero instance types found."
+msgstr ""
+
+#: cinder/exception.py:763
+#, python-format
+msgid "Instance type %(instance_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:767
+#, python-format
+msgid "Instance type with name %(instance_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:772
+#, python-format
+msgid "Flavor %(flavor_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:776
+#, python-format
+msgid "Cell %(cell_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:780
+#, python-format
+msgid "Scheduler Host Filter %(filter_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:784
+#, python-format
+msgid "Scheduler cost function %(cost_fn_str)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:789
+#, python-format
+msgid "Scheduler weight flag not found: %(flag_name)s"
+msgstr ""
+
+#: cinder/exception.py:793
+#, python-format
+msgid "Instance %(instance_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:798
+#, python-format
+msgid ""
+"Instance Type %(instance_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:803
+msgid "LDAP object could not be found"
+msgstr ""
+
+#: cinder/exception.py:807
+#, python-format
+msgid "LDAP user %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:811
+#, python-format
+msgid "LDAP group %(group_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:815
+#, python-format
+msgid "LDAP user %(user_id)s is not a member of group %(group_id)s."
+msgstr ""
+
+#: cinder/exception.py:819
+#, python-format
+msgid "File %(file_path)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:823
+msgid "Zero files could be found."
+msgstr ""
+
+#: cinder/exception.py:827
+#, python-format
+msgid "Virtual switch associated with the network adapter %(adapter)s not found."
+msgstr ""
+
+#: cinder/exception.py:832
+#, python-format
+msgid "Network adapter %(adapter)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:836
+#, python-format
+msgid "Class %(class_name)s could not be found: %(exception)s"
+msgstr ""
+
+#: cinder/exception.py:840
+msgid "Action not allowed."
+msgstr ""
+
+#: cinder/exception.py:844
+#, python-format
+msgid "Unable to use global role %(role_id)s"
+msgstr ""
+
+#: cinder/exception.py:848
+msgid "Rotation is not allowed for snapshots"
+msgstr ""
+
+#: cinder/exception.py:852
+msgid "Rotation param is required for backup image_type"
+msgstr ""
+
+#: cinder/exception.py:861
+#, python-format
+msgid "Key pair %(key_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:865
+#, python-format
+msgid "User %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:869
+#, python-format
+msgid "LDAP user %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:873
+#, python-format
+msgid "LDAP group %(group)s already exists."
+msgstr ""
+
+#: cinder/exception.py:877
+#, python-format
+msgid "User %(uid)s is already a member of the group %(group_dn)s"
+msgstr ""
+
+#: cinder/exception.py:882
+#, python-format
+msgid "Project %(project)s already exists."
+msgstr ""
+
+#: cinder/exception.py:886
+#, python-format
+msgid "Instance %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:890
+#, python-format
+msgid "Instance Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:894
+#, python-format
+msgid "Volume Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:898
+#, python-format
+msgid "%(path)s is on shared storage: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:902
+msgid "Migration error"
+msgstr ""
+
+#: cinder/exception.py:906
+#, python-format
+msgid "Malformed message body: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:910
+#, python-format
+msgid "Could not find config at %(path)s"
+msgstr ""
+
+#: cinder/exception.py:914
+#, python-format
+msgid "Could not load paste app '%(name)s' from %(path)s"
+msgstr ""
+
+#: cinder/exception.py:918
+msgid "When resizing, instances must change size!"
+msgstr ""
+
+#: cinder/exception.py:922
+msgid "Image is larger than instance type allows"
+msgstr ""
+
+#: cinder/exception.py:926
+msgid "1 or more Zones could not complete the request"
+msgstr ""
+
+#: cinder/exception.py:930
+msgid "Instance type's memory is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:934
+msgid "Instance type's disk is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:938
+#, python-format
+msgid "Insufficient free memory on compute node to start %(uuid)s."
+msgstr ""
+
+#: cinder/exception.py:942
+msgid "Could not fetch bandwidth/cpu/disk metrics for this host."
+msgstr ""
+
+#: cinder/exception.py:946
+#, python-format
+msgid "No valid host was found. %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:950
+#, python-format
+msgid "Host %(host)s is not up or doesn't exist."
+msgstr ""
+
+#: cinder/exception.py:954
+msgid "Quota exceeded"
+msgstr ""
+
+#: cinder/exception.py:958
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: action '%(action)s' caused an error: "
+"%(reason)s."
+msgstr ""
+
+#: cinder/exception.py:963
+#, python-format
+msgid "Aggregate %(aggregate_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:967
+#, python-format
+msgid "Aggregate %(aggregate_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:971
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:975
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:980
+#, python-format
+msgid "Host %(host)s already member of another aggregate."
+msgstr ""
+
+#: cinder/exception.py:984
+#, python-format
+msgid "Aggregate %(aggregate_id)s already has host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:988
+#, python-format
+msgid "Detected more than one volume with name %(vol_name)s"
+msgstr ""
+
+#: cinder/exception.py:992
+#, python-format
+msgid "Cannot create volume_type with name %(name)s and specs %(extra_specs)s"
+msgstr ""
+
+#: cinder/exception.py:997
+msgid "Unable to create instance type"
+msgstr ""
+
+#: cinder/exception.py:1001
+msgid "Bad response from SolidFire API"
+msgstr ""
+
+#: cinder/exception.py:1005
+#, python-format
+msgid "Error in SolidFire API response: status=%(status)s"
+msgstr ""
+
+#: cinder/exception.py:1009
+#, python-format
+msgid "Error in SolidFire API response: data=%(data)s"
+msgstr ""
+
+#: cinder/exception.py:1013
+#, python-format
+msgid "Detected existing vlan with id %(vlan)d"
+msgstr ""
+
+#: cinder/exception.py:1017
+#, python-format
+msgid "Instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:1021
+#, python-format
+msgid "Invalid id: %(val)s (expecting \"i-...\")."
+msgstr ""
+
+#: cinder/exception.py:1025
+#, python-format
+msgid "Could not fetch image %(image)s"
+msgstr ""
+
+#: cinder/log.py:315
+#, python-format
+msgid "syslog facility must be one of: %s"
+msgstr ""
+
+#: cinder/manager.py:146
+#, python-format
+msgid "Skipping %(full_task_name)s, %(ticks_to_skip)s ticks left until next run"
+msgstr ""
+
+#: cinder/manager.py:152
+#, python-format
+msgid "Running periodic task %(full_task_name)s"
+msgstr ""
+
+#: cinder/manager.py:159
+#, python-format
+msgid "Error during %(full_task_name)s: %(e)s"
+msgstr ""
+
+#: cinder/manager.py:203
+msgid "Notifying Schedulers of capabilities ..."
+msgstr ""
+
+#: cinder/policy.py:30
+msgid "JSON file representing policy"
+msgstr ""
+
+#: cinder/policy.py:33
+msgid "Rule checked when requested rule is not found"
+msgstr ""
+
+#: cinder/service.py:137
+msgid "SIGTERM received"
+msgstr ""
+
+#: cinder/service.py:177
+#, python-format
+msgid "Starting %(topic)s node (version %(vcs_string)s)"
+msgstr ""
+
+#: cinder/service.py:195
+#, python-format
+msgid "Creating Consumer connection for Service %s"
+msgstr ""
+
+#: cinder/service.py:282
+msgid "Service killed that has no database entry"
+msgstr ""
+
+#: cinder/service.py:319
+msgid "The service database object disappeared, Recreating it."
+msgstr ""
+
+#: cinder/service.py:334
+msgid "Recovered model server connection!"
+msgstr ""
+
+#: cinder/service.py:340
+msgid "model server went away"
+msgstr ""
+
+#: cinder/service.py:433
+msgid "Full set of FLAGS:"
+msgstr ""
+
+#: cinder/service.py:440
+#, python-format
+msgid "%(flag)s : FLAG SET "
+msgstr ""
+
+#: cinder/utils.py:79
+#, python-format
+msgid "Inner Exception: %s"
+msgstr ""
+
+#: cinder/utils.py:165
+#, python-format
+msgid "Fetching %s"
+msgstr ""
+
+#: cinder/utils.py:210
+#, python-format
+msgid "Got unknown keyword args to utils.execute: %r"
+msgstr ""
+
+#: cinder/utils.py:220
+#, python-format
+msgid "Running cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/utils.py:236 cinder/utils.py:315
+#, python-format
+msgid "Result was %s"
+msgstr ""
+
+#: cinder/utils.py:249
+#, python-format
+msgid "%r failed. Retrying."
+msgstr ""
+
+#: cinder/utils.py:291
+#, python-format
+msgid "Running cmd (SSH): %s"
+msgstr ""
+
+#: cinder/utils.py:293
+msgid "Environment not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:297
+msgid "process_input not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:352
+#, python-format
+msgid "debug in callback: %s"
+msgstr ""
+
+#: cinder/utils.py:534
+#, python-format
+msgid "Link Local address is not found.:%s"
+msgstr ""
+
+#: cinder/utils.py:537
+#, python-format
+msgid "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+msgstr ""
+
+#: cinder/utils.py:648
+#, python-format
+msgid "Invalid backend: %s"
+msgstr ""
+
+#: cinder/utils.py:659
+#, python-format
+msgid "backend %s"
+msgstr ""
+
+#: cinder/utils.py:709
+msgid "in looping call"
+msgstr ""
+
+#: cinder/utils.py:927
+#, python-format
+msgid "Attempting to grab semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:931
+#, python-format
+msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:935
+#, python-format
+msgid "Attempting to grab file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:942
+#, python-format
+msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:1001
+#, python-format
+msgid "Found sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1008
+#, python-format
+msgid "Cleaned sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1023
+#, python-format
+msgid "Found lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1028
+#, python-format
+msgid "Cleaned lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1138
+#, python-format
+msgid "Expected object of type: %s"
+msgstr ""
+
+#: cinder/utils.py:1169
+#, python-format
+msgid "Invalid server_string: %s"
+msgstr ""
+
+#: cinder/utils.py:1298
+#, python-format
+msgid "timefunc: '%(name)s' took %(total_time).2f secs"
+msgstr ""
+
+#: cinder/utils.py:1330
+msgid "Original exception being dropped"
+msgstr ""
+
+#: cinder/utils.py:1461
+#, python-format
+msgid "Class %(fullname)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1463
+#, python-format
+msgid "Class %(fullname)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1495
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1497
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1681
+#, python-format
+msgid "Could not remove tmpdir: %s"
+msgstr ""
+
+#: cinder/wsgi.py:97
+#, python-format
+msgid "Started %(name)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:108
+msgid "Stopping WSGI server."
+msgstr ""
+
+#: cinder/wsgi.py:111
+msgid "Stopping raw TCP server."
+msgstr ""
+
+#: cinder/wsgi.py:117
+#, python-format
+msgid "Starting TCP server %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:133
+msgid "WSGI server has stopped."
+msgstr ""
+
+#: cinder/wsgi.py:211
+msgid "You must implement __call__"
+msgstr ""
+
+#: cinder/api/direct.py:218
+msgid "not available"
+msgstr ""
+
+#: cinder/api/direct.py:299
+#, python-format
+msgid "Returned non-serializeable type: %s"
+msgstr ""
+
+#: cinder/api/sizelimit.py:51
+msgid "Request is too large."
+msgstr ""
+
+#: cinder/api/validator.py:142
+#, python-format
+msgid "%(key)s with value %(value)s failed validator  %(validator)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:73
+#, python-format
+msgid "%(code)s: %(message)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:95
+#, python-format
+msgid "FaultWrapper: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:170
+msgid "Too many failed authentications."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:180
+#, python-format
+msgid ""
+"Access key %(access_key)s has had %(failures)d failed authentications and"
+" will be locked out for %(lock_mins)d minutes."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:267
+msgid "Signature not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:271
+msgid "Access key not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:306 cinder/api/ec2/__init__.py:319
+msgid "Failure communicating with keystone"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:388
+#, python-format
+msgid "Authentication Failure: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:404
+#, python-format
+msgid "Authenticated Request For %(uname)s:%(pname)s)"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:435
+#, python-format
+msgid "action: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:437
+#, python-format
+msgid "arg: %(key)s\t\tval: %(value)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:512
+#, python-format
+msgid "Unauthorized request for controller=%(controller)s and action=%(action)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:584
+#, python-format
+msgid "InstanceNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:590
+#, python-format
+msgid "VolumeNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:596
+#, python-format
+msgid "SnapshotNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:602
+#, python-format
+msgid "NotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:605
+#, python-format
+msgid "EC2APIError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:613
+#, python-format
+msgid "KeyPairExists raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:617
+#, python-format
+msgid "InvalidParameterValue raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:621
+#, python-format
+msgid "InvalidPortRange raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:625
+#, python-format
+msgid "NotAuthorized raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:629
+#, python-format
+msgid "InvalidRequest raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:633
+#, python-format
+msgid "QuotaError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:637
+#, python-format
+msgid "Invalid id: bogus (expecting \"i-...\"): %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:646
+#, python-format
+msgid "Unexpected error raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:647
+#, python-format
+msgid "Environment: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:649 cinder/api/metadata/handler.py:248
+msgid "An unknown error has occurred. Please try your request again."
+msgstr ""
+
+#: cinder/api/ec2/apirequest.py:64
+#, python-format
+msgid "Unsupported API request: controller = %(controller)s, action = %(action)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:336
+#, python-format
+msgid "Create snapshot of volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:372
+#, python-format
+msgid ""
+"Value (%s) for KeyName is invalid. Content limited to Alphanumeric "
+"character, spaces, dashes, and underscore."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:378
+#, python-format
+msgid "Value (%s) for Keyname is invalid. Length exceeds maximum of 255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:382
+#, python-format
+msgid "Create key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:391
+#, python-format
+msgid "Import key %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:409
+#, python-format
+msgid "Delete key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:551
+msgid "Invalid CIDR"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:639 cinder/api/ec2/cloud.py:693
+#: cinder/api/ec2/cloud.py:800
+msgid "Not enough parameters, need group_name or group_id"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:654
+#: cinder/api/openstack/compute/contrib/security_groups.py:517
+#, python-format
+msgid "Revoke security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:666 cinder/api/ec2/cloud.py:719
+#, python-format
+msgid "%s Not enough parameters to build a valid rule"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:684 cinder/api/ec2/cloud.py:744
+msgid "No rule for the specified parameters."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:708
+#: cinder/api/openstack/compute/contrib/security_groups.py:354
+#, python-format
+msgid "Authorize security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:725
+#, python-format
+msgid "%s - This rule already exists in group"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:769
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Content limited to "
+"Alphanumeric characters, spaces, dashes, and underscores."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:776
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Length exceeds maximum of "
+"255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:780
+#: cinder/api/openstack/compute/contrib/security_groups.py:292
+#, python-format
+msgid "Create Security Group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:783
+#, python-format
+msgid "group %s already exists"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:815
+#: cinder/api/openstack/compute/contrib/security_groups.py:245
+#, python-format
+msgid "Delete security group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:823 cinder/compute/manager.py:1630
+#, python-format
+msgid "Get console output for instance %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:894
+#, python-format
+msgid "Create volume from snapshot %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:898 cinder/api/openstack/compute/contrib/volumes.py:186
+#: cinder/api/openstack/volume/volumes.py:222
+#, python-format
+msgid "Create volume of %s GB"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:921
+msgid "Delete Failed"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:931
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(instance_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:939
+msgid "Attach Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:952 cinder/api/openstack/compute/contrib/volumes.py:366
+#, python-format
+msgid "Detach volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:959
+msgid "Detach Volume Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:984 cinder/api/ec2/cloud.py:1041
+#: cinder/api/ec2/cloud.py:1518 cinder/api/ec2/cloud.py:1533
+#, python-format
+msgid "attribute not supported: %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1107
+#, python-format
+msgid "vol = %s\n"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1255
+msgid "Allocate address"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1267
+#, python-format
+msgid "Release address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1272
+#, python-format
+msgid "Associate address %(public_ip)s to instance %(instance_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1282
+#, python-format
+msgid "Disassociate address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1308
+msgid "Image must be available"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1329
+msgid "Going to start terminating instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1343
+#, python-format
+msgid "Reboot instance %r"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1354
+msgid "Going to stop instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1365
+msgid "Going to start instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1455
+#, python-format
+msgid "De-registering image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1471
+msgid "imageLocation is required"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1490
+#, python-format
+msgid "Registered image %(image_location)s with id %(image_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1536
+msgid "user or group not specified"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1538
+msgid "only group \"all\" is supported"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1540
+msgid "operation_type must be add or remove"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1542
+#, python-format
+msgid "Updating image %s publicity"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1555
+#, python-format
+msgid "Not allowed to modify attributes for image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1603
+#, python-format
+msgid "Couldn't stop instance with in %d sec"
+msgstr ""
+
+#: cinder/api/metadata/handler.py:246 cinder/api/metadata/handler.py:253
+#, python-format
+msgid "Failed to get metadata for ip: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:43
+#, python-format
+msgid "Caught error: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:45 cinder/api/openstack/wsgi.py:886
+#, python-format
+msgid "%(url)s returned with HTTP %(status)d"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:94
+msgid "Must specify an ExtensionManager class"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:105
+#, python-format
+msgid "Extended resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:130
+#, python-format
+msgid ""
+"Extension %(ext_name)s: Cannot extend resource %(collection)s: No such "
+"resource"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:135
+#, python-format
+msgid "Extension %(ext_name)s extending resource: %(collection)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:90
+#, python-format
+msgid "%(user_id)s could not be found with token '%(token)s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:134
+#, python-format
+msgid "%(user_id)s must be an admin or a member of %(project_id)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:152
+msgid "Authentication requests must be made against a version root (e.g. /v2)."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:167
+#, python-format
+msgid "Could not find %s in request."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:191
+#, python-format
+msgid "Successfully authenticated '%s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:241
+msgid "User not found with provided API key."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:258
+#, python-format
+msgid "Provided API key is valid, but not for user '%(username)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:133 cinder/api/openstack/common.py:167
+msgid "limit param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:136 cinder/api/openstack/common.py:171
+msgid "limit param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:161
+msgid "offset param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:175
+msgid "offset param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:203
+#, python-format
+msgid "marker [%s] not found"
+msgstr ""
+
+#: cinder/api/openstack/common.py:243
+#, python-format
+msgid "href %s does not contain version"
+msgstr ""
+
+#: cinder/api/openstack/common.py:278
+msgid "Image metadata limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/common.py:295
+#, python-format
+msgid "Converting nw_info: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:305
+#, python-format
+msgid "Converted networks: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:338
+#, python-format
+msgid "Cannot '%(action)s' while instance is in %(attr)s %(state)s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:341
+#, python-format
+msgid "Instance is in an invalid state for '%(action)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:421
+msgid "Rejecting snapshot request, snapshots currently disabled"
+msgstr ""
+
+#: cinder/api/openstack/common.py:423
+msgid "Instance snapshots are not permitted at this time."
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:188
+#, python-format
+msgid "Loaded extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:225
+#, python-format
+msgid "Ext name: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:226
+#, python-format
+msgid "Ext alias: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:227
+#, python-format
+msgid "Ext description: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:229
+#, python-format
+msgid "Ext namespace: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:230
+#, python-format
+msgid "Ext updated: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:232
+#, python-format
+msgid "Exception loading extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:246
+#, python-format
+msgid "Loading extension %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:252
+#, python-format
+msgid "Calling extension factory %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:264
+#, python-format
+msgid "Failed to load extension %(ext_factory)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:344
+#, python-format
+msgid "Failed to load extension %(classpath)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:368
+#, python-format
+msgid "Failed to load extension %(ext_name)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:135 cinder/api/openstack/wsgi.py:538
+msgid "cannot understand JSON"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:159
+#: cinder/api/openstack/compute/contrib/hosts.py:86
+msgid "cannot understand XML"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:543
+msgid "too many body keys"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:582
+#, python-format
+msgid "Exception handling resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:586
+#, python-format
+msgid "Fault thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:589
+#, python-format
+msgid "HTTP exception thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:697
+msgid "Unrecognized Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:701
+msgid "No Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:705
+msgid "Empty body provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:816
+#, python-format
+msgid "There is no such action: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:819 cinder/api/openstack/wsgi.py:832
+#: cinder/api/openstack/compute/server_metadata.py:58
+#: cinder/api/openstack/compute/server_metadata.py:76
+#: cinder/api/openstack/compute/server_metadata.py:101
+#: cinder/api/openstack/compute/server_metadata.py:126
+#: cinder/api/openstack/compute/contrib/admin_actions.py:211
+#: cinder/api/openstack/compute/contrib/console_output.py:52
+msgid "Malformed request body"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:829
+msgid "Unsupported Content-Type"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:841
+msgid "Malformed request url"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:889
+#, python-format
+msgid "%(url)s returned a fault: %(e)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:265
+msgid "element is not a child"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:414
+msgid "root element selecting a list"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:739
+#, python-format
+msgid "Template tree mismatch; adding slave %(slavetag)s to master %(mastertag)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:858
+msgid "subclasses must implement construct()!"
+msgstr ""
+
+#: cinder/api/openstack/compute/extensions.py:29
+#: cinder/api/openstack/volume/extensions.py:29
+msgid "Initializing extension manager."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:40
+#: cinder/api/openstack/compute/images.py:146
+#: cinder/api/openstack/compute/images.py:161
+msgid "Image not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:79
+msgid "Incorrect request body format"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:83
+#: cinder/api/openstack/compute/server_metadata.py:80
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:79
+#: cinder/api/openstack/compute/contrib/volumetypes.py:188
+msgid "Request body and URI mismatch"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:86
+#: cinder/api/openstack/compute/server_metadata.py:84
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:82
+#: cinder/api/openstack/compute/contrib/volumetypes.py:191
+msgid "Request body contains too many items"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:111
+msgid "Invalid metadata key"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:74
+msgid "Instance does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:97
+msgid "Instance is not a member of specified network"
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:140
+#, python-format
+msgid ""
+"Only %(value)s %(verb)s request(s) can be made to %(uri)s every "
+"%(unit_string)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:266
+msgid "This request was rate-limited."
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:38
+#: cinder/api/openstack/compute/server_metadata.py:122
+#: cinder/api/openstack/compute/server_metadata.py:159
+msgid "Server does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:141
+#: cinder/api/openstack/compute/server_metadata.py:152
+msgid "Metadata item was not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:425
+#, python-format
+msgid "Invalid server status: %(status)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:433
+msgid "Invalid changes-since value"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:483
+msgid "Personality file limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:485
+msgid "Personality file path too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:487
+msgid "Personality file content too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:501
+msgid "Server name is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:505
+msgid "Server name is an empty string"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:509
+msgid "Server name must be less than 256 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:527
+#, python-format
+msgid "Bad personality format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:530
+msgid "Bad personality format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:535
+#, python-format
+msgid "Personality content for %s cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:550
+#, python-format
+msgid "Bad networks format: network uuid is not in proper format (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:559
+#, python-format
+msgid "Invalid fixed IP address (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:566
+#, python-format
+msgid "Duplicate networks (%s) are not allowed"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:572
+#, python-format
+msgid "Bad network format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:575
+msgid "Bad networks format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:587
+msgid "Userdata content cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:594
+msgid "accessIPv4 is not proper IPv4 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:601
+msgid "accessIPv6 is not proper IPv6 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:633
+msgid "Server name is not defined"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:675
+#: cinder/api/openstack/compute/servers.py:740
+msgid "Invalid flavorRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:737
+msgid "Can not find requested image"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:743
+msgid "Invalid key_name provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:829
+#: cinder/api/openstack/compute/servers.py:849
+msgid "Instance has not been resized."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:835
+#, python-format
+msgid "Error in confirm-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:855
+#, python-format
+msgid "Error in revert-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:868
+msgid "Argument 'type' for reboot is not HARD or SOFT"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:872
+msgid "Missing argument 'type' for reboot"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:885
+#, python-format
+msgid "Error in reboot %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:897
+msgid "Unable to locate requested flavor."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:900
+msgid "Resize requires a change in size."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:924
+msgid "Malformed server entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:931
+msgid "Missing imageRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:940
+msgid "Invalid imageRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:949
+msgid "Missing flavorRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:962
+msgid "No adminPass was specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:966
+#: cinder/api/openstack/compute/servers.py:1144
+msgid "Invalid adminPass"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:980
+msgid "Unable to parse metadata key/value pairs."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:993
+msgid "Resize request has invalid 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:996
+msgid "Resize requests require 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1014
+#: cinder/api/openstack/compute/contrib/aggregates.py:142
+#: cinder/api/openstack/compute/contrib/networks.py:65
+msgid "Invalid request body"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1019
+msgid "Could not parse imageRef from request."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1071
+msgid "Instance could not be found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1074
+msgid "Cannot find image for rebuild"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1103
+msgid "createImage entity requires name attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1112
+#: cinder/api/openstack/compute/contrib/admin_actions.py:238
+msgid "Invalid metadata"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1167
+#, python-format
+msgid "Removing options '%(unk_opt_str)s' from query"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:60
+#, python-format
+msgid "Compute.api::pause %s"
+msgstr "Compute.api::pause %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:77
+#, python-format
+msgid "Compute.api::unpause %s"
+msgstr "Compute.api::unpause %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:94
+#, python-format
+msgid "compute.api::suspend %s"
+msgstr "compute.api::suspend %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:111
+#, python-format
+msgid "compute.api::resume %s"
+msgstr "compute.api::resume %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:127
+#, python-format
+msgid "Error in migrate %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:141
+#, python-format
+msgid "Compute.api::reset_network %s"
+msgstr "Compute.api::reset_network %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:154
+#: cinder/api/openstack/compute/contrib/admin_actions.py:170
+#: cinder/api/openstack/compute/contrib/admin_actions.py:186
+#: cinder/api/openstack/compute/contrib/multinic.py:41
+#: cinder/api/openstack/compute/contrib/rescue.py:44
+msgid "Server not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:157
+#, python-format
+msgid "Compute.api::inject_network_info %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:173
+#, python-format
+msgid "Compute.api::lock %s"
+msgstr "Compute.api::lock %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:189
+#, python-format
+msgid "Compute.api::unlock %s"
+msgstr "Compute.api::unlock %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:219
+#, python-format
+msgid "createBackup entity requires %s attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:223
+msgid "Malformed createBackup entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:229
+msgid "createBackup attribute 'rotation' must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:244
+#: cinder/api/openstack/compute/contrib/console_output.py:47
+#: cinder/api/openstack/compute/contrib/console_output.py:59
+#: cinder/api/openstack/compute/contrib/consoles.py:49
+#: cinder/api/openstack/compute/contrib/consoles.py:60
+#: cinder/api/openstack/compute/contrib/server_action_list.py:49
+#: cinder/api/openstack/compute/contrib/server_diagnostics.py:47
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:38
+msgid "Instance not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:272
+msgid "host and block_migration must be specified."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:284
+#, python-format
+msgid "Live migration of instance %(id)s to host %(host)s failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:76
+#, python-format
+msgid ""
+"Cannot create aggregate with name %(name)s and availability zone "
+"%(avail_zone)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:88
+#, python-format
+msgid "Cannot show aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:114
+#, python-format
+msgid "Cannot update aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:126
+#, python-format
+msgid "Cannot delete aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:139
+#, python-format
+msgid "Aggregates does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:152
+#: cinder/api/openstack/compute/contrib/aggregates.py:158
+#, python-format
+msgid "Cannot add host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:171
+#: cinder/api/openstack/compute/contrib/aggregates.py:175
+#, python-format
+msgid "Cannot remove host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:195
+#, python-format
+msgid "Cannot set metadata %(metadata)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/certificates.py:75
+msgid "Only root certificate can be retrieved."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/cloudpipe.py:146
+msgid ""
+"Unable to claim IP for VPN instances, ensure it isn't running, and try "
+"again in a few minutes"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:44
+msgid "Missing type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:56
+msgid "Invalid type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/disk_config.py:44
+#, python-format
+msgid "%s must be either 'MANUAL' or 'AUTO'."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/extended_server_attributes.py:77
+#: cinder/api/openstack/compute/contrib/extended_status.py:61
+msgid "Server not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:61
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:91
+msgid "Flavor not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:49
+#: cinder/api/openstack/compute/contrib/volumetypes.py:158
+msgid "No Request Body"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:159
+#, python-format
+msgid "No more floating ips in pool %s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:161
+msgid "No more floating ips available."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:201
+#: cinder/api/openstack/compute/contrib/floating_ips.py:230
+#: cinder/api/openstack/compute/contrib/security_groups.py:571
+#: cinder/api/openstack/compute/contrib/security_groups.py:604
+msgid "Missing parameter dict"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:204
+#: cinder/api/openstack/compute/contrib/floating_ips.py:233
+msgid "Address not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:213
+msgid "No fixed ips associated to instance"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:216
+msgid "Associate floating ip failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:144
+#, python-format
+msgid "Invalid status: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:148
+#, python-format
+msgid "Invalid mode: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:152
+#, python-format
+msgid "Invalid update setting: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:170
+#, python-format
+msgid "Putting host %(host)s in maintenance mode %(mode)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:181
+#, python-format
+msgid "Setting host %(host)s to %(state)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:230
+msgid "Describe-resource is admin only functionality"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:238
+msgid "Host not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:70
+msgid "Keypair name contains unsafe characters"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:95
+msgid "Keypair name must be between 1 and 255 characters long"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:100
+#, python-format
+msgid "Key pair '%s' already exists."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:52
+msgid "Missing 'networkId' argument for addFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:68
+msgid "Missing 'address' argument for removeFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:77
+#, python-format
+msgid "Unable to find address %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:62
+#, python-format
+msgid "Network does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:70
+#, python-format
+msgid "Disassociating network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:74
+#: cinder/api/openstack/compute/contrib/networks.py:91
+#: cinder/api/openstack/compute/contrib/networks.py:101
+msgid "Network not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:87
+#, python-format
+msgid "Showing network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:97
+#, python-format
+msgid "Deleting network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/scheduler_hints.py:41
+msgid "Malformed scheduler_hints attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:222
+msgid "Security group id should be integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:243
+msgid "Security group is still in use"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:295
+#, python-format
+msgid "Security group %s already exists"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:315
+#, python-format
+msgid "Security group %s is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:318
+#, python-format
+msgid "Security group %s cannot be empty."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:321
+#, python-format
+msgid "Security group %s should not be greater than 255 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:348
+msgid "Parent group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:351
+#, python-format
+msgid "Security group (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:369
+msgid "Not enough parameters to build a valid rule."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:376
+#, python-format
+msgid "This rule already exists in group %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:414
+msgid "Parent or group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:507
+msgid "Rule id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:510
+#, python-format
+msgid "Rule (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:574
+#: cinder/api/openstack/compute/contrib/security_groups.py:607
+msgid "Security group not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:578
+#: cinder/api/openstack/compute/contrib/security_groups.py:611
+msgid "Security group name cannot be empty"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:45
+#, python-format
+msgid "start instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:54
+#, python-format
+msgid "stop instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:73
+#: cinder/api/openstack/volume/volumes.py:106
+#, python-format
+msgid "vol=%s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:146
+#: cinder/api/openstack/volume/volumes.py:184
+#, python-format
+msgid "Delete volume with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:329
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(server_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:481
+#: cinder/api/openstack/volume/snapshots.py:110
+#, python-format
+msgid "Delete snapshot with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:524
+#: cinder/api/openstack/volume/snapshots.py:150
+#, python-format
+msgid "Create snapshot from volume %s"
+msgstr ""
+
+#: cinder/auth/fakeldap.py:33
+msgid "Attempted to instantiate singleton"
+msgstr ""
+
+#: cinder/auth/ldapdriver.py:650
+#, python-format
+msgid ""
+"Attempted to remove the last member of a group. Deleting the group at %s "
+"instead."
+msgstr ""
+
+#: cinder/auth/manager.py:298
+#, python-format
+msgid "Looking up user: %r"
+msgstr ""
+
+#: cinder/auth/manager.py:302
+#, python-format
+msgid "Failed authorization for access key %s"
+msgstr ""
+
+#: cinder/auth/manager.py:308
+#, python-format
+msgid "Using project name = user name (%s)"
+msgstr ""
+
+#: cinder/auth/manager.py:315
+#, python-format
+msgid "failed authorization: no project named %(pjid)s (user=%(uname)s)"
+msgstr ""
+
+#: cinder/auth/manager.py:324
+#, python-format
+msgid ""
+"Failed authorization: user %(uname)s not admin and not member of project "
+"%(pjname)s"
+msgstr ""
+
+#: cinder/auth/manager.py:331 cinder/auth/manager.py:343
+#, python-format
+msgid "user.secret: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:332 cinder/auth/manager.py:344
+#, python-format
+msgid "expected_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:333 cinder/auth/manager.py:345
+#, python-format
+msgid "signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:335 cinder/auth/manager.py:357
+#, python-format
+msgid "Invalid signature for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:353
+#, python-format
+msgid "host_only_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:449
+msgid "Must specify project"
+msgstr ""
+
+#: cinder/auth/manager.py:490
+#, python-format
+msgid "Adding role %(role)s to user %(uid)s in project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:493
+#, python-format
+msgid "Adding sitewide role %(role)s to user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:519
+#, python-format
+msgid "Removing role %(role)s from user %(uid)s on project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:522
+#, python-format
+msgid "Removing sitewide role %(role)s from user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:595
+#, python-format
+msgid "Created project %(name)s with manager %(manager_user)s"
+msgstr ""
+
+#: cinder/auth/manager.py:613
+#, python-format
+msgid "modifying project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:625
+#, python-format
+msgid "Adding user %(uid)s to project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:646
+#, python-format
+msgid "Remove user %(uid)s from project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:676
+#, python-format
+msgid "Deleting project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:734
+#, python-format
+msgid "Created user %(rvname)s (admin: %(rvadmin)r)"
+msgstr ""
+
+#: cinder/auth/manager.py:743
+#, python-format
+msgid "Deleting user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:753
+#, python-format
+msgid "Access Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:755
+#, python-format
+msgid "Secret Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:757
+#, python-format
+msgid "Admin status set to %(admin)r for user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:802
+#, python-format
+msgid "No vpn data for project %s"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:46
+msgid "Instance type for vpn instances"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:49
+msgid "Template for cloudpipe instance boot script"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:52
+msgid "Network to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:55
+msgid "Netmask to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:107
+#, python-format
+msgid "Launching VPN for %s"
+msgstr ""
+
+#: cinder/compute/api.py:141
+msgid "No compute host specified"
+msgstr ""
+
+#: cinder/compute/api.py:144
+#, python-format
+msgid "Unable to find host for Instance %s"
+msgstr ""
+
+#: cinder/compute/api.py:192
+#, python-format
+msgid ""
+"Quota exceeded for %(pid)s, tried to set %(num_metadata)s metadata "
+"properties"
+msgstr ""
+
+#: cinder/compute/api.py:203
+#, python-format
+msgid "Quota exceeded for %(pid)s, metadata property key or value too long"
+msgstr ""
+
+#: cinder/compute/api.py:257
+msgid "Cannot run any more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:259
+#, python-format
+msgid "Can only run %s more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:261
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances. "
+msgstr ""
+
+#: cinder/compute/api.py:310
+msgid "Creating a raw instance"
+msgstr ""
+
+#: cinder/compute/api.py:312
+#, python-format
+msgid "Using Kernel=%(kernel_id)s, Ramdisk=%(ramdisk_id)s"
+msgstr ""
+
+#: cinder/compute/api.py:383
+#, python-format
+msgid "Going to run %s instances..."
+msgstr ""
+
+#: cinder/compute/api.py:447
+#, python-format
+msgid "bdm %s"
+msgstr ""
+
+#: cinder/compute/api.py:474
+#, python-format
+msgid "block_device_mapping %s"
+msgstr ""
+
+#: cinder/compute/api.py:591
+#, python-format
+msgid "Sending create to scheduler for %(pid)s/%(uid)s's"
+msgstr ""
+
+#: cinder/compute/api.py:871
+msgid "Going to try to soft delete instance"
+msgstr ""
+
+#: cinder/compute/api.py:891
+msgid "No host for instance, deleting immediately"
+msgstr ""
+
+#: cinder/compute/api.py:939
+msgid "Going to try to terminate instance"
+msgstr ""
+
+#: cinder/compute/api.py:977
+msgid "Going to try to stop instance"
+msgstr ""
+
+#: cinder/compute/api.py:996
+msgid "Going to try to start instance"
+msgstr ""
+
+#: cinder/compute/api.py:1000
+#, python-format
+msgid "Instance %(instance_uuid)s is not stopped. (%(vm_state)s"
+msgstr ""
+
+#: cinder/compute/api.py:1071 cinder/volume/api.py:173
+#: cinder/volume/volume_types.py:64
+#, python-format
+msgid "Searching by: %s"
+msgstr ""
+
+#: cinder/compute/api.py:1201
+#, python-format
+msgid "Image type not recognized %s"
+msgstr ""
+
+#: cinder/compute/api.py:1369
+msgid "flavor_id is None. Assuming migration."
+msgstr ""
+
+#: cinder/compute/api.py:1377
+#, python-format
+msgid ""
+"Old instance type %(current_instance_type_name)s,  new instance type "
+"%(new_instance_type_name)s"
+msgstr ""
+
+#: cinder/compute/api.py:1644
+#, python-format
+msgid "multiple fixedips exist, using the first: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:57 cinder/compute/instance_types.py:65
+msgid "create arguments must be positive integers"
+msgstr ""
+
+#: cinder/compute/instance_types.py:76 cinder/volume/volume_types.py:41
+#, python-format
+msgid "DB error: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:86
+#, python-format
+msgid "Instance type %s not found for deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:138
+#, python-format
+msgid "check_instance_lock: decorating: |%s|"
+msgstr "check_instance_lock: decorating: |%s|"
+
+#: cinder/compute/manager.py:140
+#, python-format
+msgid ""
+"check_instance_lock: arguments: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+msgstr ""
+
+#: cinder/compute/manager.py:144
+#, python-format
+msgid "check_instance_lock: locked: |%s|"
+msgstr "check_instance_lock: locked: |%s|"
+
+#: cinder/compute/manager.py:146
+#, python-format
+msgid "check_instance_lock: admin: |%s|"
+msgstr "check_instance_lock: admin: |%s|"
+
+#: cinder/compute/manager.py:151
+#, python-format
+msgid "check_instance_lock: executing: |%s|"
+msgstr "check_instance_lock: executing: |%s|"
+
+#: cinder/compute/manager.py:155
+#, python-format
+msgid "check_instance_lock: not executing |%s|"
+msgstr "check_instance_lock: not executing |%s|"
+
+#: cinder/compute/manager.py:201
+#, python-format
+msgid "Unable to load the virtualization driver: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:223
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s has been destroyed from under us while trying "
+"to set it to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:240
+#, python-format
+msgid "Current state is %(drv_state)s, state in DB is %(db_state)s."
+msgstr ""
+
+#: cinder/compute/manager.py:245
+msgid "Rebooting instance after cinder-compute restart."
+msgstr ""
+
+#: cinder/compute/manager.py:255
+msgid "Hypervisor driver does not support firewall rules"
+msgstr ""
+
+#: cinder/compute/manager.py:260
+msgid "Checking state"
+msgstr ""
+
+#: cinder/compute/manager.py:329
+#, python-format
+msgid "Setting up bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:400
+#, python-format
+msgid "Instance %s already deleted from database. Attempting forceful vm deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:406
+#, python-format
+msgid "Exception encountered while terminating the instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:444
+#, python-format
+msgid "Instance %s not found."
+msgstr ""
+
+#: cinder/compute/manager.py:480
+msgid "Instance has already been created"
+msgstr "인스턴스가 이미 생성되었습니다"
+
+#: cinder/compute/manager.py:523
+#, python-format
+msgid ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:528
+#, python-format
+msgid ""
+"Image '%(image_id)s' size %(size_bytes)d exceeded instance_type allowed "
+"size %(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:538
+msgid "Starting instance..."
+msgstr ""
+
+#: cinder/compute/manager.py:548
+msgid "Skipping network allocation for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:561
+msgid "Instance failed network setup"
+msgstr ""
+
+#: cinder/compute/manager.py:565
+#, python-format
+msgid "Instance network_info: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:578
+msgid "Instance failed block device setup"
+msgstr ""
+
+#: cinder/compute/manager.py:594
+msgid "Instance failed to spawn"
+msgstr ""
+
+#: cinder/compute/manager.py:615
+msgid "Deallocating network for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:672
+#, python-format
+msgid "%(action_str)s instance"
+msgstr ""
+
+#: cinder/compute/manager.py:699
+#, python-format
+msgid "Ignoring DiskNotFound: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:708
+#, python-format
+msgid "terminating bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:742 cinder/compute/manager.py:1328
+#: cinder/compute/manager.py:1416 cinder/compute/manager.py:2501
+#, python-format
+msgid "%s. Setting instance vm_state to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:811
+#, python-format
+msgid ""
+"Cannot rebuild instance [%(instance_uuid)s], because the given image does"
+" not exist."
+msgstr ""
+
+#: cinder/compute/manager.py:816
+#, python-format
+msgid "Cannot rebuild instance [%(instance_uuid)s]: %(exc)s"
+msgstr ""
+
+#: cinder/compute/manager.py:823
+#, python-format
+msgid "Rebuilding instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:876
+#, python-format
+msgid "Rebooting instance %s"
+msgstr "인스턴스 %s를 재부팅합니다"
+
+#: cinder/compute/manager.py:891
+#, python-format
+msgid ""
+"trying to reboot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:933
+#, python-format
+msgid "instance %s: snapshotting"
+msgstr "인스턴스 %s: 스냅샷 저장중"
+
+#: cinder/compute/manager.py:939
+#, python-format
+msgid ""
+"trying to snapshot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:995
+#, python-format
+msgid "Found %(num_images)d images (rotation: %(rotation)d)"
+msgstr ""
+
+#: cinder/compute/manager.py:1001
+#, python-format
+msgid "Rotating out %d backups"
+msgstr ""
+
+#: cinder/compute/manager.py:1005
+#, python-format
+msgid "Deleting image %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1035
+#, python-format
+msgid "Failed to set admin password. Instance %s is not running"
+msgstr ""
+
+#: cinder/compute/manager.py:1041
+#, python-format
+msgid "Instance %s: Root password set"
+msgstr ""
+
+#: cinder/compute/manager.py:1050
+msgid "set_admin_password is not implemented by this driver."
+msgstr ""
+
+#: cinder/compute/manager.py:1064
+msgid "Error setting admin password"
+msgstr ""
+
+#: cinder/compute/manager.py:1079
+#, python-format
+msgid ""
+"trying to inject a file into a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1084
+#, python-format
+msgid "instance %(instance_uuid)s: injecting file to %(path)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1098
+#, python-format
+msgid ""
+"trying to update agent on a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1103
+#, python-format
+msgid "instance %(instance_uuid)s: updating agent to %(url)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1116
+#, python-format
+msgid "instance %s: rescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1141
+#, python-format
+msgid "instance %s: unrescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1270
+msgid "destination same as source!"
+msgstr ""
+
+#: cinder/compute/manager.py:1287
+#, python-format
+msgid "instance %s: migrating"
+msgstr ""
+
+#: cinder/compute/manager.py:1471
+#, python-format
+msgid "instance %s: pausing"
+msgstr ""
+
+#: cinder/compute/manager.py:1489
+#, python-format
+msgid "instance %s: unpausing"
+msgstr ""
+
+#: cinder/compute/manager.py:1525
+#, python-format
+msgid "instance %s: retrieving diagnostics"
+msgstr ""
+
+#: cinder/compute/manager.py:1534
+#, python-format
+msgid "instance %s: suspending"
+msgstr ""
+
+#: cinder/compute/manager.py:1556
+#, python-format
+msgid "instance %s: resuming"
+msgstr ""
+
+#: cinder/compute/manager.py:1579
+#, python-format
+msgid "instance %s: locking"
+msgstr ""
+
+#: cinder/compute/manager.py:1588
+#, python-format
+msgid "instance %s: unlocking"
+msgstr ""
+
+#: cinder/compute/manager.py:1596
+#, python-format
+msgid "instance %s: getting locked state"
+msgstr ""
+
+#: cinder/compute/manager.py:1606
+#, python-format
+msgid "instance %s: reset network"
+msgstr ""
+
+#: cinder/compute/manager.py:1614
+#, python-format
+msgid "instance %s: inject network info"
+msgstr ""
+
+#: cinder/compute/manager.py:1618
+#, python-format
+msgid "network_info to inject: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:1655
+#, python-format
+msgid "instance %s: getting vnc console"
+msgstr ""
+
+#: cinder/compute/manager.py:1685
+#, python-format
+msgid "Booting with volume %(volume_id)s at %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1703
+#, python-format
+msgid ""
+"instance %(instance_uuid)s: attaching volume %(volume_id)s to "
+"%(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1705
+#, python-format
+msgid "Attaching volume %(volume_id)s to %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1714
+#, python-format
+msgid "instance %(instance_uuid)s: attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1724
+#, python-format
+msgid "Attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1752
+#, python-format
+msgid "Detach volume %(volume_id)s from mountpoint %(mp)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1756
+#, python-format
+msgid "Detaching volume from unknown instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1822
+#, python-format
+msgid ""
+"Creating tmpfile %s to notify to other compute nodes that they should "
+"mount the same storage."
+msgstr ""
+
+#: cinder/compute/manager.py:1884
+msgid "Instance has no volume."
+msgstr ""
+
+#: cinder/compute/manager.py:1916
+#, python-format
+msgid "plug_vifs() failed %(cnt)d.Retry up to %(max_retry)d for %(hostname)s."
+msgstr ""
+
+#: cinder/compute/manager.py:1973
+#, python-format
+msgid "Pre live migration failed at  %(dest)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2000
+msgid "post_live_migration() is started.."
+msgstr ""
+
+#: cinder/compute/manager.py:2030
+msgid "No floating_ip found"
+msgstr ""
+
+#: cinder/compute/manager.py:2038
+msgid "No floating_ip found."
+msgstr ""
+
+#: cinder/compute/manager.py:2040
+#, python-format
+msgid ""
+"Live migration: Unexpected error: cannot inherit floating ip.\n"
+"%(e)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2073
+#, python-format
+msgid "Migrating instance to %(dest)s finished successfully."
+msgstr ""
+
+#: cinder/compute/manager.py:2075
+msgid ""
+"You may see the error \"libvirt: QEMU error: Domain not found: no domain "
+"with matching name.\" This error can be safely ignored."
+msgstr ""
+
+#: cinder/compute/manager.py:2090
+msgid "Post operation of migraton started"
+msgstr ""
+
+#: cinder/compute/manager.py:2226
+#, python-format
+msgid "Updated the info_cache for instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:2255
+msgid "Updating bandwidth usage cache"
+msgstr ""
+
+#: cinder/compute/manager.py:2277
+msgid "Updating host status"
+msgstr ""
+
+#: cinder/compute/manager.py:2305
+#, python-format
+msgid ""
+"Found %(num_db_instances)s in the database and %(num_vm_instances)s on "
+"the hypervisor."
+msgstr ""
+
+#: cinder/compute/manager.py:2331
+#, python-format
+msgid ""
+"During the sync_power process the instance %(uuid)s has moved from host "
+"%(src)s to host %(dst)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2344
+#, python-format
+msgid ""
+"Instance %s is in the process of migrating to this host. Wait next "
+"sync_power cycle before setting power state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2350
+msgid ""
+"Instance found in database but not known by hypervisor. Setting power "
+"state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2380
+msgid "FLAGS.reclaim_instance_interval <= 0, skipping..."
+msgstr ""
+
+#: cinder/compute/manager.py:2392
+msgid "Reclaiming deleted instance"
+msgstr ""
+
+#: cinder/compute/manager.py:2458
+#, python-format
+msgid ""
+"Detected instance with name label '%(name)s' which is marked as DELETED "
+"but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2465
+#, python-format
+msgid ""
+"Destroying instance with name label '%(name)s' which is marked as DELETED"
+" but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2472
+#, python-format
+msgid "Unrecognized value '%(action)s' for FLAGS.running_deleted_instance_action"
+msgstr ""
+
+#: cinder/compute/manager.py:2542
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: unrecoverable state during operation on "
+"%(host)s"
+msgstr ""
+
+#: cinder/compute/utils.py:142
+msgid "v4 subnets are required for legacy nw_info"
+msgstr ""
+
+#: cinder/console/manager.py:77 cinder/console/vmrc_manager.py:70
+msgid "Adding console"
+msgstr ""
+
+#: cinder/console/manager.py:97
+#, python-format
+msgid "Tried to remove non-existant console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:122
+#, python-format
+msgid "Tried to remove non-existent console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:125
+#, python-format
+msgid "Removing console %(console_id)s."
+msgstr ""
+
+#: cinder/console/xvp.py:98
+msgid "Rebuilding xvp conf"
+msgstr ""
+
+#: cinder/console/xvp.py:116
+#, python-format
+msgid "Re-wrote %s"
+msgstr ""
+
+#: cinder/console/xvp.py:121
+msgid "Stopping xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:134
+msgid "Starting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:141
+#, python-format
+msgid "Error starting xvp: %s"
+msgstr ""
+
+#: cinder/console/xvp.py:144
+msgid "Restarting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:146
+msgid "xvp not running..."
+msgstr ""
+
+#: cinder/consoleauth/manager.py:63
+#, python-format
+msgid "Deleting Expired Token: (%s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:75
+#, python-format
+msgid "Received Token: %(token)s, %(token_dict)s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:79
+#, python-format
+msgid "Checking Token: %(token)s, %(token_valid)s)"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:57
+msgid "Use of empty request context is deprecated"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:198
+#, python-format
+msgid "Unrecognized read_deleted value '%s'"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:516 cinder/db/sqlalchemy/api.py:551
+#, python-format
+msgid "No ComputeNode for %(host)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4019 cinder/db/sqlalchemy/api.py:4045
+#, python-format
+msgid "No backend config with id %(sm_backend_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4103
+#, python-format
+msgid "No sm_flavor called %(sm_flavor)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4147
+#, python-format
+msgid "No sm_volume with id %(volume_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:66
+msgid "python-migrate is not installed. Exiting."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:78
+msgid "version should be an integer"
+msgstr ""
+
+#: cinder/db/sqlalchemy/session.py:137
+#, python-format
+msgid "SQL connection failed. %s attempts left."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:48
+msgid "interface column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:80
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:54
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:48
+#, python-format
+msgid "Table |%s| not created!"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:87
+msgid "VIF column not added to fixed_ips table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:97
+#, python-format
+msgid "join list for moving mac_addresses |%s|"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:39
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:60
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:99
+msgid "foreign key constraint couldn't be added"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:58
+msgid "foreign key constraint couldn't be dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py:34
+msgid "priority column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:41
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:42
+#: cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py:56
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:68
+msgid "foreign key constraint couldn't be removed"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py:34
+msgid "progress column not added to instances table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py:97
+#, python-format
+msgid ""
+"Could not cast flavorid to integer: %s. Set flavorid to an integer-like "
+"string to downgrade."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:69
+msgid "instance_info_caches tables not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py:41
+msgid "progress column not added to compute_nodes table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:76
+msgid "dns_domains table not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:60
+msgid "quota_classes table not dropped"
+msgstr ""
+
+#: cinder/image/glance.py:147
+msgid "Connection error contacting glance server, retrying"
+msgstr ""
+
+#: cinder/image/glance.py:153 cinder/network/quantum/melange_connection.py:104
+msgid "Maximum attempts reached"
+msgstr ""
+
+#: cinder/image/glance.py:278
+#, python-format
+msgid "Creating image in Glance. Metadata passed in %s"
+msgstr ""
+
+#: cinder/image/glance.py:281
+#, python-format
+msgid "Metadata after formatting for Glance %s"
+msgstr ""
+
+#: cinder/image/glance.py:289
+#, python-format
+msgid "Metadata returned from Glance formatted for Base %s"
+msgstr ""
+
+#: cinder/image/glance.py:331 cinder/image/glance.py:335
+msgid "Not the image owner"
+msgstr ""
+
+#: cinder/image/glance.py:410
+#, python-format
+msgid "%(timestamp)s does not follow any of the signatures: %(iso_formats)s"
+msgstr ""
+
+#: cinder/image/s3.py:309
+#, python-format
+msgid "Failed to download %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:328
+#, python-format
+msgid "Failed to decrypt %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:340
+#, python-format
+msgid "Failed to untar %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:353
+#, python-format
+msgid "Failed to upload %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:379
+#, python-format
+msgid "Failed to decrypt private key: %s"
+msgstr ""
+
+#: cinder/image/s3.py:387
+#, python-format
+msgid "Failed to decrypt initialization vector: %s"
+msgstr ""
+
+#: cinder/image/s3.py:398
+#, python-format
+msgid "Failed to decrypt image file %(image_file)s: %(err)s"
+msgstr ""
+
+#: cinder/image/s3.py:410
+msgid "Unsafe filenames in image"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:38 cinder/ipv6/rfc2462.py:34
+#, python-format
+msgid "Bad mac for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:40 cinder/ipv6/rfc2462.py:36
+#, python-format
+msgid "Bad prefix for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:42
+#, python-format
+msgid "Bad project_id for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/network/ldapdns.py:321
+msgid "This driver only supports type 'a' entries."
+msgstr ""
+
+#: cinder/network/linux_net.py:166
+#, python-format
+msgid "Attempted to remove chain %s which does not exist"
+msgstr ""
+
+#: cinder/network/linux_net.py:192
+#, python-format
+msgid "Unknown chain: %r"
+msgstr ""
+
+#: cinder/network/linux_net.py:215
+#, python-format
+msgid ""
+"Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r "
+"%(top)r"
+msgstr ""
+
+#: cinder/network/linux_net.py:335
+msgid "IPTablesManager.apply completed with success"
+msgstr ""
+
+#: cinder/network/linux_net.py:694
+#, python-format
+msgid "Hupping dnsmasq threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:696
+#, python-format
+msgid "Pid %d is stale, relaunching dnsmasq"
+msgstr ""
+
+#: cinder/network/linux_net.py:756
+#, python-format
+msgid "killing radvd threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:758
+#, python-format
+msgid "Pid %d is stale, relaunching radvd"
+msgstr ""
+
+#: cinder/network/linux_net.py:967
+#, python-format
+msgid "Starting VLAN inteface %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:999
+#, python-format
+msgid "Starting Bridge interface for %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1142
+#, python-format
+msgid "Starting bridge %s "
+msgstr ""
+
+#: cinder/network/linux_net.py:1149
+#, python-format
+msgid "Done starting bridge %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1167
+#, python-format
+msgid "Failed unplugging gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/linux_net.py:1170
+#, python-format
+msgid "Unplugged gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/manager.py:291
+#, python-format
+msgid "Fixed ip %(fixed_ip_id)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:300 cinder/network/manager.py:496
+#, python-format
+msgid "Interface %(interface)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:315
+#, python-format
+msgid "floating IP allocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:353
+#, python-format
+msgid "floating IP deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:386
+#, python-format
+msgid "Address |%(address)s| is not allocated"
+msgstr ""
+
+#: cinder/network/manager.py:390
+#, python-format
+msgid "Address |%(address)s| is not allocated to your project |%(project)s|"
+msgstr ""
+
+#: cinder/network/manager.py:402
+#, python-format
+msgid "Quota exceeded for %s, tried to allocate address"
+msgstr ""
+
+#: cinder/network/manager.py:614
+#, python-format
+msgid ""
+"Database inconsistency: DNS domain |%s| is registered in the Cinder db but "
+"not visible to either the floating or instance DNS driver. It will be "
+"ignored."
+msgstr ""
+
+#: cinder/network/manager.py:660
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing zone to |%(av_zone)s|."
+msgstr ""
+
+#: cinder/network/manager.py:670
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing project to |%(project)s|."
+msgstr ""
+
+#: cinder/network/manager.py:778
+#, python-format
+msgid "Disassociated %s stale fixed ip(s)"
+msgstr ""
+
+#: cinder/network/manager.py:782
+msgid "setting network host"
+msgstr ""
+
+#: cinder/network/manager.py:896
+#, python-format
+msgid "network allocations for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:901
+#, python-format
+msgid "networks retrieved for instance |%(instance_id)s|: |%(networks)s|"
+msgstr ""
+
+#: cinder/network/manager.py:930
+#, python-format
+msgid "network deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:1152
+#, python-format
+msgid ""
+"instance-dns-zone is |%(domain)s|, which is in availability zone "
+"|%(zone)s|. Instance |%(instance)s| is in zone |%(zone2)s|. No DNS record"
+" will be created."
+msgstr ""
+
+#: cinder/network/manager.py:1227
+#, python-format
+msgid "Unable to release %s because vif doesn't exist."
+msgstr ""
+
+#: cinder/network/manager.py:1244
+#, python-format
+msgid "Leased IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1248
+#, python-format
+msgid "IP %s leased that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1256
+#, python-format
+msgid "IP |%s| leased that isn't allocated"
+msgstr ""
+
+#: cinder/network/manager.py:1261
+#, python-format
+msgid "Released IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1265
+#, python-format
+msgid "IP %s released that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1268
+#, python-format
+msgid "IP %s released that was not leased"
+msgstr ""
+
+#: cinder/network/manager.py:1331
+msgid "cidr already in use"
+msgstr ""
+
+#: cinder/network/manager.py:1334
+#, python-format
+msgid "requested cidr (%(cidr)s) conflicts with existing supernet (%(super)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1345
+#, python-format
+msgid ""
+"requested cidr (%(cidr)s) conflicts with existing smaller cidr "
+"(%(smaller)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1404
+msgid "Network already exists!"
+msgstr ""
+
+#: cinder/network/manager.py:1423
+#, python-format
+msgid "Network must be disassociated from project %s before delete"
+msgstr ""
+
+#: cinder/network/manager.py:1832
+msgid ""
+"The sum between the number of networks and the vlan start cannot be "
+"greater than 4094"
+msgstr ""
+
+#: cinder/network/manager.py:1839
+#, python-format
+msgid ""
+"The network range is not big enough to fit %(num_networks)s. Network size"
+" is %(network_size)s"
+msgstr ""
+
+#: cinder/network/minidns.py:65
+msgid "This driver only supports type 'a'"
+msgstr ""
+
+#: cinder/network/quantum/client.py:154
+msgid "Tenant ID not set"
+msgstr ""
+
+#: cinder/network/quantum/client.py:180
+#, python-format
+msgid "Quantum Client Request: %(method)s %(action)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:196
+#, python-format
+msgid "Quantum entity not found: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:206
+#, python-format
+msgid "Server %(status_code)s error: %(data)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:210
+#, python-format
+msgid "Unable to connect to server. Got error: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:228
+#, python-format
+msgid "unable to deserialize object of type = '%s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:162
+msgid "QuantumManager does not use 'multi_host' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:166
+msgid "QuantumManager requires that only one network is created per call"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:176
+msgid "QuantumManager does not use 'vlan_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:182
+msgid "QuantumManager does not use 'vpn_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:186
+msgid "QuantumManager does not use 'bridge' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:190
+msgid "QuantumManager does not use 'bridge_interface' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:195
+msgid "QuantumManager requires a valid (.1) gateway address."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:204
+#, python-format
+msgid ""
+"Unable to find existing quantum network for tenant '%(q_tenant_id)s' with"
+" net-id '%(quantum_net_id)s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:301
+#, python-format
+msgid "network allocations for instance %s"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:588
+#, python-format
+msgid ""
+"port deallocation failed for instance: |%(instance_id)s|, port_id: "
+"|%(port_id)s|"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:606
+#, python-format
+msgid ""
+"ipam deallocation failed for instance: |%(instance_id)s|, vif_uuid: "
+"|%(vif_uuid)s|"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:96
+#, python-format
+msgid "Server returned error: %s"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:98
+msgid "Connection error contacting melange service, retrying"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:108
+#, python-format
+msgid ""
+"allocate IP on network |%(network_id)s| belonging to "
+"|%(network_tenant_id)s| to this vif |%(vif_id)s| with mac "
+"|%(mac_address)s| belonging to |%(project_id)s| "
+msgstr ""
+
+#: cinder/network/quantum/melange_ipam_lib.py:133
+msgid "get_project_and_global_net_ids must be called with a non-null project_id"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:75
+msgid "Error creating network entry"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:90
+#, python-format
+msgid "No network with net_id = %s"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:221
+#, python-format
+msgid "No fixed IPs to deallocate for vif %s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:99
+#, python-format
+msgid "Connecting interface %(interface_id)s to net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:113
+#, python-format
+msgid "Deleting port %(port_id)s on net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/notifier/api.py:115
+#, python-format
+msgid "%s not in valid priorities"
+msgstr ""
+
+#: cinder/notifier/api.py:130
+#, python-format
+msgid ""
+"Problem '%(e)s' attempting to send to notification system. "
+"Payload=%(payload)s"
+msgstr ""
+
+#: cinder/notifier/list_notifier.py:65
+#, python-format
+msgid "Problem '%(e)s' attempting to send to notification driver %(driver)s."
+msgstr ""
+
+#: cinder/notifier/rabbit_notifier.py:46
+#, python-format
+msgid "Could not send notification to %(topic)s. Payload=%(message)s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:146
+#, python-format
+msgid "Returning exception %s to caller"
+msgstr ""
+
+#: cinder/rpc/amqp.py:188
+#, python-format
+msgid "unpacked context: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:231
+#, python-format
+msgid "received %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:236
+#, python-format
+msgid "no method for message: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:237
+#, python-format
+msgid "No method for message: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:321
+#, python-format
+msgid "Making asynchronous call on %s ..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:324
+#, python-format
+msgid "MSG_ID is %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:346
+#, python-format
+msgid "Making asynchronous cast on %s..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:354
+msgid "Making asynchronous fanout cast..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:379
+#, python-format
+msgid "Sending notification on %s..."
+msgstr ""
+
+#: cinder/rpc/common.py:54
+#, python-format
+msgid ""
+"Remote error: %(exc_type)s %(value)s\n"
+"%(traceback)s."
+msgstr ""
+
+#: cinder/rpc/common.py:71
+msgid "Timeout while waiting on RPC response."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:111
+msgid "Failed to process message... skipping it."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:407
+#, python-format
+msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:430
+#, python-format
+msgid "Connected to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:466
+#, python-format
+msgid ""
+"Unable to connect to AMQP server on %(hostname)s:%(port)d after "
+"%(max_retries)d tries: %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:482
+#, python-format
+msgid ""
+"AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying "
+"again in %(sleep_time)d seconds."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:533 cinder/rpc/impl_qpid.py:385
+#, python-format
+msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:551 cinder/rpc/impl_qpid.py:400
+#, python-format
+msgid "Timed out waiting for RPC response: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:555 cinder/rpc/impl_qpid.py:404
+#, python-format
+msgid "Failed to consume message from queue: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:589 cinder/rpc/impl_qpid.py:434
+#, python-format
+msgid "Failed to publish message to topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:341
+#, python-format
+msgid "Unable to connect to AMQP server: %s "
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:346
+#, python-format
+msgid "Connected to AMQP server on %s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:354
+msgid "Re-established AMQP queues"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:412
+msgid "Error processing message.  Skipping it."
+msgstr ""
+
+#: cinder/scheduler/chance.py:47 cinder/scheduler/simple.py:91
+#: cinder/scheduler/simple.py:143
+msgid "Is the appropriate service running?"
+msgstr ""
+
+#: cinder/scheduler/chance.py:52
+msgid "Could not find another compute"
+msgstr ""
+
+#: cinder/scheduler/driver.py:63
+#, python-format
+msgid "Casted '%(method)s' to volume '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:80
+#, python-format
+msgid "Casted '%(method)s' to compute '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:89
+#, python-format
+msgid "Casted '%(method)s' to network '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:107
+#, python-format
+msgid "Casted '%(method)s' to %(topic)s '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:181
+msgid "Must implement a fallback schedule"
+msgstr ""
+
+#: cinder/scheduler/driver.py:185
+msgid "Driver must implement schedule_prep_resize"
+msgstr ""
+
+#: cinder/scheduler/driver.py:190
+msgid "Driver must implement schedule_run_instance"
+msgstr ""
+
+#: cinder/scheduler/driver.py:325
+msgid "Block migration can not be used with shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:330
+msgid "Live migration can not be used without shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:367 cinder/scheduler/driver.py:457
+#, python-format
+msgid "host %(dest)s is not compatible with original host %(src)s."
+msgstr ""
+
+#: cinder/scheduler/driver.py:416
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"memory(host:%(avail)s <= instance:%(mem_inst)s)"
+msgstr ""
+
+#: cinder/scheduler/driver.py:472
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"disk(host:%(available)s <= instance:%(necessary)s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:51
+#, python-format
+msgid "No host selection for %s defined."
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:64
+#, python-format
+msgid "Attempting to build %(num_instances)d instance(s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:157
+msgid "Scheduler only understands Compute nodes (for now)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:199
+#, python-format
+msgid "Filtered %(hosts)s"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:209
+#, python-format
+msgid "Weighted %(weighted_host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:144
+#, python-format
+msgid "Host filter fails for ignored host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:151
+#, python-format
+msgid "Host filter fails for non-forced host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:157
+#, python-format
+msgid "Host filter function %(func)s failed for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:163
+#, python-format
+msgid "Host filter passes for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:272
+#, python-format
+msgid "Received %(service_name)s service update from %(host)s."
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:313
+msgid "host_manager only implemented for 'compute'"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:323
+#, python-format
+msgid "No service for compute ID %s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:85
+#, python-format
+msgid ""
+"Driver Method %(driver_method_name)s missing: %(e)s. Reverting to "
+"schedule()"
+msgstr ""
+
+#: cinder/scheduler/manager.py:150
+#, python-format
+msgid "Failed to schedule_%(method)s: %(ex)s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:159
+#, python-format
+msgid "Setting instance %(instance_uuid)s to %(state)s state."
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:66
+#, python-format
+msgid "Could not stat scheduler options file %(filename)s: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:75
+#, python-format
+msgid "Could not decode scheduler options: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/simple.py:87
+msgid "Not enough allocatable CPU cores remaining"
+msgstr ""
+
+#: cinder/scheduler/simple.py:137
+msgid "Not enough allocatable volume gigabytes remaining"
+msgstr ""
+
+#: cinder/scheduler/filters/core_filter.py:45
+msgid "VCPUs not set; assuming CPU collection broken"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:72
+#, python-format
+msgid "Faking execution of cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:80
+#, python-format
+msgid "Faked command matched %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:96
+#, python-format
+msgid "Faked command raised an exception %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:101
+#, python-format
+msgid "Reply to faked command is stdout='%(stdout)s' stderr='%(stderr)s'"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:784
+msgid "Please extend mock libvirt module to support flags"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:790
+msgid "Please extend fake libvirt module to support this auth method"
+msgstr ""
+
+#: cinder/tests/test_compute.py:365 cinder/tests/test_compute.py:1419
+#, python-format
+msgid "Running instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:371
+#, python-format
+msgid "After terminating instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:589
+msgid "Internal error"
+msgstr ""
+
+#: cinder/tests/test_compute.py:1430
+#, python-format
+msgid "After force-killing instances: %s"
+msgstr ""
+
+#: cinder/tests/test_misc.py:92
+#, python-format
+msgid ""
+"The following migrations are missing a downgrade:\n"
+"\t%s"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:169
+msgid "id"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:170
+msgid "IPv4"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:171
+msgid "IPv6"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:172
+msgid "start address"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:173
+msgid "DNS1"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:174
+msgid "DNS2"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:175
+msgid "VlanID"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:176
+msgid "project"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:177
+msgid "uuid"
+msgstr ""
+
+#: cinder/tests/test_volume.py:216
+#, python-format
+msgid "Target %s allocated"
+msgstr ""
+
+#: cinder/tests/test_volume.py:468
+#, python-format
+msgid "Cannot confirm exported volume id:%s."
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:58
+#, python-format
+msgid "Given data: %s"
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:59
+#, python-format
+msgid "Result data: %s"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:626
+#, python-format
+msgid "Creating files in %s to simulate guest agent"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:637
+#, python-format
+msgid "Removing simulated guest agent files in %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/test_servers.py:2144
+#, python-format
+msgid "Quota exceeded: code=%(code)s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:57
+#, python-format
+msgid "_create: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:66
+#, python-format
+msgid "_delete: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:75
+#, python-format
+msgid "_get: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:85
+#, python-format
+msgid "_get_all: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:125
+#, python-format
+msgid "test_snapshot_create: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:134
+#, python-format
+msgid "test_snapshot_create: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:156
+#, python-format
+msgid "test_snapshot_create_force: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:165
+#, python-format
+msgid "test_snapshot_create_force: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:205
+#, python-format
+msgid "test_snapshot_show: resp=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:231
+#, python-format
+msgid "test_snapshot_detail: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/integrated/test_login.py:31
+#, python-format
+msgid "flavor: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:38
+#, python-format
+msgid ""
+"%(message)s\n"
+"Status Code: %(_status)s\n"
+"Body: %(_body)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:47
+msgid "Authentication error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:55
+msgid "Authorization error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:63
+msgid "Item not found"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:105
+#, python-format
+msgid "Doing %(method)s on %(relative_url)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:107
+#, python-format
+msgid "Body: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:125
+#, python-format
+msgid "%(auth_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:151
+#, python-format
+msgid "%(relative_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:161
+msgid "Unexpected status code"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:168
+#, python-format
+msgid "Decoding JSON: %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:133
+#, python-format
+msgid "Nested received %(queue)s, %(value)s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:142
+#, python-format
+msgid "Nested return %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:160
+msgid "RPC backend does not support timeouts"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:227 cinder/tests/rpc/common.py:233
+#, python-format
+msgid "Received %s"
+msgstr ""
+
+#: cinder/virt/connection.py:85
+msgid "Failed to open connection to the hypervisor"
+msgstr ""
+
+#: cinder/virt/fake.py:270 cinder/virt/xenapi_conn.py:396
+#: cinder/virt/baremetal/proxy.py:716 cinder/virt/libvirt/connection.py:2045
+#, python-format
+msgid "Compute_service record created for %s "
+msgstr ""
+
+#: cinder/virt/fake.py:273 cinder/virt/xenapi_conn.py:399
+#: cinder/virt/baremetal/proxy.py:720 cinder/virt/libvirt/connection.py:2048
+#, python-format
+msgid "Compute_service record updated for %s "
+msgstr ""
+
+#: cinder/virt/firewall.py:130
+#, python-format
+msgid "Attempted to unfilter instance %s which is not filtered"
+msgstr ""
+
+#: cinder/virt/firewall.py:137
+#, python-format
+msgid "Filters added to instance %s"
+msgstr ""
+
+#: cinder/virt/firewall.py:139
+msgid "Provider Firewall Rules refreshed"
+msgstr ""
+
+#: cinder/virt/firewall.py:291
+#, python-format
+msgid "Adding security group rule: %r"
+msgstr ""
+
+#: cinder/virt/firewall.py:403 cinder/virt/xenapi/firewall.py:87
+#, python-format
+msgid "Adding provider rule: %s"
+msgstr ""
+
+#: cinder/virt/images.py:86
+msgid "'qemu-img info' parsing failed."
+msgstr ""
+
+#: cinder/virt/images.py:92
+#, python-format
+msgid "fmt=%(fmt)s backed by: %(backing_file)s"
+msgstr ""
+
+#: cinder/virt/images.py:104
+#, python-format
+msgid "Converted to raw, but format is now %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:105
+msgid ""
+"Must specify vmwareapi_host_ip,vmwareapi_host_username and "
+"vmwareapi_host_password to useconnection_type=vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:276
+#, python-format
+msgid "In vmwareapi:_create_session, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:359
+#, python-format
+msgid "In vmwareapi:_call_method, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:398
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: success"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:404
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: error %(error_info)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:409
+#, python-format
+msgid "In vmwareapi:_poll_task, Got this error %s"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:140
+msgid ""
+"Must specify xenapi_connection_url, xenapi_connection_username "
+"(optionally), and xenapi_connection_password to use "
+"connection_type=xenapi"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:329 cinder/virt/libvirt/connection.py:472
+msgid "Could not determine iscsi initiator name"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:460
+msgid "Host startup on XenServer is not supported."
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:489
+msgid "Unable to log in to XenAPI (is the Dom0 disk full?)"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:527
+msgid "Host is member of a pool, but DB says otherwise"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:599 cinder/virt/xenapi_conn.py:612
+#, python-format
+msgid "Got exception: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:93
+msgid "No domains exist."
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:95
+#, python-format
+msgid "============= initial domains =========== : %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:99
+msgid "Building domain: to be removed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:103
+msgid "Not running domain: remove"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:111
+msgid "domain running on an unknown node: discarded"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:127
+#, python-format
+msgid "No such domain (%s)"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:134
+#, python-format
+msgid "Failed power down Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:143
+msgid "deactivate -> activate fails"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:153
+msgid "destroy_domain: no such domain"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:154
+#, python-format
+msgid "No such domain %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:161
+#, python-format
+msgid "Domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:163
+#, python-format
+msgid "Nodes: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:166
+#, python-format
+msgid "After storing domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:169
+msgid "deactivation/removing domain failed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:176
+msgid "===== Domain is being created ====="
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:179
+msgid "Same domain name already exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:181
+msgid "create_domain: before get_idle_node"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:198
+#, python-format
+msgid "Created new domain: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:213
+#, python-format
+msgid "Failed to boot Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:222
+msgid "No such domain exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:226
+#, python-format
+msgid "change_domain_state: to new state %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:233
+#, python-format
+msgid "Stored fake domains to the file: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:244
+msgid "domain does not exist"
+msgstr ""
+
+#: cinder/virt/baremetal/nodes.py:42
+#, python-format
+msgid "Unknown baremetal driver %(d)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:148
+#, python-format
+msgid "Error encountered when destroying instance '%(name)s': %(ex)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:162
+#, python-format
+msgid "instance %(instance_name)s: deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:189
+#, python-format
+msgid "instance %s: rebooted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:192
+msgid "_wait_for_reboot failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:222
+#, python-format
+msgid "instance %s: rescued"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:225
+msgid "_wait_for_rescue failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:242
+msgid "<============= spawn of baremetal =============>"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:255
+#, python-format
+msgid "instance %s: is building"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:260
+msgid "Key is injected but instance is not running yet"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:265
+#, python-format
+msgid "instance %s: booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:268
+#, python-format
+msgid "~~~~~~ current state = %s ~~~~~~"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:269
+#, python-format
+msgid "instance %s spawned successfully"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:272
+#, python-format
+msgid "instance %s:not booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:274
+msgid "Bremetal assignment is overcommitted."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:354
+#, python-format
+msgid "instance %s: Creating image"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:473
+#, python-format
+msgid "instance %(inst_name)s: injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:484
+#, python-format
+msgid ""
+"instance %(inst_name)s: ignoring error injecting data into image "
+"%(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:529
+#, python-format
+msgid "instance %s: starting toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:531
+#, python-format
+msgid "instance %s: finished toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:574 cinder/virt/libvirt/connection.py:1815
+msgid ""
+"Cannot get the number of cpu, because this function is not implemented "
+"for this platform. This error can be safely ignored for now."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:714
+#, python-format
+msgid "#### RLK: cpu_arch = %s "
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:746
+msgid "Updating!"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:773 cinder/virt/libvirt/connection.py:2609
+#: cinder/virt/xenapi/host.py:129
+msgid "Updating host stats"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:185
+msgid "free_node...."
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:216
+#, python-format
+msgid "deactivate_node is called for node_id = %(id)s node_ip = %(ip)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:221
+msgid "status of node is set to 0"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:232
+msgid "rootfs is already removed"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:264
+msgid "Before ping to the bare-metal node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:275
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is ready"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:279
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is not ready, out_msg=%(out_msg)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:292
+msgid "Noting to do for tilera nodes: vmlinux is in CF"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:316
+msgid "activate_node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:330
+msgid "Node is unknown error state."
+msgstr ""
+
+#: cinder/virt/disk/api.py:165
+msgid "no capable image handler configured"
+msgstr ""
+
+#: cinder/virt/disk/api.py:178
+#, python-format
+msgid "unknown disk image handler: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:189
+msgid "image already mounted"
+msgstr ""
+
+#: cinder/virt/disk/api.py:276 cinder/virt/disk/guestfs.py:64
+#: cinder/virt/disk/guestfs.py:78 cinder/virt/disk/mount.py:100
+#, python-format
+msgid "Failed to mount filesystem: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:291
+#, python-format
+msgid "Failed to remove container: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:441
+#, python-format
+msgid "User %(username)s not found in password file."
+msgstr ""
+
+#: cinder/virt/disk/api.py:457
+#, python-format
+msgid "User %(username)s not found in shadow file."
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:39
+#, python-format
+msgid "unsupported partition: %s"
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:77
+msgid "unknown guestmount error"
+msgstr ""
+
+#: cinder/virt/disk/loop.py:30
+#, python-format
+msgid "Could not attach image to loopback: %s"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:76
+msgid "no partitions found"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:77
+#, python-format
+msgid "Failed to map partitions: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:58
+msgid "nbd unavailable: module not loaded"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:63
+msgid "No free nbd devices"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:81
+#, python-format
+msgid "qemu-nbd error: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:93
+#, python-format
+msgid "nbd device %s did not show up"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:265
+#, python-format
+msgid "Connecting to libvirt: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:286
+msgid "Connection to libvirt broke"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:388
+#, python-format
+msgid "Error from libvirt during destroy. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:400
+#, python-format
+msgid ""
+"Error from libvirt during saved instance removal. Code=%(errcode)s "
+"Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:411
+#, python-format
+msgid "Error from libvirt during undefine. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:423
+msgid "Instance destroyed successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:435
+#, python-format
+msgid "Error from libvirt during unfilter. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:461
+#, python-format
+msgid "Deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:554
+msgid "attaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:567
+msgid "detaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:692
+msgid "Instance soft rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:696
+msgid "Failed to soft reboot instance."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:725
+msgid "Instance shutdown successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:761 cinder/virt/libvirt/connection.py:905
+msgid "During reboot, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:766
+msgid "Instance rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:867 cinder/virt/xenapi/vmops.py:1358
+#, python-format
+msgid ""
+"Found %(migration_count)d unconfirmed migrations older than "
+"%(confirm_window)d seconds"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:871
+#, python-format
+msgid "Automatically confirming migration %d"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:896
+msgid "Instance is running"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:910
+msgid "Instance spawned successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:926
+#, python-format
+msgid "data: %(data)r, fpath: %(fpath)r"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:978
+msgid "Guest does not have a console available"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1020
+#, python-format
+msgid "Path '%(path)s' supports direct I/O"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1024
+#, python-format
+msgid "Path '%(path)s' does not support direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1028 cinder/virt/libvirt/connection.py:1032
+#, python-format
+msgid "Error on '%(path)s' while checking direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1153
+msgid "Creating image"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1339
+#, python-format
+msgid "Injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1349
+#, python-format
+msgid "Ignoring error injecting data into image %(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1381
+#, python-format
+msgid "block_device_list %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1658
+msgid "Starting toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1662
+msgid "Finished toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1679
+#, python-format
+msgid ""
+"Error from libvirt while looking up %(instance_name)s: [Error Code "
+"%(error_code)s] %(ex)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1920
+msgid "libvirt version is too old (does not support getVersion)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1942
+#, python-format
+msgid "'<cpu>' must be 1, but %d\n"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1969
+#, python-format
+msgid "topology (%(topology)s) must have %(ks)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2067
+#, python-format
+msgid ""
+"Instance launched has CPU info:\n"
+"%s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2079
+#, python-format
+msgid ""
+"CPU doesn't have compatibility.\n"
+"\n"
+"%(ret)s\n"
+"\n"
+"Refer to %(u)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2136
+#, python-format
+msgid "Timeout migrating for %s. nwfilter not found."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2352
+#, python-format
+msgid "skipping %(path)s since it looks like volume"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2407
+#, python-format
+msgid "Getting disk size of %(i_name)s: %(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2458
+#, python-format
+msgid "Instance %s: Starting migrate_disk_and_power_off"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2513
+msgid "During wait running, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2518
+msgid "Instance running successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2525
+#, python-format
+msgid "Instance %s: Starting finish_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2565
+#, python-format
+msgid "Instance %s: Starting finish_revert_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:42
+msgid ""
+"Libvirt module could not be loaded. NWFilterFirewall will not work "
+"correctly."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:93
+msgid "Called setup_basic_filtering in nwfilter"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:101
+msgid "Ensuring static filters"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:171
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:217
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) for%(name)s is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:233
+msgid "iptables firewall: Setup Basic Filtering"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:252
+msgid "Attempted to unfilter instance which is not filtered"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:170
+#, python-format
+msgid "%s is a valid instance name"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:173
+#, python-format
+msgid "%s has a disk file"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:175
+#, python-format
+msgid "Instance %(instance)s is backed by %(backing)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:186
+#, python-format
+msgid ""
+"Instance %(instance)s is using a backing file %(backing)s which does not "
+"appear in the image service"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:237
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification failed"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:247
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification skipped, no hash stored"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:266
+#, python-format
+msgid "Cannot remove %(base_file)s, it does not exist"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:278
+#, python-format
+msgid "Base file too young to remove: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:281
+#, python-format
+msgid "Removing base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:288
+#, python-format
+msgid "Failed to remove %(base_file)s, error was %(error)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:299
+#, python-format
+msgid "%(id)s (%(base_file)s): checking"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:318
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): in use: on this node %(local)d local, %(remote)d "
+"on other nodes"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:330
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): warning -- an absent base file is in use! "
+"instances: %(instance_list)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:338
+#, python-format
+msgid "%(id)s (%(base_file)s): in use on (%(remote)d on other nodes)"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:348
+#, python-format
+msgid "%(id)s (%(base_file)s): image is not in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:354
+#, python-format
+msgid "%(id)s (%(base_file)s): image is in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:377
+#, python-format
+msgid "Skipping verification, no base directory at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:381
+msgid "Verify base images"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:388
+#, python-format
+msgid "Image id %(id)s yields fingerprint %(fingerprint)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:406
+#, python-format
+msgid "Unknown base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:411
+#, python-format
+msgid "Active base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:414
+#, python-format
+msgid "Corrupt base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:418
+#, python-format
+msgid "Removable base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:426
+msgid "Verification complete"
+msgstr ""
+
+#: cinder/virt/libvirt/utils.py:264
+msgid "Unable to find an open port"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:90
+#, python-format
+msgid "Ensuring vlan %(vlan)s and bridge %(bridge)s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:99
+#, python-format
+msgid "Ensuring bridge %s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:165 cinder/virt/libvirt/vif.py:220
+#, python-format
+msgid "Failed while unplugging vif of instance '%s'"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:163
+#, python-format
+msgid "iSCSI device not found at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:166
+#, python-format
+msgid ""
+"ISCSI volume not yet found at: %(mount_device)s. Will rescan & retry.  "
+"Try number: %(tries)s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:178
+#, python-format
+msgid "Found iSCSI node %(mount_device)s (after %(tries)s rescans)"
+msgstr ""
+
+#: cinder/virt/vmwareapi/error_util.py:93
+#, python-format
+msgid "Error(s) %s occurred in the call to RetrieveProperties"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:44 cinder/virt/xenapi/fake.py:77
+#, python-format
+msgid "%(text)s: _db_content => %(content)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:131
+#, python-format
+msgid "Property %(attr)s not set for the managed object %(objName)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:437
+msgid "There is no VM registered"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:439 cinder/virt/vmwareapi/fake.py:609
+#, python-format
+msgid "Virtual Machine with ref %s is not there"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:502
+#, python-format
+msgid "Logging out a session that is invalid or already logged out: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:517
+msgid "Session is faulty"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:520
+msgid "Session Invalid"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:606
+msgid " No Virtual Machine has been registered yet"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:99
+#, python-format
+msgid "Glance image %s is in killed state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:107
+#, python-format
+msgid "Glance image %(image_id)s is in unknown state - %(state)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:128
+msgid ""
+"ESX SOAP server returned an empty port group for the host system in its "
+"response"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:155
+#, python-format
+msgid "Creating Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:169
+#, python-format
+msgid "Created Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/read_write_util.py:150
+#, python-format
+msgid "Exception during HTTP connection close in VMWareHTTpWrite. Exception is %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:84
+msgid "Unable to import suds."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:90
+msgid "Must specify vmwareapi_wsdl_loc"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:145
+#, python-format
+msgid "No such SOAP method '%s' provided by VI SDK"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:150
+#, python-format
+msgid "httplib error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:157
+#, python-format
+msgid "Socket error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:162
+#, python-format
+msgid "Type error in  %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:166
+#, python-format
+msgid "Exception in %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:66
+msgid "Getting list of instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:82
+#, python-format
+msgid "Got total of %s instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:126
+msgid "Couldn't get a local Datastore reference"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:196
+#, python-format
+msgid "Creating VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:205
+#, python-format
+msgid "Created VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:234
+#, python-format
+msgid ""
+"Creating Virtual Disk of size  %(vmdk_file_size_in_kb)s KB and adapter "
+"type  %(adapter_type)s on the ESX host local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:251
+#, python-format
+msgid ""
+"Created Virtual Disk of size %(vmdk_file_size_in_kb)s KB on the ESX host "
+"local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:260
+#, python-format
+msgid ""
+"Deleting the file %(flat_uploaded_vmdk_path)s on the ESX host localstore "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:272
+#, python-format
+msgid ""
+"Deleted the file %(flat_uploaded_vmdk_path)s on the ESX host local store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:283
+#, python-format
+msgid ""
+"Downloading image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:298
+#, python-format
+msgid ""
+"Downloaded image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:315
+#, python-format
+msgid "Reconfiguring VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:322
+#, python-format
+msgid "Reconfigured VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:329
+#, python-format
+msgid "Powering on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:335
+#, python-format
+msgid "Powered on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:381
+#, python-format
+msgid "Creating Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:391
+#, python-format
+msgid "Created Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:434
+#, python-format
+msgid "Copying disk data before snapshot of the VM  instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:447
+#, python-format
+msgid "Copied disk data before snapshot of the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:456
+#, python-format
+msgid "Uploading image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:469
+#, python-format
+msgid "Uploaded image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:479
+#, python-format
+msgid "Deleting temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:488
+#, python-format
+msgid "Deleted temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:520
+msgid "instance is not powered on"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:527
+#, python-format
+msgid "Rebooting guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:530
+#, python-format
+msgid "Rebooted guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:532
+#, python-format
+msgid "Doing hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:536
+#, python-format
+msgid "Did hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:548
+#, python-format
+msgid "instance - %s not present"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:567
+#, python-format
+msgid "Powering off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:572
+#, python-format
+msgid "Powered off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:576
+#, python-format
+msgid "Unregistering the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:579
+#, python-format
+msgid "Unregistered the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:581
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while un-registering the "
+"VM: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:592
+#, python-format
+msgid "Deleting contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:602
+#, python-format
+msgid "Deleted contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:607
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while deleting the VM "
+"contents from the disk: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:615
+msgid "pause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:619
+msgid "unpause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:633
+#, python-format
+msgid "Suspending the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:637
+#, python-format
+msgid "Suspended the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:640
+msgid "instance is powered off and can not be suspended."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:643
+#, python-format
+msgid "VM %s was already in suspended state. So returning without doing anything"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:656
+#, python-format
+msgid "Resuming the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:661
+#, python-format
+msgid "Resumed the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:663
+msgid "instance is not in a suspended state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:699
+msgid "get_diagnostics not implemented for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:757
+#, python-format
+msgid ""
+"Reconfiguring VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:765
+#, python-format
+msgid ""
+"Reconfigured VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:802
+#, python-format
+msgid "Creating directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:806
+#, python-format
+msgid "Created directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:89
+#, python-format
+msgid "Downloading image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:103
+#, python-format
+msgid "Downloaded image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:108
+#, python-format
+msgid "Uploading image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:129
+#, python-format
+msgid "Uploaded image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:139
+#, python-format
+msgid "Getting image size for the image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:143
+#, python-format
+msgid "Got image size of %(size)s for the image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:553 cinder/virt/xenapi/fake.py:652
+#: cinder/virt/xenapi/fake.py:670 cinder/virt/xenapi/fake.py:732
+msgid "Raising NotImplemented"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:555
+#, python-format
+msgid "xenapi.fake does not have an implementation for %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:589
+#, python-format
+msgid "Calling %(localname)s %(impl)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:594
+#, python-format
+msgid "Calling getter %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:654
+#, python-format
+msgid ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:67
+#, python-format
+msgid ""
+"Instance %(name)s running on %(host)s could not be found in the database:"
+" assuming it is a worker VM and skipping migration to a new host"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:137
+#, python-format
+msgid "Unable to get SR for this host: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:169
+msgid "Unable to get updated status"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:172
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:37
+#, python-format
+msgid "Found non-unique network for name_label %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:55
+#, python-format
+msgid "Found non-unique network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:58
+#, python-format
+msgid "Found no network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:111
+#, python-format
+msgid "Unable to eject %(host)s from the pool; pool not empty"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:126
+#, python-format
+msgid "Unable to eject %(host)s from the pool; No master found"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:143
+#, python-format
+msgid "Pool-Join failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:146
+#, python-format
+msgid "Unable to join %(host)s in the pool"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:162
+#, python-format
+msgid "Pool-eject failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:174
+#, fuzzy, python-format
+msgid "Unable to set up pool: %(e)s."
+msgstr "%s 볼륨 탈착에 실패했습니다"
+
+#: cinder/virt/xenapi/pool.py:185
+#, python-format
+msgid "Pool-set_name_label failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:103
+#, python-format
+msgid "Found no PIF for device %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:122
+#, python-format
+msgid ""
+"PIF %(pif_rec['uuid'])s for network %(bridge)s has VLAN id %(pif_vlan)d. "
+"Expected %(vlan_num)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:218
+msgid "Created VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:245
+#, python-format
+msgid "VBD not found in instance %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:262
+#, python-format
+msgid "VBD %s already detached"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:265
+#, python-format
+msgid "VBD %(vbd_ref)s detach rejected, attempt %(num_attempt)d/%(max_attempts)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:270
+#, python-format
+msgid "Unable to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:275
+#, python-format
+msgid "Reached maximum number of retries trying to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:286
+#, python-format
+msgid "Unable to destroy VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:305
+#, python-format
+msgid "Creating %(vbd_type)s-type VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:308
+#, python-format
+msgid "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:319
+#, python-format
+msgid "Unable to destroy VDI %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:336
+#, python-format
+msgid ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:345
+#, python-format
+msgid "Copied VDI %(vdi_ref)s from VDI %(vdi_to_copy_ref)s on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:353
+#, python-format
+msgid "Cloned VDI %(vdi_ref)s from VDI %(vdi_to_clone_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:372
+#, python-format
+msgid "No primary VDI found for %(vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:379
+#, python-format
+msgid "Snapshotting with label '%(label)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:392
+#, python-format
+msgid "Created snapshot %(template_vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:431
+#, python-format
+msgid "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:583
+#, python-format
+msgid "Creating blank HD of size %(req_size)d gigs"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:634
+#, python-format
+msgid ""
+"Fast cloning is only supported on default local SR of type ext. SR on "
+"this system was found to be of type %(sr_type)s. Ignoring the cow flag."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:724
+#, python-format
+msgid ""
+"download_vhd %(image)s attempt %(attempt_num)d/%(max_attempts)d from "
+"%(glance_host)s:%(glance_port)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:734
+#, python-format
+msgid "download_vhd failed: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:750
+#, python-format
+msgid "Asking xapi to fetch vhd image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:760
+#, python-format
+msgid ""
+"xapi 'download_vhd' returned VDI of type '%(vdi_type)s' with UUID "
+"'%(vdi_uuid)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:789
+#, python-format
+msgid "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:805
+#, python-format
+msgid "image_size_bytes=%(size_bytes)d, allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:809
+#, python-format
+msgid ""
+"Image size %(size_bytes)d exceeded instance_type allowed size "
+"%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:831
+#, python-format
+msgid "Fetching image %(image)s, type %(image_type_str)"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:844
+#, python-format
+msgid "Size for image %(image)s: %(virtual_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:853
+#, python-format
+msgid ""
+"Kernel/Ramdisk image is too large: %(vdi_size)d bytes, max %(max_size)d "
+"bytes"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:870
+#, python-format
+msgid "Copying VDI %s to /boot/guest on dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:884
+#, python-format
+msgid "Kernel/Ramdisk VDI %s destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:895
+msgid "Failed to fetch glance image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:934
+#, python-format
+msgid "Detected %(image_type_str)s format for image %(image_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:955
+#, python-format
+msgid "Looking up vdi %s for PV kernel"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:973
+#, python-format
+msgid "Unknown image format %(disk_image_type)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1016
+#, python-format
+msgid "VDI %s is still available"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1059
+#, python-format
+msgid "(VM_UTILS) xenserver vm state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1061
+#, python-format
+msgid "(VM_UTILS) xenapi power_state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1088
+#, python-format
+msgid "Unable to parse rrd of %(vm_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1108
+#, python-format
+msgid "Re-scanning SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1136
+#, python-format
+msgid "Flag sr_matching_filter '%s' does not respect formatting convention"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1154
+msgid ""
+"XenAPI is unable to find a Storage Repository to install guest instances "
+"on. Please check your configuration and/or configure the flag "
+"'sr_matching_filter'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1167
+msgid "Cannot find SR of content-type ISO"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1175
+#, python-format
+msgid "ISO: looking at SR %(sr_rec)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1177
+msgid "ISO: not iso content"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1180
+msgid "ISO: iso content_type, no 'i18n-key' key"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1183
+msgid "ISO: iso content_type, i18n-key value not 'local-storage-iso'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1187
+msgid "ISO: SR MATCHing our criteria"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1189
+msgid "ISO: ISO, looking to see if it is host local"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1192
+#, python-format
+msgid "ISO: PBD %(pbd_ref)s disappeared"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1195
+#, python-format
+msgid "ISO: PBD matching, want %(pbd_rec)s, have %(host)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1198
+msgid "ISO: SR with local PBD"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1220
+#, python-format
+msgid ""
+"Unable to obtain RRD XML for VM %(vm_uuid)s with server details: "
+"%(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1236
+#, python-format
+msgid "Unable to obtain RRD XML updates with server details: %(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1290
+#, python-format
+msgid "Invalid statistics data from Xenserver: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1343
+#, python-format
+msgid "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1417
+#, python-format
+msgid ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1427
+#, python-format
+msgid "VHD coalesce attempts exceeded (%(max_attempts)d), giving up..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1462
+#, python-format
+msgid "Timeout waiting for device %s to be created"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1473
+#, python-format
+msgid "Plugging VBD %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1476
+#, python-format
+msgid "Plugging VBD %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1478
+#, python-format
+msgid "VBD %(vbd_ref)s plugged as %(orig_dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1481
+#, python-format
+msgid "VBD %(vbd_ref)s plugged into wrong dev, remapping to %(dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1490
+#, python-format
+msgid "Destroying VBD for VDI %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1498
+#, python-format
+msgid "Destroying VBD for VDI %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1511
+#, python-format
+msgid "Running pygrub against %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1518
+#, python-format
+msgid "Found Xen kernel %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1520
+msgid "No Xen kernel found.  Booting HVM."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1533
+msgid "Partitions:"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1539
+#, python-format
+msgid "  %(num)s: %(ptype)s %(size)d sectors"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1565
+#, python-format
+msgid ""
+"Writing partition table %(primary_first)d %(primary_last)d to "
+"%(dev_path)s..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1578
+#, python-format
+msgid "Writing partition table %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1632
+#, python-format
+msgid ""
+"Starting sparse_copy src=%(src_path)s dst=%(dst_path)s "
+"virtual_size=%(virtual_size)d block_size=%(block_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1664
+#, python-format
+msgid ""
+"Finished sparse_copy in %(duration).2f secs, %(compression_pct).2f%% "
+"reduction in size"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1714
+msgid ""
+"XenServer tools installed in this image are capable of network injection."
+"  Networking files will not bemanipulated"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1722
+msgid ""
+"XenServer tools are present in this image but are not capable of network "
+"injection"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1726
+msgid "XenServer tools are not installed in this image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1742
+msgid "Manipulating interface files directly"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1751
+#, python-format
+msgid "Failed to mount filesystem (expected for non-linux instances): %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:131 cinder/virt/xenapi/vmops.py:722
+#, python-format
+msgid "Updating progress to %(progress)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:231
+#, python-format
+msgid "Attempted to power on non-existent instance bad instance id %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:233
+#, fuzzy, python-format
+msgid "Starting instance"
+msgstr "인스턴스 %s를 재부팅합니다"
+
+#: cinder/virt/xenapi/vmops.py:303
+msgid "Removing kernel/ramdisk files from dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:358
+msgid "Failed to spawn, rolling back"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:443
+msgid "Detected ISO image type, creating blank VM for install"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:462
+msgid "Auto configuring disk, attempting to resize partition..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:515
+#, python-format
+msgid "Invalid value for injected_files: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:520
+#, python-format
+msgid "Injecting file path: '%s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:527
+msgid "Setting admin password"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:531
+msgid "Resetting network"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:538
+msgid "Setting VCPU weight"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:544
+msgid "Starting VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:551
+#, python-format
+msgid ""
+"Latest agent build for %(hypervisor)s/%(os)s/%(architecture)s is "
+"%(version)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:554
+#, python-format
+msgid "No agent build found for %(hypervisor)s/%(os)s/%(architecture)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:561
+msgid "Waiting for instance state to become running"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:573
+msgid "Querying agent version"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:576
+#, python-format
+msgid "Instance agent version: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:581
+#, python-format
+msgid "Updating Agent to %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:616
+#, python-format
+msgid "No opaque_ref could be determined for '%s'."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:670
+msgid "Finished snapshot and upload for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:677
+msgid "Starting snapshot for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:686
+#, fuzzy, python-format
+msgid "Unable to Snapshot instance: %(exc)s"
+msgstr "%s 인스턴스에 볼륨장착 할 수 없습니다"
+
+#: cinder/virt/xenapi/vmops.py:702
+msgid "Failed to transfer vhd to new host"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:770
+#, python-format
+msgid "Resizing down VDI %(cow_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:893
+#, python-format
+msgid "Resizing up VDI %(vdi_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:901
+msgid "Resize complete"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:928
+#, python-format
+msgid "Failed to query agent version: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:949
+#, python-format
+msgid "domid changed from %(domid)s to %(newdomid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:962
+#, python-format
+msgid "Failed to update agent: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:983
+#, python-format
+msgid "Failed to exchange keys: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:998
+#, python-format
+msgid "Failed to update password: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1023
+#, python-format
+msgid "Failed to inject file: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1032
+msgid "VM already halted, skipping shutdown..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1036
+msgid "Shutting down VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1054
+msgid "Unable to find VBD for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1097
+msgid "Using RAW or VHD, skipping kernel and ramdisk deletion"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1104
+msgid "instance has a kernel or ramdisk but not both"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1111
+msgid "kernel/ramdisk files removed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1121
+msgid "VM destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1147
+msgid "Destroying VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1169
+msgid "VM is not present, skipping destroy..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1222
+#, python-format
+msgid "Instance is already in Rescue Mode: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1296
+#, python-format
+msgid "Found %(instance_count)d hung reboots older than %(timeout)d seconds"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1300
+msgid "Automatically hard rebooting"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1363
+#, python-format
+msgid "Setting migration %(migration_id)s to error: %(reason)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1374
+#, python-format
+msgid ""
+"Automatically confirming migration %(migration_id)s for instance "
+"%(instance_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1379
+#, python-format
+msgid "Instance %(instance_uuid)s not found"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1383
+msgid "In ERROR state"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1389
+#, python-format
+msgid "In %(task_state)s task_state, not RESIZE_VERIFY"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1396
+#, python-format
+msgid "Error auto-confirming resize: %(e)s. Will retry later."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1418
+msgid "Could not get bandwidth info."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1469
+msgid "Injecting network info to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1483
+msgid "Creating vifs"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1492
+#, python-format
+msgid "Creating VIF for network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1495
+#, python-format
+msgid "Created VIF %(vif_ref)s, network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1520
+msgid "Injecting hostname to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1545
+#, python-format
+msgid ""
+"The agent call to %(method)s returned an invalid response: %(ret)r. "
+"path=%(path)s; args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1566
+#, python-format
+msgid "TIMEOUT: The call to %(method)s timed out. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1570
+#, python-format
+msgid ""
+"NOT IMPLEMENTED: The call to %(method)s is not supported by the agent. "
+"args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1575
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1661
+#, python-format
+msgid "OpenSSL error: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:52
+msgid "creating sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:55 cinder/virt/xenapi/volume_utils.py:83
+#, python-format
+msgid "type is = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:58 cinder/virt/xenapi/volume_utils.py:86
+#, python-format
+msgid "name = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:71
+#, python-format
+msgid "Created %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:76 cinder/virt/xenapi/volume_utils.py:174
+msgid "Unable to create Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:80
+msgid "introducing sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:103 cinder/virt/xenapi/volume_utils.py:170
+#: cinder/virt/xenapi/volumeops.py:156
+#, python-format
+msgid "Introduced %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:106
+msgid "Creating pbd for SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:108
+msgid "Plugging SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:116 cinder/virt/xenapi/volumeops.py:160
+msgid "Unable to introduce Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:127 cinder/virt/xenapi/volumeops.py:50
+msgid "Unable to get SR using uuid"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:129
+#, python-format
+msgid "Forgetting SR %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:137
+msgid "Unable to forget Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:157
+#, python-format
+msgid "Introducing %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:186
+#, python-format
+msgid "Unable to find SR from VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:204
+#, python-format
+msgid "Ignoring exception %(exc)s when getting PBDs for %(sr_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:210
+#, python-format
+msgid "Ignoring exception %(exc)s when unplugging PBD %(pbd)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:234
+#, python-format
+msgid "Unable to introduce VDI on SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:242
+#, python-format
+msgid "Unable to get record of VDI %s on"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:264
+#, python-format
+msgid "Unable to introduce VDI for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:274
+#, python-format
+msgid "Error finding vdis in SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:281
+#, python-format
+msgid "Unable to find vbd for vdi %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:315
+#, python-format
+msgid "Unable to obtain target information %(data)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:341
+#, python-format
+msgid "Mountpoint cannot be translated: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:64
+msgid "Could not find VDI ref"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:69
+#, python-format
+msgid "Creating SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:73
+msgid "Could not create SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:76
+msgid "Could not retrieve SR record"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:81
+#, python-format
+msgid "Introducing SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:85
+msgid "SR found in xapi database. No need to introduce"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:90
+msgid "Could not introduce SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:94
+#, python-format
+msgid "Checking for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:106
+#, python-format
+msgid "SR %s not found in the xapi database"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:112
+msgid "Could not forget SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:121
+#, python-format
+msgid "Attach_volume: %(connection_info)s, %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:178
+#, python-format
+msgid "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+msgstr "%(instance_name)s 인스턴스의 %(sr_ref)s SR에 대한 VDI 생성이 실패했습니다"
+
+#: cinder/virt/xenapi/volumeops.py:189
+#, python-format
+msgid "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+msgstr "%(instance_name)s 인스턴스의 %(sr_ref)s SR을 사용 할 수 없습니다"
+
+#: cinder/virt/xenapi/volumeops.py:197
+#, python-format
+msgid "Unable to attach volume to instance %s"
+msgstr "%s 인스턴스에 볼륨장착 할 수 없습니다"
+
+#: cinder/virt/xenapi/volumeops.py:200
+#, python-format
+msgid "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+msgstr "%(instance_name)s 인스턴스에 %(mountpoint)s 마운트지점이 장착되었습니다"
+
+#: cinder/virt/xenapi/volumeops.py:210
+#, python-format
+msgid "Detach_volume: %(instance_name)s, %(mountpoint)s"
+msgstr "볼륨 탈착: %(instance_name)s, %(mountpoint)s"
+
+#: cinder/virt/xenapi/volumeops.py:219
+#, python-format
+msgid "Unable to locate volume %s"
+msgstr "%s 볼륨을 찾을수 없습니다"
+
+#: cinder/virt/xenapi/volumeops.py:227
+#, python-format
+msgid "Unable to detach volume %s"
+msgstr "%s 볼륨 탈착에 실패했습니다"
+
+#: cinder/virt/xenapi/volumeops.py:232
+#, python-format
+msgid "Unable to destroy vbd %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:239
+#, python-format
+msgid "Error purging SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:241
+#, python-format
+msgid "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+msgstr "%(instance_name)s 인스턴스에 %(mountpoint)s 마운트지점이 탈착되었습니다"
+
+#: cinder/vnc/xvp_proxy.py:98 cinder/vnc/xvp_proxy.py:103
+#, python-format
+msgid "Error in handshake: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:119
+#, python-format
+msgid "Invalid request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:139
+#, python-format
+msgid "Request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:142
+#, python-format
+msgid "Request made with missing token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:153
+#, python-format
+msgid "Request made with invalid token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:160
+#, python-format
+msgid "Unexpected error: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:180
+#, python-format
+msgid "Starting cinder-xvpvncproxy node (version %s)"
+msgstr ""
+
+#: cinder/volume/api.py:74 cinder/volume/api.py:220
+msgid "status must be available"
+msgstr ""
+
+#: cinder/volume/api.py:85
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to create %(size)sG volume"
+msgstr ""
+
+#: cinder/volume/api.py:137
+#, fuzzy
+msgid "Volume status must be available or error"
+msgstr "볼륨의 상태를 알 수 없습니다"
+
+#: cinder/volume/api.py:142
+#, python-format
+msgid "Volume still has %d dependent snapshots"
+msgstr ""
+
+#: cinder/volume/api.py:223
+msgid "already attached"
+msgstr ""
+
+#: cinder/volume/api.py:230
+msgid "already detached"
+msgstr ""
+
+#: cinder/volume/api.py:292
+msgid "must be available"
+msgstr ""
+
+#: cinder/volume/api.py:325
+#, fuzzy
+msgid "Volume Snapshot status must be available or error"
+msgstr "볼륨의 상태를 알 수 없습니다"
+
+#: cinder/volume/driver.py:96
+#, python-format
+msgid "Recovering from a failed execute.  Try number %s"
+msgstr ""
+
+#: cinder/volume/driver.py:106
+#, python-format
+msgid "volume group %s doesn't exist"
+msgstr ""
+
+#: cinder/volume/driver.py:270
+#, python-format
+msgid "Skipping ensure_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:318
+#, python-format
+msgid "Skipping remove_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:327
+#, python-format
+msgid ""
+"Skipping remove_export. No iscsi_target is presently exported for volume:"
+" %d"
+msgstr ""
+
+#: cinder/volume/driver.py:337
+msgid "ISCSI provider_location not stored, using discovery"
+msgstr ""
+
+#: cinder/volume/driver.py:384
+#, python-format
+msgid "Could not find iSCSI export  for volume %s"
+msgstr ""
+
+#: cinder/volume/driver.py:388
+#, python-format
+msgid "ISCSI Discovery: Found %s"
+msgstr ""
+
+#: cinder/volume/driver.py:466
+#, python-format
+msgid "Cannot confirm exported volume id:%(volume_id)s."
+msgstr ""
+
+#: cinder/volume/driver.py:493
+#, python-format
+msgid "FAKE ISCSI: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:505
+#, python-format
+msgid "rbd has no pool %s"
+msgstr ""
+
+#: cinder/volume/driver.py:579
+#, python-format
+msgid "Sheepdog is not working: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:581
+msgid "Sheepdog is not working"
+msgstr ""
+
+#: cinder/volume/driver.py:680 cinder/volume/driver.py:685
+#, python-format
+msgid "LoggingVolumeDriver: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:96
+#, python-format
+msgid "Re-exporting %s volumes"
+msgstr ""
+
+#: cinder/volume/manager.py:101
+#, python-format
+msgid "volume %s: skipping export"
+msgstr ""
+
+#: cinder/volume/manager.py:107
+#, python-format
+msgid "volume %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:119
+#, python-format
+msgid "volume %(vol_name)s: creating lv of size %(vol_size)sG"
+msgstr ""
+
+#: cinder/volume/manager.py:131
+#, python-format
+msgid "volume %s: creating export"
+msgstr ""
+
+#: cinder/volume/manager.py:144
+#, python-format
+msgid "volume %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:153
+msgid "Volume is still attached"
+msgstr ""
+
+#: cinder/volume/manager.py:155
+msgid "Volume is not local to this node"
+msgstr ""
+
+#: cinder/volume/manager.py:159
+#, python-format
+msgid "volume %s: removing export"
+msgstr ""
+
+#: cinder/volume/manager.py:161
+#, python-format
+msgid "volume %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:164
+#, python-format
+msgid "volume %s: volume is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:176
+#, python-format
+msgid "volume %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:183
+#, python-format
+msgid "snapshot %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:187
+#, python-format
+msgid "snapshot %(snap_name)s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:202
+#, python-format
+msgid "snapshot %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:211
+#, python-format
+msgid "snapshot %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:214
+#, fuzzy, python-format
+msgid "snapshot %s: snapshot is busy"
+msgstr "인스턴스 %s: 스냅샷 저장중"
+
+#: cinder/volume/manager.py:226
+#, python-format
+msgid "snapshot %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:310
+msgid "Checking volume capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:314
+#, python-format
+msgid "New capabilities found: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:325
+msgid "Clear capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:329
+#, python-format
+msgid "Notification {%s} received"
+msgstr ""
+
+#: cinder/volume/netapp.py:79
+#, python-format
+msgid "API %(name)sfailed: %(reason)s"
+msgstr ""
+
+#: cinder/volume/netapp.py:109
+#, python-format
+msgid "%s is not set"
+msgstr ""
+
+#: cinder/volume/netapp.py:128
+msgid "Connected to DFM server"
+msgstr ""
+
+#: cinder/volume/netapp.py:159
+#, python-format
+msgid "Job failed: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:240
+msgid "Failed to provision dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:252
+msgid "No LUN was created by the provision job"
+msgstr ""
+
+#: cinder/volume/netapp.py:261 cinder/volume/netapp.py:433
+#, fuzzy, python-format
+msgid "Failed to find LUN ID for volume %s"
+msgstr "%s 볼륨을 찾을수 없습니다"
+
+#: cinder/volume/netapp.py:280
+msgid "Failed to remove and delete dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:603 cinder/volume/netapp.py:657
+#, fuzzy, python-format
+msgid "No LUN ID for volume %s"
+msgstr "%s 볼륨을 찾을수 없습니다"
+
+#: cinder/volume/netapp.py:607 cinder/volume/netapp.py:661
+#, python-format
+msgid "Failed to get LUN details for LUN ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:614
+#, python-format
+msgid "Failed to get host details for host ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:620
+#, python-format
+msgid "Failed to get target portal for filer: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:625
+#, python-format
+msgid "Failed to get target IQN for filer: %s"
+msgstr ""
+
+#: cinder/volume/san.py:113 cinder/volume/san.py:151
+msgid "Specify san_password or san_private_key"
+msgstr ""
+
+#: cinder/volume/san.py:156
+msgid "san_ip must be set"
+msgstr ""
+
+#: cinder/volume/san.py:320
+#, python-format
+msgid "LUID not found for %(zfs_poolname)s. Output=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:452
+#, python-format
+msgid "CLIQ command returned %s"
+msgstr ""
+
+#: cinder/volume/san.py:458
+#, python-format
+msgid "Malformed response to CLIQ command %(verb)s %(cliq_args)s. Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:466
+#, python-format
+msgid "Error running CLIQ command %(verb)s %(cliq_args)s.  Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:496
+#, python-format
+msgid ""
+"Unexpected number of virtual ips for cluster  %(cluster_name)s. "
+"Result=%(_xml)s"
+msgstr ""
+
+#: cinder/volume/san.py:549
+#, python-format
+msgid "Volume info: %(volume_name)s => %(volume_attributes)s"
+msgstr ""
+
+#: cinder/volume/san.py:594
+msgid "local_path not supported"
+msgstr ""
+
+#: cinder/volume/san.py:626
+#, python-format
+msgid "Could not determine project for volume %s, can't export"
+msgstr ""
+
+#: cinder/volume/san.py:696
+#, python-format
+msgid "Payload for SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:713
+#, python-format
+msgid "Call to json.loads() raised an exception: %s"
+msgstr ""
+
+#: cinder/volume/san.py:718
+#, python-format
+msgid "Results of SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:732
+#, python-format
+msgid "Found solidfire account: %s"
+msgstr ""
+
+#: cinder/volume/san.py:746
+#, python-format
+msgid "solidfire account: %s does not exist, create it..."
+msgstr ""
+
+#: cinder/volume/san.py:804
+msgid "Enter SolidFire create_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:846
+msgid "Leaving SolidFire create_volume"
+msgstr ""
+
+#: cinder/volume/san.py:861
+msgid "Enter SolidFire delete_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:880
+#, python-format
+msgid "Deleting volumeID: %s "
+msgstr ""
+
+#: cinder/volume/san.py:888
+msgid "Leaving SolidFire delete_volume"
+msgstr ""
+
+#: cinder/volume/san.py:891
+msgid "Executing SolidFire ensure_export..."
+msgstr ""
+
+#: cinder/volume/san.py:895
+msgid "Executing SolidFire create_export..."
+msgstr ""
+
+#: cinder/volume/volume_types.py:49 cinder/volume/volume_types.py:108
+msgid "name cannot be None"
+msgstr ""
+
+#: cinder/volume/volume_types.py:96
+msgid "id cannot be None"
+msgstr ""
+
+#: cinder/volume/xensm.py:55
+#, python-format
+msgid "SR name = %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:56
+#, python-format
+msgid "Params: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:60
+#, python-format
+msgid "Failed to create sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:62
+msgid "Create failed"
+msgstr ""
+
+#: cinder/volume/xensm.py:64
+#, python-format
+msgid "SR UUID of new SR is: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:71
+msgid "Failed to update db"
+msgstr ""
+
+#: cinder/volume/xensm.py:80
+#, python-format
+msgid "Failed to introduce sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:91
+#, python-format
+msgid "Failed to reach backend %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:100
+msgid "XenSMDriver requires xenapi connection"
+msgstr ""
+
+#: cinder/volume/xensm.py:110
+msgid "Failed to initiate session"
+msgstr ""
+
+#: cinder/volume/xensm.py:142
+#, python-format
+msgid "Volume will be created in backend - %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:154
+msgid "Failed to update volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:157
+msgid "Unable to create volume"
+msgstr ""
+
+#: cinder/volume/xensm.py:171
+msgid "Failed to delete vdi"
+msgstr ""
+
+#: cinder/volume/xensm.py:177
+msgid "Failed to delete volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:210
+msgid "Failed to find volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:221
+msgid "Failed to find backend in db"
+msgstr ""
+
+#: cinder/volume/nexenta/__init__.py:27
+msgid "Nexenta SA returned the error"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:64
+#, python-format
+msgid "Sending JSON data: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:69
+#, python-format
+msgid "Auto switching to HTTPS connection to %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:75
+msgid "No headers in server response"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:76
+msgid "Bad response from server"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:79
+#, python-format
+msgid "Got response: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:96
+#, python-format
+msgid "Volume %s does not exist in Nexenta SA"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:180
+msgid ""
+"Call to local_path should not happen. Verify that use_local_volumes flag "
+"is turned off."
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:202
+#, python-format
+msgid "Ignored target creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:210
+#, python-format
+msgid "Ignored target group creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:219
+#, python-format
+msgid "Ignored target group member addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:227
+#, python-format
+msgid "Ignored LU creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:237
+#, python-format
+msgid "Ignored LUN mapping entry addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:273
+#, python-format
+msgid ""
+"Got error trying to destroy target group %(target_group)s, assuming it is"
+" already gone: %(exc)s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:280
+#, python-format
+msgid ""
+"Got error trying to delete target %(target)s, assuming it is already "
+"gone: %(exc)s"
+msgstr ""
+
+#~ msgid "Unable to locate account %(account_name) on Solidfire device"
+#~ msgstr ""
+
+#~ msgid "Zone %(zone_id)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Cinder access parameters were not specified."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(id)d could not be found."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(name)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Detected more than one volume with name %(vol_name)"
+#~ msgstr ""
+
+#~ msgid "Detected existing vlan with id %(vlan)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab semaphore \"%(lock)s\" "
+#~ "for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab file lock "
+#~ "\"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Parent group id and group id cannot be same"
+#~ msgstr ""
+
+#~ msgid "No body provided"
+#~ msgstr ""
+
+#~ msgid "Create VSA %(display_name)s of type %(vc_type)s"
+#~ msgstr ""
+
+#~ msgid "Delete VSA with id: %s"
+#~ msgstr ""
+
+#~ msgid "Associate address %(ip)s to VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "Disassociate address from VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "%(obj)s with ID %(id)s not found"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(obj)s with ID %(id)s belongs to "
+#~ "VSA %(own_vsa_id)s and not to VSA "
+#~ "%(vsa_id)s."
+#~ msgstr ""
+
+#~ msgid "Index. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Detail. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Create. vsa_id=%(vsa_id)s, body=%(body)s"
+#~ msgstr ""
+
+#~ msgid "Create volume of %(size)s GB from VSA ID %(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Update %(obj)s with id: %(id)s, changes: %(changes)s"
+#~ msgstr ""
+
+#~ msgid "Delete. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Show. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Index instances for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You cannot run"
+#~ " any more instances of this type."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You can only"
+#~ " run %s more instances of this "
+#~ "type."
+#~ msgstr ""
+
+#~ msgid "Going to try to soft delete %s"
+#~ msgstr ""
+
+#~ msgid "No host for instance %s, deleting immediately"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to stop %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to start %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Going to force the deletion of the"
+#~ " vm %(instance_uuid)s, even if it is"
+#~ " deleted"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s did not exist "
+#~ "in the DB, but I will shut "
+#~ "it down anyway using a special "
+#~ "context"
+#~ msgstr ""
+
+#~ msgid "exception terminating the instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "trying to destroy already destroyed instance: %s"
+#~ msgstr "인스턴스 %s가 이미 삭제되었습니다"
+
+#~ msgid ""
+#~ "Instance %(name)s found in database but"
+#~ " not known by hypervisor. Setting "
+#~ "power state to NOSTATE"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Detected instance  with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Destroying instance with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid "SQL connection failed (%(connstring)s). %(attempts)d attempts left."
+#~ msgstr ""
+
+#~ msgid "Can't downgrade without losing data"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_id)s not found"
+#~ msgstr ""
+
+#~ msgid "Network %s has active ports, cannot delete"
+#~ msgstr ""
+
+#~ msgid "No fixed IPs to deallocate for vif %sid"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "AMQP server on %(fl_host)s:%(fl_port)d is "
+#~ "unreachable: %(e)s. Trying again in "
+#~ "%(fl_intv)d seconds."
+#~ msgstr ""
+
+#~ msgid "Unable to connect to AMQP server after %(tries)d tries. Shutting down."
+#~ msgstr ""
+
+#~ msgid "Reconnected to queue"
+#~ msgstr ""
+
+#~ msgid "Failed to fetch message from queue: %s"
+#~ msgstr ""
+
+#~ msgid "Initing the Adapter Consumer for %s"
+#~ msgstr ""
+
+#~ msgid "Created \"%(exchange)s\" fanout exchange with \"%(key)s\" routing key"
+#~ msgstr ""
+
+#~ msgid "Exception while processing consumer"
+#~ msgstr ""
+
+#~ msgid "Creating \"%(exchange)s\" fanout exchange"
+#~ msgstr ""
+
+#~ msgid "response %s"
+#~ msgstr ""
+
+#~ msgid "topic is %s"
+#~ msgstr ""
+
+#~ msgid "message %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Cannot confirm tmpfile at %(ipath)s is"
+#~ " on same shared storage between "
+#~ "%(src)s and %(dest)s."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of memory(host:%(avail)s <= "
+#~ "instance:%(mem_inst)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of disk(host:%(available)s <="
+#~ " instance:%(necessary)s)"
+#~ msgstr ""
+
+#~ msgid "Driver Method %(driver_method)s missing: %(e)s.Reverting to schedule()"
+#~ msgstr ""
+
+#~ msgid "Setting instance %(instance_uuid)s to ERROR state."
+#~ msgstr ""
+
+#~ msgid "_filter_hosts: %(request_spec)s"
+#~ msgstr ""
+
+#~ msgid "Filter hosts for drive type %s"
+#~ msgstr ""
+
+#~ msgid "Host %s has no free capacity. Skip"
+#~ msgstr ""
+
+#~ msgid "Filter hosts: %s"
+#~ msgstr ""
+
+#~ msgid "Must implement host selection mechanism"
+#~ msgstr ""
+
+#~ msgid "Maximum number of hosts selected (%d)"
+#~ msgstr ""
+
+#~ msgid "Selected excessive host %(host)s"
+#~ msgstr ""
+
+#~ msgid "Provision volume %(name)s of size %(size)s GB on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "volume_params %(volume_params)s"
+#~ msgstr ""
+
+#~ msgid "%(i)d: Volume %(name)s"
+#~ msgstr ""
+
+#~ msgid "Attempting to spawn %(num_volumes)d volume(s)"
+#~ msgstr ""
+
+#~ msgid "Error creating volumes"
+#~ msgstr ""
+
+#~ msgid "Non-VSA volume %d"
+#~ msgstr ""
+
+#~ msgid "Spawning volume %(volume_id)s with drive type %(drive_type)s"
+#~ msgstr ""
+
+#~ msgid "Error creating volume"
+#~ msgstr ""
+
+#~ msgid "No capability selected for volume of size %(size)s"
+#~ msgstr ""
+
+#~ msgid "Host %s:"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\tDrive %(qosgrp)-25s: total %(total)2s, "
+#~ "used %(used)2s, free %(free)2s. Available "
+#~ "capacity %(avail)-5s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t LeastUsedHost: Best host: %(best_host)s."
+#~ " (used capacity %(min_used)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t MostAvailCap: Best host: %(best_host)s. "
+#~ "(available %(max_avail)s %(type_str)s)"
+#~ msgstr ""
+
+#~ msgid "(%(nm)s) publish (key: %(routing_key)s) %(message)s"
+#~ msgstr ""
+
+#~ msgid "Publishing to route %s"
+#~ msgstr ""
+
+#~ msgid "Declaring queue %s"
+#~ msgstr ""
+
+#~ msgid "Declaring exchange %s"
+#~ msgstr ""
+
+#~ msgid "Binding %(queue)s to %(exchange)s with key %(routing_key)s"
+#~ msgstr ""
+
+#~ msgid "Getting from %(queue)s: %(message)s"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate wrong VSA name. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate DB error. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: user_data = %s"
+#~ msgstr ""
+
+#~ msgid "_create: param=%s"
+#~ msgstr ""
+
+#~ msgid "Host %s"
+#~ msgstr ""
+
+#~ msgid "Test: provision vol %(name)s on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "\t vol=%(vol)s"
+#~ msgstr ""
+
+#~ msgid "Test: VSA update request: vsa_id=%(vsa_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume create: %s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get request: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume update request: id=%(volume_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: success    %(result)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: %(status)s    %(error_info)s"
+#~ msgstr ""
+
+#~ msgid "Unable to get updated status: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "deactivate_node is called for                "
+#~ "node_id = %(id)s node_ip = %(ip)s"
+#~ msgstr ""
+
+#~ msgid "virsh said: %r"
+#~ msgstr ""
+
+#~ msgid "cool, it's a device"
+#~ msgstr ""
+
+#~ msgid "Unable to read LXC console"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "to xml...\n"
+#~ ":%s "
+#~ msgstr ""
+
+#~ msgid "During wait running, %s disappeared."
+#~ msgstr ""
+
+#~ msgid "Instance %s running successfully."
+#~ msgstr ""
+
+#~ msgid "The nwfilter(%(instance_secgroup_filter_name)s) is not found."
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image verification failed"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): image "
+#~ "verification skipped, no hash stored"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): checking"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in use:"
+#~ " on this node %(local)d local, "
+#~ "%(remote)d on other nodes"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): warning "
+#~ "-- an absent base file is in "
+#~ "use! instances: %(instance_list)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in: on"
+#~ " other nodes (%(remote)d on other "
+#~ "nodes)"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is not in use"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is in use"
+#~ msgstr ""
+
+#~ msgid "Created VM %s..."
+#~ msgstr ""
+
+#~ msgid "Created VM %(instance_name)s as %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Creating a CDROM-specific VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Created a CDROM-specific VBD %(vbd_ref)s"
+#~ "  for VM %(vm_ref)s, VDI %(vdi_ref)s."
+#~ msgstr ""
+
+#~ msgid "No primary VDI found for%(vm_ref)s"
+#~ msgstr ""
+
+#~ msgid "Snapshotting VM %(vm_ref)s with label '%(label)s'..."
+#~ msgstr ""
+
+#~ msgid "Created snapshot %(template_vm_ref)s from VM %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Fetching image %(image)s"
+#~ msgstr ""
+
+#~ msgid "Image Type: %s"
+#~ msgstr ""
+
+#~ msgid "ISO: Found sr possibly containing the ISO image"
+#~ msgstr ""
+
+#~ msgid "Size for image %(image)s:%(virtual_size)d"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to fetch glance image"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s ... "
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s done."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful first time."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug rejected: retrying..."
+#~ msgstr ""
+
+#~ msgid "Not sleeping anymore!"
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful eventually."
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure in VBD.unplug: %s"
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure %s"
+#~ msgstr ""
+
+#~ msgid "Starting instance %s"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn"
+#~ msgstr "인스턴스 %s: 생성에 실패했습니다"
+
+#~ msgid "Instance %s failed to spawn - performing clean-up"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn - Unable to create VM"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Auto configuring disk for instance "
+#~ "%(instance_uuid)s, attempting to resize "
+#~ "partition..."
+#~ msgstr ""
+
+#~ msgid "Invalid value for injected_files: '%s'"
+#~ msgstr ""
+
+#~ msgid "Starting VM %s..."
+#~ msgstr ""
+
+#~ msgid "Spawning VM %(instance_uuid)s created %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Instance %s: waiting for running"
+#~ msgstr ""
+
+#~ msgid "Instance %s: running"
+#~ msgstr ""
+
+#~ msgid "Resources to remove:%s"
+#~ msgstr ""
+
+#~ msgid "Removing VDI %(vdi_ref)s(uuid:%(vdi_to_remove)s)"
+#~ msgstr ""
+
+#~ msgid "Skipping VDI destroy for %s"
+#~ msgstr ""
+
+#~ msgid "Finished snapshot and upload for VM %s"
+#~ msgstr ""
+
+#~ msgid "Starting snapshot for VM %s"
+#~ msgstr ""
+
+#~ msgid "Unable to Snapshot instance %(instance_uuid)s: %(exc)s"
+#~ msgstr ""
+
+#~ msgid "Updating instance '%(instance_uuid)s' progress to %(progress)d"
+#~ msgstr ""
+
+#~ msgid "Resize instance %s complete"
+#~ msgstr ""
+
+#~ msgid "domid changed from %(olddomid)s to %(newdomid)s"
+#~ msgstr ""
+
+#~ msgid "VM %(instance_uuid)s already halted,skipping shutdown..."
+#~ msgstr ""
+
+#~ msgid "Shutting down VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Destroying VDIs for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s using RAW or "
+#~ "VHD, skipping kernel and ramdisk "
+#~ "deletion"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_uuid)s VM destroyed"
+#~ msgstr ""
+
+#~ msgid "Destroying VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Automatically hard rebooting %d"
+#~ msgstr ""
+
+#~ msgid "Instance for migration %d not found, skipping"
+#~ msgstr ""
+
+#~ msgid "injecting network info to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "creating vif(s) for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "Creating VIF for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr ""
+
+#~ msgid "Created VIF %(vif_ref)s for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr ""
+
+#~ msgid "injecting hostname to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The agent call to %(method)s returned"
+#~ " an invalid response: %(ret)r. VM "
+#~ "id=%(instance_uuid)s; path=%(path)s; args=%(addl_args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "TIMEOUT: The call to %(method)s timed"
+#~ " out. VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "NOT IMPLEMENTED: The call to %(method)s"
+#~ " is not supported by the agent. "
+#~ "VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The call to %(method)s returned an "
+#~ "error: %(e)s. VM id=%(instance_uuid)s; "
+#~ "args=%(args)r"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid "Error destroying VDI"
+#~ msgstr ""
+
+#~ msgid "\tVolume %s is NOT VSA volume"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s creation - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s succeeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s deletion - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s suceeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s local path call - call discover"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s ensure export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s create export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s remove export - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE remove_export for %s failed"
+#~ msgstr ""
+
+#~ msgid "Failed to retrieve QoS info"
+#~ msgstr ""
+
+#~ msgid "invalid drive data"
+#~ msgstr ""
+
+#~ msgid "drive_name not defined"
+#~ msgstr ""
+
+#~ msgid "invalid drive type name %s"
+#~ msgstr ""
+
+#~ msgid "*** Experimental VSA code ***"
+#~ msgstr ""
+
+#~ msgid "Requested number of VCs (%d) is too high. Setting to default"
+#~ msgstr ""
+
+#~ msgid "Creating VSA: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d %(vsa_name)s: Create "
+#~ "volume %(vol_name)s, %(vol_size)d GB, type "
+#~ "%(vol_type_id)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA status to %(status)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA call"
+#~ msgstr ""
+
+#~ msgid "Adding %(add_cnt)s VCs to VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "Deleting %(del_cnt)s VCs from VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Deleting %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Unable to delete volume %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Forced delete. %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate VSA ID %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Delete instance %(name)s"
+#~ msgstr ""
+
+#~ msgid "Create call received for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Failed to find VSA %(vsa_id)d"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Drive %(vol_id)s created. Status %(status)s"
+#~ msgstr ""
+
+#~ msgid "Drive %(vol_name)s (%(vol_disp_name)s) still in creating phase - wait"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Not all volumes "
+#~ "are created (%(cvol_real)d of %(cvol_exp)d)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Drive %(vol_name)s "
+#~ "(%(vol_disp_name)s) is in %(status)s state"
+#~ msgstr ""
+
+#~ msgid "Failed to update attach status for volume %(vol_name)s. %(ex)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Delete all BE volumes"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Start %(vc_count)d instances"
+#~ msgstr ""
+
diff --git a/cinder/locale/nova.pot b/cinder/locale/nova.pot
new file mode 100644
index 000000000..2f94b7e3d
--- /dev/null
+++ b/cinder/locale/nova.pot
@@ -0,0 +1,7463 @@
+# Translations template for cinder.
+# Copyright (C) 2012 ORGANIZATION
+# This file is distributed under the same license as the cinder project.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: cinder 2012.2\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2012-04-08 23:04+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: cinder/context.py:59
+#, python-format
+msgid "Arguments dropped when creating context: %s"
+msgstr ""
+
+#: cinder/context.py:90
+#, python-format
+msgid "read_deleted can only be one of 'no', 'yes' or 'only', not %r"
+msgstr ""
+
+#: cinder/crypto.py:48
+msgid "Filename of root CA"
+msgstr ""
+
+#: cinder/crypto.py:51
+msgid "Filename of private key"
+msgstr ""
+
+#: cinder/crypto.py:54
+msgid "Filename of root Certificate Revocation List"
+msgstr ""
+
+#: cinder/crypto.py:57
+msgid "Where we keep our keys"
+msgstr ""
+
+#: cinder/crypto.py:60
+msgid "Where we keep our root CA"
+msgstr ""
+
+#: cinder/crypto.py:63
+msgid "Should we use a CA for each project?"
+msgstr ""
+
+#: cinder/crypto.py:67
+#, python-format
+msgid "Subject for certificate for users, %s for project, user, timestamp"
+msgstr ""
+
+#: cinder/crypto.py:72
+#, python-format
+msgid "Subject for certificate for projects, %s for project, timestamp"
+msgstr ""
+
+#: cinder/crypto.py:292
+#, python-format
+msgid "Flags path: %s"
+msgstr ""
+
+#: cinder/exception.py:56
+msgid "Unexpected error while running command."
+msgstr ""
+
+#: cinder/exception.py:59
+#, python-format
+msgid ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+msgstr ""
+
+#: cinder/exception.py:94
+msgid "DB exception wrapped."
+msgstr ""
+
+#: cinder/exception.py:155
+msgid "An unknown exception occurred."
+msgstr ""
+
+#: cinder/exception.py:178
+msgid "Failed to decrypt text"
+msgstr ""
+
+#: cinder/exception.py:182
+msgid "Failed to paginate through images from image service"
+msgstr ""
+
+#: cinder/exception.py:186
+msgid "Virtual Interface creation failed"
+msgstr ""
+
+#: cinder/exception.py:190
+msgid "5 attempts to create virtual interfacewith unique mac address failed"
+msgstr ""
+
+#: cinder/exception.py:195
+msgid "Connection to glance failed"
+msgstr ""
+
+#: cinder/exception.py:199
+msgid "Connection to melange failed"
+msgstr ""
+
+#: cinder/exception.py:203
+msgid "Not authorized."
+msgstr ""
+
+#: cinder/exception.py:208
+msgid "User does not have admin privileges"
+msgstr ""
+
+#: cinder/exception.py:212
+#, python-format
+msgid "Policy doesn't allow %(action)s to be performed."
+msgstr ""
+
+#: cinder/exception.py:216
+#, python-format
+msgid "Not authorized for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:220
+msgid "Unacceptable parameters."
+msgstr ""
+
+#: cinder/exception.py:225
+msgid "Invalid snapshot"
+msgstr ""
+
+#: cinder/exception.py:229
+#, python-format
+msgid "Volume %(volume_id)s is not attached to anything"
+msgstr ""
+
+#: cinder/exception.py:233 cinder/api/openstack/compute/contrib/keypairs.py:113
+msgid "Keypair data is invalid"
+msgstr ""
+
+#: cinder/exception.py:237
+msgid "Failed to load data into json format"
+msgstr ""
+
+#: cinder/exception.py:241
+msgid "The request is invalid."
+msgstr ""
+
+#: cinder/exception.py:245
+#, python-format
+msgid "Invalid signature %(signature)s for user %(user)s."
+msgstr ""
+
+#: cinder/exception.py:249
+msgid "Invalid input received"
+msgstr ""
+
+#: cinder/exception.py:253
+#, python-format
+msgid "Invalid instance type %(instance_type)s."
+msgstr ""
+
+#: cinder/exception.py:257
+msgid "Invalid volume type"
+msgstr ""
+
+#: cinder/exception.py:261
+msgid "Invalid volume"
+msgstr ""
+
+#: cinder/exception.py:265
+#, python-format
+msgid "Invalid port range %(from_port)s:%(to_port)s. %(msg)s"
+msgstr ""
+
+#: cinder/exception.py:269
+#, python-format
+msgid "Invalid IP protocol %(protocol)s."
+msgstr ""
+
+#: cinder/exception.py:273
+#, python-format
+msgid "Invalid content type %(content_type)s."
+msgstr ""
+
+#: cinder/exception.py:277
+#, python-format
+msgid "Invalid cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:281
+msgid "Invalid reuse of an RPC connection."
+msgstr ""
+
+#: cinder/exception.py:285
+msgid "Invalid Parameter: Unicode is not supported by the current database."
+msgstr ""
+
+#: cinder/exception.py:292
+#, python-format
+msgid "%(err)s"
+msgstr ""
+
+#: cinder/exception.py:296
+#, python-format
+msgid ""
+"Cannot perform action '%(action)s' on aggregate %(aggregate_id)s. Reason:"
+" %(reason)s."
+msgstr ""
+
+#: cinder/exception.py:301
+#, python-format
+msgid "Group not valid. Reason: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:305
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot %(method)s while"
+" the instance is in this state."
+msgstr ""
+
+#: cinder/exception.py:310
+#, python-format
+msgid "Instance %(instance_id)s is not running."
+msgstr ""
+
+#: cinder/exception.py:314
+#, python-format
+msgid "Instance %(instance_id)s is not suspended."
+msgstr ""
+
+#: cinder/exception.py:318
+#, python-format
+msgid "Instance %(instance_id)s is not in rescue mode"
+msgstr ""
+
+#: cinder/exception.py:322
+msgid "Failed to suspend instance"
+msgstr ""
+
+#: cinder/exception.py:326
+msgid "Failed to resume server"
+msgstr ""
+
+#: cinder/exception.py:330
+msgid "Failed to reboot instance"
+msgstr ""
+
+#: cinder/exception.py:334
+msgid "Failed to terminate instance"
+msgstr ""
+
+#: cinder/exception.py:338
+msgid "Service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:342
+msgid "Volume service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:346
+msgid "Compute service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:350
+#, python-format
+msgid "Unable to migrate instance (%(instance_id)s) to current host (%(host)s)."
+msgstr ""
+
+#: cinder/exception.py:355
+msgid "Destination compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:359
+msgid "Original compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:363
+msgid "The supplied hypervisor type of is invalid."
+msgstr ""
+
+#: cinder/exception.py:367
+msgid "The instance requires a newer hypervisor version than has been provided."
+msgstr ""
+
+#: cinder/exception.py:372
+#, python-format
+msgid ""
+"The supplied disk path (%(path)s) already exists, it is expected not to "
+"exist."
+msgstr ""
+
+#: cinder/exception.py:377
+#, python-format
+msgid "The supplied device path (%(path)s) is invalid."
+msgstr ""
+
+#: cinder/exception.py:381
+#, python-format
+msgid "The supplied device (%(device)s) is busy."
+msgstr ""
+
+#: cinder/exception.py:385
+msgid "Unacceptable CPU info"
+msgstr ""
+
+#: cinder/exception.py:389
+#, python-format
+msgid "%(address)s is not a valid IP v4/6 address."
+msgstr ""
+
+#: cinder/exception.py:393
+#, python-format
+msgid ""
+"VLAN tag is not appropriate for the port group %(bridge)s. Expected VLAN "
+"tag is %(tag)s, but the one associated with the port group is %(pgroup)s."
+msgstr ""
+
+#: cinder/exception.py:399
+#, python-format
+msgid ""
+"vSwitch which contains the port group %(bridge)s is not associated with "
+"the desired physical adapter. Expected vSwitch is %(expected)s, but the "
+"one associated is %(actual)s."
+msgstr ""
+
+#: cinder/exception.py:406
+#, python-format
+msgid "Disk format %(disk_format)s is not acceptable"
+msgstr ""
+
+#: cinder/exception.py:410
+#, python-format
+msgid "Image %(image_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:414
+#, python-format
+msgid "Instance %(instance_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:418
+#, python-format
+msgid "Ec2 id %(ec2_id)s is unacceptable."
+msgstr ""
+
+#: cinder/exception.py:422
+msgid "Resource could not be found."
+msgstr ""
+
+#: cinder/exception.py:427
+#, python-format
+msgid "Required flag %(flag)s not set."
+msgstr ""
+
+#: cinder/exception.py:431
+#, python-format
+msgid "Volume %(volume_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:435
+#, python-format
+msgid "Unable to locate account %(account_name)s on Solidfire device"
+msgstr ""
+
+#: cinder/exception.py:440
+#, python-format
+msgid "Volume not found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:444
+#, python-format
+msgid "Volume %(volume_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:449
+msgid "Zero volume types found."
+msgstr ""
+
+#: cinder/exception.py:453
+#, python-format
+msgid "Volume type %(volume_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:457
+#, python-format
+msgid "Volume type with name %(volume_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:462
+#, python-format
+msgid ""
+"Volume Type %(volume_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:467
+#, python-format
+msgid "Snapshot %(snapshot_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:471
+#, python-format
+msgid "deleting volume %(volume_name)s that has snapshot"
+msgstr ""
+
+#: cinder/exception.py:475
+#, python-format
+msgid "deleting snapshot %(snapshot_name)s that has dependent volumes"
+msgstr ""
+
+#: cinder/exception.py:480
+#, python-format
+msgid "No target id found for volume %(volume_id)s."
+msgstr ""
+
+#: cinder/exception.py:484
+#, python-format
+msgid "No disk at %(location)s"
+msgstr ""
+
+#: cinder/exception.py:488
+#, python-format
+msgid "Could not find a handler for %(driver_type)s volume."
+msgstr ""
+
+#: cinder/exception.py:492
+#, python-format
+msgid "Invalid image href %(image_href)s."
+msgstr ""
+
+#: cinder/exception.py:496
+msgid ""
+"Some images have been stored via hrefs. This version of the api does not "
+"support displaying image hrefs."
+msgstr ""
+
+#: cinder/exception.py:501
+#, python-format
+msgid "Image %(image_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:505
+#, python-format
+msgid "Kernel not found for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:509
+#, python-format
+msgid "User %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:513
+#, python-format
+msgid "Project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:517
+#, python-format
+msgid "User %(user_id)s is not a member of project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:521
+#, python-format
+msgid "Role %(role_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:525
+msgid "Cannot find SR to read/write VDI."
+msgstr ""
+
+#: cinder/exception.py:529
+#, python-format
+msgid "%(req)s is required to create a network."
+msgstr ""
+
+#: cinder/exception.py:533
+#, python-format
+msgid "Network %(network_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:537
+#, python-format
+msgid "Network could not be found for bridge %(bridge)s"
+msgstr ""
+
+#: cinder/exception.py:541
+#, python-format
+msgid "Network could not be found for uuid %(uuid)s"
+msgstr ""
+
+#: cinder/exception.py:545
+#, python-format
+msgid "Network could not be found with cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:549
+#, python-format
+msgid "Network could not be found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:553
+msgid "No networks defined."
+msgstr ""
+
+#: cinder/exception.py:557
+#, python-format
+msgid ""
+"Either Network uuid %(network_uuid)s is not present or is not assigned to"
+" the project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:562
+#, python-format
+msgid "Host is not set to the network (%(network_id)s)."
+msgstr ""
+
+#: cinder/exception.py:566
+#, python-format
+msgid "Network %(network)s has active ports, cannot delete."
+msgstr ""
+
+#: cinder/exception.py:570
+msgid "Could not find the datastore reference(s) which the VM uses."
+msgstr ""
+
+#: cinder/exception.py:574
+#, python-format
+msgid "No fixed IP associated with id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:578
+#, python-format
+msgid "Fixed ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:582
+#, python-format
+msgid "Instance %(instance_id)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:586
+#, python-format
+msgid "Network host %(host)s has zero fixed ips in network %(network_id)s."
+msgstr ""
+
+#: cinder/exception.py:591
+#, python-format
+msgid "Instance %(instance_id)s doesn't have fixed ip '%(ip)s'."
+msgstr ""
+
+#: cinder/exception.py:595
+#, python-format
+msgid "Host %(host)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:599
+#, python-format
+msgid ""
+"Fixed IP address (%(address)s) does not exist in network "
+"(%(network_uuid)s)."
+msgstr ""
+
+#: cinder/exception.py:604
+#, python-format
+msgid "Fixed IP address %(address)s is already in use."
+msgstr ""
+
+#: cinder/exception.py:608
+#, python-format
+msgid "Fixed IP address %(address)s is invalid."
+msgstr ""
+
+#: cinder/exception.py:612
+msgid "Zero fixed ips available."
+msgstr ""
+
+#: cinder/exception.py:616
+msgid "Zero fixed ips could be found."
+msgstr ""
+
+#: cinder/exception.py:620
+#, python-format
+msgid "Floating ip not found for id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:624
+#, python-format
+msgid "The DNS entry %(name)s already exists in domain %(domain)s."
+msgstr ""
+
+#: cinder/exception.py:628
+#, python-format
+msgid "Floating ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:632
+#, python-format
+msgid "Floating ip not found for host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:636
+msgid "Zero floating ips available."
+msgstr ""
+
+#: cinder/exception.py:640
+#, python-format
+msgid "Floating ip %(address)s is associated."
+msgstr ""
+
+#: cinder/exception.py:644
+#, python-format
+msgid "Floating ip %(address)s is not associated."
+msgstr ""
+
+#: cinder/exception.py:648
+msgid "Zero floating ips exist."
+msgstr ""
+
+#: cinder/exception.py:652
+#, python-format
+msgid "Interface %(interface)s not found."
+msgstr ""
+
+#: cinder/exception.py:656
+#, python-format
+msgid "Keypair %(name)s not found for user %(user_id)s"
+msgstr ""
+
+#: cinder/exception.py:660
+#, python-format
+msgid "Certificate %(certificate_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:664
+#, python-format
+msgid "Service %(service_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:668
+#, python-format
+msgid "Host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:672
+#, python-format
+msgid "Compute host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:676
+#, python-format
+msgid "Could not find binary %(binary)s on host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:680
+#, python-format
+msgid "Auth token %(token)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:684
+#, python-format
+msgid "Access Key %(access_key)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:688
+msgid "Quota could not be found"
+msgstr ""
+
+#: cinder/exception.py:692
+#, python-format
+msgid "Quota for project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:696
+#, python-format
+msgid "Quota class %(class_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:700
+#, python-format
+msgid "Security group %(security_group_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:704
+#, python-format
+msgid "Security group %(security_group_id)s not found for project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:709
+#, python-format
+msgid "Security group with rule %(rule_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:713
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is already associated with the "
+"instance %(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:718
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is not associated with the instance "
+"%(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:723
+#, python-format
+msgid "Migration %(migration_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:727
+#, python-format
+msgid "Migration not found for instance %(instance_id)s with status %(status)s."
+msgstr ""
+
+#: cinder/exception.py:732
+#, python-format
+msgid "Console pool %(pool_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:736
+#, python-format
+msgid ""
+"Console pool of type %(console_type)s for compute host %(compute_host)s "
+"on proxy host %(host)s not found."
+msgstr ""
+
+#: cinder/exception.py:742
+#, python-format
+msgid "Console %(console_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:746
+#, python-format
+msgid "Console for instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:750
+#, python-format
+msgid ""
+"Console for instance %(instance_id)s in pool %(pool_id)s could not be "
+"found."
+msgstr ""
+
+#: cinder/exception.py:755
+#, python-format
+msgid "Invalid console type %(console_type)s "
+msgstr ""
+
+#: cinder/exception.py:759
+msgid "Zero instance types found."
+msgstr ""
+
+#: cinder/exception.py:763
+#, python-format
+msgid "Instance type %(instance_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:767
+#, python-format
+msgid "Instance type with name %(instance_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:772
+#, python-format
+msgid "Flavor %(flavor_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:776
+#, python-format
+msgid "Cell %(cell_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:780
+#, python-format
+msgid "Scheduler Host Filter %(filter_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:784
+#, python-format
+msgid "Scheduler cost function %(cost_fn_str)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:789
+#, python-format
+msgid "Scheduler weight flag not found: %(flag_name)s"
+msgstr ""
+
+#: cinder/exception.py:793
+#, python-format
+msgid "Instance %(instance_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:798
+#, python-format
+msgid ""
+"Instance Type %(instance_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:803
+msgid "LDAP object could not be found"
+msgstr ""
+
+#: cinder/exception.py:807
+#, python-format
+msgid "LDAP user %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:811
+#, python-format
+msgid "LDAP group %(group_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:815
+#, python-format
+msgid "LDAP user %(user_id)s is not a member of group %(group_id)s."
+msgstr ""
+
+#: cinder/exception.py:819
+#, python-format
+msgid "File %(file_path)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:823
+msgid "Zero files could be found."
+msgstr ""
+
+#: cinder/exception.py:827
+#, python-format
+msgid "Virtual switch associated with the network adapter %(adapter)s not found."
+msgstr ""
+
+#: cinder/exception.py:832
+#, python-format
+msgid "Network adapter %(adapter)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:836
+#, python-format
+msgid "Class %(class_name)s could not be found: %(exception)s"
+msgstr ""
+
+#: cinder/exception.py:840
+msgid "Action not allowed."
+msgstr ""
+
+#: cinder/exception.py:844
+#, python-format
+msgid "Unable to use global role %(role_id)s"
+msgstr ""
+
+#: cinder/exception.py:848
+msgid "Rotation is not allowed for snapshots"
+msgstr ""
+
+#: cinder/exception.py:852
+msgid "Rotation param is required for backup image_type"
+msgstr ""
+
+#: cinder/exception.py:861
+#, python-format
+msgid "Key pair %(key_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:865
+#, python-format
+msgid "User %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:869
+#, python-format
+msgid "LDAP user %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:873
+#, python-format
+msgid "LDAP group %(group)s already exists."
+msgstr ""
+
+#: cinder/exception.py:877
+#, python-format
+msgid "User %(uid)s is already a member of the group %(group_dn)s"
+msgstr ""
+
+#: cinder/exception.py:882
+#, python-format
+msgid "Project %(project)s already exists."
+msgstr ""
+
+#: cinder/exception.py:886
+#, python-format
+msgid "Instance %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:890
+#, python-format
+msgid "Instance Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:894
+#, python-format
+msgid "Volume Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:898
+#, python-format
+msgid "%(path)s is on shared storage: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:902
+msgid "Migration error"
+msgstr ""
+
+#: cinder/exception.py:906
+#, python-format
+msgid "Malformed message body: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:910
+#, python-format
+msgid "Could not find config at %(path)s"
+msgstr ""
+
+#: cinder/exception.py:914
+#, python-format
+msgid "Could not load paste app '%(name)s' from %(path)s"
+msgstr ""
+
+#: cinder/exception.py:918
+msgid "When resizing, instances must change size!"
+msgstr ""
+
+#: cinder/exception.py:922
+msgid "Image is larger than instance type allows"
+msgstr ""
+
+#: cinder/exception.py:926
+msgid "1 or more Zones could not complete the request"
+msgstr ""
+
+#: cinder/exception.py:930
+msgid "Instance type's memory is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:934
+msgid "Instance type's disk is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:938
+#, python-format
+msgid "Insufficient free memory on compute node to start %(uuid)s."
+msgstr ""
+
+#: cinder/exception.py:942
+msgid "Could not fetch bandwidth/cpu/disk metrics for this host."
+msgstr ""
+
+#: cinder/exception.py:946
+#, python-format
+msgid "No valid host was found. %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:950
+#, python-format
+msgid "Host %(host)s is not up or doesn't exist."
+msgstr ""
+
+#: cinder/exception.py:954
+msgid "Quota exceeded"
+msgstr ""
+
+#: cinder/exception.py:958
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: action '%(action)s' caused an error: "
+"%(reason)s."
+msgstr ""
+
+#: cinder/exception.py:963
+#, python-format
+msgid "Aggregate %(aggregate_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:967
+#, python-format
+msgid "Aggregate %(aggregate_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:971
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:975
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:980
+#, python-format
+msgid "Host %(host)s already member of another aggregate."
+msgstr ""
+
+#: cinder/exception.py:984
+#, python-format
+msgid "Aggregate %(aggregate_id)s already has host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:988
+#, python-format
+msgid "Detected more than one volume with name %(vol_name)s"
+msgstr ""
+
+#: cinder/exception.py:992
+#, python-format
+msgid "Cannot create volume_type with name %(name)s and specs %(extra_specs)s"
+msgstr ""
+
+#: cinder/exception.py:997
+msgid "Unable to create instance type"
+msgstr ""
+
+#: cinder/exception.py:1001
+msgid "Bad response from SolidFire API"
+msgstr ""
+
+#: cinder/exception.py:1005
+#, python-format
+msgid "Error in SolidFire API response: status=%(status)s"
+msgstr ""
+
+#: cinder/exception.py:1009
+#, python-format
+msgid "Error in SolidFire API response: data=%(data)s"
+msgstr ""
+
+#: cinder/exception.py:1013
+#, python-format
+msgid "Detected existing vlan with id %(vlan)d"
+msgstr ""
+
+#: cinder/exception.py:1017
+#, python-format
+msgid "Instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:1021
+#, python-format
+msgid "Invalid id: %(val)s (expecting \"i-...\")."
+msgstr ""
+
+#: cinder/exception.py:1025
+#, python-format
+msgid "Could not fetch image %(image)s"
+msgstr ""
+
+#: cinder/log.py:315
+#, python-format
+msgid "syslog facility must be one of: %s"
+msgstr ""
+
+#: cinder/manager.py:146
+#, python-format
+msgid "Skipping %(full_task_name)s, %(ticks_to_skip)s ticks left until next run"
+msgstr ""
+
+#: cinder/manager.py:152
+#, python-format
+msgid "Running periodic task %(full_task_name)s"
+msgstr ""
+
+#: cinder/manager.py:159
+#, python-format
+msgid "Error during %(full_task_name)s: %(e)s"
+msgstr ""
+
+#: cinder/manager.py:203
+msgid "Notifying Schedulers of capabilities ..."
+msgstr ""
+
+#: cinder/policy.py:30
+msgid "JSON file representing policy"
+msgstr ""
+
+#: cinder/policy.py:33
+msgid "Rule checked when requested rule is not found"
+msgstr ""
+
+#: cinder/service.py:137
+msgid "SIGTERM received"
+msgstr ""
+
+#: cinder/service.py:177
+#, python-format
+msgid "Starting %(topic)s node (version %(vcs_string)s)"
+msgstr ""
+
+#: cinder/service.py:195
+#, python-format
+msgid "Creating Consumer connection for Service %s"
+msgstr ""
+
+#: cinder/service.py:282
+msgid "Service killed that has no database entry"
+msgstr ""
+
+#: cinder/service.py:319
+msgid "The service database object disappeared, Recreating it."
+msgstr ""
+
+#: cinder/service.py:334
+msgid "Recovered model server connection!"
+msgstr ""
+
+#: cinder/service.py:340
+msgid "model server went away"
+msgstr ""
+
+#: cinder/service.py:433
+msgid "Full set of FLAGS:"
+msgstr ""
+
+#: cinder/service.py:440
+#, python-format
+msgid "%(flag)s : FLAG SET "
+msgstr ""
+
+#: cinder/utils.py:79
+#, python-format
+msgid "Inner Exception: %s"
+msgstr ""
+
+#: cinder/utils.py:165
+#, python-format
+msgid "Fetching %s"
+msgstr ""
+
+#: cinder/utils.py:210
+#, python-format
+msgid "Got unknown keyword args to utils.execute: %r"
+msgstr ""
+
+#: cinder/utils.py:220
+#, python-format
+msgid "Running cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/utils.py:236 cinder/utils.py:315
+#, python-format
+msgid "Result was %s"
+msgstr ""
+
+#: cinder/utils.py:249
+#, python-format
+msgid "%r failed. Retrying."
+msgstr ""
+
+#: cinder/utils.py:291
+#, python-format
+msgid "Running cmd (SSH): %s"
+msgstr ""
+
+#: cinder/utils.py:293
+msgid "Environment not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:297
+msgid "process_input not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:352
+#, python-format
+msgid "debug in callback: %s"
+msgstr ""
+
+#: cinder/utils.py:534
+#, python-format
+msgid "Link Local address is not found.:%s"
+msgstr ""
+
+#: cinder/utils.py:537
+#, python-format
+msgid "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+msgstr ""
+
+#: cinder/utils.py:648
+#, python-format
+msgid "Invalid backend: %s"
+msgstr ""
+
+#: cinder/utils.py:659
+#, python-format
+msgid "backend %s"
+msgstr ""
+
+#: cinder/utils.py:709
+msgid "in looping call"
+msgstr ""
+
+#: cinder/utils.py:927
+#, python-format
+msgid "Attempting to grab semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:931
+#, python-format
+msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:935
+#, python-format
+msgid "Attempting to grab file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:942
+#, python-format
+msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:1001
+#, python-format
+msgid "Found sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1008
+#, python-format
+msgid "Cleaned sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1023
+#, python-format
+msgid "Found lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1028
+#, python-format
+msgid "Cleaned lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1138
+#, python-format
+msgid "Expected object of type: %s"
+msgstr ""
+
+#: cinder/utils.py:1169
+#, python-format
+msgid "Invalid server_string: %s"
+msgstr ""
+
+#: cinder/utils.py:1298
+#, python-format
+msgid "timefunc: '%(name)s' took %(total_time).2f secs"
+msgstr ""
+
+#: cinder/utils.py:1330
+msgid "Original exception being dropped"
+msgstr ""
+
+#: cinder/utils.py:1461
+#, python-format
+msgid "Class %(fullname)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1463
+#, python-format
+msgid "Class %(fullname)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1495
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1497
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1681
+#, python-format
+msgid "Could not remove tmpdir: %s"
+msgstr ""
+
+#: cinder/wsgi.py:97
+#, python-format
+msgid "Started %(name)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:108
+msgid "Stopping WSGI server."
+msgstr ""
+
+#: cinder/wsgi.py:111
+msgid "Stopping raw TCP server."
+msgstr ""
+
+#: cinder/wsgi.py:117
+#, python-format
+msgid "Starting TCP server %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:133
+msgid "WSGI server has stopped."
+msgstr ""
+
+#: cinder/wsgi.py:211
+msgid "You must implement __call__"
+msgstr ""
+
+#: cinder/api/direct.py:218
+msgid "not available"
+msgstr ""
+
+#: cinder/api/direct.py:299
+#, python-format
+msgid "Returned non-serializeable type: %s"
+msgstr ""
+
+#: cinder/api/sizelimit.py:51
+msgid "Request is too large."
+msgstr ""
+
+#: cinder/api/validator.py:142
+#, python-format
+msgid "%(key)s with value %(value)s failed validator  %(validator)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:73
+#, python-format
+msgid "%(code)s: %(message)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:95
+#, python-format
+msgid "FaultWrapper: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:170
+msgid "Too many failed authentications."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:180
+#, python-format
+msgid ""
+"Access key %(access_key)s has had %(failures)d failed authentications and"
+" will be locked out for %(lock_mins)d minutes."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:267
+msgid "Signature not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:271
+msgid "Access key not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:306 cinder/api/ec2/__init__.py:319
+msgid "Failure communicating with keystone"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:388
+#, python-format
+msgid "Authentication Failure: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:404
+#, python-format
+msgid "Authenticated Request For %(uname)s:%(pname)s)"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:435
+#, python-format
+msgid "action: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:437
+#, python-format
+msgid "arg: %(key)s\t\tval: %(value)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:512
+#, python-format
+msgid "Unauthorized request for controller=%(controller)s and action=%(action)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:584
+#, python-format
+msgid "InstanceNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:590
+#, python-format
+msgid "VolumeNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:596
+#, python-format
+msgid "SnapshotNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:602
+#, python-format
+msgid "NotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:605
+#, python-format
+msgid "EC2APIError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:613
+#, python-format
+msgid "KeyPairExists raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:617
+#, python-format
+msgid "InvalidParameterValue raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:621
+#, python-format
+msgid "InvalidPortRange raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:625
+#, python-format
+msgid "NotAuthorized raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:629
+#, python-format
+msgid "InvalidRequest raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:633
+#, python-format
+msgid "QuotaError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:637
+#, python-format
+msgid "Invalid id: bogus (expecting \"i-...\"): %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:646
+#, python-format
+msgid "Unexpected error raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:647
+#, python-format
+msgid "Environment: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:649 cinder/api/metadata/handler.py:248
+msgid "An unknown error has occurred. Please try your request again."
+msgstr ""
+
+#: cinder/api/ec2/apirequest.py:64
+#, python-format
+msgid "Unsupported API request: controller = %(controller)s, action = %(action)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:336
+#, python-format
+msgid "Create snapshot of volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:372
+#, python-format
+msgid ""
+"Value (%s) for KeyName is invalid. Content limited to Alphanumeric "
+"character, spaces, dashes, and underscore."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:378
+#, python-format
+msgid "Value (%s) for Keyname is invalid. Length exceeds maximum of 255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:382
+#, python-format
+msgid "Create key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:391
+#, python-format
+msgid "Import key %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:409
+#, python-format
+msgid "Delete key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:551
+msgid "Invalid CIDR"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:639 cinder/api/ec2/cloud.py:693
+#: cinder/api/ec2/cloud.py:800
+msgid "Not enough parameters, need group_name or group_id"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:654
+#: cinder/api/openstack/compute/contrib/security_groups.py:517
+#, python-format
+msgid "Revoke security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:666 cinder/api/ec2/cloud.py:719
+#, python-format
+msgid "%s Not enough parameters to build a valid rule"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:684 cinder/api/ec2/cloud.py:744
+msgid "No rule for the specified parameters."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:708
+#: cinder/api/openstack/compute/contrib/security_groups.py:354
+#, python-format
+msgid "Authorize security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:725
+#, python-format
+msgid "%s - This rule already exists in group"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:769
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Content limited to "
+"Alphanumeric characters, spaces, dashes, and underscores."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:776
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Length exceeds maximum of "
+"255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:780
+#: cinder/api/openstack/compute/contrib/security_groups.py:292
+#, python-format
+msgid "Create Security Group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:783
+#, python-format
+msgid "group %s already exists"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:815
+#: cinder/api/openstack/compute/contrib/security_groups.py:245
+#, python-format
+msgid "Delete security group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:823 cinder/compute/manager.py:1630
+#, python-format
+msgid "Get console output for instance %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:894
+#, python-format
+msgid "Create volume from snapshot %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:898 cinder/api/openstack/compute/contrib/volumes.py:186
+#: cinder/api/openstack/volume/volumes.py:222
+#, python-format
+msgid "Create volume of %s GB"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:921
+msgid "Delete Failed"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:931
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(instance_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:939
+msgid "Attach Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:952 cinder/api/openstack/compute/contrib/volumes.py:366
+#, python-format
+msgid "Detach volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:959
+msgid "Detach Volume Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:984 cinder/api/ec2/cloud.py:1041
+#: cinder/api/ec2/cloud.py:1518 cinder/api/ec2/cloud.py:1533
+#, python-format
+msgid "attribute not supported: %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1107
+#, python-format
+msgid "vol = %s\n"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1255
+msgid "Allocate address"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1267
+#, python-format
+msgid "Release address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1272
+#, python-format
+msgid "Associate address %(public_ip)s to instance %(instance_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1282
+#, python-format
+msgid "Disassociate address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1308
+msgid "Image must be available"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1329
+msgid "Going to start terminating instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1343
+#, python-format
+msgid "Reboot instance %r"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1354
+msgid "Going to stop instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1365
+msgid "Going to start instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1455
+#, python-format
+msgid "De-registering image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1471
+msgid "imageLocation is required"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1490
+#, python-format
+msgid "Registered image %(image_location)s with id %(image_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1536
+msgid "user or group not specified"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1538
+msgid "only group \"all\" is supported"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1540
+msgid "operation_type must be add or remove"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1542
+#, python-format
+msgid "Updating image %s publicity"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1555
+#, python-format
+msgid "Not allowed to modify attributes for image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1603
+#, python-format
+msgid "Couldn't stop instance with in %d sec"
+msgstr ""
+
+#: cinder/api/metadata/handler.py:246 cinder/api/metadata/handler.py:253
+#, python-format
+msgid "Failed to get metadata for ip: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:43
+#, python-format
+msgid "Caught error: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:45 cinder/api/openstack/wsgi.py:886
+#, python-format
+msgid "%(url)s returned with HTTP %(status)d"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:94
+msgid "Must specify an ExtensionManager class"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:105
+#, python-format
+msgid "Extended resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:130
+#, python-format
+msgid ""
+"Extension %(ext_name)s: Cannot extend resource %(collection)s: No such "
+"resource"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:135
+#, python-format
+msgid "Extension %(ext_name)s extending resource: %(collection)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:90
+#, python-format
+msgid "%(user_id)s could not be found with token '%(token)s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:134
+#, python-format
+msgid "%(user_id)s must be an admin or a member of %(project_id)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:152
+msgid "Authentication requests must be made against a version root (e.g. /v2)."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:167
+#, python-format
+msgid "Could not find %s in request."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:191
+#, python-format
+msgid "Successfully authenticated '%s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:241
+msgid "User not found with provided API key."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:258
+#, python-format
+msgid "Provided API key is valid, but not for user '%(username)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:133 cinder/api/openstack/common.py:167
+msgid "limit param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:136 cinder/api/openstack/common.py:171
+msgid "limit param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:161
+msgid "offset param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:175
+msgid "offset param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:203
+#, python-format
+msgid "marker [%s] not found"
+msgstr ""
+
+#: cinder/api/openstack/common.py:243
+#, python-format
+msgid "href %s does not contain version"
+msgstr ""
+
+#: cinder/api/openstack/common.py:278
+msgid "Image metadata limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/common.py:295
+#, python-format
+msgid "Converting nw_info: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:305
+#, python-format
+msgid "Converted networks: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:338
+#, python-format
+msgid "Cannot '%(action)s' while instance is in %(attr)s %(state)s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:341
+#, python-format
+msgid "Instance is in an invalid state for '%(action)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:421
+msgid "Rejecting snapshot request, snapshots currently disabled"
+msgstr ""
+
+#: cinder/api/openstack/common.py:423
+msgid "Instance snapshots are not permitted at this time."
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:188
+#, python-format
+msgid "Loaded extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:225
+#, python-format
+msgid "Ext name: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:226
+#, python-format
+msgid "Ext alias: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:227
+#, python-format
+msgid "Ext description: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:229
+#, python-format
+msgid "Ext namespace: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:230
+#, python-format
+msgid "Ext updated: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:232
+#, python-format
+msgid "Exception loading extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:246
+#, python-format
+msgid "Loading extension %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:252
+#, python-format
+msgid "Calling extension factory %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:264
+#, python-format
+msgid "Failed to load extension %(ext_factory)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:344
+#, python-format
+msgid "Failed to load extension %(classpath)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:368
+#, python-format
+msgid "Failed to load extension %(ext_name)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:135 cinder/api/openstack/wsgi.py:538
+msgid "cannot understand JSON"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:159
+#: cinder/api/openstack/compute/contrib/hosts.py:86
+msgid "cannot understand XML"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:543
+msgid "too many body keys"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:582
+#, python-format
+msgid "Exception handling resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:586
+#, python-format
+msgid "Fault thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:589
+#, python-format
+msgid "HTTP exception thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:697
+msgid "Unrecognized Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:701
+msgid "No Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:705
+msgid "Empty body provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:816
+#, python-format
+msgid "There is no such action: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:819 cinder/api/openstack/wsgi.py:832
+#: cinder/api/openstack/compute/server_metadata.py:58
+#: cinder/api/openstack/compute/server_metadata.py:76
+#: cinder/api/openstack/compute/server_metadata.py:101
+#: cinder/api/openstack/compute/server_metadata.py:126
+#: cinder/api/openstack/compute/contrib/admin_actions.py:211
+#: cinder/api/openstack/compute/contrib/console_output.py:52
+msgid "Malformed request body"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:829
+msgid "Unsupported Content-Type"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:841
+msgid "Malformed request url"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:889
+#, python-format
+msgid "%(url)s returned a fault: %(e)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:265
+msgid "element is not a child"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:414
+msgid "root element selecting a list"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:739
+#, python-format
+msgid "Template tree mismatch; adding slave %(slavetag)s to master %(mastertag)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:858
+msgid "subclasses must implement construct()!"
+msgstr ""
+
+#: cinder/api/openstack/compute/extensions.py:29
+#: cinder/api/openstack/volume/extensions.py:29
+msgid "Initializing extension manager."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:40
+#: cinder/api/openstack/compute/images.py:146
+#: cinder/api/openstack/compute/images.py:161
+msgid "Image not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:79
+msgid "Incorrect request body format"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:83
+#: cinder/api/openstack/compute/server_metadata.py:80
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:79
+#: cinder/api/openstack/compute/contrib/volumetypes.py:188
+msgid "Request body and URI mismatch"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:86
+#: cinder/api/openstack/compute/server_metadata.py:84
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:82
+#: cinder/api/openstack/compute/contrib/volumetypes.py:191
+msgid "Request body contains too many items"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:111
+msgid "Invalid metadata key"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:74
+msgid "Instance does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:97
+msgid "Instance is not a member of specified network"
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:140
+#, python-format
+msgid ""
+"Only %(value)s %(verb)s request(s) can be made to %(uri)s every "
+"%(unit_string)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:266
+msgid "This request was rate-limited."
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:38
+#: cinder/api/openstack/compute/server_metadata.py:122
+#: cinder/api/openstack/compute/server_metadata.py:159
+msgid "Server does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:141
+#: cinder/api/openstack/compute/server_metadata.py:152
+msgid "Metadata item was not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:425
+#, python-format
+msgid "Invalid server status: %(status)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:433
+msgid "Invalid changes-since value"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:483
+msgid "Personality file limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:485
+msgid "Personality file path too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:487
+msgid "Personality file content too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:501
+msgid "Server name is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:505
+msgid "Server name is an empty string"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:509
+msgid "Server name must be less than 256 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:527
+#, python-format
+msgid "Bad personality format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:530
+msgid "Bad personality format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:535
+#, python-format
+msgid "Personality content for %s cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:550
+#, python-format
+msgid "Bad networks format: network uuid is not in proper format (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:559
+#, python-format
+msgid "Invalid fixed IP address (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:566
+#, python-format
+msgid "Duplicate networks (%s) are not allowed"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:572
+#, python-format
+msgid "Bad network format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:575
+msgid "Bad networks format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:587
+msgid "Userdata content cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:594
+msgid "accessIPv4 is not proper IPv4 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:601
+msgid "accessIPv6 is not proper IPv6 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:633
+msgid "Server name is not defined"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:675
+#: cinder/api/openstack/compute/servers.py:740
+msgid "Invalid flavorRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:737
+msgid "Can not find requested image"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:743
+msgid "Invalid key_name provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:829
+#: cinder/api/openstack/compute/servers.py:849
+msgid "Instance has not been resized."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:835
+#, python-format
+msgid "Error in confirm-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:855
+#, python-format
+msgid "Error in revert-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:868
+msgid "Argument 'type' for reboot is not HARD or SOFT"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:872
+msgid "Missing argument 'type' for reboot"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:885
+#, python-format
+msgid "Error in reboot %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:897
+msgid "Unable to locate requested flavor."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:900
+msgid "Resize requires a change in size."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:924
+msgid "Malformed server entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:931
+msgid "Missing imageRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:940
+msgid "Invalid imageRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:949
+msgid "Missing flavorRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:962
+msgid "No adminPass was specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:966
+#: cinder/api/openstack/compute/servers.py:1144
+msgid "Invalid adminPass"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:980
+msgid "Unable to parse metadata key/value pairs."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:993
+msgid "Resize request has invalid 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:996
+msgid "Resize requests require 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1014
+#: cinder/api/openstack/compute/contrib/aggregates.py:142
+#: cinder/api/openstack/compute/contrib/networks.py:65
+msgid "Invalid request body"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1019
+msgid "Could not parse imageRef from request."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1071
+msgid "Instance could not be found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1074
+msgid "Cannot find image for rebuild"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1103
+msgid "createImage entity requires name attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1112
+#: cinder/api/openstack/compute/contrib/admin_actions.py:238
+msgid "Invalid metadata"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1167
+#, python-format
+msgid "Removing options '%(unk_opt_str)s' from query"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:60
+#, python-format
+msgid "Compute.api::pause %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:77
+#, python-format
+msgid "Compute.api::unpause %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:94
+#, python-format
+msgid "compute.api::suspend %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:111
+#, python-format
+msgid "compute.api::resume %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:127
+#, python-format
+msgid "Error in migrate %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:141
+#, python-format
+msgid "Compute.api::reset_network %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:154
+#: cinder/api/openstack/compute/contrib/admin_actions.py:170
+#: cinder/api/openstack/compute/contrib/admin_actions.py:186
+#: cinder/api/openstack/compute/contrib/multinic.py:41
+#: cinder/api/openstack/compute/contrib/rescue.py:44
+msgid "Server not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:157
+#, python-format
+msgid "Compute.api::inject_network_info %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:173
+#, python-format
+msgid "Compute.api::lock %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:189
+#, python-format
+msgid "Compute.api::unlock %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:219
+#, python-format
+msgid "createBackup entity requires %s attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:223
+msgid "Malformed createBackup entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:229
+msgid "createBackup attribute 'rotation' must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:244
+#: cinder/api/openstack/compute/contrib/console_output.py:47
+#: cinder/api/openstack/compute/contrib/console_output.py:59
+#: cinder/api/openstack/compute/contrib/consoles.py:49
+#: cinder/api/openstack/compute/contrib/consoles.py:60
+#: cinder/api/openstack/compute/contrib/server_action_list.py:49
+#: cinder/api/openstack/compute/contrib/server_diagnostics.py:47
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:38
+msgid "Instance not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:272
+msgid "host and block_migration must be specified."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:284
+#, python-format
+msgid "Live migration of instance %(id)s to host %(host)s failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:76
+#, python-format
+msgid ""
+"Cannot create aggregate with name %(name)s and availability zone "
+"%(avail_zone)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:88
+#, python-format
+msgid "Cannot show aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:114
+#, python-format
+msgid "Cannot update aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:126
+#, python-format
+msgid "Cannot delete aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:139
+#, python-format
+msgid "Aggregates does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:152
+#: cinder/api/openstack/compute/contrib/aggregates.py:158
+#, python-format
+msgid "Cannot add host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:171
+#: cinder/api/openstack/compute/contrib/aggregates.py:175
+#, python-format
+msgid "Cannot remove host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:195
+#, python-format
+msgid "Cannot set metadata %(metadata)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/certificates.py:75
+msgid "Only root certificate can be retrieved."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/cloudpipe.py:146
+msgid ""
+"Unable to claim IP for VPN instances, ensure it isn't running, and try "
+"again in a few minutes"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:44
+msgid "Missing type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:56
+msgid "Invalid type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/disk_config.py:44
+#, python-format
+msgid "%s must be either 'MANUAL' or 'AUTO'."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/extended_server_attributes.py:77
+#: cinder/api/openstack/compute/contrib/extended_status.py:61
+msgid "Server not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:61
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:91
+msgid "Flavor not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:49
+#: cinder/api/openstack/compute/contrib/volumetypes.py:158
+msgid "No Request Body"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:159
+#, python-format
+msgid "No more floating ips in pool %s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:161
+msgid "No more floating ips available."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:201
+#: cinder/api/openstack/compute/contrib/floating_ips.py:230
+#: cinder/api/openstack/compute/contrib/security_groups.py:571
+#: cinder/api/openstack/compute/contrib/security_groups.py:604
+msgid "Missing parameter dict"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:204
+#: cinder/api/openstack/compute/contrib/floating_ips.py:233
+msgid "Address not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:213
+msgid "No fixed ips associated to instance"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:216
+msgid "Associate floating ip failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:144
+#, python-format
+msgid "Invalid status: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:148
+#, python-format
+msgid "Invalid mode: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:152
+#, python-format
+msgid "Invalid update setting: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:170
+#, python-format
+msgid "Putting host %(host)s in maintenance mode %(mode)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:181
+#, python-format
+msgid "Setting host %(host)s to %(state)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:230
+msgid "Describe-resource is admin only functionality"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:238
+msgid "Host not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:70
+msgid "Keypair name contains unsafe characters"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:95
+msgid "Keypair name must be between 1 and 255 characters long"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:100
+#, python-format
+msgid "Key pair '%s' already exists."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:52
+msgid "Missing 'networkId' argument for addFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:68
+msgid "Missing 'address' argument for removeFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:77
+#, python-format
+msgid "Unable to find address %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:62
+#, python-format
+msgid "Network does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:70
+#, python-format
+msgid "Disassociating network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:74
+#: cinder/api/openstack/compute/contrib/networks.py:91
+#: cinder/api/openstack/compute/contrib/networks.py:101
+msgid "Network not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:87
+#, python-format
+msgid "Showing network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:97
+#, python-format
+msgid "Deleting network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/scheduler_hints.py:41
+msgid "Malformed scheduler_hints attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:222
+msgid "Security group id should be integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:243
+msgid "Security group is still in use"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:295
+#, python-format
+msgid "Security group %s already exists"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:315
+#, python-format
+msgid "Security group %s is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:318
+#, python-format
+msgid "Security group %s cannot be empty."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:321
+#, python-format
+msgid "Security group %s should not be greater than 255 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:348
+msgid "Parent group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:351
+#, python-format
+msgid "Security group (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:369
+msgid "Not enough parameters to build a valid rule."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:376
+#, python-format
+msgid "This rule already exists in group %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:414
+msgid "Parent or group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:507
+msgid "Rule id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:510
+#, python-format
+msgid "Rule (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:574
+#: cinder/api/openstack/compute/contrib/security_groups.py:607
+msgid "Security group not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:578
+#: cinder/api/openstack/compute/contrib/security_groups.py:611
+msgid "Security group name cannot be empty"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:45
+#, python-format
+msgid "start instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:54
+#, python-format
+msgid "stop instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:73
+#: cinder/api/openstack/volume/volumes.py:106
+#, python-format
+msgid "vol=%s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:146
+#: cinder/api/openstack/volume/volumes.py:184
+#, python-format
+msgid "Delete volume with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:329
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(server_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:481
+#: cinder/api/openstack/volume/snapshots.py:110
+#, python-format
+msgid "Delete snapshot with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:524
+#: cinder/api/openstack/volume/snapshots.py:150
+#, python-format
+msgid "Create snapshot from volume %s"
+msgstr ""
+
+#: cinder/auth/fakeldap.py:33
+msgid "Attempted to instantiate singleton"
+msgstr ""
+
+#: cinder/auth/ldapdriver.py:650
+#, python-format
+msgid ""
+"Attempted to remove the last member of a group. Deleting the group at %s "
+"instead."
+msgstr ""
+
+#: cinder/auth/manager.py:298
+#, python-format
+msgid "Looking up user: %r"
+msgstr ""
+
+#: cinder/auth/manager.py:302
+#, python-format
+msgid "Failed authorization for access key %s"
+msgstr ""
+
+#: cinder/auth/manager.py:308
+#, python-format
+msgid "Using project name = user name (%s)"
+msgstr ""
+
+#: cinder/auth/manager.py:315
+#, python-format
+msgid "failed authorization: no project named %(pjid)s (user=%(uname)s)"
+msgstr ""
+
+#: cinder/auth/manager.py:324
+#, python-format
+msgid ""
+"Failed authorization: user %(uname)s not admin and not member of project "
+"%(pjname)s"
+msgstr ""
+
+#: cinder/auth/manager.py:331 cinder/auth/manager.py:343
+#, python-format
+msgid "user.secret: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:332 cinder/auth/manager.py:344
+#, python-format
+msgid "expected_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:333 cinder/auth/manager.py:345
+#, python-format
+msgid "signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:335 cinder/auth/manager.py:357
+#, python-format
+msgid "Invalid signature for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:353
+#, python-format
+msgid "host_only_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:449
+msgid "Must specify project"
+msgstr ""
+
+#: cinder/auth/manager.py:490
+#, python-format
+msgid "Adding role %(role)s to user %(uid)s in project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:493
+#, python-format
+msgid "Adding sitewide role %(role)s to user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:519
+#, python-format
+msgid "Removing role %(role)s from user %(uid)s on project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:522
+#, python-format
+msgid "Removing sitewide role %(role)s from user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:595
+#, python-format
+msgid "Created project %(name)s with manager %(manager_user)s"
+msgstr ""
+
+#: cinder/auth/manager.py:613
+#, python-format
+msgid "modifying project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:625
+#, python-format
+msgid "Adding user %(uid)s to project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:646
+#, python-format
+msgid "Remove user %(uid)s from project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:676
+#, python-format
+msgid "Deleting project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:734
+#, python-format
+msgid "Created user %(rvname)s (admin: %(rvadmin)r)"
+msgstr ""
+
+#: cinder/auth/manager.py:743
+#, python-format
+msgid "Deleting user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:753
+#, python-format
+msgid "Access Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:755
+#, python-format
+msgid "Secret Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:757
+#, python-format
+msgid "Admin status set to %(admin)r for user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:802
+#, python-format
+msgid "No vpn data for project %s"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:46
+msgid "Instance type for vpn instances"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:49
+msgid "Template for cloudpipe instance boot script"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:52
+msgid "Network to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:55
+msgid "Netmask to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:107
+#, python-format
+msgid "Launching VPN for %s"
+msgstr ""
+
+#: cinder/compute/api.py:141
+msgid "No compute host specified"
+msgstr ""
+
+#: cinder/compute/api.py:144
+#, python-format
+msgid "Unable to find host for Instance %s"
+msgstr ""
+
+#: cinder/compute/api.py:192
+#, python-format
+msgid ""
+"Quota exceeded for %(pid)s, tried to set %(num_metadata)s metadata "
+"properties"
+msgstr ""
+
+#: cinder/compute/api.py:203
+#, python-format
+msgid "Quota exceeded for %(pid)s, metadata property key or value too long"
+msgstr ""
+
+#: cinder/compute/api.py:257
+msgid "Cannot run any more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:259
+#, python-format
+msgid "Can only run %s more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:261
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances. "
+msgstr ""
+
+#: cinder/compute/api.py:310
+msgid "Creating a raw instance"
+msgstr ""
+
+#: cinder/compute/api.py:312
+#, python-format
+msgid "Using Kernel=%(kernel_id)s, Ramdisk=%(ramdisk_id)s"
+msgstr ""
+
+#: cinder/compute/api.py:383
+#, python-format
+msgid "Going to run %s instances..."
+msgstr ""
+
+#: cinder/compute/api.py:447
+#, python-format
+msgid "bdm %s"
+msgstr ""
+
+#: cinder/compute/api.py:474
+#, python-format
+msgid "block_device_mapping %s"
+msgstr ""
+
+#: cinder/compute/api.py:591
+#, python-format
+msgid "Sending create to scheduler for %(pid)s/%(uid)s's"
+msgstr ""
+
+#: cinder/compute/api.py:871
+msgid "Going to try to soft delete instance"
+msgstr ""
+
+#: cinder/compute/api.py:891
+msgid "No host for instance, deleting immediately"
+msgstr ""
+
+#: cinder/compute/api.py:939
+msgid "Going to try to terminate instance"
+msgstr ""
+
+#: cinder/compute/api.py:977
+msgid "Going to try to stop instance"
+msgstr ""
+
+#: cinder/compute/api.py:996
+msgid "Going to try to start instance"
+msgstr ""
+
+#: cinder/compute/api.py:1000
+#, python-format
+msgid "Instance %(instance_uuid)s is not stopped. (%(vm_state)s"
+msgstr ""
+
+#: cinder/compute/api.py:1071 cinder/volume/api.py:173
+#: cinder/volume/volume_types.py:64
+#, python-format
+msgid "Searching by: %s"
+msgstr ""
+
+#: cinder/compute/api.py:1201
+#, python-format
+msgid "Image type not recognized %s"
+msgstr ""
+
+#: cinder/compute/api.py:1369
+msgid "flavor_id is None. Assuming migration."
+msgstr ""
+
+#: cinder/compute/api.py:1377
+#, python-format
+msgid ""
+"Old instance type %(current_instance_type_name)s,  new instance type "
+"%(new_instance_type_name)s"
+msgstr ""
+
+#: cinder/compute/api.py:1644
+#, python-format
+msgid "multiple fixedips exist, using the first: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:57 cinder/compute/instance_types.py:65
+msgid "create arguments must be positive integers"
+msgstr ""
+
+#: cinder/compute/instance_types.py:76 cinder/volume/volume_types.py:41
+#, python-format
+msgid "DB error: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:86
+#, python-format
+msgid "Instance type %s not found for deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:138
+#, python-format
+msgid "check_instance_lock: decorating: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:140
+#, python-format
+msgid ""
+"check_instance_lock: arguments: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+msgstr ""
+
+#: cinder/compute/manager.py:144
+#, python-format
+msgid "check_instance_lock: locked: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:146
+#, python-format
+msgid "check_instance_lock: admin: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:151
+#, python-format
+msgid "check_instance_lock: executing: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:155
+#, python-format
+msgid "check_instance_lock: not executing |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:201
+#, python-format
+msgid "Unable to load the virtualization driver: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:223
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s has been destroyed from under us while trying "
+"to set it to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:240
+#, python-format
+msgid "Current state is %(drv_state)s, state in DB is %(db_state)s."
+msgstr ""
+
+#: cinder/compute/manager.py:245
+msgid "Rebooting instance after cinder-compute restart."
+msgstr ""
+
+#: cinder/compute/manager.py:255
+msgid "Hypervisor driver does not support firewall rules"
+msgstr ""
+
+#: cinder/compute/manager.py:260
+msgid "Checking state"
+msgstr ""
+
+#: cinder/compute/manager.py:329
+#, python-format
+msgid "Setting up bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:400
+#, python-format
+msgid "Instance %s already deleted from database. Attempting forceful vm deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:406
+#, python-format
+msgid "Exception encountered while terminating the instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:444
+#, python-format
+msgid "Instance %s not found."
+msgstr ""
+
+#: cinder/compute/manager.py:480
+msgid "Instance has already been created"
+msgstr ""
+
+#: cinder/compute/manager.py:523
+#, python-format
+msgid ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:528
+#, python-format
+msgid ""
+"Image '%(image_id)s' size %(size_bytes)d exceeded instance_type allowed "
+"size %(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:538
+msgid "Starting instance..."
+msgstr ""
+
+#: cinder/compute/manager.py:548
+msgid "Skipping network allocation for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:561
+msgid "Instance failed network setup"
+msgstr ""
+
+#: cinder/compute/manager.py:565
+#, python-format
+msgid "Instance network_info: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:578
+msgid "Instance failed block device setup"
+msgstr ""
+
+#: cinder/compute/manager.py:594
+msgid "Instance failed to spawn"
+msgstr ""
+
+#: cinder/compute/manager.py:615
+msgid "Deallocating network for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:672
+#, python-format
+msgid "%(action_str)s instance"
+msgstr ""
+
+#: cinder/compute/manager.py:699
+#, python-format
+msgid "Ignoring DiskNotFound: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:708
+#, python-format
+msgid "terminating bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:742 cinder/compute/manager.py:1328
+#: cinder/compute/manager.py:1416 cinder/compute/manager.py:2501
+#, python-format
+msgid "%s. Setting instance vm_state to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:811
+#, python-format
+msgid ""
+"Cannot rebuild instance [%(instance_uuid)s], because the given image does"
+" not exist."
+msgstr ""
+
+#: cinder/compute/manager.py:816
+#, python-format
+msgid "Cannot rebuild instance [%(instance_uuid)s]: %(exc)s"
+msgstr ""
+
+#: cinder/compute/manager.py:823
+#, python-format
+msgid "Rebuilding instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:876
+#, python-format
+msgid "Rebooting instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:891
+#, python-format
+msgid ""
+"trying to reboot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:933
+#, python-format
+msgid "instance %s: snapshotting"
+msgstr ""
+
+#: cinder/compute/manager.py:939
+#, python-format
+msgid ""
+"trying to snapshot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:995
+#, python-format
+msgid "Found %(num_images)d images (rotation: %(rotation)d)"
+msgstr ""
+
+#: cinder/compute/manager.py:1001
+#, python-format
+msgid "Rotating out %d backups"
+msgstr ""
+
+#: cinder/compute/manager.py:1005
+#, python-format
+msgid "Deleting image %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1035
+#, python-format
+msgid "Failed to set admin password. Instance %s is not running"
+msgstr ""
+
+#: cinder/compute/manager.py:1041
+#, python-format
+msgid "Instance %s: Root password set"
+msgstr ""
+
+#: cinder/compute/manager.py:1050
+msgid "set_admin_password is not implemented by this driver."
+msgstr ""
+
+#: cinder/compute/manager.py:1064
+msgid "Error setting admin password"
+msgstr ""
+
+#: cinder/compute/manager.py:1079
+#, python-format
+msgid ""
+"trying to inject a file into a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1084
+#, python-format
+msgid "instance %(instance_uuid)s: injecting file to %(path)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1098
+#, python-format
+msgid ""
+"trying to update agent on a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1103
+#, python-format
+msgid "instance %(instance_uuid)s: updating agent to %(url)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1116
+#, python-format
+msgid "instance %s: rescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1141
+#, python-format
+msgid "instance %s: unrescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1270
+msgid "destination same as source!"
+msgstr ""
+
+#: cinder/compute/manager.py:1287
+#, python-format
+msgid "instance %s: migrating"
+msgstr ""
+
+#: cinder/compute/manager.py:1471
+#, python-format
+msgid "instance %s: pausing"
+msgstr ""
+
+#: cinder/compute/manager.py:1489
+#, python-format
+msgid "instance %s: unpausing"
+msgstr ""
+
+#: cinder/compute/manager.py:1525
+#, python-format
+msgid "instance %s: retrieving diagnostics"
+msgstr ""
+
+#: cinder/compute/manager.py:1534
+#, python-format
+msgid "instance %s: suspending"
+msgstr ""
+
+#: cinder/compute/manager.py:1556
+#, python-format
+msgid "instance %s: resuming"
+msgstr ""
+
+#: cinder/compute/manager.py:1579
+#, python-format
+msgid "instance %s: locking"
+msgstr ""
+
+#: cinder/compute/manager.py:1588
+#, python-format
+msgid "instance %s: unlocking"
+msgstr ""
+
+#: cinder/compute/manager.py:1596
+#, python-format
+msgid "instance %s: getting locked state"
+msgstr ""
+
+#: cinder/compute/manager.py:1606
+#, python-format
+msgid "instance %s: reset network"
+msgstr ""
+
+#: cinder/compute/manager.py:1614
+#, python-format
+msgid "instance %s: inject network info"
+msgstr ""
+
+#: cinder/compute/manager.py:1618
+#, python-format
+msgid "network_info to inject: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:1655
+#, python-format
+msgid "instance %s: getting vnc console"
+msgstr ""
+
+#: cinder/compute/manager.py:1685
+#, python-format
+msgid "Booting with volume %(volume_id)s at %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1703
+#, python-format
+msgid ""
+"instance %(instance_uuid)s: attaching volume %(volume_id)s to "
+"%(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1705
+#, python-format
+msgid "Attaching volume %(volume_id)s to %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1714
+#, python-format
+msgid "instance %(instance_uuid)s: attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1724
+#, python-format
+msgid "Attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1752
+#, python-format
+msgid "Detach volume %(volume_id)s from mountpoint %(mp)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1756
+#, python-format
+msgid "Detaching volume from unknown instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1822
+#, python-format
+msgid ""
+"Creating tmpfile %s to notify to other compute nodes that they should "
+"mount the same storage."
+msgstr ""
+
+#: cinder/compute/manager.py:1884
+msgid "Instance has no volume."
+msgstr ""
+
+#: cinder/compute/manager.py:1916
+#, python-format
+msgid "plug_vifs() failed %(cnt)d.Retry up to %(max_retry)d for %(hostname)s."
+msgstr ""
+
+#: cinder/compute/manager.py:1973
+#, python-format
+msgid "Pre live migration failed at  %(dest)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2000
+msgid "post_live_migration() is started.."
+msgstr ""
+
+#: cinder/compute/manager.py:2030
+msgid "No floating_ip found"
+msgstr ""
+
+#: cinder/compute/manager.py:2038
+msgid "No floating_ip found."
+msgstr ""
+
+#: cinder/compute/manager.py:2040
+#, python-format
+msgid ""
+"Live migration: Unexpected error: cannot inherit floating ip.\n"
+"%(e)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2073
+#, python-format
+msgid "Migrating instance to %(dest)s finished successfully."
+msgstr ""
+
+#: cinder/compute/manager.py:2075
+msgid ""
+"You may see the error \"libvirt: QEMU error: Domain not found: no domain "
+"with matching name.\" This error can be safely ignored."
+msgstr ""
+
+#: cinder/compute/manager.py:2090
+msgid "Post operation of migraton started"
+msgstr ""
+
+#: cinder/compute/manager.py:2226
+#, python-format
+msgid "Updated the info_cache for instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:2255
+msgid "Updating bandwidth usage cache"
+msgstr ""
+
+#: cinder/compute/manager.py:2277
+msgid "Updating host status"
+msgstr ""
+
+#: cinder/compute/manager.py:2305
+#, python-format
+msgid ""
+"Found %(num_db_instances)s in the database and %(num_vm_instances)s on "
+"the hypervisor."
+msgstr ""
+
+#: cinder/compute/manager.py:2331
+#, python-format
+msgid ""
+"During the sync_power process the instance %(uuid)s has moved from host "
+"%(src)s to host %(dst)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2344
+#, python-format
+msgid ""
+"Instance %s is in the process of migrating to this host. Wait next "
+"sync_power cycle before setting power state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2350
+msgid ""
+"Instance found in database but not known by hypervisor. Setting power "
+"state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2380
+msgid "FLAGS.reclaim_instance_interval <= 0, skipping..."
+msgstr ""
+
+#: cinder/compute/manager.py:2392
+msgid "Reclaiming deleted instance"
+msgstr ""
+
+#: cinder/compute/manager.py:2458
+#, python-format
+msgid ""
+"Detected instance with name label '%(name)s' which is marked as DELETED "
+"but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2465
+#, python-format
+msgid ""
+"Destroying instance with name label '%(name)s' which is marked as DELETED"
+" but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2472
+#, python-format
+msgid "Unrecognized value '%(action)s' for FLAGS.running_deleted_instance_action"
+msgstr ""
+
+#: cinder/compute/manager.py:2542
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: unrecoverable state during operation on "
+"%(host)s"
+msgstr ""
+
+#: cinder/compute/utils.py:142
+msgid "v4 subnets are required for legacy nw_info"
+msgstr ""
+
+#: cinder/console/manager.py:77 cinder/console/vmrc_manager.py:70
+msgid "Adding console"
+msgstr ""
+
+#: cinder/console/manager.py:97
+#, python-format
+msgid "Tried to remove non-existant console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:122
+#, python-format
+msgid "Tried to remove non-existent console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:125
+#, python-format
+msgid "Removing console %(console_id)s."
+msgstr ""
+
+#: cinder/console/xvp.py:98
+msgid "Rebuilding xvp conf"
+msgstr ""
+
+#: cinder/console/xvp.py:116
+#, python-format
+msgid "Re-wrote %s"
+msgstr ""
+
+#: cinder/console/xvp.py:121
+msgid "Stopping xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:134
+msgid "Starting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:141
+#, python-format
+msgid "Error starting xvp: %s"
+msgstr ""
+
+#: cinder/console/xvp.py:144
+msgid "Restarting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:146
+msgid "xvp not running..."
+msgstr ""
+
+#: cinder/consoleauth/manager.py:63
+#, python-format
+msgid "Deleting Expired Token: (%s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:75
+#, python-format
+msgid "Received Token: %(token)s, %(token_dict)s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:79
+#, python-format
+msgid "Checking Token: %(token)s, %(token_valid)s)"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:57
+msgid "Use of empty request context is deprecated"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:198
+#, python-format
+msgid "Unrecognized read_deleted value '%s'"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:516 cinder/db/sqlalchemy/api.py:551
+#, python-format
+msgid "No ComputeNode for %(host)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4019 cinder/db/sqlalchemy/api.py:4045
+#, python-format
+msgid "No backend config with id %(sm_backend_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4103
+#, python-format
+msgid "No sm_flavor called %(sm_flavor)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4147
+#, python-format
+msgid "No sm_volume with id %(volume_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:66
+msgid "python-migrate is not installed. Exiting."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:78
+msgid "version should be an integer"
+msgstr ""
+
+#: cinder/db/sqlalchemy/session.py:137
+#, python-format
+msgid "SQL connection failed. %s attempts left."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:48
+msgid "interface column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:80
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:54
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:48
+#, python-format
+msgid "Table |%s| not created!"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:87
+msgid "VIF column not added to fixed_ips table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:97
+#, python-format
+msgid "join list for moving mac_addresses |%s|"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:39
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:60
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:99
+msgid "foreign key constraint couldn't be added"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:58
+msgid "foreign key constraint couldn't be dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py:34
+msgid "priority column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:41
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:42
+#: cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py:56
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:68
+msgid "foreign key constraint couldn't be removed"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py:34
+msgid "progress column not added to instances table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py:97
+#, python-format
+msgid ""
+"Could not cast flavorid to integer: %s. Set flavorid to an integer-like "
+"string to downgrade."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:69
+msgid "instance_info_caches tables not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py:41
+msgid "progress column not added to compute_nodes table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:76
+msgid "dns_domains table not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:60
+msgid "quota_classes table not dropped"
+msgstr ""
+
+#: cinder/image/glance.py:147
+msgid "Connection error contacting glance server, retrying"
+msgstr ""
+
+#: cinder/image/glance.py:153 cinder/network/quantum/melange_connection.py:104
+msgid "Maximum attempts reached"
+msgstr ""
+
+#: cinder/image/glance.py:278
+#, python-format
+msgid "Creating image in Glance. Metadata passed in %s"
+msgstr ""
+
+#: cinder/image/glance.py:281
+#, python-format
+msgid "Metadata after formatting for Glance %s"
+msgstr ""
+
+#: cinder/image/glance.py:289
+#, python-format
+msgid "Metadata returned from Glance formatted for Base %s"
+msgstr ""
+
+#: cinder/image/glance.py:331 cinder/image/glance.py:335
+msgid "Not the image owner"
+msgstr ""
+
+#: cinder/image/glance.py:410
+#, python-format
+msgid "%(timestamp)s does not follow any of the signatures: %(iso_formats)s"
+msgstr ""
+
+#: cinder/image/s3.py:309
+#, python-format
+msgid "Failed to download %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:328
+#, python-format
+msgid "Failed to decrypt %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:340
+#, python-format
+msgid "Failed to untar %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:353
+#, python-format
+msgid "Failed to upload %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:379
+#, python-format
+msgid "Failed to decrypt private key: %s"
+msgstr ""
+
+#: cinder/image/s3.py:387
+#, python-format
+msgid "Failed to decrypt initialization vector: %s"
+msgstr ""
+
+#: cinder/image/s3.py:398
+#, python-format
+msgid "Failed to decrypt image file %(image_file)s: %(err)s"
+msgstr ""
+
+#: cinder/image/s3.py:410
+msgid "Unsafe filenames in image"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:38 cinder/ipv6/rfc2462.py:34
+#, python-format
+msgid "Bad mac for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:40 cinder/ipv6/rfc2462.py:36
+#, python-format
+msgid "Bad prefix for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:42
+#, python-format
+msgid "Bad project_id for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/network/ldapdns.py:321
+msgid "This driver only supports type 'a' entries."
+msgstr ""
+
+#: cinder/network/linux_net.py:166
+#, python-format
+msgid "Attempted to remove chain %s which does not exist"
+msgstr ""
+
+#: cinder/network/linux_net.py:192
+#, python-format
+msgid "Unknown chain: %r"
+msgstr ""
+
+#: cinder/network/linux_net.py:215
+#, python-format
+msgid ""
+"Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r "
+"%(top)r"
+msgstr ""
+
+#: cinder/network/linux_net.py:335
+msgid "IPTablesManager.apply completed with success"
+msgstr ""
+
+#: cinder/network/linux_net.py:694
+#, python-format
+msgid "Hupping dnsmasq threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:696
+#, python-format
+msgid "Pid %d is stale, relaunching dnsmasq"
+msgstr ""
+
+#: cinder/network/linux_net.py:756
+#, python-format
+msgid "killing radvd threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:758
+#, python-format
+msgid "Pid %d is stale, relaunching radvd"
+msgstr ""
+
+#: cinder/network/linux_net.py:967
+#, python-format
+msgid "Starting VLAN inteface %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:999
+#, python-format
+msgid "Starting Bridge interface for %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1142
+#, python-format
+msgid "Starting bridge %s "
+msgstr ""
+
+#: cinder/network/linux_net.py:1149
+#, python-format
+msgid "Done starting bridge %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1167
+#, python-format
+msgid "Failed unplugging gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/linux_net.py:1170
+#, python-format
+msgid "Unplugged gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/manager.py:291
+#, python-format
+msgid "Fixed ip %(fixed_ip_id)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:300 cinder/network/manager.py:496
+#, python-format
+msgid "Interface %(interface)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:315
+#, python-format
+msgid "floating IP allocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:353
+#, python-format
+msgid "floating IP deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:386
+#, python-format
+msgid "Address |%(address)s| is not allocated"
+msgstr ""
+
+#: cinder/network/manager.py:390
+#, python-format
+msgid "Address |%(address)s| is not allocated to your project |%(project)s|"
+msgstr ""
+
+#: cinder/network/manager.py:402
+#, python-format
+msgid "Quota exceeded for %s, tried to allocate address"
+msgstr ""
+
+#: cinder/network/manager.py:614
+#, python-format
+msgid ""
+"Database inconsistency: DNS domain |%s| is registered in the Cinder db but "
+"not visible to either the floating or instance DNS driver. It will be "
+"ignored."
+msgstr ""
+
+#: cinder/network/manager.py:660
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing zone to |%(av_zone)s|."
+msgstr ""
+
+#: cinder/network/manager.py:670
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing project to |%(project)s|."
+msgstr ""
+
+#: cinder/network/manager.py:778
+#, python-format
+msgid "Disassociated %s stale fixed ip(s)"
+msgstr ""
+
+#: cinder/network/manager.py:782
+msgid "setting network host"
+msgstr ""
+
+#: cinder/network/manager.py:896
+#, python-format
+msgid "network allocations for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:901
+#, python-format
+msgid "networks retrieved for instance |%(instance_id)s|: |%(networks)s|"
+msgstr ""
+
+#: cinder/network/manager.py:930
+#, python-format
+msgid "network deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:1152
+#, python-format
+msgid ""
+"instance-dns-zone is |%(domain)s|, which is in availability zone "
+"|%(zone)s|. Instance |%(instance)s| is in zone |%(zone2)s|. No DNS record"
+" will be created."
+msgstr ""
+
+#: cinder/network/manager.py:1227
+#, python-format
+msgid "Unable to release %s because vif doesn't exist."
+msgstr ""
+
+#: cinder/network/manager.py:1244
+#, python-format
+msgid "Leased IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1248
+#, python-format
+msgid "IP %s leased that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1256
+#, python-format
+msgid "IP |%s| leased that isn't allocated"
+msgstr ""
+
+#: cinder/network/manager.py:1261
+#, python-format
+msgid "Released IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1265
+#, python-format
+msgid "IP %s released that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1268
+#, python-format
+msgid "IP %s released that was not leased"
+msgstr ""
+
+#: cinder/network/manager.py:1331
+msgid "cidr already in use"
+msgstr ""
+
+#: cinder/network/manager.py:1334
+#, python-format
+msgid "requested cidr (%(cidr)s) conflicts with existing supernet (%(super)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1345
+#, python-format
+msgid ""
+"requested cidr (%(cidr)s) conflicts with existing smaller cidr "
+"(%(smaller)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1404
+msgid "Network already exists!"
+msgstr ""
+
+#: cinder/network/manager.py:1423
+#, python-format
+msgid "Network must be disassociated from project %s before delete"
+msgstr ""
+
+#: cinder/network/manager.py:1832
+msgid ""
+"The sum between the number of networks and the vlan start cannot be "
+"greater than 4094"
+msgstr ""
+
+#: cinder/network/manager.py:1839
+#, python-format
+msgid ""
+"The network range is not big enough to fit %(num_networks)s. Network size"
+" is %(network_size)s"
+msgstr ""
+
+#: cinder/network/minidns.py:65
+msgid "This driver only supports type 'a'"
+msgstr ""
+
+#: cinder/network/quantum/client.py:154
+msgid "Tenant ID not set"
+msgstr ""
+
+#: cinder/network/quantum/client.py:180
+#, python-format
+msgid "Quantum Client Request: %(method)s %(action)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:196
+#, python-format
+msgid "Quantum entity not found: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:206
+#, python-format
+msgid "Server %(status_code)s error: %(data)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:210
+#, python-format
+msgid "Unable to connect to server. Got error: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:228
+#, python-format
+msgid "unable to deserialize object of type = '%s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:162
+msgid "QuantumManager does not use 'multi_host' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:166
+msgid "QuantumManager requires that only one network is created per call"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:176
+msgid "QuantumManager does not use 'vlan_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:182
+msgid "QuantumManager does not use 'vpn_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:186
+msgid "QuantumManager does not use 'bridge' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:190
+msgid "QuantumManager does not use 'bridge_interface' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:195
+msgid "QuantumManager requires a valid (.1) gateway address."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:204
+#, python-format
+msgid ""
+"Unable to find existing quantum network for tenant '%(q_tenant_id)s' with"
+" net-id '%(quantum_net_id)s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:301
+#, python-format
+msgid "network allocations for instance %s"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:588
+#, python-format
+msgid ""
+"port deallocation failed for instance: |%(instance_id)s|, port_id: "
+"|%(port_id)s|"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:606
+#, python-format
+msgid ""
+"ipam deallocation failed for instance: |%(instance_id)s|, vif_uuid: "
+"|%(vif_uuid)s|"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:96
+#, python-format
+msgid "Server returned error: %s"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:98
+msgid "Connection error contacting melange service, retrying"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:108
+#, python-format
+msgid ""
+"allocate IP on network |%(network_id)s| belonging to "
+"|%(network_tenant_id)s| to this vif |%(vif_id)s| with mac "
+"|%(mac_address)s| belonging to |%(project_id)s| "
+msgstr ""
+
+#: cinder/network/quantum/melange_ipam_lib.py:133
+msgid "get_project_and_global_net_ids must be called with a non-null project_id"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:75
+msgid "Error creating network entry"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:90
+#, python-format
+msgid "No network with net_id = %s"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:221
+#, python-format
+msgid "No fixed IPs to deallocate for vif %s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:99
+#, python-format
+msgid "Connecting interface %(interface_id)s to net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:113
+#, python-format
+msgid "Deleting port %(port_id)s on net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/notifier/api.py:115
+#, python-format
+msgid "%s not in valid priorities"
+msgstr ""
+
+#: cinder/notifier/api.py:130
+#, python-format
+msgid ""
+"Problem '%(e)s' attempting to send to notification system. "
+"Payload=%(payload)s"
+msgstr ""
+
+#: cinder/notifier/list_notifier.py:65
+#, python-format
+msgid "Problem '%(e)s' attempting to send to notification driver %(driver)s."
+msgstr ""
+
+#: cinder/notifier/rabbit_notifier.py:46
+#, python-format
+msgid "Could not send notification to %(topic)s. Payload=%(message)s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:146
+#, python-format
+msgid "Returning exception %s to caller"
+msgstr ""
+
+#: cinder/rpc/amqp.py:188
+#, python-format
+msgid "unpacked context: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:231
+#, python-format
+msgid "received %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:236
+#, python-format
+msgid "no method for message: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:237
+#, python-format
+msgid "No method for message: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:321
+#, python-format
+msgid "Making asynchronous call on %s ..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:324
+#, python-format
+msgid "MSG_ID is %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:346
+#, python-format
+msgid "Making asynchronous cast on %s..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:354
+msgid "Making asynchronous fanout cast..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:379
+#, python-format
+msgid "Sending notification on %s..."
+msgstr ""
+
+#: cinder/rpc/common.py:54
+#, python-format
+msgid ""
+"Remote error: %(exc_type)s %(value)s\n"
+"%(traceback)s."
+msgstr ""
+
+#: cinder/rpc/common.py:71
+msgid "Timeout while waiting on RPC response."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:111
+msgid "Failed to process message... skipping it."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:407
+#, python-format
+msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:430
+#, python-format
+msgid "Connected to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:466
+#, python-format
+msgid ""
+"Unable to connect to AMQP server on %(hostname)s:%(port)d after "
+"%(max_retries)d tries: %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:482
+#, python-format
+msgid ""
+"AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying "
+"again in %(sleep_time)d seconds."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:533 cinder/rpc/impl_qpid.py:385
+#, python-format
+msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:551 cinder/rpc/impl_qpid.py:400
+#, python-format
+msgid "Timed out waiting for RPC response: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:555 cinder/rpc/impl_qpid.py:404
+#, python-format
+msgid "Failed to consume message from queue: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:589 cinder/rpc/impl_qpid.py:434
+#, python-format
+msgid "Failed to publish message to topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:341
+#, python-format
+msgid "Unable to connect to AMQP server: %s "
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:346
+#, python-format
+msgid "Connected to AMQP server on %s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:354
+msgid "Re-established AMQP queues"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:412
+msgid "Error processing message.  Skipping it."
+msgstr ""
+
+#: cinder/scheduler/chance.py:47 cinder/scheduler/simple.py:91
+#: cinder/scheduler/simple.py:143
+msgid "Is the appropriate service running?"
+msgstr ""
+
+#: cinder/scheduler/chance.py:52
+msgid "Could not find another compute"
+msgstr ""
+
+#: cinder/scheduler/driver.py:63
+#, python-format
+msgid "Casted '%(method)s' to volume '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:80
+#, python-format
+msgid "Casted '%(method)s' to compute '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:89
+#, python-format
+msgid "Casted '%(method)s' to network '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:107
+#, python-format
+msgid "Casted '%(method)s' to %(topic)s '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:181
+msgid "Must implement a fallback schedule"
+msgstr ""
+
+#: cinder/scheduler/driver.py:185
+msgid "Driver must implement schedule_prep_resize"
+msgstr ""
+
+#: cinder/scheduler/driver.py:190
+msgid "Driver must implement schedule_run_instance"
+msgstr ""
+
+#: cinder/scheduler/driver.py:325
+msgid "Block migration can not be used with shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:330
+msgid "Live migration can not be used without shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:367 cinder/scheduler/driver.py:457
+#, python-format
+msgid "host %(dest)s is not compatible with original host %(src)s."
+msgstr ""
+
+#: cinder/scheduler/driver.py:416
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"memory(host:%(avail)s <= instance:%(mem_inst)s)"
+msgstr ""
+
+#: cinder/scheduler/driver.py:472
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"disk(host:%(available)s <= instance:%(necessary)s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:51
+#, python-format
+msgid "No host selection for %s defined."
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:64
+#, python-format
+msgid "Attempting to build %(num_instances)d instance(s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:157
+msgid "Scheduler only understands Compute nodes (for now)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:199
+#, python-format
+msgid "Filtered %(hosts)s"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:209
+#, python-format
+msgid "Weighted %(weighted_host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:144
+#, python-format
+msgid "Host filter fails for ignored host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:151
+#, python-format
+msgid "Host filter fails for non-forced host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:157
+#, python-format
+msgid "Host filter function %(func)s failed for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:163
+#, python-format
+msgid "Host filter passes for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:272
+#, python-format
+msgid "Received %(service_name)s service update from %(host)s."
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:313
+msgid "host_manager only implemented for 'compute'"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:323
+#, python-format
+msgid "No service for compute ID %s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:85
+#, python-format
+msgid ""
+"Driver Method %(driver_method_name)s missing: %(e)s. Reverting to "
+"schedule()"
+msgstr ""
+
+#: cinder/scheduler/manager.py:150
+#, python-format
+msgid "Failed to schedule_%(method)s: %(ex)s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:159
+#, python-format
+msgid "Setting instance %(instance_uuid)s to %(state)s state."
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:66
+#, python-format
+msgid "Could not stat scheduler options file %(filename)s: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:75
+#, python-format
+msgid "Could not decode scheduler options: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/simple.py:87
+msgid "Not enough allocatable CPU cores remaining"
+msgstr ""
+
+#: cinder/scheduler/simple.py:137
+msgid "Not enough allocatable volume gigabytes remaining"
+msgstr ""
+
+#: cinder/scheduler/filters/core_filter.py:45
+msgid "VCPUs not set; assuming CPU collection broken"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:72
+#, python-format
+msgid "Faking execution of cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:80
+#, python-format
+msgid "Faked command matched %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:96
+#, python-format
+msgid "Faked command raised an exception %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:101
+#, python-format
+msgid "Reply to faked command is stdout='%(stdout)s' stderr='%(stderr)s'"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:784
+msgid "Please extend mock libvirt module to support flags"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:790
+msgid "Please extend fake libvirt module to support this auth method"
+msgstr ""
+
+#: cinder/tests/test_compute.py:365 cinder/tests/test_compute.py:1419
+#, python-format
+msgid "Running instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:371
+#, python-format
+msgid "After terminating instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:589
+msgid "Internal error"
+msgstr ""
+
+#: cinder/tests/test_compute.py:1430
+#, python-format
+msgid "After force-killing instances: %s"
+msgstr ""
+
+#: cinder/tests/test_misc.py:92
+#, python-format
+msgid ""
+"The following migrations are missing a downgrade:\n"
+"\t%s"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:169
+msgid "id"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:170
+msgid "IPv4"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:171
+msgid "IPv6"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:172
+msgid "start address"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:173
+msgid "DNS1"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:174
+msgid "DNS2"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:175
+msgid "VlanID"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:176
+msgid "project"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:177
+msgid "uuid"
+msgstr ""
+
+#: cinder/tests/test_volume.py:216
+#, python-format
+msgid "Target %s allocated"
+msgstr ""
+
+#: cinder/tests/test_volume.py:468
+#, python-format
+msgid "Cannot confirm exported volume id:%s."
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:58
+#, python-format
+msgid "Given data: %s"
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:59
+#, python-format
+msgid "Result data: %s"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:626
+#, python-format
+msgid "Creating files in %s to simulate guest agent"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:637
+#, python-format
+msgid "Removing simulated guest agent files in %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/test_servers.py:2144
+#, python-format
+msgid "Quota exceeded: code=%(code)s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:57
+#, python-format
+msgid "_create: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:66
+#, python-format
+msgid "_delete: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:75
+#, python-format
+msgid "_get: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:85
+#, python-format
+msgid "_get_all: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:125
+#, python-format
+msgid "test_snapshot_create: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:134
+#, python-format
+msgid "test_snapshot_create: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:156
+#, python-format
+msgid "test_snapshot_create_force: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:165
+#, python-format
+msgid "test_snapshot_create_force: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:205
+#, python-format
+msgid "test_snapshot_show: resp=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:231
+#, python-format
+msgid "test_snapshot_detail: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/integrated/test_login.py:31
+#, python-format
+msgid "flavor: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:38
+#, python-format
+msgid ""
+"%(message)s\n"
+"Status Code: %(_status)s\n"
+"Body: %(_body)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:47
+msgid "Authentication error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:55
+msgid "Authorization error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:63
+msgid "Item not found"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:105
+#, python-format
+msgid "Doing %(method)s on %(relative_url)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:107
+#, python-format
+msgid "Body: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:125
+#, python-format
+msgid "%(auth_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:151
+#, python-format
+msgid "%(relative_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:161
+msgid "Unexpected status code"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:168
+#, python-format
+msgid "Decoding JSON: %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:133
+#, python-format
+msgid "Nested received %(queue)s, %(value)s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:142
+#, python-format
+msgid "Nested return %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:160
+msgid "RPC backend does not support timeouts"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:227 cinder/tests/rpc/common.py:233
+#, python-format
+msgid "Received %s"
+msgstr ""
+
+#: cinder/virt/connection.py:85
+msgid "Failed to open connection to the hypervisor"
+msgstr ""
+
+#: cinder/virt/fake.py:270 cinder/virt/xenapi_conn.py:396
+#: cinder/virt/baremetal/proxy.py:716 cinder/virt/libvirt/connection.py:2045
+#, python-format
+msgid "Compute_service record created for %s "
+msgstr ""
+
+#: cinder/virt/fake.py:273 cinder/virt/xenapi_conn.py:399
+#: cinder/virt/baremetal/proxy.py:720 cinder/virt/libvirt/connection.py:2048
+#, python-format
+msgid "Compute_service record updated for %s "
+msgstr ""
+
+#: cinder/virt/firewall.py:130
+#, python-format
+msgid "Attempted to unfilter instance %s which is not filtered"
+msgstr ""
+
+#: cinder/virt/firewall.py:137
+#, python-format
+msgid "Filters added to instance %s"
+msgstr ""
+
+#: cinder/virt/firewall.py:139
+msgid "Provider Firewall Rules refreshed"
+msgstr ""
+
+#: cinder/virt/firewall.py:291
+#, python-format
+msgid "Adding security group rule: %r"
+msgstr ""
+
+#: cinder/virt/firewall.py:403 cinder/virt/xenapi/firewall.py:87
+#, python-format
+msgid "Adding provider rule: %s"
+msgstr ""
+
+#: cinder/virt/images.py:86
+msgid "'qemu-img info' parsing failed."
+msgstr ""
+
+#: cinder/virt/images.py:92
+#, python-format
+msgid "fmt=%(fmt)s backed by: %(backing_file)s"
+msgstr ""
+
+#: cinder/virt/images.py:104
+#, python-format
+msgid "Converted to raw, but format is now %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:105
+msgid ""
+"Must specify vmwareapi_host_ip,vmwareapi_host_username and "
+"vmwareapi_host_password to useconnection_type=vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:276
+#, python-format
+msgid "In vmwareapi:_create_session, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:359
+#, python-format
+msgid "In vmwareapi:_call_method, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:398
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: success"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:404
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: error %(error_info)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:409
+#, python-format
+msgid "In vmwareapi:_poll_task, Got this error %s"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:140
+msgid ""
+"Must specify xenapi_connection_url, xenapi_connection_username "
+"(optionally), and xenapi_connection_password to use "
+"connection_type=xenapi"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:329 cinder/virt/libvirt/connection.py:472
+msgid "Could not determine iscsi initiator name"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:460
+msgid "Host startup on XenServer is not supported."
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:489
+msgid "Unable to log in to XenAPI (is the Dom0 disk full?)"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:527
+msgid "Host is member of a pool, but DB says otherwise"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:599 cinder/virt/xenapi_conn.py:612
+#, python-format
+msgid "Got exception: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:93
+msgid "No domains exist."
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:95
+#, python-format
+msgid "============= initial domains =========== : %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:99
+msgid "Building domain: to be removed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:103
+msgid "Not running domain: remove"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:111
+msgid "domain running on an unknown node: discarded"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:127
+#, python-format
+msgid "No such domain (%s)"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:134
+#, python-format
+msgid "Failed power down Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:143
+msgid "deactivate -> activate fails"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:153
+msgid "destroy_domain: no such domain"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:154
+#, python-format
+msgid "No such domain %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:161
+#, python-format
+msgid "Domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:163
+#, python-format
+msgid "Nodes: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:166
+#, python-format
+msgid "After storing domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:169
+msgid "deactivation/removing domain failed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:176
+msgid "===== Domain is being created ====="
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:179
+msgid "Same domain name already exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:181
+msgid "create_domain: before get_idle_node"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:198
+#, python-format
+msgid "Created new domain: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:213
+#, python-format
+msgid "Failed to boot Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:222
+msgid "No such domain exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:226
+#, python-format
+msgid "change_domain_state: to new state %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:233
+#, python-format
+msgid "Stored fake domains to the file: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:244
+msgid "domain does not exist"
+msgstr ""
+
+#: cinder/virt/baremetal/nodes.py:42
+#, python-format
+msgid "Unknown baremetal driver %(d)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:148
+#, python-format
+msgid "Error encountered when destroying instance '%(name)s': %(ex)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:162
+#, python-format
+msgid "instance %(instance_name)s: deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:189
+#, python-format
+msgid "instance %s: rebooted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:192
+msgid "_wait_for_reboot failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:222
+#, python-format
+msgid "instance %s: rescued"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:225
+msgid "_wait_for_rescue failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:242
+msgid "<============= spawn of baremetal =============>"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:255
+#, python-format
+msgid "instance %s: is building"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:260
+msgid "Key is injected but instance is not running yet"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:265
+#, python-format
+msgid "instance %s: booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:268
+#, python-format
+msgid "~~~~~~ current state = %s ~~~~~~"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:269
+#, python-format
+msgid "instance %s spawned successfully"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:272
+#, python-format
+msgid "instance %s:not booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:274
+msgid "Bremetal assignment is overcommitted."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:354
+#, python-format
+msgid "instance %s: Creating image"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:473
+#, python-format
+msgid "instance %(inst_name)s: injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:484
+#, python-format
+msgid ""
+"instance %(inst_name)s: ignoring error injecting data into image "
+"%(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:529
+#, python-format
+msgid "instance %s: starting toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:531
+#, python-format
+msgid "instance %s: finished toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:574 cinder/virt/libvirt/connection.py:1815
+msgid ""
+"Cannot get the number of cpu, because this function is not implemented "
+"for this platform. This error can be safely ignored for now."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:714
+#, python-format
+msgid "#### RLK: cpu_arch = %s "
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:746
+msgid "Updating!"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:773 cinder/virt/libvirt/connection.py:2609
+#: cinder/virt/xenapi/host.py:129
+msgid "Updating host stats"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:185
+msgid "free_node...."
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:216
+#, python-format
+msgid "deactivate_node is called for node_id = %(id)s node_ip = %(ip)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:221
+msgid "status of node is set to 0"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:232
+msgid "rootfs is already removed"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:264
+msgid "Before ping to the bare-metal node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:275
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is ready"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:279
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is not ready, out_msg=%(out_msg)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:292
+msgid "Noting to do for tilera nodes: vmlinux is in CF"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:316
+msgid "activate_node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:330
+msgid "Node is unknown error state."
+msgstr ""
+
+#: cinder/virt/disk/api.py:165
+msgid "no capable image handler configured"
+msgstr ""
+
+#: cinder/virt/disk/api.py:178
+#, python-format
+msgid "unknown disk image handler: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:189
+msgid "image already mounted"
+msgstr ""
+
+#: cinder/virt/disk/api.py:276 cinder/virt/disk/guestfs.py:64
+#: cinder/virt/disk/guestfs.py:78 cinder/virt/disk/mount.py:100
+#, python-format
+msgid "Failed to mount filesystem: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:291
+#, python-format
+msgid "Failed to remove container: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:441
+#, python-format
+msgid "User %(username)s not found in password file."
+msgstr ""
+
+#: cinder/virt/disk/api.py:457
+#, python-format
+msgid "User %(username)s not found in shadow file."
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:39
+#, python-format
+msgid "unsupported partition: %s"
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:77
+msgid "unknown guestmount error"
+msgstr ""
+
+#: cinder/virt/disk/loop.py:30
+#, python-format
+msgid "Could not attach image to loopback: %s"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:76
+msgid "no partitions found"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:77
+#, python-format
+msgid "Failed to map partitions: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:58
+msgid "nbd unavailable: module not loaded"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:63
+msgid "No free nbd devices"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:81
+#, python-format
+msgid "qemu-nbd error: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:93
+#, python-format
+msgid "nbd device %s did not show up"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:265
+#, python-format
+msgid "Connecting to libvirt: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:286
+msgid "Connection to libvirt broke"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:388
+#, python-format
+msgid "Error from libvirt during destroy. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:400
+#, python-format
+msgid ""
+"Error from libvirt during saved instance removal. Code=%(errcode)s "
+"Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:411
+#, python-format
+msgid "Error from libvirt during undefine. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:423
+msgid "Instance destroyed successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:435
+#, python-format
+msgid "Error from libvirt during unfilter. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:461
+#, python-format
+msgid "Deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:554
+msgid "attaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:567
+msgid "detaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:692
+msgid "Instance soft rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:696
+msgid "Failed to soft reboot instance."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:725
+msgid "Instance shutdown successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:761 cinder/virt/libvirt/connection.py:905
+msgid "During reboot, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:766
+msgid "Instance rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:867 cinder/virt/xenapi/vmops.py:1358
+#, python-format
+msgid ""
+"Found %(migration_count)d unconfirmed migrations older than "
+"%(confirm_window)d seconds"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:871
+#, python-format
+msgid "Automatically confirming migration %d"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:896
+msgid "Instance is running"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:910
+msgid "Instance spawned successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:926
+#, python-format
+msgid "data: %(data)r, fpath: %(fpath)r"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:978
+msgid "Guest does not have a console available"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1020
+#, python-format
+msgid "Path '%(path)s' supports direct I/O"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1024
+#, python-format
+msgid "Path '%(path)s' does not support direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1028 cinder/virt/libvirt/connection.py:1032
+#, python-format
+msgid "Error on '%(path)s' while checking direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1153
+msgid "Creating image"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1339
+#, python-format
+msgid "Injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1349
+#, python-format
+msgid "Ignoring error injecting data into image %(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1381
+#, python-format
+msgid "block_device_list %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1658
+msgid "Starting toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1662
+msgid "Finished toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1679
+#, python-format
+msgid ""
+"Error from libvirt while looking up %(instance_name)s: [Error Code "
+"%(error_code)s] %(ex)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1920
+msgid "libvirt version is too old (does not support getVersion)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1942
+#, python-format
+msgid "'<cpu>' must be 1, but %d\n"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1969
+#, python-format
+msgid "topology (%(topology)s) must have %(ks)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2067
+#, python-format
+msgid ""
+"Instance launched has CPU info:\n"
+"%s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2079
+#, python-format
+msgid ""
+"CPU doesn't have compatibility.\n"
+"\n"
+"%(ret)s\n"
+"\n"
+"Refer to %(u)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2136
+#, python-format
+msgid "Timeout migrating for %s. nwfilter not found."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2352
+#, python-format
+msgid "skipping %(path)s since it looks like volume"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2407
+#, python-format
+msgid "Getting disk size of %(i_name)s: %(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2458
+#, python-format
+msgid "Instance %s: Starting migrate_disk_and_power_off"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2513
+msgid "During wait running, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2518
+msgid "Instance running successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2525
+#, python-format
+msgid "Instance %s: Starting finish_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2565
+#, python-format
+msgid "Instance %s: Starting finish_revert_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:42
+msgid ""
+"Libvirt module could not be loaded. NWFilterFirewall will not work "
+"correctly."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:93
+msgid "Called setup_basic_filtering in nwfilter"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:101
+msgid "Ensuring static filters"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:171
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:217
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) for%(name)s is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:233
+msgid "iptables firewall: Setup Basic Filtering"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:252
+msgid "Attempted to unfilter instance which is not filtered"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:170
+#, python-format
+msgid "%s is a valid instance name"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:173
+#, python-format
+msgid "%s has a disk file"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:175
+#, python-format
+msgid "Instance %(instance)s is backed by %(backing)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:186
+#, python-format
+msgid ""
+"Instance %(instance)s is using a backing file %(backing)s which does not "
+"appear in the image service"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:237
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification failed"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:247
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification skipped, no hash stored"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:266
+#, python-format
+msgid "Cannot remove %(base_file)s, it does not exist"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:278
+#, python-format
+msgid "Base file too young to remove: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:281
+#, python-format
+msgid "Removing base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:288
+#, python-format
+msgid "Failed to remove %(base_file)s, error was %(error)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:299
+#, python-format
+msgid "%(id)s (%(base_file)s): checking"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:318
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): in use: on this node %(local)d local, %(remote)d "
+"on other nodes"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:330
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): warning -- an absent base file is in use! "
+"instances: %(instance_list)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:338
+#, python-format
+msgid "%(id)s (%(base_file)s): in use on (%(remote)d on other nodes)"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:348
+#, python-format
+msgid "%(id)s (%(base_file)s): image is not in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:354
+#, python-format
+msgid "%(id)s (%(base_file)s): image is in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:377
+#, python-format
+msgid "Skipping verification, no base directory at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:381
+msgid "Verify base images"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:388
+#, python-format
+msgid "Image id %(id)s yields fingerprint %(fingerprint)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:406
+#, python-format
+msgid "Unknown base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:411
+#, python-format
+msgid "Active base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:414
+#, python-format
+msgid "Corrupt base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:418
+#, python-format
+msgid "Removable base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:426
+msgid "Verification complete"
+msgstr ""
+
+#: cinder/virt/libvirt/utils.py:264
+msgid "Unable to find an open port"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:90
+#, python-format
+msgid "Ensuring vlan %(vlan)s and bridge %(bridge)s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:99
+#, python-format
+msgid "Ensuring bridge %s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:165 cinder/virt/libvirt/vif.py:220
+#, python-format
+msgid "Failed while unplugging vif of instance '%s'"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:163
+#, python-format
+msgid "iSCSI device not found at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:166
+#, python-format
+msgid ""
+"ISCSI volume not yet found at: %(mount_device)s. Will rescan & retry.  "
+"Try number: %(tries)s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:178
+#, python-format
+msgid "Found iSCSI node %(mount_device)s (after %(tries)s rescans)"
+msgstr ""
+
+#: cinder/virt/vmwareapi/error_util.py:93
+#, python-format
+msgid "Error(s) %s occurred in the call to RetrieveProperties"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:44 cinder/virt/xenapi/fake.py:77
+#, python-format
+msgid "%(text)s: _db_content => %(content)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:131
+#, python-format
+msgid "Property %(attr)s not set for the managed object %(objName)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:437
+msgid "There is no VM registered"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:439 cinder/virt/vmwareapi/fake.py:609
+#, python-format
+msgid "Virtual Machine with ref %s is not there"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:502
+#, python-format
+msgid "Logging out a session that is invalid or already logged out: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:517
+msgid "Session is faulty"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:520
+msgid "Session Invalid"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:606
+msgid " No Virtual Machine has been registered yet"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:99
+#, python-format
+msgid "Glance image %s is in killed state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:107
+#, python-format
+msgid "Glance image %(image_id)s is in unknown state - %(state)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:128
+msgid ""
+"ESX SOAP server returned an empty port group for the host system in its "
+"response"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:155
+#, python-format
+msgid "Creating Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:169
+#, python-format
+msgid "Created Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/read_write_util.py:150
+#, python-format
+msgid "Exception during HTTP connection close in VMWareHTTpWrite. Exception is %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:84
+msgid "Unable to import suds."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:90
+msgid "Must specify vmwareapi_wsdl_loc"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:145
+#, python-format
+msgid "No such SOAP method '%s' provided by VI SDK"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:150
+#, python-format
+msgid "httplib error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:157
+#, python-format
+msgid "Socket error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:162
+#, python-format
+msgid "Type error in  %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:166
+#, python-format
+msgid "Exception in %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:66
+msgid "Getting list of instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:82
+#, python-format
+msgid "Got total of %s instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:126
+msgid "Couldn't get a local Datastore reference"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:196
+#, python-format
+msgid "Creating VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:205
+#, python-format
+msgid "Created VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:234
+#, python-format
+msgid ""
+"Creating Virtual Disk of size  %(vmdk_file_size_in_kb)s KB and adapter "
+"type  %(adapter_type)s on the ESX host local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:251
+#, python-format
+msgid ""
+"Created Virtual Disk of size %(vmdk_file_size_in_kb)s KB on the ESX host "
+"local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:260
+#, python-format
+msgid ""
+"Deleting the file %(flat_uploaded_vmdk_path)s on the ESX host localstore "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:272
+#, python-format
+msgid ""
+"Deleted the file %(flat_uploaded_vmdk_path)s on the ESX host local store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:283
+#, python-format
+msgid ""
+"Downloading image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:298
+#, python-format
+msgid ""
+"Downloaded image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:315
+#, python-format
+msgid "Reconfiguring VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:322
+#, python-format
+msgid "Reconfigured VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:329
+#, python-format
+msgid "Powering on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:335
+#, python-format
+msgid "Powered on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:381
+#, python-format
+msgid "Creating Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:391
+#, python-format
+msgid "Created Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:434
+#, python-format
+msgid "Copying disk data before snapshot of the VM  instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:447
+#, python-format
+msgid "Copied disk data before snapshot of the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:456
+#, python-format
+msgid "Uploading image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:469
+#, python-format
+msgid "Uploaded image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:479
+#, python-format
+msgid "Deleting temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:488
+#, python-format
+msgid "Deleted temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:520
+msgid "instance is not powered on"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:527
+#, python-format
+msgid "Rebooting guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:530
+#, python-format
+msgid "Rebooted guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:532
+#, python-format
+msgid "Doing hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:536
+#, python-format
+msgid "Did hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:548
+#, python-format
+msgid "instance - %s not present"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:567
+#, python-format
+msgid "Powering off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:572
+#, python-format
+msgid "Powered off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:576
+#, python-format
+msgid "Unregistering the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:579
+#, python-format
+msgid "Unregistered the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:581
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while un-registering the "
+"VM: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:592
+#, python-format
+msgid "Deleting contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:602
+#, python-format
+msgid "Deleted contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:607
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while deleting the VM "
+"contents from the disk: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:615
+msgid "pause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:619
+msgid "unpause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:633
+#, python-format
+msgid "Suspending the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:637
+#, python-format
+msgid "Suspended the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:640
+msgid "instance is powered off and can not be suspended."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:643
+#, python-format
+msgid "VM %s was already in suspended state. So returning without doing anything"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:656
+#, python-format
+msgid "Resuming the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:661
+#, python-format
+msgid "Resumed the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:663
+msgid "instance is not in a suspended state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:699
+msgid "get_diagnostics not implemented for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:757
+#, python-format
+msgid ""
+"Reconfiguring VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:765
+#, python-format
+msgid ""
+"Reconfigured VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:802
+#, python-format
+msgid "Creating directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:806
+#, python-format
+msgid "Created directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:89
+#, python-format
+msgid "Downloading image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:103
+#, python-format
+msgid "Downloaded image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:108
+#, python-format
+msgid "Uploading image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:129
+#, python-format
+msgid "Uploaded image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:139
+#, python-format
+msgid "Getting image size for the image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:143
+#, python-format
+msgid "Got image size of %(size)s for the image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:553 cinder/virt/xenapi/fake.py:652
+#: cinder/virt/xenapi/fake.py:670 cinder/virt/xenapi/fake.py:732
+msgid "Raising NotImplemented"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:555
+#, python-format
+msgid "xenapi.fake does not have an implementation for %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:589
+#, python-format
+msgid "Calling %(localname)s %(impl)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:594
+#, python-format
+msgid "Calling getter %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:654
+#, python-format
+msgid ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:67
+#, python-format
+msgid ""
+"Instance %(name)s running on %(host)s could not be found in the database:"
+" assuming it is a worker VM and skipping migration to a new host"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:137
+#, python-format
+msgid "Unable to get SR for this host: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:169
+msgid "Unable to get updated status"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:172
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:37
+#, python-format
+msgid "Found non-unique network for name_label %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:55
+#, python-format
+msgid "Found non-unique network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:58
+#, python-format
+msgid "Found no network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:111
+#, python-format
+msgid "Unable to eject %(host)s from the pool; pool not empty"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:126
+#, python-format
+msgid "Unable to eject %(host)s from the pool; No master found"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:143
+#, python-format
+msgid "Pool-Join failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:146
+#, python-format
+msgid "Unable to join %(host)s in the pool"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:162
+#, python-format
+msgid "Pool-eject failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:174
+#, python-format
+msgid "Unable to set up pool: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:185
+#, python-format
+msgid "Pool-set_name_label failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:103
+#, python-format
+msgid "Found no PIF for device %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:122
+#, python-format
+msgid ""
+"PIF %(pif_rec['uuid'])s for network %(bridge)s has VLAN id %(pif_vlan)d. "
+"Expected %(vlan_num)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:218
+msgid "Created VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:245
+#, python-format
+msgid "VBD not found in instance %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:262
+#, python-format
+msgid "VBD %s already detached"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:265
+#, python-format
+msgid "VBD %(vbd_ref)s detach rejected, attempt %(num_attempt)d/%(max_attempts)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:270
+#, python-format
+msgid "Unable to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:275
+#, python-format
+msgid "Reached maximum number of retries trying to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:286
+#, python-format
+msgid "Unable to destroy VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:305
+#, python-format
+msgid "Creating %(vbd_type)s-type VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:308
+#, python-format
+msgid "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:319
+#, python-format
+msgid "Unable to destroy VDI %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:336
+#, python-format
+msgid ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:345
+#, python-format
+msgid "Copied VDI %(vdi_ref)s from VDI %(vdi_to_copy_ref)s on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:353
+#, python-format
+msgid "Cloned VDI %(vdi_ref)s from VDI %(vdi_to_clone_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:372
+#, python-format
+msgid "No primary VDI found for %(vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:379
+#, python-format
+msgid "Snapshotting with label '%(label)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:392
+#, python-format
+msgid "Created snapshot %(template_vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:431
+#, python-format
+msgid "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:583
+#, python-format
+msgid "Creating blank HD of size %(req_size)d gigs"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:634
+#, python-format
+msgid ""
+"Fast cloning is only supported on default local SR of type ext. SR on "
+"this system was found to be of type %(sr_type)s. Ignoring the cow flag."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:724
+#, python-format
+msgid ""
+"download_vhd %(image)s attempt %(attempt_num)d/%(max_attempts)d from "
+"%(glance_host)s:%(glance_port)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:734
+#, python-format
+msgid "download_vhd failed: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:750
+#, python-format
+msgid "Asking xapi to fetch vhd image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:760
+#, python-format
+msgid ""
+"xapi 'download_vhd' returned VDI of type '%(vdi_type)s' with UUID "
+"'%(vdi_uuid)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:789
+#, python-format
+msgid "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:805
+#, python-format
+msgid "image_size_bytes=%(size_bytes)d, allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:809
+#, python-format
+msgid ""
+"Image size %(size_bytes)d exceeded instance_type allowed size "
+"%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:831
+#, python-format
+msgid "Fetching image %(image)s, type %(image_type_str)"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:844
+#, python-format
+msgid "Size for image %(image)s: %(virtual_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:853
+#, python-format
+msgid ""
+"Kernel/Ramdisk image is too large: %(vdi_size)d bytes, max %(max_size)d "
+"bytes"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:870
+#, python-format
+msgid "Copying VDI %s to /boot/guest on dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:884
+#, python-format
+msgid "Kernel/Ramdisk VDI %s destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:895
+msgid "Failed to fetch glance image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:934
+#, python-format
+msgid "Detected %(image_type_str)s format for image %(image_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:955
+#, python-format
+msgid "Looking up vdi %s for PV kernel"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:973
+#, python-format
+msgid "Unknown image format %(disk_image_type)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1016
+#, python-format
+msgid "VDI %s is still available"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1059
+#, python-format
+msgid "(VM_UTILS) xenserver vm state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1061
+#, python-format
+msgid "(VM_UTILS) xenapi power_state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1088
+#, python-format
+msgid "Unable to parse rrd of %(vm_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1108
+#, python-format
+msgid "Re-scanning SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1136
+#, python-format
+msgid "Flag sr_matching_filter '%s' does not respect formatting convention"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1154
+msgid ""
+"XenAPI is unable to find a Storage Repository to install guest instances "
+"on. Please check your configuration and/or configure the flag "
+"'sr_matching_filter'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1167
+msgid "Cannot find SR of content-type ISO"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1175
+#, python-format
+msgid "ISO: looking at SR %(sr_rec)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1177
+msgid "ISO: not iso content"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1180
+msgid "ISO: iso content_type, no 'i18n-key' key"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1183
+msgid "ISO: iso content_type, i18n-key value not 'local-storage-iso'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1187
+msgid "ISO: SR MATCHing our criteria"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1189
+msgid "ISO: ISO, looking to see if it is host local"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1192
+#, python-format
+msgid "ISO: PBD %(pbd_ref)s disappeared"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1195
+#, python-format
+msgid "ISO: PBD matching, want %(pbd_rec)s, have %(host)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1198
+msgid "ISO: SR with local PBD"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1220
+#, python-format
+msgid ""
+"Unable to obtain RRD XML for VM %(vm_uuid)s with server details: "
+"%(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1236
+#, python-format
+msgid "Unable to obtain RRD XML updates with server details: %(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1290
+#, python-format
+msgid "Invalid statistics data from Xenserver: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1343
+#, python-format
+msgid "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1417
+#, python-format
+msgid ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1427
+#, python-format
+msgid "VHD coalesce attempts exceeded (%(max_attempts)d), giving up..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1462
+#, python-format
+msgid "Timeout waiting for device %s to be created"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1473
+#, python-format
+msgid "Plugging VBD %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1476
+#, python-format
+msgid "Plugging VBD %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1478
+#, python-format
+msgid "VBD %(vbd_ref)s plugged as %(orig_dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1481
+#, python-format
+msgid "VBD %(vbd_ref)s plugged into wrong dev, remapping to %(dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1490
+#, python-format
+msgid "Destroying VBD for VDI %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1498
+#, python-format
+msgid "Destroying VBD for VDI %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1511
+#, python-format
+msgid "Running pygrub against %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1518
+#, python-format
+msgid "Found Xen kernel %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1520
+msgid "No Xen kernel found.  Booting HVM."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1533
+msgid "Partitions:"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1539
+#, python-format
+msgid "  %(num)s: %(ptype)s %(size)d sectors"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1565
+#, python-format
+msgid ""
+"Writing partition table %(primary_first)d %(primary_last)d to "
+"%(dev_path)s..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1578
+#, python-format
+msgid "Writing partition table %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1632
+#, python-format
+msgid ""
+"Starting sparse_copy src=%(src_path)s dst=%(dst_path)s "
+"virtual_size=%(virtual_size)d block_size=%(block_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1664
+#, python-format
+msgid ""
+"Finished sparse_copy in %(duration).2f secs, %(compression_pct).2f%% "
+"reduction in size"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1714
+msgid ""
+"XenServer tools installed in this image are capable of network injection."
+"  Networking files will not bemanipulated"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1722
+msgid ""
+"XenServer tools are present in this image but are not capable of network "
+"injection"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1726
+msgid "XenServer tools are not installed in this image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1742
+msgid "Manipulating interface files directly"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1751
+#, python-format
+msgid "Failed to mount filesystem (expected for non-linux instances): %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:131 cinder/virt/xenapi/vmops.py:722
+#, python-format
+msgid "Updating progress to %(progress)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:231
+#, python-format
+msgid "Attempted to power on non-existent instance bad instance id %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:233
+msgid "Starting instance"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:303
+msgid "Removing kernel/ramdisk files from dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:358
+msgid "Failed to spawn, rolling back"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:443
+msgid "Detected ISO image type, creating blank VM for install"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:462
+msgid "Auto configuring disk, attempting to resize partition..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:515
+#, python-format
+msgid "Invalid value for injected_files: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:520
+#, python-format
+msgid "Injecting file path: '%s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:527
+msgid "Setting admin password"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:531
+msgid "Resetting network"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:538
+msgid "Setting VCPU weight"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:544
+msgid "Starting VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:551
+#, python-format
+msgid ""
+"Latest agent build for %(hypervisor)s/%(os)s/%(architecture)s is "
+"%(version)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:554
+#, python-format
+msgid "No agent build found for %(hypervisor)s/%(os)s/%(architecture)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:561
+msgid "Waiting for instance state to become running"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:573
+msgid "Querying agent version"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:576
+#, python-format
+msgid "Instance agent version: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:581
+#, python-format
+msgid "Updating Agent to %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:616
+#, python-format
+msgid "No opaque_ref could be determined for '%s'."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:670
+msgid "Finished snapshot and upload for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:677
+msgid "Starting snapshot for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:686
+#, python-format
+msgid "Unable to Snapshot instance: %(exc)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:702
+msgid "Failed to transfer vhd to new host"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:770
+#, python-format
+msgid "Resizing down VDI %(cow_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:893
+#, python-format
+msgid "Resizing up VDI %(vdi_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:901
+msgid "Resize complete"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:928
+#, python-format
+msgid "Failed to query agent version: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:949
+#, python-format
+msgid "domid changed from %(domid)s to %(newdomid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:962
+#, python-format
+msgid "Failed to update agent: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:983
+#, python-format
+msgid "Failed to exchange keys: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:998
+#, python-format
+msgid "Failed to update password: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1023
+#, python-format
+msgid "Failed to inject file: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1032
+msgid "VM already halted, skipping shutdown..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1036
+msgid "Shutting down VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1054
+msgid "Unable to find VBD for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1097
+msgid "Using RAW or VHD, skipping kernel and ramdisk deletion"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1104
+msgid "instance has a kernel or ramdisk but not both"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1111
+msgid "kernel/ramdisk files removed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1121
+msgid "VM destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1147
+msgid "Destroying VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1169
+msgid "VM is not present, skipping destroy..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1222
+#, python-format
+msgid "Instance is already in Rescue Mode: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1296
+#, python-format
+msgid "Found %(instance_count)d hung reboots older than %(timeout)d seconds"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1300
+msgid "Automatically hard rebooting"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1363
+#, python-format
+msgid "Setting migration %(migration_id)s to error: %(reason)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1374
+#, python-format
+msgid ""
+"Automatically confirming migration %(migration_id)s for instance "
+"%(instance_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1379
+#, python-format
+msgid "Instance %(instance_uuid)s not found"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1383
+msgid "In ERROR state"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1389
+#, python-format
+msgid "In %(task_state)s task_state, not RESIZE_VERIFY"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1396
+#, python-format
+msgid "Error auto-confirming resize: %(e)s. Will retry later."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1418
+msgid "Could not get bandwidth info."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1469
+msgid "Injecting network info to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1483
+msgid "Creating vifs"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1492
+#, python-format
+msgid "Creating VIF for network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1495
+#, python-format
+msgid "Created VIF %(vif_ref)s, network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1520
+msgid "Injecting hostname to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1545
+#, python-format
+msgid ""
+"The agent call to %(method)s returned an invalid response: %(ret)r. "
+"path=%(path)s; args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1566
+#, python-format
+msgid "TIMEOUT: The call to %(method)s timed out. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1570
+#, python-format
+msgid ""
+"NOT IMPLEMENTED: The call to %(method)s is not supported by the agent. "
+"args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1575
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1661
+#, python-format
+msgid "OpenSSL error: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:52
+msgid "creating sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:55 cinder/virt/xenapi/volume_utils.py:83
+#, python-format
+msgid "type is = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:58 cinder/virt/xenapi/volume_utils.py:86
+#, python-format
+msgid "name = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:71
+#, python-format
+msgid "Created %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:76 cinder/virt/xenapi/volume_utils.py:174
+msgid "Unable to create Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:80
+msgid "introducing sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:103 cinder/virt/xenapi/volume_utils.py:170
+#: cinder/virt/xenapi/volumeops.py:156
+#, python-format
+msgid "Introduced %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:106
+msgid "Creating pbd for SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:108
+msgid "Plugging SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:116 cinder/virt/xenapi/volumeops.py:160
+msgid "Unable to introduce Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:127 cinder/virt/xenapi/volumeops.py:50
+msgid "Unable to get SR using uuid"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:129
+#, python-format
+msgid "Forgetting SR %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:137
+msgid "Unable to forget Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:157
+#, python-format
+msgid "Introducing %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:186
+#, python-format
+msgid "Unable to find SR from VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:204
+#, python-format
+msgid "Ignoring exception %(exc)s when getting PBDs for %(sr_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:210
+#, python-format
+msgid "Ignoring exception %(exc)s when unplugging PBD %(pbd)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:234
+#, python-format
+msgid "Unable to introduce VDI on SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:242
+#, python-format
+msgid "Unable to get record of VDI %s on"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:264
+#, python-format
+msgid "Unable to introduce VDI for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:274
+#, python-format
+msgid "Error finding vdis in SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:281
+#, python-format
+msgid "Unable to find vbd for vdi %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:315
+#, python-format
+msgid "Unable to obtain target information %(data)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:341
+#, python-format
+msgid "Mountpoint cannot be translated: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:64
+msgid "Could not find VDI ref"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:69
+#, python-format
+msgid "Creating SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:73
+msgid "Could not create SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:76
+msgid "Could not retrieve SR record"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:81
+#, python-format
+msgid "Introducing SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:85
+msgid "SR found in xapi database. No need to introduce"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:90
+msgid "Could not introduce SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:94
+#, python-format
+msgid "Checking for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:106
+#, python-format
+msgid "SR %s not found in the xapi database"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:112
+msgid "Could not forget SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:121
+#, python-format
+msgid "Attach_volume: %(connection_info)s, %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:178
+#, python-format
+msgid "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:189
+#, python-format
+msgid "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:197
+#, python-format
+msgid "Unable to attach volume to instance %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:200
+#, python-format
+msgid "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:210
+#, python-format
+msgid "Detach_volume: %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:219
+#, python-format
+msgid "Unable to locate volume %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:227
+#, python-format
+msgid "Unable to detach volume %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:232
+#, python-format
+msgid "Unable to destroy vbd %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:239
+#, python-format
+msgid "Error purging SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:241
+#, python-format
+msgid "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:98 cinder/vnc/xvp_proxy.py:103
+#, python-format
+msgid "Error in handshake: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:119
+#, python-format
+msgid "Invalid request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:139
+#, python-format
+msgid "Request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:142
+#, python-format
+msgid "Request made with missing token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:153
+#, python-format
+msgid "Request made with invalid token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:160
+#, python-format
+msgid "Unexpected error: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:180
+#, python-format
+msgid "Starting cinder-xvpvncproxy node (version %s)"
+msgstr ""
+
+#: cinder/volume/api.py:74 cinder/volume/api.py:220
+msgid "status must be available"
+msgstr ""
+
+#: cinder/volume/api.py:85
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to create %(size)sG volume"
+msgstr ""
+
+#: cinder/volume/api.py:137
+msgid "Volume status must be available or error"
+msgstr ""
+
+#: cinder/volume/api.py:142
+#, python-format
+msgid "Volume still has %d dependent snapshots"
+msgstr ""
+
+#: cinder/volume/api.py:223
+msgid "already attached"
+msgstr ""
+
+#: cinder/volume/api.py:230
+msgid "already detached"
+msgstr ""
+
+#: cinder/volume/api.py:292
+msgid "must be available"
+msgstr ""
+
+#: cinder/volume/api.py:325
+msgid "Volume Snapshot status must be available or error"
+msgstr ""
+
+#: cinder/volume/driver.py:96
+#, python-format
+msgid "Recovering from a failed execute.  Try number %s"
+msgstr ""
+
+#: cinder/volume/driver.py:106
+#, python-format
+msgid "volume group %s doesn't exist"
+msgstr ""
+
+#: cinder/volume/driver.py:270
+#, python-format
+msgid "Skipping ensure_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:318
+#, python-format
+msgid "Skipping remove_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:327
+#, python-format
+msgid ""
+"Skipping remove_export. No iscsi_target is presently exported for volume:"
+" %d"
+msgstr ""
+
+#: cinder/volume/driver.py:337
+msgid "ISCSI provider_location not stored, using discovery"
+msgstr ""
+
+#: cinder/volume/driver.py:384
+#, python-format
+msgid "Could not find iSCSI export  for volume %s"
+msgstr ""
+
+#: cinder/volume/driver.py:388
+#, python-format
+msgid "ISCSI Discovery: Found %s"
+msgstr ""
+
+#: cinder/volume/driver.py:466
+#, python-format
+msgid "Cannot confirm exported volume id:%(volume_id)s."
+msgstr ""
+
+#: cinder/volume/driver.py:493
+#, python-format
+msgid "FAKE ISCSI: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:505
+#, python-format
+msgid "rbd has no pool %s"
+msgstr ""
+
+#: cinder/volume/driver.py:579
+#, python-format
+msgid "Sheepdog is not working: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:581
+msgid "Sheepdog is not working"
+msgstr ""
+
+#: cinder/volume/driver.py:680 cinder/volume/driver.py:685
+#, python-format
+msgid "LoggingVolumeDriver: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:96
+#, python-format
+msgid "Re-exporting %s volumes"
+msgstr ""
+
+#: cinder/volume/manager.py:101
+#, python-format
+msgid "volume %s: skipping export"
+msgstr ""
+
+#: cinder/volume/manager.py:107
+#, python-format
+msgid "volume %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:119
+#, python-format
+msgid "volume %(vol_name)s: creating lv of size %(vol_size)sG"
+msgstr ""
+
+#: cinder/volume/manager.py:131
+#, python-format
+msgid "volume %s: creating export"
+msgstr ""
+
+#: cinder/volume/manager.py:144
+#, python-format
+msgid "volume %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:153
+msgid "Volume is still attached"
+msgstr ""
+
+#: cinder/volume/manager.py:155
+msgid "Volume is not local to this node"
+msgstr ""
+
+#: cinder/volume/manager.py:159
+#, python-format
+msgid "volume %s: removing export"
+msgstr ""
+
+#: cinder/volume/manager.py:161
+#, python-format
+msgid "volume %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:164
+#, python-format
+msgid "volume %s: volume is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:176
+#, python-format
+msgid "volume %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:183
+#, python-format
+msgid "snapshot %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:187
+#, python-format
+msgid "snapshot %(snap_name)s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:202
+#, python-format
+msgid "snapshot %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:211
+#, python-format
+msgid "snapshot %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:214
+#, python-format
+msgid "snapshot %s: snapshot is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:226
+#, python-format
+msgid "snapshot %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:310
+msgid "Checking volume capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:314
+#, python-format
+msgid "New capabilities found: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:325
+msgid "Clear capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:329
+#, python-format
+msgid "Notification {%s} received"
+msgstr ""
+
+#: cinder/volume/netapp.py:79
+#, python-format
+msgid "API %(name)sfailed: %(reason)s"
+msgstr ""
+
+#: cinder/volume/netapp.py:109
+#, python-format
+msgid "%s is not set"
+msgstr ""
+
+#: cinder/volume/netapp.py:128
+msgid "Connected to DFM server"
+msgstr ""
+
+#: cinder/volume/netapp.py:159
+#, python-format
+msgid "Job failed: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:240
+msgid "Failed to provision dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:252
+msgid "No LUN was created by the provision job"
+msgstr ""
+
+#: cinder/volume/netapp.py:261 cinder/volume/netapp.py:433
+#, python-format
+msgid "Failed to find LUN ID for volume %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:280
+msgid "Failed to remove and delete dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:603 cinder/volume/netapp.py:657
+#, python-format
+msgid "No LUN ID for volume %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:607 cinder/volume/netapp.py:661
+#, python-format
+msgid "Failed to get LUN details for LUN ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:614
+#, python-format
+msgid "Failed to get host details for host ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:620
+#, python-format
+msgid "Failed to get target portal for filer: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:625
+#, python-format
+msgid "Failed to get target IQN for filer: %s"
+msgstr ""
+
+#: cinder/volume/san.py:113 cinder/volume/san.py:151
+msgid "Specify san_password or san_private_key"
+msgstr ""
+
+#: cinder/volume/san.py:156
+msgid "san_ip must be set"
+msgstr ""
+
+#: cinder/volume/san.py:320
+#, python-format
+msgid "LUID not found for %(zfs_poolname)s. Output=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:452
+#, python-format
+msgid "CLIQ command returned %s"
+msgstr ""
+
+#: cinder/volume/san.py:458
+#, python-format
+msgid "Malformed response to CLIQ command %(verb)s %(cliq_args)s. Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:466
+#, python-format
+msgid "Error running CLIQ command %(verb)s %(cliq_args)s.  Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:496
+#, python-format
+msgid ""
+"Unexpected number of virtual ips for cluster  %(cluster_name)s. "
+"Result=%(_xml)s"
+msgstr ""
+
+#: cinder/volume/san.py:549
+#, python-format
+msgid "Volume info: %(volume_name)s => %(volume_attributes)s"
+msgstr ""
+
+#: cinder/volume/san.py:594
+msgid "local_path not supported"
+msgstr ""
+
+#: cinder/volume/san.py:626
+#, python-format
+msgid "Could not determine project for volume %s, can't export"
+msgstr ""
+
+#: cinder/volume/san.py:696
+#, python-format
+msgid "Payload for SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:713
+#, python-format
+msgid "Call to json.loads() raised an exception: %s"
+msgstr ""
+
+#: cinder/volume/san.py:718
+#, python-format
+msgid "Results of SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:732
+#, python-format
+msgid "Found solidfire account: %s"
+msgstr ""
+
+#: cinder/volume/san.py:746
+#, python-format
+msgid "solidfire account: %s does not exist, create it..."
+msgstr ""
+
+#: cinder/volume/san.py:804
+msgid "Enter SolidFire create_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:846
+msgid "Leaving SolidFire create_volume"
+msgstr ""
+
+#: cinder/volume/san.py:861
+msgid "Enter SolidFire delete_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:880
+#, python-format
+msgid "Deleting volumeID: %s "
+msgstr ""
+
+#: cinder/volume/san.py:888
+msgid "Leaving SolidFire delete_volume"
+msgstr ""
+
+#: cinder/volume/san.py:891
+msgid "Executing SolidFire ensure_export..."
+msgstr ""
+
+#: cinder/volume/san.py:895
+msgid "Executing SolidFire create_export..."
+msgstr ""
+
+#: cinder/volume/volume_types.py:49 cinder/volume/volume_types.py:108
+msgid "name cannot be None"
+msgstr ""
+
+#: cinder/volume/volume_types.py:96
+msgid "id cannot be None"
+msgstr ""
+
+#: cinder/volume/xensm.py:55
+#, python-format
+msgid "SR name = %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:56
+#, python-format
+msgid "Params: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:60
+#, python-format
+msgid "Failed to create sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:62
+msgid "Create failed"
+msgstr ""
+
+#: cinder/volume/xensm.py:64
+#, python-format
+msgid "SR UUID of new SR is: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:71
+msgid "Failed to update db"
+msgstr ""
+
+#: cinder/volume/xensm.py:80
+#, python-format
+msgid "Failed to introduce sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:91
+#, python-format
+msgid "Failed to reach backend %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:100
+msgid "XenSMDriver requires xenapi connection"
+msgstr ""
+
+#: cinder/volume/xensm.py:110
+msgid "Failed to initiate session"
+msgstr ""
+
+#: cinder/volume/xensm.py:142
+#, python-format
+msgid "Volume will be created in backend - %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:154
+msgid "Failed to update volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:157
+msgid "Unable to create volume"
+msgstr ""
+
+#: cinder/volume/xensm.py:171
+msgid "Failed to delete vdi"
+msgstr ""
+
+#: cinder/volume/xensm.py:177
+msgid "Failed to delete volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:210
+msgid "Failed to find volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:221
+msgid "Failed to find backend in db"
+msgstr ""
+
+#: cinder/volume/nexenta/__init__.py:27
+msgid "Nexenta SA returned the error"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:64
+#, python-format
+msgid "Sending JSON data: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:69
+#, python-format
+msgid "Auto switching to HTTPS connection to %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:75
+msgid "No headers in server response"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:76
+msgid "Bad response from server"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:79
+#, python-format
+msgid "Got response: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:96
+#, python-format
+msgid "Volume %s does not exist in Nexenta SA"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:180
+msgid ""
+"Call to local_path should not happen. Verify that use_local_volumes flag "
+"is turned off."
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:202
+#, python-format
+msgid "Ignored target creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:210
+#, python-format
+msgid "Ignored target group creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:219
+#, python-format
+msgid "Ignored target group member addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:227
+#, python-format
+msgid "Ignored LU creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:237
+#, python-format
+msgid "Ignored LUN mapping entry addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:273
+#, python-format
+msgid ""
+"Got error trying to destroy target group %(target_group)s, assuming it is"
+" already gone: %(exc)s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:280
+#, python-format
+msgid ""
+"Got error trying to delete target %(target)s, assuming it is already "
+"gone: %(exc)s"
+msgstr ""
+
diff --git a/cinder/locale/pt_BR/LC_MESSAGES/nova.po b/cinder/locale/pt_BR/LC_MESSAGES/nova.po
new file mode 100644
index 000000000..899b9e6b7
--- /dev/null
+++ b/cinder/locale/pt_BR/LC_MESSAGES/nova.po
@@ -0,0 +1,8208 @@
+# Brazilian Portuguese translation for cinder
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the cinder package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version:  cinder\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-04-08 23:04+0000\n"
+"PO-Revision-Date: 2012-02-06 21:07+0000\n"
+"Last-Translator: Adriano Steffler <Unknown>\n"
+"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n > 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: cinder/context.py:59
+#, python-format
+msgid "Arguments dropped when creating context: %s"
+msgstr ""
+
+#: cinder/context.py:90
+#, python-format
+msgid "read_deleted can only be one of 'no', 'yes' or 'only', not %r"
+msgstr ""
+
+#: cinder/crypto.py:48
+msgid "Filename of root CA"
+msgstr "Nome do arquivo da CA raiz"
+
+#: cinder/crypto.py:51
+msgid "Filename of private key"
+msgstr "Nome do arquivo da chave privada"
+
+#: cinder/crypto.py:54
+msgid "Filename of root Certificate Revocation List"
+msgstr ""
+
+#: cinder/crypto.py:57
+msgid "Where we keep our keys"
+msgstr "Aonde armazenamos nossas chaves"
+
+#: cinder/crypto.py:60
+msgid "Where we keep our root CA"
+msgstr "Onde mantemos nosso CA raiz"
+
+#: cinder/crypto.py:63
+msgid "Should we use a CA for each project?"
+msgstr "Devemos usar um CA para cada projeto?"
+
+#: cinder/crypto.py:67
+#, python-format
+msgid "Subject for certificate for users, %s for project, user, timestamp"
+msgstr "Assunto do certificado para usuários, %s para projeto, usuário, timestamp"
+
+#: cinder/crypto.py:72
+#, python-format
+msgid "Subject for certificate for projects, %s for project, timestamp"
+msgstr "Assunto do certificado para projetos, %s para projeto, timestamp"
+
+#: cinder/crypto.py:292
+#, python-format
+msgid "Flags path: %s"
+msgstr "Localização dos sinalizadores: %s"
+
+#: cinder/exception.py:56
+msgid "Unexpected error while running command."
+msgstr "Erro inesperado ao executar o comando."
+
+#: cinder/exception.py:59
+#, python-format
+msgid ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+msgstr ""
+"%(description)s\n"
+"Comando: %(cmd)s\n"
+"Código de saída: %(exit_code)s\n"
+"Saída padrão: %(stdout)r\n"
+"Erro: %(stderr)r"
+
+#: cinder/exception.py:94
+msgid "DB exception wrapped."
+msgstr ""
+
+#: cinder/exception.py:155
+msgid "An unknown exception occurred."
+msgstr ""
+
+#: cinder/exception.py:178
+msgid "Failed to decrypt text"
+msgstr ""
+
+#: cinder/exception.py:182
+msgid "Failed to paginate through images from image service"
+msgstr ""
+
+#: cinder/exception.py:186
+msgid "Virtual Interface creation failed"
+msgstr ""
+
+#: cinder/exception.py:190
+msgid "5 attempts to create virtual interfacewith unique mac address failed"
+msgstr ""
+
+#: cinder/exception.py:195
+msgid "Connection to glance failed"
+msgstr ""
+
+#: cinder/exception.py:199
+msgid "Connection to melange failed"
+msgstr ""
+
+#: cinder/exception.py:203
+msgid "Not authorized."
+msgstr ""
+
+#: cinder/exception.py:208
+msgid "User does not have admin privileges"
+msgstr ""
+
+#: cinder/exception.py:212
+#, python-format
+msgid "Policy doesn't allow %(action)s to be performed."
+msgstr ""
+
+#: cinder/exception.py:216
+#, fuzzy, python-format
+msgid "Not authorized for image %(image_id)s."
+msgstr "sem método para mensagem: %s"
+
+#: cinder/exception.py:220
+msgid "Unacceptable parameters."
+msgstr ""
+
+#: cinder/exception.py:225
+msgid "Invalid snapshot"
+msgstr ""
+
+#: cinder/exception.py:229
+#, python-format
+msgid "Volume %(volume_id)s is not attached to anything"
+msgstr ""
+
+#: cinder/exception.py:233 cinder/api/openstack/compute/contrib/keypairs.py:113
+msgid "Keypair data is invalid"
+msgstr ""
+
+#: cinder/exception.py:237
+msgid "Failed to load data into json format"
+msgstr ""
+
+#: cinder/exception.py:241
+msgid "The request is invalid."
+msgstr ""
+
+#: cinder/exception.py:245
+#, python-format
+msgid "Invalid signature %(signature)s for user %(user)s."
+msgstr ""
+
+#: cinder/exception.py:249
+msgid "Invalid input received"
+msgstr ""
+
+#: cinder/exception.py:253
+#, python-format
+msgid "Invalid instance type %(instance_type)s."
+msgstr ""
+
+#: cinder/exception.py:257
+msgid "Invalid volume type"
+msgstr ""
+
+#: cinder/exception.py:261
+msgid "Invalid volume"
+msgstr ""
+
+#: cinder/exception.py:265
+#, python-format
+msgid "Invalid port range %(from_port)s:%(to_port)s. %(msg)s"
+msgstr ""
+
+#: cinder/exception.py:269
+#, python-format
+msgid "Invalid IP protocol %(protocol)s."
+msgstr ""
+
+#: cinder/exception.py:273
+#, python-format
+msgid "Invalid content type %(content_type)s."
+msgstr ""
+
+#: cinder/exception.py:277
+#, python-format
+msgid "Invalid cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:281
+msgid "Invalid reuse of an RPC connection."
+msgstr ""
+
+#: cinder/exception.py:285
+msgid "Invalid Parameter: Unicode is not supported by the current database."
+msgstr ""
+
+#: cinder/exception.py:292
+#, python-format
+msgid "%(err)s"
+msgstr ""
+
+#: cinder/exception.py:296
+#, python-format
+msgid ""
+"Cannot perform action '%(action)s' on aggregate %(aggregate_id)s. Reason:"
+" %(reason)s."
+msgstr ""
+
+#: cinder/exception.py:301
+#, python-format
+msgid "Group not valid. Reason: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:305
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot %(method)s while"
+" the instance is in this state."
+msgstr ""
+
+#: cinder/exception.py:310
+#, python-format
+msgid "Instance %(instance_id)s is not running."
+msgstr ""
+
+#: cinder/exception.py:314
+#, python-format
+msgid "Instance %(instance_id)s is not suspended."
+msgstr ""
+
+#: cinder/exception.py:318
+#, python-format
+msgid "Instance %(instance_id)s is not in rescue mode"
+msgstr ""
+
+#: cinder/exception.py:322
+msgid "Failed to suspend instance"
+msgstr ""
+
+#: cinder/exception.py:326
+msgid "Failed to resume server"
+msgstr ""
+
+#: cinder/exception.py:330
+msgid "Failed to reboot instance"
+msgstr ""
+
+#: cinder/exception.py:334
+#, fuzzy
+msgid "Failed to terminate instance"
+msgstr "Começando a terminar instâncias"
+
+#: cinder/exception.py:338
+msgid "Service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:342
+msgid "Volume service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:346
+msgid "Compute service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:350
+#, python-format
+msgid "Unable to migrate instance (%(instance_id)s) to current host (%(host)s)."
+msgstr ""
+
+#: cinder/exception.py:355
+msgid "Destination compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:359
+msgid "Original compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:363
+msgid "The supplied hypervisor type of is invalid."
+msgstr ""
+
+#: cinder/exception.py:367
+msgid "The instance requires a newer hypervisor version than has been provided."
+msgstr ""
+
+#: cinder/exception.py:372
+#, python-format
+msgid ""
+"The supplied disk path (%(path)s) already exists, it is expected not to "
+"exist."
+msgstr ""
+
+#: cinder/exception.py:377
+#, python-format
+msgid "The supplied device path (%(path)s) is invalid."
+msgstr ""
+
+#: cinder/exception.py:381
+#, python-format
+msgid "The supplied device (%(device)s) is busy."
+msgstr ""
+
+#: cinder/exception.py:385
+msgid "Unacceptable CPU info"
+msgstr ""
+
+#: cinder/exception.py:389
+#, python-format
+msgid "%(address)s is not a valid IP v4/6 address."
+msgstr ""
+
+#: cinder/exception.py:393
+#, python-format
+msgid ""
+"VLAN tag is not appropriate for the port group %(bridge)s. Expected VLAN "
+"tag is %(tag)s, but the one associated with the port group is %(pgroup)s."
+msgstr ""
+
+#: cinder/exception.py:399
+#, python-format
+msgid ""
+"vSwitch which contains the port group %(bridge)s is not associated with "
+"the desired physical adapter. Expected vSwitch is %(expected)s, but the "
+"one associated is %(actual)s."
+msgstr ""
+
+#: cinder/exception.py:406
+#, python-format
+msgid "Disk format %(disk_format)s is not acceptable"
+msgstr ""
+
+#: cinder/exception.py:410
+#, python-format
+msgid "Image %(image_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:414
+#, python-format
+msgid "Instance %(instance_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:418
+#, python-format
+msgid "Ec2 id %(ec2_id)s is unacceptable."
+msgstr ""
+
+#: cinder/exception.py:422
+msgid "Resource could not be found."
+msgstr ""
+
+#: cinder/exception.py:427
+#, python-format
+msgid "Required flag %(flag)s not set."
+msgstr ""
+
+#: cinder/exception.py:431
+#, python-format
+msgid "Volume %(volume_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:435
+#, python-format
+msgid "Unable to locate account %(account_name)s on Solidfire device"
+msgstr ""
+
+#: cinder/exception.py:440
+#, python-format
+msgid "Volume not found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:444
+#, python-format
+msgid "Volume %(volume_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:449
+msgid "Zero volume types found."
+msgstr ""
+
+#: cinder/exception.py:453
+#, python-format
+msgid "Volume type %(volume_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:457
+#, python-format
+msgid "Volume type with name %(volume_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:462
+#, python-format
+msgid ""
+"Volume Type %(volume_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:467
+#, python-format
+msgid "Snapshot %(snapshot_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:471
+#, python-format
+msgid "deleting volume %(volume_name)s that has snapshot"
+msgstr ""
+
+#: cinder/exception.py:475
+#, python-format
+msgid "deleting snapshot %(snapshot_name)s that has dependent volumes"
+msgstr ""
+
+#: cinder/exception.py:480
+#, python-format
+msgid "No target id found for volume %(volume_id)s."
+msgstr ""
+
+#: cinder/exception.py:484
+#, python-format
+msgid "No disk at %(location)s"
+msgstr ""
+
+#: cinder/exception.py:488
+#, python-format
+msgid "Could not find a handler for %(driver_type)s volume."
+msgstr ""
+
+#: cinder/exception.py:492
+#, python-format
+msgid "Invalid image href %(image_href)s."
+msgstr ""
+
+#: cinder/exception.py:496
+msgid ""
+"Some images have been stored via hrefs. This version of the api does not "
+"support displaying image hrefs."
+msgstr ""
+
+#: cinder/exception.py:501
+#, python-format
+msgid "Image %(image_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:505
+#, python-format
+msgid "Kernel not found for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:509
+#, python-format
+msgid "User %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:513
+#, python-format
+msgid "Project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:517
+#, python-format
+msgid "User %(user_id)s is not a member of project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:521
+#, python-format
+msgid "Role %(role_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:525
+msgid "Cannot find SR to read/write VDI."
+msgstr ""
+
+#: cinder/exception.py:529
+#, python-format
+msgid "%(req)s is required to create a network."
+msgstr ""
+
+#: cinder/exception.py:533
+#, python-format
+msgid "Network %(network_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:537
+#, python-format
+msgid "Network could not be found for bridge %(bridge)s"
+msgstr ""
+
+#: cinder/exception.py:541
+#, python-format
+msgid "Network could not be found for uuid %(uuid)s"
+msgstr ""
+
+#: cinder/exception.py:545
+#, python-format
+msgid "Network could not be found with cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:549
+#, python-format
+msgid "Network could not be found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:553
+msgid "No networks defined."
+msgstr ""
+
+#: cinder/exception.py:557
+#, python-format
+msgid ""
+"Either Network uuid %(network_uuid)s is not present or is not assigned to"
+" the project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:562
+#, python-format
+msgid "Host is not set to the network (%(network_id)s)."
+msgstr ""
+
+#: cinder/exception.py:566
+#, python-format
+msgid "Network %(network)s has active ports, cannot delete."
+msgstr ""
+
+#: cinder/exception.py:570
+msgid "Could not find the datastore reference(s) which the VM uses."
+msgstr ""
+
+#: cinder/exception.py:574
+#, python-format
+msgid "No fixed IP associated with id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:578
+#, python-format
+msgid "Fixed ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:582
+#, python-format
+msgid "Instance %(instance_id)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:586
+#, python-format
+msgid "Network host %(host)s has zero fixed ips in network %(network_id)s."
+msgstr ""
+
+#: cinder/exception.py:591
+#, python-format
+msgid "Instance %(instance_id)s doesn't have fixed ip '%(ip)s'."
+msgstr ""
+
+#: cinder/exception.py:595
+#, python-format
+msgid "Host %(host)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:599
+#, python-format
+msgid ""
+"Fixed IP address (%(address)s) does not exist in network "
+"(%(network_uuid)s)."
+msgstr ""
+
+#: cinder/exception.py:604
+#, python-format
+msgid "Fixed IP address %(address)s is already in use."
+msgstr ""
+
+#: cinder/exception.py:608
+#, python-format
+msgid "Fixed IP address %(address)s is invalid."
+msgstr ""
+
+#: cinder/exception.py:612
+msgid "Zero fixed ips available."
+msgstr ""
+
+#: cinder/exception.py:616
+msgid "Zero fixed ips could be found."
+msgstr ""
+
+#: cinder/exception.py:620
+#, python-format
+msgid "Floating ip not found for id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:624
+#, python-format
+msgid "The DNS entry %(name)s already exists in domain %(domain)s."
+msgstr ""
+
+#: cinder/exception.py:628
+#, python-format
+msgid "Floating ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:632
+#, python-format
+msgid "Floating ip not found for host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:636
+msgid "Zero floating ips available."
+msgstr ""
+
+#: cinder/exception.py:640
+#, python-format
+msgid "Floating ip %(address)s is associated."
+msgstr ""
+
+#: cinder/exception.py:644
+#, python-format
+msgid "Floating ip %(address)s is not associated."
+msgstr ""
+
+#: cinder/exception.py:648
+msgid "Zero floating ips exist."
+msgstr ""
+
+#: cinder/exception.py:652
+#, python-format
+msgid "Interface %(interface)s not found."
+msgstr ""
+
+#: cinder/exception.py:656
+#, python-format
+msgid "Keypair %(name)s not found for user %(user_id)s"
+msgstr ""
+
+#: cinder/exception.py:660
+#, python-format
+msgid "Certificate %(certificate_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:664
+#, python-format
+msgid "Service %(service_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:668
+#, python-format
+msgid "Host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:672
+#, python-format
+msgid "Compute host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:676
+#, python-format
+msgid "Could not find binary %(binary)s on host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:680
+#, python-format
+msgid "Auth token %(token)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:684
+#, python-format
+msgid "Access Key %(access_key)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:688
+msgid "Quota could not be found"
+msgstr ""
+
+#: cinder/exception.py:692
+#, python-format
+msgid "Quota for project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:696
+#, python-format
+msgid "Quota class %(class_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:700
+#, python-format
+msgid "Security group %(security_group_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:704
+#, python-format
+msgid "Security group %(security_group_id)s not found for project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:709
+#, python-format
+msgid "Security group with rule %(rule_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:713
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is already associated with the "
+"instance %(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:718
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is not associated with the instance "
+"%(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:723
+#, python-format
+msgid "Migration %(migration_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:727
+#, python-format
+msgid "Migration not found for instance %(instance_id)s with status %(status)s."
+msgstr ""
+
+#: cinder/exception.py:732
+#, python-format
+msgid "Console pool %(pool_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:736
+#, python-format
+msgid ""
+"Console pool of type %(console_type)s for compute host %(compute_host)s "
+"on proxy host %(host)s not found."
+msgstr ""
+
+#: cinder/exception.py:742
+#, python-format
+msgid "Console %(console_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:746
+#, python-format
+msgid "Console for instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:750
+#, python-format
+msgid ""
+"Console for instance %(instance_id)s in pool %(pool_id)s could not be "
+"found."
+msgstr ""
+
+#: cinder/exception.py:755
+#, python-format
+msgid "Invalid console type %(console_type)s "
+msgstr ""
+
+#: cinder/exception.py:759
+msgid "Zero instance types found."
+msgstr ""
+
+#: cinder/exception.py:763
+#, python-format
+msgid "Instance type %(instance_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:767
+#, python-format
+msgid "Instance type with name %(instance_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:772
+#, python-format
+msgid "Flavor %(flavor_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:776
+#, python-format
+msgid "Cell %(cell_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:780
+#, python-format
+msgid "Scheduler Host Filter %(filter_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:784
+#, python-format
+msgid "Scheduler cost function %(cost_fn_str)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:789
+#, python-format
+msgid "Scheduler weight flag not found: %(flag_name)s"
+msgstr ""
+
+#: cinder/exception.py:793
+#, python-format
+msgid "Instance %(instance_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:798
+#, python-format
+msgid ""
+"Instance Type %(instance_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:803
+msgid "LDAP object could not be found"
+msgstr ""
+
+#: cinder/exception.py:807
+#, python-format
+msgid "LDAP user %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:811
+#, python-format
+msgid "LDAP group %(group_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:815
+#, python-format
+msgid "LDAP user %(user_id)s is not a member of group %(group_id)s."
+msgstr ""
+
+#: cinder/exception.py:819
+#, python-format
+msgid "File %(file_path)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:823
+msgid "Zero files could be found."
+msgstr ""
+
+#: cinder/exception.py:827
+#, python-format
+msgid "Virtual switch associated with the network adapter %(adapter)s not found."
+msgstr ""
+
+#: cinder/exception.py:832
+#, python-format
+msgid "Network adapter %(adapter)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:836
+#, python-format
+msgid "Class %(class_name)s could not be found: %(exception)s"
+msgstr ""
+
+#: cinder/exception.py:840
+msgid "Action not allowed."
+msgstr ""
+
+#: cinder/exception.py:844
+#, python-format
+msgid "Unable to use global role %(role_id)s"
+msgstr ""
+
+#: cinder/exception.py:848
+msgid "Rotation is not allowed for snapshots"
+msgstr ""
+
+#: cinder/exception.py:852
+msgid "Rotation param is required for backup image_type"
+msgstr ""
+
+#: cinder/exception.py:861
+#, python-format
+msgid "Key pair %(key_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:865
+#, python-format
+msgid "User %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:869
+#, python-format
+msgid "LDAP user %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:873
+#, python-format
+msgid "LDAP group %(group)s already exists."
+msgstr ""
+
+#: cinder/exception.py:877
+#, python-format
+msgid "User %(uid)s is already a member of the group %(group_dn)s"
+msgstr "Usuário %(uid)s já é um membro do grupo %(group_dn)s"
+
+#: cinder/exception.py:882
+#, python-format
+msgid "Project %(project)s already exists."
+msgstr ""
+
+#: cinder/exception.py:886
+#, python-format
+msgid "Instance %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:890
+#, python-format
+msgid "Instance Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:894
+#, python-format
+msgid "Volume Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:898
+#, python-format
+msgid "%(path)s is on shared storage: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:902
+msgid "Migration error"
+msgstr ""
+
+#: cinder/exception.py:906
+#, python-format
+msgid "Malformed message body: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:910
+#, python-format
+msgid "Could not find config at %(path)s"
+msgstr ""
+
+#: cinder/exception.py:914
+#, python-format
+msgid "Could not load paste app '%(name)s' from %(path)s"
+msgstr ""
+
+#: cinder/exception.py:918
+msgid "When resizing, instances must change size!"
+msgstr ""
+
+#: cinder/exception.py:922
+msgid "Image is larger than instance type allows"
+msgstr ""
+
+#: cinder/exception.py:926
+msgid "1 or more Zones could not complete the request"
+msgstr ""
+
+#: cinder/exception.py:930
+msgid "Instance type's memory is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:934
+msgid "Instance type's disk is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:938
+#, python-format
+msgid "Insufficient free memory on compute node to start %(uuid)s."
+msgstr ""
+
+#: cinder/exception.py:942
+msgid "Could not fetch bandwidth/cpu/disk metrics for this host."
+msgstr ""
+
+#: cinder/exception.py:946
+#, python-format
+msgid "No valid host was found. %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:950
+#, python-format
+msgid "Host %(host)s is not up or doesn't exist."
+msgstr ""
+
+#: cinder/exception.py:954
+msgid "Quota exceeded"
+msgstr ""
+
+#: cinder/exception.py:958
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: action '%(action)s' caused an error: "
+"%(reason)s."
+msgstr ""
+
+#: cinder/exception.py:963
+#, python-format
+msgid "Aggregate %(aggregate_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:967
+#, python-format
+msgid "Aggregate %(aggregate_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:971
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:975
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:980
+#, python-format
+msgid "Host %(host)s already member of another aggregate."
+msgstr ""
+
+#: cinder/exception.py:984
+#, python-format
+msgid "Aggregate %(aggregate_id)s already has host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:988
+#, python-format
+msgid "Detected more than one volume with name %(vol_name)s"
+msgstr ""
+
+#: cinder/exception.py:992
+#, python-format
+msgid "Cannot create volume_type with name %(name)s and specs %(extra_specs)s"
+msgstr ""
+
+#: cinder/exception.py:997
+msgid "Unable to create instance type"
+msgstr ""
+
+#: cinder/exception.py:1001
+msgid "Bad response from SolidFire API"
+msgstr ""
+
+#: cinder/exception.py:1005
+#, python-format
+msgid "Error in SolidFire API response: status=%(status)s"
+msgstr ""
+
+#: cinder/exception.py:1009
+#, python-format
+msgid "Error in SolidFire API response: data=%(data)s"
+msgstr ""
+
+#: cinder/exception.py:1013
+#, python-format
+msgid "Detected existing vlan with id %(vlan)d"
+msgstr ""
+
+#: cinder/exception.py:1017
+#, python-format
+msgid "Instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:1021
+#, python-format
+msgid "Invalid id: %(val)s (expecting \"i-...\")."
+msgstr ""
+
+#: cinder/exception.py:1025
+#, python-format
+msgid "Could not fetch image %(image)s"
+msgstr ""
+
+#: cinder/log.py:315
+#, python-format
+msgid "syslog facility must be one of: %s"
+msgstr ""
+
+#: cinder/manager.py:146
+#, python-format
+msgid "Skipping %(full_task_name)s, %(ticks_to_skip)s ticks left until next run"
+msgstr ""
+
+#: cinder/manager.py:152
+#, python-format
+msgid "Running periodic task %(full_task_name)s"
+msgstr ""
+
+#: cinder/manager.py:159
+#, python-format
+msgid "Error during %(full_task_name)s: %(e)s"
+msgstr ""
+
+#: cinder/manager.py:203
+msgid "Notifying Schedulers of capabilities ..."
+msgstr ""
+
+#: cinder/policy.py:30
+msgid "JSON file representing policy"
+msgstr ""
+
+#: cinder/policy.py:33
+msgid "Rule checked when requested rule is not found"
+msgstr ""
+
+#: cinder/service.py:137
+msgid "SIGTERM received"
+msgstr ""
+
+#: cinder/service.py:177
+#, python-format
+msgid "Starting %(topic)s node (version %(vcs_string)s)"
+msgstr ""
+
+#: cinder/service.py:195
+#, python-format
+msgid "Creating Consumer connection for Service %s"
+msgstr ""
+
+#: cinder/service.py:282
+msgid "Service killed that has no database entry"
+msgstr "Encerrado serviço que não tem entrada na base de dados"
+
+#: cinder/service.py:319
+msgid "The service database object disappeared, Recreating it."
+msgstr "O objeto da base de dados do serviço desapareceu, Recriando."
+
+#: cinder/service.py:334
+msgid "Recovered model server connection!"
+msgstr "Recuperada conexão servidor de modelo."
+
+#: cinder/service.py:340
+msgid "model server went away"
+msgstr "servidor de modelo perdido"
+
+#: cinder/service.py:433
+msgid "Full set of FLAGS:"
+msgstr "Conjunto completo de FLAGS:"
+
+#: cinder/service.py:440
+#, python-format
+msgid "%(flag)s : FLAG SET "
+msgstr ""
+
+#: cinder/utils.py:79
+#, python-format
+msgid "Inner Exception: %s"
+msgstr "Exceção interna: %s"
+
+#: cinder/utils.py:165
+#, python-format
+msgid "Fetching %s"
+msgstr "Buscando %s"
+
+#: cinder/utils.py:210
+#, python-format
+msgid "Got unknown keyword args to utils.execute: %r"
+msgstr ""
+
+#: cinder/utils.py:220
+#, python-format
+msgid "Running cmd (subprocess): %s"
+msgstr "Executando comando (subprocesso): %s"
+
+#: cinder/utils.py:236 cinder/utils.py:315
+#, python-format
+msgid "Result was %s"
+msgstr "Resultado foi %s"
+
+#: cinder/utils.py:249
+#, python-format
+msgid "%r failed. Retrying."
+msgstr ""
+
+#: cinder/utils.py:291
+#, python-format
+msgid "Running cmd (SSH): %s"
+msgstr "Executando o comando (SSH): %s"
+
+#: cinder/utils.py:293
+msgid "Environment not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:297
+msgid "process_input not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:352
+#, python-format
+msgid "debug in callback: %s"
+msgstr "depuração em retorno de chamada: %s"
+
+#: cinder/utils.py:534
+#, python-format
+msgid "Link Local address is not found.:%s"
+msgstr "Endereço para Link Local não encontrado: %s"
+
+#: cinder/utils.py:537
+#, python-format
+msgid "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+msgstr "Não foi possível atribuir um IP para o Link Local de %(interface)s :%(ex)s"
+
+#: cinder/utils.py:648
+#, python-format
+msgid "Invalid backend: %s"
+msgstr "Backend inválido: %s"
+
+#: cinder/utils.py:659
+#, python-format
+msgid "backend %s"
+msgstr "backend %s"
+
+#: cinder/utils.py:709
+msgid "in looping call"
+msgstr ""
+
+#: cinder/utils.py:927
+#, python-format
+msgid "Attempting to grab semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:931
+#, python-format
+msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:935
+#, python-format
+msgid "Attempting to grab file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:942
+#, python-format
+msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:1001
+#, python-format
+msgid "Found sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1008
+#, python-format
+msgid "Cleaned sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1023
+#, python-format
+msgid "Found lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1028
+#, python-format
+msgid "Cleaned lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1138
+#, python-format
+msgid "Expected object of type: %s"
+msgstr ""
+
+#: cinder/utils.py:1169
+#, python-format
+msgid "Invalid server_string: %s"
+msgstr ""
+
+#: cinder/utils.py:1298
+#, python-format
+msgid "timefunc: '%(name)s' took %(total_time).2f secs"
+msgstr ""
+
+#: cinder/utils.py:1330
+msgid "Original exception being dropped"
+msgstr ""
+
+#: cinder/utils.py:1461
+#, python-format
+msgid "Class %(fullname)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1463
+#, python-format
+msgid "Class %(fullname)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1495
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1497
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1681
+#, python-format
+msgid "Could not remove tmpdir: %s"
+msgstr ""
+
+#: cinder/wsgi.py:97
+#, python-format
+msgid "Started %(name)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:108
+msgid "Stopping WSGI server."
+msgstr ""
+
+#: cinder/wsgi.py:111
+msgid "Stopping raw TCP server."
+msgstr ""
+
+#: cinder/wsgi.py:117
+#, python-format
+msgid "Starting TCP server %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:133
+msgid "WSGI server has stopped."
+msgstr ""
+
+#: cinder/wsgi.py:211
+msgid "You must implement __call__"
+msgstr ""
+
+#: cinder/api/direct.py:218
+msgid "not available"
+msgstr ""
+
+#: cinder/api/direct.py:299
+#, python-format
+msgid "Returned non-serializeable type: %s"
+msgstr ""
+
+#: cinder/api/sizelimit.py:51
+msgid "Request is too large."
+msgstr ""
+
+#: cinder/api/validator.py:142
+#, python-format
+msgid "%(key)s with value %(value)s failed validator  %(validator)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:73
+#, python-format
+msgid "%(code)s: %(message)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:95
+#, python-format
+msgid "FaultWrapper: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:170
+msgid "Too many failed authentications."
+msgstr "Muitas falhas de autenticação."
+
+#: cinder/api/ec2/__init__.py:180
+#, python-format
+msgid ""
+"Access key %(access_key)s has had %(failures)d failed authentications and"
+" will be locked out for %(lock_mins)d minutes."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:267
+msgid "Signature not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:271
+msgid "Access key not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:306 cinder/api/ec2/__init__.py:319
+msgid "Failure communicating with keystone"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:388
+#, python-format
+msgid "Authentication Failure: %s"
+msgstr "Falha de Autenticação: %s"
+
+#: cinder/api/ec2/__init__.py:404
+#, python-format
+msgid "Authenticated Request For %(uname)s:%(pname)s)"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:435
+#, python-format
+msgid "action: %s"
+msgstr "ação: %s"
+
+#: cinder/api/ec2/__init__.py:437
+#, python-format
+msgid "arg: %(key)s\t\tval: %(value)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:512
+#, python-format
+msgid "Unauthorized request for controller=%(controller)s and action=%(action)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:584
+#, python-format
+msgid "InstanceNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:590
+#, python-format
+msgid "VolumeNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:596
+#, python-format
+msgid "SnapshotNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:602
+#, python-format
+msgid "NotFound raised: %s"
+msgstr "NotFound lançado: %s"
+
+#: cinder/api/ec2/__init__.py:605
+#, python-format
+msgid "EC2APIError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:613
+#, python-format
+msgid "KeyPairExists raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:617
+#, python-format
+msgid "InvalidParameterValue raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:621
+#, python-format
+msgid "InvalidPortRange raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:625
+#, python-format
+msgid "NotAuthorized raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:629
+#, python-format
+msgid "InvalidRequest raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:633
+#, fuzzy, python-format
+msgid "QuotaError raised: %s"
+msgstr "Erro inexperado lançado: %s"
+
+#: cinder/api/ec2/__init__.py:637
+#, python-format
+msgid "Invalid id: bogus (expecting \"i-...\"): %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:646
+#, python-format
+msgid "Unexpected error raised: %s"
+msgstr "Erro inexperado lançado: %s"
+
+#: cinder/api/ec2/__init__.py:647
+#, python-format
+msgid "Environment: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:649 cinder/api/metadata/handler.py:248
+msgid "An unknown error has occurred. Please try your request again."
+msgstr "Ocorreu um erro desconhecido. Por favor tente sua requisição cindermente."
+
+#: cinder/api/ec2/apirequest.py:64
+#, python-format
+msgid "Unsupported API request: controller = %(controller)s, action = %(action)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:336
+#, python-format
+msgid "Create snapshot of volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:372
+#, python-format
+msgid ""
+"Value (%s) for KeyName is invalid. Content limited to Alphanumeric "
+"character, spaces, dashes, and underscore."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:378
+#, python-format
+msgid "Value (%s) for Keyname is invalid. Length exceeds maximum of 255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:382
+#, python-format
+msgid "Create key pair %s"
+msgstr "Criar par de chaves %s"
+
+#: cinder/api/ec2/cloud.py:391
+#, python-format
+msgid "Import key %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:409
+#, python-format
+msgid "Delete key pair %s"
+msgstr "Remover par de chaves %s"
+
+#: cinder/api/ec2/cloud.py:551
+msgid "Invalid CIDR"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:639 cinder/api/ec2/cloud.py:693
+#: cinder/api/ec2/cloud.py:800
+msgid "Not enough parameters, need group_name or group_id"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:654
+#: cinder/api/openstack/compute/contrib/security_groups.py:517
+#, python-format
+msgid "Revoke security group ingress %s"
+msgstr "Revogado entrada do grupo de segurança %s"
+
+#: cinder/api/ec2/cloud.py:666 cinder/api/ec2/cloud.py:719
+#, python-format
+msgid "%s Not enough parameters to build a valid rule"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:684 cinder/api/ec2/cloud.py:744
+msgid "No rule for the specified parameters."
+msgstr "Não existe regra para os parâmetros especificados"
+
+#: cinder/api/ec2/cloud.py:708
+#: cinder/api/openstack/compute/contrib/security_groups.py:354
+#, python-format
+msgid "Authorize security group ingress %s"
+msgstr "Autorizada entrada do grupo de segurança %s"
+
+#: cinder/api/ec2/cloud.py:725
+#, fuzzy, python-format
+msgid "%s - This rule already exists in group"
+msgstr "Esta regra já existe no grupo %s"
+
+#: cinder/api/ec2/cloud.py:769
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Content limited to "
+"Alphanumeric characters, spaces, dashes, and underscores."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:776
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Length exceeds maximum of "
+"255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:780
+#: cinder/api/openstack/compute/contrib/security_groups.py:292
+#, python-format
+msgid "Create Security Group %s"
+msgstr "Criar Grupo de Segurança %s"
+
+#: cinder/api/ec2/cloud.py:783
+#, python-format
+msgid "group %s already exists"
+msgstr "group %s já existe"
+
+#: cinder/api/ec2/cloud.py:815
+#: cinder/api/openstack/compute/contrib/security_groups.py:245
+#, python-format
+msgid "Delete security group %s"
+msgstr "Excluir grupo de segurança %s"
+
+#: cinder/api/ec2/cloud.py:823 cinder/compute/manager.py:1630
+#, python-format
+msgid "Get console output for instance %s"
+msgstr "Obter saída do console para instância %s"
+
+#: cinder/api/ec2/cloud.py:894
+#, python-format
+msgid "Create volume from snapshot %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:898 cinder/api/openstack/compute/contrib/volumes.py:186
+#: cinder/api/openstack/volume/volumes.py:222
+#, python-format
+msgid "Create volume of %s GB"
+msgstr "Criar volume de %s GB"
+
+#: cinder/api/ec2/cloud.py:921
+msgid "Delete Failed"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:931
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(instance_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:939
+msgid "Attach Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:952 cinder/api/openstack/compute/contrib/volumes.py:366
+#, python-format
+msgid "Detach volume %s"
+msgstr "Desanexar volume %s"
+
+#: cinder/api/ec2/cloud.py:959
+#, fuzzy, python-format
+msgid "Detach Volume Failed."
+msgstr "Desanexar volume %s"
+
+#: cinder/api/ec2/cloud.py:984 cinder/api/ec2/cloud.py:1041
+#: cinder/api/ec2/cloud.py:1518 cinder/api/ec2/cloud.py:1533
+#, python-format
+msgid "attribute not supported: %s"
+msgstr "atributo não suportado: %s"
+
+#: cinder/api/ec2/cloud.py:1107
+#, python-format
+msgid "vol = %s\n"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1255
+msgid "Allocate address"
+msgstr "Alocar endereço"
+
+#: cinder/api/ec2/cloud.py:1267
+#, python-format
+msgid "Release address %s"
+msgstr "Liberar endereço %s"
+
+#: cinder/api/ec2/cloud.py:1272
+#, python-format
+msgid "Associate address %(public_ip)s to instance %(instance_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1282
+#, python-format
+msgid "Disassociate address %s"
+msgstr "Desatribuir endereço %s"
+
+#: cinder/api/ec2/cloud.py:1308
+msgid "Image must be available"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1329
+msgid "Going to start terminating instances"
+msgstr "Começando a terminar instâncias"
+
+#: cinder/api/ec2/cloud.py:1343
+#, python-format
+msgid "Reboot instance %r"
+msgstr "Reiniciar instância %r"
+
+#: cinder/api/ec2/cloud.py:1354
+msgid "Going to stop instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1365
+msgid "Going to start instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1455
+#, python-format
+msgid "De-registering image %s"
+msgstr "Removendo o registro da imagem %s"
+
+#: cinder/api/ec2/cloud.py:1471
+msgid "imageLocation is required"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1490
+#, python-format
+msgid "Registered image %(image_location)s with id %(image_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1536
+msgid "user or group not specified"
+msgstr "usuário ou grupo não especificado"
+
+#: cinder/api/ec2/cloud.py:1538
+msgid "only group \"all\" is supported"
+msgstr "apenas o grupo \"all\" é suportado"
+
+#: cinder/api/ec2/cloud.py:1540
+msgid "operation_type must be add or remove"
+msgstr "operation_type deve ser add ou remove"
+
+#: cinder/api/ec2/cloud.py:1542
+#, python-format
+msgid "Updating image %s publicity"
+msgstr "Atualizando publicidade da imagem %s"
+
+#: cinder/api/ec2/cloud.py:1555
+#, python-format
+msgid "Not allowed to modify attributes for image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1603
+#, python-format
+msgid "Couldn't stop instance with in %d sec"
+msgstr ""
+
+#: cinder/api/metadata/handler.py:246 cinder/api/metadata/handler.py:253
+#, python-format
+msgid "Failed to get metadata for ip: %s"
+msgstr "Falha ao obter metadados para o ip: %s"
+
+#: cinder/api/openstack/__init__.py:43
+#, python-format
+msgid "Caught error: %s"
+msgstr "Capturado o erro: %s"
+
+#: cinder/api/openstack/__init__.py:45 cinder/api/openstack/wsgi.py:886
+#, python-format
+msgid "%(url)s returned with HTTP %(status)d"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:94
+msgid "Must specify an ExtensionManager class"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:105
+#, python-format
+msgid "Extended resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:130
+#, python-format
+msgid ""
+"Extension %(ext_name)s: Cannot extend resource %(collection)s: No such "
+"resource"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:135
+#, python-format
+msgid "Extension %(ext_name)s extending resource: %(collection)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:90
+#, python-format
+msgid "%(user_id)s could not be found with token '%(token)s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:134
+#, python-format
+msgid "%(user_id)s must be an admin or a member of %(project_id)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:152
+msgid "Authentication requests must be made against a version root (e.g. /v2)."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:167
+#, python-format
+msgid "Could not find %s in request."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:191
+#, python-format
+msgid "Successfully authenticated '%s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:241
+msgid "User not found with provided API key."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:258
+#, python-format
+msgid "Provided API key is valid, but not for user '%(username)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:133 cinder/api/openstack/common.py:167
+msgid "limit param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:136 cinder/api/openstack/common.py:171
+msgid "limit param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:161
+msgid "offset param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:175
+msgid "offset param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:203
+#, python-format
+msgid "marker [%s] not found"
+msgstr ""
+
+#: cinder/api/openstack/common.py:243
+#, python-format
+msgid "href %s does not contain version"
+msgstr ""
+
+#: cinder/api/openstack/common.py:278
+msgid "Image metadata limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/common.py:295
+#, python-format
+msgid "Converting nw_info: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:305
+#, python-format
+msgid "Converted networks: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:338
+#, python-format
+msgid "Cannot '%(action)s' while instance is in %(attr)s %(state)s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:341
+#, python-format
+msgid "Instance is in an invalid state for '%(action)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:421
+msgid "Rejecting snapshot request, snapshots currently disabled"
+msgstr ""
+
+#: cinder/api/openstack/common.py:423
+msgid "Instance snapshots are not permitted at this time."
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:188
+#, python-format
+msgid "Loaded extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:225
+#, python-format
+msgid "Ext name: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:226
+#, python-format
+msgid "Ext alias: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:227
+#, python-format
+msgid "Ext description: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:229
+#, python-format
+msgid "Ext namespace: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:230
+#, python-format
+msgid "Ext updated: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:232
+#, python-format
+msgid "Exception loading extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:246
+#, python-format
+msgid "Loading extension %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:252
+#, python-format
+msgid "Calling extension factory %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:264
+#, python-format
+msgid "Failed to load extension %(ext_factory)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:344
+#, python-format
+msgid "Failed to load extension %(classpath)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:368
+#, python-format
+msgid "Failed to load extension %(ext_name)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:135 cinder/api/openstack/wsgi.py:538
+msgid "cannot understand JSON"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:159
+#: cinder/api/openstack/compute/contrib/hosts.py:86
+msgid "cannot understand XML"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:543
+msgid "too many body keys"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:582
+#, python-format
+msgid "Exception handling resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:586
+#, python-format
+msgid "Fault thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:589
+#, python-format
+msgid "HTTP exception thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:697
+msgid "Unrecognized Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:701
+msgid "No Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:705
+msgid "Empty body provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:816
+#, python-format
+msgid "There is no such action: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:819 cinder/api/openstack/wsgi.py:832
+#: cinder/api/openstack/compute/server_metadata.py:58
+#: cinder/api/openstack/compute/server_metadata.py:76
+#: cinder/api/openstack/compute/server_metadata.py:101
+#: cinder/api/openstack/compute/server_metadata.py:126
+#: cinder/api/openstack/compute/contrib/admin_actions.py:211
+#: cinder/api/openstack/compute/contrib/console_output.py:52
+msgid "Malformed request body"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:829
+msgid "Unsupported Content-Type"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:841
+msgid "Malformed request url"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:889
+#, python-format
+msgid "%(url)s returned a fault: %(e)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:265
+msgid "element is not a child"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:414
+msgid "root element selecting a list"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:739
+#, python-format
+msgid "Template tree mismatch; adding slave %(slavetag)s to master %(mastertag)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:858
+msgid "subclasses must implement construct()!"
+msgstr ""
+
+#: cinder/api/openstack/compute/extensions.py:29
+#: cinder/api/openstack/volume/extensions.py:29
+msgid "Initializing extension manager."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:40
+#: cinder/api/openstack/compute/images.py:146
+#: cinder/api/openstack/compute/images.py:161
+msgid "Image not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:79
+msgid "Incorrect request body format"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:83
+#: cinder/api/openstack/compute/server_metadata.py:80
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:79
+#: cinder/api/openstack/compute/contrib/volumetypes.py:188
+msgid "Request body and URI mismatch"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:86
+#: cinder/api/openstack/compute/server_metadata.py:84
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:82
+#: cinder/api/openstack/compute/contrib/volumetypes.py:191
+msgid "Request body contains too many items"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:111
+msgid "Invalid metadata key"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:74
+msgid "Instance does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:97
+msgid "Instance is not a member of specified network"
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:140
+#, python-format
+msgid ""
+"Only %(value)s %(verb)s request(s) can be made to %(uri)s every "
+"%(unit_string)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:266
+msgid "This request was rate-limited."
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:38
+#: cinder/api/openstack/compute/server_metadata.py:122
+#: cinder/api/openstack/compute/server_metadata.py:159
+msgid "Server does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:141
+#: cinder/api/openstack/compute/server_metadata.py:152
+msgid "Metadata item was not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:425
+#, python-format
+msgid "Invalid server status: %(status)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:433
+msgid "Invalid changes-since value"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:483
+msgid "Personality file limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:485
+msgid "Personality file path too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:487
+msgid "Personality file content too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:501
+msgid "Server name is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:505
+msgid "Server name is an empty string"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:509
+msgid "Server name must be less than 256 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:527
+#, python-format
+msgid "Bad personality format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:530
+msgid "Bad personality format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:535
+#, python-format
+msgid "Personality content for %s cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:550
+#, python-format
+msgid "Bad networks format: network uuid is not in proper format (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:559
+#, python-format
+msgid "Invalid fixed IP address (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:566
+#, python-format
+msgid "Duplicate networks (%s) are not allowed"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:572
+#, python-format
+msgid "Bad network format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:575
+msgid "Bad networks format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:587
+msgid "Userdata content cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:594
+msgid "accessIPv4 is not proper IPv4 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:601
+msgid "accessIPv6 is not proper IPv6 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:633
+msgid "Server name is not defined"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:675
+#: cinder/api/openstack/compute/servers.py:740
+msgid "Invalid flavorRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:737
+msgid "Can not find requested image"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:743
+msgid "Invalid key_name provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:829
+#: cinder/api/openstack/compute/servers.py:849
+msgid "Instance has not been resized."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:835
+#, python-format
+msgid "Error in confirm-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:855
+#, python-format
+msgid "Error in revert-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:868
+msgid "Argument 'type' for reboot is not HARD or SOFT"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:872
+msgid "Missing argument 'type' for reboot"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:885
+#, python-format
+msgid "Error in reboot %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:897
+msgid "Unable to locate requested flavor."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:900
+msgid "Resize requires a change in size."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:924
+msgid "Malformed server entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:931
+msgid "Missing imageRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:940
+msgid "Invalid imageRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:949
+msgid "Missing flavorRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:962
+msgid "No adminPass was specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:966
+#: cinder/api/openstack/compute/servers.py:1144
+msgid "Invalid adminPass"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:980
+msgid "Unable to parse metadata key/value pairs."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:993
+msgid "Resize request has invalid 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:996
+msgid "Resize requests require 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1014
+#: cinder/api/openstack/compute/contrib/aggregates.py:142
+#: cinder/api/openstack/compute/contrib/networks.py:65
+msgid "Invalid request body"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1019
+msgid "Could not parse imageRef from request."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1071
+msgid "Instance could not be found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1074
+msgid "Cannot find image for rebuild"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1103
+msgid "createImage entity requires name attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1112
+#: cinder/api/openstack/compute/contrib/admin_actions.py:238
+msgid "Invalid metadata"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1167
+#, python-format
+msgid "Removing options '%(unk_opt_str)s' from query"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:60
+#, python-format
+msgid "Compute.api::pause %s"
+msgstr "Compute.api::pause %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:77
+#, python-format
+msgid "Compute.api::unpause %s"
+msgstr "Compute.api::unpause %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:94
+#, python-format
+msgid "compute.api::suspend %s"
+msgstr "compute.api::suspend %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:111
+#, python-format
+msgid "compute.api::resume %s"
+msgstr "compute.api::resume %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:127
+#, python-format
+msgid "Error in migrate %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:141
+#, python-format
+msgid "Compute.api::reset_network %s"
+msgstr "Compute.api::reset_network %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:154
+#: cinder/api/openstack/compute/contrib/admin_actions.py:170
+#: cinder/api/openstack/compute/contrib/admin_actions.py:186
+#: cinder/api/openstack/compute/contrib/multinic.py:41
+#: cinder/api/openstack/compute/contrib/rescue.py:44
+msgid "Server not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:157
+#, python-format
+msgid "Compute.api::inject_network_info %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:173
+#, python-format
+msgid "Compute.api::lock %s"
+msgstr "Compute.api::lock %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:189
+#, python-format
+msgid "Compute.api::unlock %s"
+msgstr "Compute.api::unlock %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:219
+#, python-format
+msgid "createBackup entity requires %s attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:223
+msgid "Malformed createBackup entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:229
+msgid "createBackup attribute 'rotation' must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:244
+#: cinder/api/openstack/compute/contrib/console_output.py:47
+#: cinder/api/openstack/compute/contrib/console_output.py:59
+#: cinder/api/openstack/compute/contrib/consoles.py:49
+#: cinder/api/openstack/compute/contrib/consoles.py:60
+#: cinder/api/openstack/compute/contrib/server_action_list.py:49
+#: cinder/api/openstack/compute/contrib/server_diagnostics.py:47
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:38
+msgid "Instance not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:272
+msgid "host and block_migration must be specified."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:284
+#, python-format
+msgid "Live migration of instance %(id)s to host %(host)s failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:76
+#, python-format
+msgid ""
+"Cannot create aggregate with name %(name)s and availability zone "
+"%(avail_zone)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:88
+#, python-format
+msgid "Cannot show aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:114
+#, python-format
+msgid "Cannot update aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:126
+#, python-format
+msgid "Cannot delete aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:139
+#, python-format
+msgid "Aggregates does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:152
+#: cinder/api/openstack/compute/contrib/aggregates.py:158
+#, python-format
+msgid "Cannot add host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:171
+#: cinder/api/openstack/compute/contrib/aggregates.py:175
+#, python-format
+msgid "Cannot remove host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:195
+#, python-format
+msgid "Cannot set metadata %(metadata)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/certificates.py:75
+msgid "Only root certificate can be retrieved."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/cloudpipe.py:146
+msgid ""
+"Unable to claim IP for VPN instances, ensure it isn't running, and try "
+"again in a few minutes"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:44
+msgid "Missing type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:56
+msgid "Invalid type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/disk_config.py:44
+#, python-format
+msgid "%s must be either 'MANUAL' or 'AUTO'."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/extended_server_attributes.py:77
+#: cinder/api/openstack/compute/contrib/extended_status.py:61
+msgid "Server not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:61
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:91
+msgid "Flavor not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:49
+#: cinder/api/openstack/compute/contrib/volumetypes.py:158
+msgid "No Request Body"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:159
+#, python-format
+msgid "No more floating ips in pool %s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:161
+msgid "No more floating ips available."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:201
+#: cinder/api/openstack/compute/contrib/floating_ips.py:230
+#: cinder/api/openstack/compute/contrib/security_groups.py:571
+#: cinder/api/openstack/compute/contrib/security_groups.py:604
+msgid "Missing parameter dict"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:204
+#: cinder/api/openstack/compute/contrib/floating_ips.py:233
+msgid "Address not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:213
+msgid "No fixed ips associated to instance"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:216
+msgid "Associate floating ip failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:144
+#, python-format
+msgid "Invalid status: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:148
+#, fuzzy, python-format
+msgid "Invalid mode: '%s'"
+msgstr "Backend inválido: %s"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:152
+#, python-format
+msgid "Invalid update setting: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:170
+#, python-format
+msgid "Putting host %(host)s in maintenance mode %(mode)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:181
+#, python-format
+msgid "Setting host %(host)s to %(state)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:230
+msgid "Describe-resource is admin only functionality"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:238
+msgid "Host not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:70
+msgid "Keypair name contains unsafe characters"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:95
+msgid "Keypair name must be between 1 and 255 characters long"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:100
+#, python-format
+msgid "Key pair '%s' already exists."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:52
+msgid "Missing 'networkId' argument for addFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:68
+msgid "Missing 'address' argument for removeFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:77
+#, python-format
+msgid "Unable to find address %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:62
+#, python-format
+msgid "Network does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:70
+#, python-format
+msgid "Disassociating network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:74
+#: cinder/api/openstack/compute/contrib/networks.py:91
+#: cinder/api/openstack/compute/contrib/networks.py:101
+msgid "Network not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:87
+#, python-format
+msgid "Showing network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:97
+#, python-format
+msgid "Deleting network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/scheduler_hints.py:41
+msgid "Malformed scheduler_hints attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:222
+msgid "Security group id should be integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:243
+#, fuzzy, python-format
+msgid "Security group is still in use"
+msgstr "Revogado entrada do grupo de segurança %s"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:295
+#, python-format
+msgid "Security group %s already exists"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:315
+#, python-format
+msgid "Security group %s is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:318
+#, python-format
+msgid "Security group %s cannot be empty."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:321
+#, python-format
+msgid "Security group %s should not be greater than 255 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:348
+msgid "Parent group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:351
+#, python-format
+msgid "Security group (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:369
+msgid "Not enough parameters to build a valid rule."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:376
+#, python-format
+msgid "This rule already exists in group %s"
+msgstr "Esta regra já existe no grupo %s"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:414
+msgid "Parent or group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:507
+msgid "Rule id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:510
+#, python-format
+msgid "Rule (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:574
+#: cinder/api/openstack/compute/contrib/security_groups.py:607
+msgid "Security group not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:578
+#: cinder/api/openstack/compute/contrib/security_groups.py:611
+msgid "Security group name cannot be empty"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:45
+#, python-format
+msgid "start instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:54
+#, python-format
+msgid "stop instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:73
+#: cinder/api/openstack/volume/volumes.py:106
+#, python-format
+msgid "vol=%s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:146
+#: cinder/api/openstack/volume/volumes.py:184
+#, python-format
+msgid "Delete volume with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:329
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(server_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:481
+#: cinder/api/openstack/volume/snapshots.py:110
+#, python-format
+msgid "Delete snapshot with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:524
+#: cinder/api/openstack/volume/snapshots.py:150
+#, python-format
+msgid "Create snapshot from volume %s"
+msgstr ""
+
+#: cinder/auth/fakeldap.py:33
+msgid "Attempted to instantiate singleton"
+msgstr "Tentativa de instanciar singleton"
+
+#: cinder/auth/ldapdriver.py:650
+#, python-format
+msgid ""
+"Attempted to remove the last member of a group. Deleting the group at %s "
+"instead."
+msgstr ""
+"Tentatica de remover o último membto de um grupo. Ao invés disso "
+"excluindo o grupo %s."
+
+#: cinder/auth/manager.py:298
+#, python-format
+msgid "Looking up user: %r"
+msgstr "Procurando usuário: %r"
+
+#: cinder/auth/manager.py:302
+#, python-format
+msgid "Failed authorization for access key %s"
+msgstr "Falha de autorização para chave de acesso %s"
+
+#: cinder/auth/manager.py:308
+#, python-format
+msgid "Using project name = user name (%s)"
+msgstr "Usando nome do projeto = nome do usuário (%s)"
+
+#: cinder/auth/manager.py:315
+#, python-format
+msgid "failed authorization: no project named %(pjid)s (user=%(uname)s)"
+msgstr ""
+
+#: cinder/auth/manager.py:324
+#, python-format
+msgid ""
+"Failed authorization: user %(uname)s not admin and not member of project "
+"%(pjname)s"
+msgstr ""
+
+#: cinder/auth/manager.py:331 cinder/auth/manager.py:343
+#, python-format
+msgid "user.secret: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:332 cinder/auth/manager.py:344
+#, python-format
+msgid "expected_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:333 cinder/auth/manager.py:345
+#, python-format
+msgid "signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:335 cinder/auth/manager.py:357
+#, python-format
+msgid "Invalid signature for user %s"
+msgstr "Assinatura inválida para usuário %s"
+
+#: cinder/auth/manager.py:353
+#, python-format
+msgid "host_only_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:449
+msgid "Must specify project"
+msgstr "Deve especificar projeto"
+
+#: cinder/auth/manager.py:490
+#, python-format
+msgid "Adding role %(role)s to user %(uid)s in project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:493
+#, python-format
+msgid "Adding sitewide role %(role)s to user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:519
+#, python-format
+msgid "Removing role %(role)s from user %(uid)s on project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:522
+#, python-format
+msgid "Removing sitewide role %(role)s from user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:595
+#, python-format
+msgid "Created project %(name)s with manager %(manager_user)s"
+msgstr ""
+
+#: cinder/auth/manager.py:613
+#, python-format
+msgid "modifying project %s"
+msgstr "modificando projeto %s"
+
+#: cinder/auth/manager.py:625
+#, python-format
+msgid "Adding user %(uid)s to project %(pid)s"
+msgstr "Adicionando usuário %(uid)s ao projeto %(pid)s"
+
+#: cinder/auth/manager.py:646
+#, python-format
+msgid "Remove user %(uid)s from project %(pid)s"
+msgstr "Remover usuário %(uid)s do projeto %(pid)s"
+
+#: cinder/auth/manager.py:676
+#, python-format
+msgid "Deleting project %s"
+msgstr "Excluindo projeto %s"
+
+#: cinder/auth/manager.py:734
+#, python-format
+msgid "Created user %(rvname)s (admin: %(rvadmin)r)"
+msgstr ""
+
+#: cinder/auth/manager.py:743
+#, python-format
+msgid "Deleting user %s"
+msgstr "Apagando usuário %s"
+
+#: cinder/auth/manager.py:753
+#, python-format
+msgid "Access Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:755
+#, python-format
+msgid "Secret Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:757
+#, python-format
+msgid "Admin status set to %(admin)r for user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:802
+#, python-format
+msgid "No vpn data for project %s"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:46
+#, fuzzy, python-format
+msgid "Instance type for vpn instances"
+msgstr "Obter saída do console para instância %s"
+
+#: cinder/cloudpipe/pipelib.py:49
+msgid "Template for cloudpipe instance boot script"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:52
+msgid "Network to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:55
+msgid "Netmask to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:107
+#, python-format
+msgid "Launching VPN for %s"
+msgstr "Executando VPN para %s"
+
+#: cinder/compute/api.py:141
+msgid "No compute host specified"
+msgstr ""
+
+#: cinder/compute/api.py:144
+#, python-format
+msgid "Unable to find host for Instance %s"
+msgstr ""
+
+#: cinder/compute/api.py:192
+#, python-format
+msgid ""
+"Quota exceeded for %(pid)s, tried to set %(num_metadata)s metadata "
+"properties"
+msgstr ""
+
+#: cinder/compute/api.py:203
+#, python-format
+msgid "Quota exceeded for %(pid)s, metadata property key or value too long"
+msgstr ""
+
+#: cinder/compute/api.py:257
+msgid "Cannot run any more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:259
+#, python-format
+msgid "Can only run %s more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:261
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances. "
+msgstr ""
+
+#: cinder/compute/api.py:310
+msgid "Creating a raw instance"
+msgstr ""
+
+#: cinder/compute/api.py:312
+#, python-format
+msgid "Using Kernel=%(kernel_id)s, Ramdisk=%(ramdisk_id)s"
+msgstr ""
+
+#: cinder/compute/api.py:383
+#, python-format
+msgid "Going to run %s instances..."
+msgstr ""
+
+#: cinder/compute/api.py:447
+#, python-format
+msgid "bdm %s"
+msgstr ""
+
+#: cinder/compute/api.py:474
+#, python-format
+msgid "block_device_mapping %s"
+msgstr ""
+
+#: cinder/compute/api.py:591
+#, python-format
+msgid "Sending create to scheduler for %(pid)s/%(uid)s's"
+msgstr ""
+
+#: cinder/compute/api.py:871
+#, fuzzy
+msgid "Going to try to soft delete instance"
+msgstr "Começando a terminar instâncias"
+
+#: cinder/compute/api.py:891
+msgid "No host for instance, deleting immediately"
+msgstr ""
+
+#: cinder/compute/api.py:939
+#, fuzzy
+msgid "Going to try to terminate instance"
+msgstr "Começando a terminar instâncias"
+
+#: cinder/compute/api.py:977
+msgid "Going to try to stop instance"
+msgstr ""
+
+#: cinder/compute/api.py:996
+#, fuzzy
+msgid "Going to try to start instance"
+msgstr "Começando a terminar instâncias"
+
+#: cinder/compute/api.py:1000
+#, python-format
+msgid "Instance %(instance_uuid)s is not stopped. (%(vm_state)s"
+msgstr ""
+
+#: cinder/compute/api.py:1071 cinder/volume/api.py:173
+#: cinder/volume/volume_types.py:64
+#, python-format
+msgid "Searching by: %s"
+msgstr ""
+
+#: cinder/compute/api.py:1201
+#, python-format
+msgid "Image type not recognized %s"
+msgstr ""
+
+#: cinder/compute/api.py:1369
+msgid "flavor_id is None. Assuming migration."
+msgstr ""
+
+#: cinder/compute/api.py:1377
+#, python-format
+msgid ""
+"Old instance type %(current_instance_type_name)s,  new instance type "
+"%(new_instance_type_name)s"
+msgstr ""
+
+#: cinder/compute/api.py:1644
+#, python-format
+msgid "multiple fixedips exist, using the first: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:57 cinder/compute/instance_types.py:65
+msgid "create arguments must be positive integers"
+msgstr ""
+
+#: cinder/compute/instance_types.py:76 cinder/volume/volume_types.py:41
+#, python-format
+msgid "DB error: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:86
+#, python-format
+msgid "Instance type %s not found for deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:138
+#, python-format
+msgid "check_instance_lock: decorating: |%s|"
+msgstr "check_instance_lock: decorating: |%s|"
+
+#: cinder/compute/manager.py:140
+#, python-format
+msgid ""
+"check_instance_lock: arguments: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+msgstr ""
+
+#: cinder/compute/manager.py:144
+#, python-format
+msgid "check_instance_lock: locked: |%s|"
+msgstr "check_instance_lock: locked: |%s|"
+
+#: cinder/compute/manager.py:146
+#, python-format
+msgid "check_instance_lock: admin: |%s|"
+msgstr "check_instance_lock: admin: |%s|"
+
+#: cinder/compute/manager.py:151
+#, python-format
+msgid "check_instance_lock: executing: |%s|"
+msgstr "check_instance_lock: executando: |%s|"
+
+#: cinder/compute/manager.py:155
+#, python-format
+msgid "check_instance_lock: not executing |%s|"
+msgstr "check_instance_lock: not executando |%s|"
+
+#: cinder/compute/manager.py:201
+#, python-format
+msgid "Unable to load the virtualization driver: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:223
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s has been destroyed from under us while trying "
+"to set it to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:240
+#, python-format
+msgid "Current state is %(drv_state)s, state in DB is %(db_state)s."
+msgstr ""
+
+#: cinder/compute/manager.py:245
+msgid "Rebooting instance after cinder-compute restart."
+msgstr ""
+
+#: cinder/compute/manager.py:255
+msgid "Hypervisor driver does not support firewall rules"
+msgstr ""
+
+#: cinder/compute/manager.py:260
+msgid "Checking state"
+msgstr ""
+
+#: cinder/compute/manager.py:329
+#, python-format
+msgid "Setting up bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:400
+#, python-format
+msgid "Instance %s already deleted from database. Attempting forceful vm deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:406
+#, python-format
+msgid "Exception encountered while terminating the instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:444
+#, python-format
+msgid "Instance %s not found."
+msgstr ""
+
+#: cinder/compute/manager.py:480
+msgid "Instance has already been created"
+msgstr "A instância já foi criada"
+
+#: cinder/compute/manager.py:523
+#, python-format
+msgid ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:528
+#, python-format
+msgid ""
+"Image '%(image_id)s' size %(size_bytes)d exceeded instance_type allowed "
+"size %(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:538
+msgid "Starting instance..."
+msgstr ""
+
+#: cinder/compute/manager.py:548
+msgid "Skipping network allocation for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:561
+msgid "Instance failed network setup"
+msgstr ""
+
+#: cinder/compute/manager.py:565
+#, python-format
+msgid "Instance network_info: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:578
+msgid "Instance failed block device setup"
+msgstr ""
+
+#: cinder/compute/manager.py:594
+msgid "Instance failed to spawn"
+msgstr ""
+
+#: cinder/compute/manager.py:615
+msgid "Deallocating network for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:672
+#, python-format
+msgid "%(action_str)s instance"
+msgstr ""
+
+#: cinder/compute/manager.py:699
+#, python-format
+msgid "Ignoring DiskNotFound: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:708
+#, python-format
+msgid "terminating bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:742 cinder/compute/manager.py:1328
+#: cinder/compute/manager.py:1416 cinder/compute/manager.py:2501
+#, python-format
+msgid "%s. Setting instance vm_state to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:811
+#, python-format
+msgid ""
+"Cannot rebuild instance [%(instance_uuid)s], because the given image does"
+" not exist."
+msgstr ""
+
+#: cinder/compute/manager.py:816
+#, python-format
+msgid "Cannot rebuild instance [%(instance_uuid)s]: %(exc)s"
+msgstr ""
+
+#: cinder/compute/manager.py:823
+#, python-format
+msgid "Rebuilding instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:876
+#, python-format
+msgid "Rebooting instance %s"
+msgstr "Reiniciando a instância %s"
+
+#: cinder/compute/manager.py:891
+#, python-format
+msgid ""
+"trying to reboot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:933
+#, python-format
+msgid "instance %s: snapshotting"
+msgstr "instância %s: fazendo um snapshot"
+
+#: cinder/compute/manager.py:939
+#, python-format
+msgid ""
+"trying to snapshot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:995
+#, python-format
+msgid "Found %(num_images)d images (rotation: %(rotation)d)"
+msgstr ""
+
+#: cinder/compute/manager.py:1001
+#, python-format
+msgid "Rotating out %d backups"
+msgstr ""
+
+#: cinder/compute/manager.py:1005
+#, python-format
+msgid "Deleting image %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1035
+#, python-format
+msgid "Failed to set admin password. Instance %s is not running"
+msgstr ""
+
+#: cinder/compute/manager.py:1041
+#, python-format
+msgid "Instance %s: Root password set"
+msgstr ""
+
+#: cinder/compute/manager.py:1050
+msgid "set_admin_password is not implemented by this driver."
+msgstr ""
+
+#: cinder/compute/manager.py:1064
+msgid "Error setting admin password"
+msgstr ""
+
+#: cinder/compute/manager.py:1079
+#, python-format
+msgid ""
+"trying to inject a file into a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1084
+#, python-format
+msgid "instance %(instance_uuid)s: injecting file to %(path)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1098
+#, python-format
+msgid ""
+"trying to update agent on a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1103
+#, python-format
+msgid "instance %(instance_uuid)s: updating agent to %(url)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1116
+#, python-format
+msgid "instance %s: rescuing"
+msgstr "instância %s: resgatando"
+
+#: cinder/compute/manager.py:1141
+#, python-format
+msgid "instance %s: unrescuing"
+msgstr "instância %s: desfazendo o resgate"
+
+#: cinder/compute/manager.py:1270
+msgid "destination same as source!"
+msgstr ""
+
+#: cinder/compute/manager.py:1287
+#, python-format
+msgid "instance %s: migrating"
+msgstr ""
+
+#: cinder/compute/manager.py:1471
+#, python-format
+msgid "instance %s: pausing"
+msgstr "instância %s: pausando"
+
+#: cinder/compute/manager.py:1489
+#, python-format
+msgid "instance %s: unpausing"
+msgstr "instância %s: saindo do pause"
+
+#: cinder/compute/manager.py:1525
+#, python-format
+msgid "instance %s: retrieving diagnostics"
+msgstr "instância %s: recuperando os diagnósticos"
+
+#: cinder/compute/manager.py:1534
+#, python-format
+msgid "instance %s: suspending"
+msgstr "instância %s: suspendendo"
+
+#: cinder/compute/manager.py:1556
+#, python-format
+msgid "instance %s: resuming"
+msgstr "instância %s: resumindo"
+
+#: cinder/compute/manager.py:1579
+#, python-format
+msgid "instance %s: locking"
+msgstr "instância %s: bloqueando"
+
+#: cinder/compute/manager.py:1588
+#, python-format
+msgid "instance %s: unlocking"
+msgstr "instância %s: desbloqueando"
+
+#: cinder/compute/manager.py:1596
+#, python-format
+msgid "instance %s: getting locked state"
+msgstr "instância %s: obtendo estado de bloqueio"
+
+#: cinder/compute/manager.py:1606
+#, python-format
+msgid "instance %s: reset network"
+msgstr "instância %s: reset da rede"
+
+#: cinder/compute/manager.py:1614
+#, python-format
+msgid "instance %s: inject network info"
+msgstr ""
+
+#: cinder/compute/manager.py:1618
+#, python-format
+msgid "network_info to inject: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:1655
+#, python-format
+msgid "instance %s: getting vnc console"
+msgstr ""
+
+#: cinder/compute/manager.py:1685
+#, python-format
+msgid "Booting with volume %(volume_id)s at %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1703
+#, python-format
+msgid ""
+"instance %(instance_uuid)s: attaching volume %(volume_id)s to "
+"%(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1705
+#, python-format
+msgid "Attaching volume %(volume_id)s to %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1714
+#, python-format
+msgid "instance %(instance_uuid)s: attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1724
+#, python-format
+msgid "Attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1752
+#, python-format
+msgid "Detach volume %(volume_id)s from mountpoint %(mp)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1756
+#, python-format
+msgid "Detaching volume from unknown instance %s"
+msgstr "Desconectando volume da instância desconhecida %s"
+
+#: cinder/compute/manager.py:1822
+#, python-format
+msgid ""
+"Creating tmpfile %s to notify to other compute nodes that they should "
+"mount the same storage."
+msgstr ""
+
+#: cinder/compute/manager.py:1884
+msgid "Instance has no volume."
+msgstr ""
+
+#: cinder/compute/manager.py:1916
+#, python-format
+msgid "plug_vifs() failed %(cnt)d.Retry up to %(max_retry)d for %(hostname)s."
+msgstr ""
+
+#: cinder/compute/manager.py:1973
+#, python-format
+msgid "Pre live migration failed at  %(dest)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2000
+msgid "post_live_migration() is started.."
+msgstr ""
+
+#: cinder/compute/manager.py:2030
+msgid "No floating_ip found"
+msgstr ""
+
+#: cinder/compute/manager.py:2038
+msgid "No floating_ip found."
+msgstr ""
+
+#: cinder/compute/manager.py:2040
+#, python-format
+msgid ""
+"Live migration: Unexpected error: cannot inherit floating ip.\n"
+"%(e)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2073
+#, python-format
+msgid "Migrating instance to %(dest)s finished successfully."
+msgstr ""
+
+#: cinder/compute/manager.py:2075
+msgid ""
+"You may see the error \"libvirt: QEMU error: Domain not found: no domain "
+"with matching name.\" This error can be safely ignored."
+msgstr ""
+
+#: cinder/compute/manager.py:2090
+msgid "Post operation of migraton started"
+msgstr ""
+
+#: cinder/compute/manager.py:2226
+#, python-format
+msgid "Updated the info_cache for instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:2255
+msgid "Updating bandwidth usage cache"
+msgstr ""
+
+#: cinder/compute/manager.py:2277
+msgid "Updating host status"
+msgstr ""
+
+#: cinder/compute/manager.py:2305
+#, python-format
+msgid ""
+"Found %(num_db_instances)s in the database and %(num_vm_instances)s on "
+"the hypervisor."
+msgstr ""
+
+#: cinder/compute/manager.py:2331
+#, python-format
+msgid ""
+"During the sync_power process the instance %(uuid)s has moved from host "
+"%(src)s to host %(dst)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2344
+#, python-format
+msgid ""
+"Instance %s is in the process of migrating to this host. Wait next "
+"sync_power cycle before setting power state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2350
+msgid ""
+"Instance found in database but not known by hypervisor. Setting power "
+"state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2380
+msgid "FLAGS.reclaim_instance_interval <= 0, skipping..."
+msgstr ""
+
+#: cinder/compute/manager.py:2392
+msgid "Reclaiming deleted instance"
+msgstr ""
+
+#: cinder/compute/manager.py:2458
+#, python-format
+msgid ""
+"Detected instance with name label '%(name)s' which is marked as DELETED "
+"but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2465
+#, python-format
+msgid ""
+"Destroying instance with name label '%(name)s' which is marked as DELETED"
+" but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2472
+#, python-format
+msgid "Unrecognized value '%(action)s' for FLAGS.running_deleted_instance_action"
+msgstr ""
+
+#: cinder/compute/manager.py:2542
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: unrecoverable state during operation on "
+"%(host)s"
+msgstr ""
+
+#: cinder/compute/utils.py:142
+msgid "v4 subnets are required for legacy nw_info"
+msgstr ""
+
+#: cinder/console/manager.py:77 cinder/console/vmrc_manager.py:70
+msgid "Adding console"
+msgstr "Adicionando console"
+
+#: cinder/console/manager.py:97
+#, python-format
+msgid "Tried to remove non-existant console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:122
+#, python-format
+msgid "Tried to remove non-existent console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:125
+#, python-format
+msgid "Removing console %(console_id)s."
+msgstr ""
+
+#: cinder/console/xvp.py:98
+msgid "Rebuilding xvp conf"
+msgstr ""
+
+#: cinder/console/xvp.py:116
+#, python-format
+msgid "Re-wrote %s"
+msgstr ""
+
+#: cinder/console/xvp.py:121
+msgid "Stopping xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:134
+msgid "Starting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:141
+#, python-format
+msgid "Error starting xvp: %s"
+msgstr ""
+
+#: cinder/console/xvp.py:144
+msgid "Restarting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:146
+msgid "xvp not running..."
+msgstr ""
+
+#: cinder/consoleauth/manager.py:63
+#, python-format
+msgid "Deleting Expired Token: (%s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:75
+#, python-format
+msgid "Received Token: %(token)s, %(token_dict)s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:79
+#, python-format
+msgid "Checking Token: %(token)s, %(token_valid)s)"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:57
+msgid "Use of empty request context is deprecated"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:198
+#, python-format
+msgid "Unrecognized read_deleted value '%s'"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:516 cinder/db/sqlalchemy/api.py:551
+#, python-format
+msgid "No ComputeNode for %(host)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4019 cinder/db/sqlalchemy/api.py:4045
+#, python-format
+msgid "No backend config with id %(sm_backend_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4103
+#, python-format
+msgid "No sm_flavor called %(sm_flavor)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4147
+#, python-format
+msgid "No sm_volume with id %(volume_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:66
+msgid "python-migrate is not installed. Exiting."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:78
+msgid "version should be an integer"
+msgstr ""
+
+#: cinder/db/sqlalchemy/session.py:137
+#, python-format
+msgid "SQL connection failed. %s attempts left."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:48
+msgid "interface column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:80
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:54
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:48
+#, python-format
+msgid "Table |%s| not created!"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:87
+msgid "VIF column not added to fixed_ips table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:97
+#, python-format
+msgid "join list for moving mac_addresses |%s|"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:39
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:60
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:99
+msgid "foreign key constraint couldn't be added"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:58
+msgid "foreign key constraint couldn't be dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py:34
+msgid "priority column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:41
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:42
+#: cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py:56
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:68
+msgid "foreign key constraint couldn't be removed"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py:34
+msgid "progress column not added to instances table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py:97
+#, python-format
+msgid ""
+"Could not cast flavorid to integer: %s. Set flavorid to an integer-like "
+"string to downgrade."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:69
+msgid "instance_info_caches tables not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py:41
+msgid "progress column not added to compute_nodes table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:76
+msgid "dns_domains table not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:60
+msgid "quota_classes table not dropped"
+msgstr ""
+
+#: cinder/image/glance.py:147
+msgid "Connection error contacting glance server, retrying"
+msgstr ""
+
+#: cinder/image/glance.py:153 cinder/network/quantum/melange_connection.py:104
+msgid "Maximum attempts reached"
+msgstr ""
+
+#: cinder/image/glance.py:278
+#, python-format
+msgid "Creating image in Glance. Metadata passed in %s"
+msgstr ""
+
+#: cinder/image/glance.py:281
+#, python-format
+msgid "Metadata after formatting for Glance %s"
+msgstr ""
+
+#: cinder/image/glance.py:289
+#, python-format
+msgid "Metadata returned from Glance formatted for Base %s"
+msgstr ""
+
+#: cinder/image/glance.py:331 cinder/image/glance.py:335
+msgid "Not the image owner"
+msgstr ""
+
+#: cinder/image/glance.py:410
+#, python-format
+msgid "%(timestamp)s does not follow any of the signatures: %(iso_formats)s"
+msgstr ""
+
+#: cinder/image/s3.py:309
+#, python-format
+msgid "Failed to download %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:328
+#, python-format
+msgid "Failed to decrypt %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:340
+#, python-format
+msgid "Failed to untar %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:353
+#, python-format
+msgid "Failed to upload %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:379
+#, python-format
+msgid "Failed to decrypt private key: %s"
+msgstr ""
+
+#: cinder/image/s3.py:387
+#, python-format
+msgid "Failed to decrypt initialization vector: %s"
+msgstr ""
+
+#: cinder/image/s3.py:398
+#, python-format
+msgid "Failed to decrypt image file %(image_file)s: %(err)s"
+msgstr ""
+
+#: cinder/image/s3.py:410
+msgid "Unsafe filenames in image"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:38 cinder/ipv6/rfc2462.py:34
+#, python-format
+msgid "Bad mac for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:40 cinder/ipv6/rfc2462.py:36
+#, python-format
+msgid "Bad prefix for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:42
+#, python-format
+msgid "Bad project_id for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/network/ldapdns.py:321
+msgid "This driver only supports type 'a' entries."
+msgstr ""
+
+#: cinder/network/linux_net.py:166
+#, python-format
+msgid "Attempted to remove chain %s which does not exist"
+msgstr ""
+
+#: cinder/network/linux_net.py:192
+#, python-format
+msgid "Unknown chain: %r"
+msgstr ""
+
+#: cinder/network/linux_net.py:215
+#, python-format
+msgid ""
+"Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r "
+"%(top)r"
+msgstr ""
+
+#: cinder/network/linux_net.py:335
+msgid "IPTablesManager.apply completed with success"
+msgstr ""
+
+#: cinder/network/linux_net.py:694
+#, python-format
+msgid "Hupping dnsmasq threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:696
+#, python-format
+msgid "Pid %d is stale, relaunching dnsmasq"
+msgstr "Pid %d está ultrapassado, reiniciando dnsmasq"
+
+#: cinder/network/linux_net.py:756
+#, python-format
+msgid "killing radvd threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:758
+#, python-format
+msgid "Pid %d is stale, relaunching radvd"
+msgstr "Pid %d está ultrapassado, reiniciando radvd"
+
+#: cinder/network/linux_net.py:967
+#, python-format
+msgid "Starting VLAN inteface %s"
+msgstr "Iniciando a VLAN %s"
+
+#: cinder/network/linux_net.py:999
+#, python-format
+msgid "Starting Bridge interface for %s"
+msgstr "Iniciando a Bridge para %s"
+
+#: cinder/network/linux_net.py:1142
+#, fuzzy, python-format
+msgid "Starting bridge %s "
+msgstr "Iniciando a Bridge para %s"
+
+#: cinder/network/linux_net.py:1149
+#, fuzzy, python-format
+msgid "Done starting bridge %s"
+msgstr "Removendo o registro da imagem %s"
+
+#: cinder/network/linux_net.py:1167
+#, python-format
+msgid "Failed unplugging gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/linux_net.py:1170
+#, python-format
+msgid "Unplugged gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/manager.py:291
+#, python-format
+msgid "Fixed ip %(fixed_ip_id)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:300 cinder/network/manager.py:496
+#, python-format
+msgid "Interface %(interface)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:315
+#, python-format
+msgid "floating IP allocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:353
+#, python-format
+msgid "floating IP deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:386
+#, python-format
+msgid "Address |%(address)s| is not allocated"
+msgstr ""
+
+#: cinder/network/manager.py:390
+#, python-format
+msgid "Address |%(address)s| is not allocated to your project |%(project)s|"
+msgstr ""
+
+#: cinder/network/manager.py:402
+#, python-format
+msgid "Quota exceeded for %s, tried to allocate address"
+msgstr ""
+
+#: cinder/network/manager.py:614
+#, python-format
+msgid ""
+"Database inconsistency: DNS domain |%s| is registered in the Cinder db but "
+"not visible to either the floating or instance DNS driver. It will be "
+"ignored."
+msgstr ""
+
+#: cinder/network/manager.py:660
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing zone to |%(av_zone)s|."
+msgstr ""
+
+#: cinder/network/manager.py:670
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing project to |%(project)s|."
+msgstr ""
+
+#: cinder/network/manager.py:778
+#, python-format
+msgid "Disassociated %s stale fixed ip(s)"
+msgstr ""
+
+#: cinder/network/manager.py:782
+msgid "setting network host"
+msgstr ""
+
+#: cinder/network/manager.py:896
+#, python-format
+msgid "network allocations for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:901
+#, python-format
+msgid "networks retrieved for instance |%(instance_id)s|: |%(networks)s|"
+msgstr ""
+
+#: cinder/network/manager.py:930
+#, python-format
+msgid "network deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:1152
+#, python-format
+msgid ""
+"instance-dns-zone is |%(domain)s|, which is in availability zone "
+"|%(zone)s|. Instance |%(instance)s| is in zone |%(zone2)s|. No DNS record"
+" will be created."
+msgstr ""
+
+#: cinder/network/manager.py:1227
+#, python-format
+msgid "Unable to release %s because vif doesn't exist."
+msgstr ""
+
+#: cinder/network/manager.py:1244
+#, python-format
+msgid "Leased IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1248
+#, python-format
+msgid "IP %s leased that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1256
+#, python-format
+msgid "IP |%s| leased that isn't allocated"
+msgstr ""
+
+#: cinder/network/manager.py:1261
+#, python-format
+msgid "Released IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1265
+#, python-format
+msgid "IP %s released that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1268
+#, python-format
+msgid "IP %s released that was not leased"
+msgstr ""
+
+#: cinder/network/manager.py:1331
+msgid "cidr already in use"
+msgstr ""
+
+#: cinder/network/manager.py:1334
+#, python-format
+msgid "requested cidr (%(cidr)s) conflicts with existing supernet (%(super)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1345
+#, python-format
+msgid ""
+"requested cidr (%(cidr)s) conflicts with existing smaller cidr "
+"(%(smaller)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1404
+msgid "Network already exists!"
+msgstr ""
+
+#: cinder/network/manager.py:1423
+#, python-format
+msgid "Network must be disassociated from project %s before delete"
+msgstr ""
+
+#: cinder/network/manager.py:1832
+msgid ""
+"The sum between the number of networks and the vlan start cannot be "
+"greater than 4094"
+msgstr ""
+
+#: cinder/network/manager.py:1839
+#, python-format
+msgid ""
+"The network range is not big enough to fit %(num_networks)s. Network size"
+" is %(network_size)s"
+msgstr ""
+
+#: cinder/network/minidns.py:65
+msgid "This driver only supports type 'a'"
+msgstr ""
+
+#: cinder/network/quantum/client.py:154
+msgid "Tenant ID not set"
+msgstr ""
+
+#: cinder/network/quantum/client.py:180
+#, python-format
+msgid "Quantum Client Request: %(method)s %(action)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:196
+#, python-format
+msgid "Quantum entity not found: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:206
+#, python-format
+msgid "Server %(status_code)s error: %(data)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:210
+#, python-format
+msgid "Unable to connect to server. Got error: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:228
+#, python-format
+msgid "unable to deserialize object of type = '%s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:162
+msgid "QuantumManager does not use 'multi_host' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:166
+msgid "QuantumManager requires that only one network is created per call"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:176
+msgid "QuantumManager does not use 'vlan_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:182
+msgid "QuantumManager does not use 'vpn_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:186
+msgid "QuantumManager does not use 'bridge' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:190
+msgid "QuantumManager does not use 'bridge_interface' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:195
+msgid "QuantumManager requires a valid (.1) gateway address."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:204
+#, python-format
+msgid ""
+"Unable to find existing quantum network for tenant '%(q_tenant_id)s' with"
+" net-id '%(quantum_net_id)s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:301
+#, python-format
+msgid "network allocations for instance %s"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:588
+#, python-format
+msgid ""
+"port deallocation failed for instance: |%(instance_id)s|, port_id: "
+"|%(port_id)s|"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:606
+#, python-format
+msgid ""
+"ipam deallocation failed for instance: |%(instance_id)s|, vif_uuid: "
+"|%(vif_uuid)s|"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:96
+#, python-format
+msgid "Server returned error: %s"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:98
+msgid "Connection error contacting melange service, retrying"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:108
+#, python-format
+msgid ""
+"allocate IP on network |%(network_id)s| belonging to "
+"|%(network_tenant_id)s| to this vif |%(vif_id)s| with mac "
+"|%(mac_address)s| belonging to |%(project_id)s| "
+msgstr ""
+
+#: cinder/network/quantum/melange_ipam_lib.py:133
+msgid "get_project_and_global_net_ids must be called with a non-null project_id"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:75
+msgid "Error creating network entry"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:90
+#, python-format
+msgid "No network with net_id = %s"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:221
+#, python-format
+msgid "No fixed IPs to deallocate for vif %s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:99
+#, python-format
+msgid "Connecting interface %(interface_id)s to net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:113
+#, python-format
+msgid "Deleting port %(port_id)s on net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/notifier/api.py:115
+#, python-format
+msgid "%s not in valid priorities"
+msgstr ""
+
+#: cinder/notifier/api.py:130
+#, python-format
+msgid ""
+"Problem '%(e)s' attempting to send to notification system. "
+"Payload=%(payload)s"
+msgstr ""
+
+#: cinder/notifier/list_notifier.py:65
+#, python-format
+msgid "Problem '%(e)s' attempting to send to notification driver %(driver)s."
+msgstr ""
+
+#: cinder/notifier/rabbit_notifier.py:46
+#, python-format
+msgid "Could not send notification to %(topic)s. Payload=%(message)s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:146
+#, python-format
+msgid "Returning exception %s to caller"
+msgstr "Retornando exceção %s ao método de origem"
+
+#: cinder/rpc/amqp.py:188
+#, python-format
+msgid "unpacked context: %s"
+msgstr "conteúdo descompactado: %s"
+
+#: cinder/rpc/amqp.py:231
+#, python-format
+msgid "received %s"
+msgstr "recebido %s"
+
+#: cinder/rpc/amqp.py:236
+#, python-format
+msgid "no method for message: %s"
+msgstr "sem método para mensagem: %s"
+
+#: cinder/rpc/amqp.py:237
+#, python-format
+msgid "No method for message: %s"
+msgstr "Sem método para mensagem: %s"
+
+#: cinder/rpc/amqp.py:321
+#, python-format
+msgid "Making asynchronous call on %s ..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:324
+#, python-format
+msgid "MSG_ID is %s"
+msgstr "MSG_ID é %s"
+
+#: cinder/rpc/amqp.py:346
+#, python-format
+msgid "Making asynchronous cast on %s..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:354
+msgid "Making asynchronous fanout cast..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:379
+#, python-format
+msgid "Sending notification on %s..."
+msgstr ""
+
+#: cinder/rpc/common.py:54
+#, python-format
+msgid ""
+"Remote error: %(exc_type)s %(value)s\n"
+"%(traceback)s."
+msgstr ""
+
+#: cinder/rpc/common.py:71
+msgid "Timeout while waiting on RPC response."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:111
+msgid "Failed to process message... skipping it."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:407
+#, python-format
+msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:430
+#, python-format
+msgid "Connected to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:466
+#, python-format
+msgid ""
+"Unable to connect to AMQP server on %(hostname)s:%(port)d after "
+"%(max_retries)d tries: %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:482
+#, python-format
+msgid ""
+"AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying "
+"again in %(sleep_time)d seconds."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:533 cinder/rpc/impl_qpid.py:385
+#, python-format
+msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:551 cinder/rpc/impl_qpid.py:400
+#, python-format
+msgid "Timed out waiting for RPC response: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:555 cinder/rpc/impl_qpid.py:404
+#, python-format
+msgid "Failed to consume message from queue: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:589 cinder/rpc/impl_qpid.py:434
+#, python-format
+msgid "Failed to publish message to topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:341
+#, python-format
+msgid "Unable to connect to AMQP server: %s "
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:346
+#, python-format
+msgid "Connected to AMQP server on %s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:354
+msgid "Re-established AMQP queues"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:412
+msgid "Error processing message.  Skipping it."
+msgstr ""
+
+#: cinder/scheduler/chance.py:47 cinder/scheduler/simple.py:91
+#: cinder/scheduler/simple.py:143
+msgid "Is the appropriate service running?"
+msgstr ""
+
+#: cinder/scheduler/chance.py:52
+msgid "Could not find another compute"
+msgstr ""
+
+#: cinder/scheduler/driver.py:63
+#, python-format
+msgid "Casted '%(method)s' to volume '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:80
+#, python-format
+msgid "Casted '%(method)s' to compute '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:89
+#, python-format
+msgid "Casted '%(method)s' to network '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:107
+#, python-format
+msgid "Casted '%(method)s' to %(topic)s '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:181
+msgid "Must implement a fallback schedule"
+msgstr ""
+
+#: cinder/scheduler/driver.py:185
+msgid "Driver must implement schedule_prep_resize"
+msgstr ""
+
+#: cinder/scheduler/driver.py:190
+msgid "Driver must implement schedule_run_instance"
+msgstr ""
+
+#: cinder/scheduler/driver.py:325
+msgid "Block migration can not be used with shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:330
+msgid "Live migration can not be used without shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:367 cinder/scheduler/driver.py:457
+#, python-format
+msgid "host %(dest)s is not compatible with original host %(src)s."
+msgstr ""
+
+#: cinder/scheduler/driver.py:416
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"memory(host:%(avail)s <= instance:%(mem_inst)s)"
+msgstr ""
+
+#: cinder/scheduler/driver.py:472
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"disk(host:%(available)s <= instance:%(necessary)s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:51
+#, python-format
+msgid "No host selection for %s defined."
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:64
+#, python-format
+msgid "Attempting to build %(num_instances)d instance(s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:157
+msgid "Scheduler only understands Compute nodes (for now)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:199
+#, python-format
+msgid "Filtered %(hosts)s"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:209
+#, python-format
+msgid "Weighted %(weighted_host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:144
+#, python-format
+msgid "Host filter fails for ignored host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:151
+#, python-format
+msgid "Host filter fails for non-forced host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:157
+#, python-format
+msgid "Host filter function %(func)s failed for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:163
+#, python-format
+msgid "Host filter passes for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:272
+#, python-format
+msgid "Received %(service_name)s service update from %(host)s."
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:313
+msgid "host_manager only implemented for 'compute'"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:323
+#, python-format
+msgid "No service for compute ID %s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:85
+#, python-format
+msgid ""
+"Driver Method %(driver_method_name)s missing: %(e)s. Reverting to "
+"schedule()"
+msgstr ""
+
+#: cinder/scheduler/manager.py:150
+#, python-format
+msgid "Failed to schedule_%(method)s: %(ex)s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:159
+#, python-format
+msgid "Setting instance %(instance_uuid)s to %(state)s state."
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:66
+#, python-format
+msgid "Could not stat scheduler options file %(filename)s: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:75
+#, python-format
+msgid "Could not decode scheduler options: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/simple.py:87
+msgid "Not enough allocatable CPU cores remaining"
+msgstr ""
+
+#: cinder/scheduler/simple.py:137
+msgid "Not enough allocatable volume gigabytes remaining"
+msgstr ""
+
+#: cinder/scheduler/filters/core_filter.py:45
+msgid "VCPUs not set; assuming CPU collection broken"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:72
+#, python-format
+msgid "Faking execution of cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:80
+#, python-format
+msgid "Faked command matched %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:96
+#, python-format
+msgid "Faked command raised an exception %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:101
+#, python-format
+msgid "Reply to faked command is stdout='%(stdout)s' stderr='%(stderr)s'"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:784
+msgid "Please extend mock libvirt module to support flags"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:790
+msgid "Please extend fake libvirt module to support this auth method"
+msgstr ""
+
+#: cinder/tests/test_compute.py:365 cinder/tests/test_compute.py:1419
+#, python-format
+msgid "Running instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:371
+#, python-format
+msgid "After terminating instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:589
+msgid "Internal error"
+msgstr ""
+
+#: cinder/tests/test_compute.py:1430
+#, python-format
+msgid "After force-killing instances: %s"
+msgstr ""
+
+#: cinder/tests/test_misc.py:92
+#, python-format
+msgid ""
+"The following migrations are missing a downgrade:\n"
+"\t%s"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:169
+msgid "id"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:170
+msgid "IPv4"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:171
+msgid "IPv6"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:172
+msgid "start address"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:173
+msgid "DNS1"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:174
+msgid "DNS2"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:175
+msgid "VlanID"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:176
+msgid "project"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:177
+msgid "uuid"
+msgstr ""
+
+#: cinder/tests/test_volume.py:216
+#, python-format
+msgid "Target %s allocated"
+msgstr ""
+
+#: cinder/tests/test_volume.py:468
+#, python-format
+msgid "Cannot confirm exported volume id:%s."
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:58
+#, python-format
+msgid "Given data: %s"
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:59
+#, python-format
+msgid "Result data: %s"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:626
+#, python-format
+msgid "Creating files in %s to simulate guest agent"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:637
+#, python-format
+msgid "Removing simulated guest agent files in %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/test_servers.py:2144
+#, python-format
+msgid "Quota exceeded: code=%(code)s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:57
+#, python-format
+msgid "_create: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:66
+#, python-format
+msgid "_delete: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:75
+#, python-format
+msgid "_get: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:85
+#, python-format
+msgid "_get_all: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:125
+#, python-format
+msgid "test_snapshot_create: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:134
+#, python-format
+msgid "test_snapshot_create: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:156
+#, python-format
+msgid "test_snapshot_create_force: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:165
+#, python-format
+msgid "test_snapshot_create_force: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:205
+#, python-format
+msgid "test_snapshot_show: resp=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:231
+#, python-format
+msgid "test_snapshot_detail: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/integrated/test_login.py:31
+#, python-format
+msgid "flavor: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:38
+#, python-format
+msgid ""
+"%(message)s\n"
+"Status Code: %(_status)s\n"
+"Body: %(_body)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:47
+msgid "Authentication error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:55
+msgid "Authorization error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:63
+msgid "Item not found"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:105
+#, python-format
+msgid "Doing %(method)s on %(relative_url)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:107
+#, python-format
+msgid "Body: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:125
+#, python-format
+msgid "%(auth_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:151
+#, python-format
+msgid "%(relative_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:161
+msgid "Unexpected status code"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:168
+#, python-format
+msgid "Decoding JSON: %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:133
+#, python-format
+msgid "Nested received %(queue)s, %(value)s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:142
+#, python-format
+msgid "Nested return %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:160
+msgid "RPC backend does not support timeouts"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:227 cinder/tests/rpc/common.py:233
+#, python-format
+msgid "Received %s"
+msgstr ""
+
+#: cinder/virt/connection.py:85
+msgid "Failed to open connection to the hypervisor"
+msgstr "Falha ao abrir a conexão com o hypervisor"
+
+#: cinder/virt/fake.py:270 cinder/virt/xenapi_conn.py:396
+#: cinder/virt/baremetal/proxy.py:716 cinder/virt/libvirt/connection.py:2045
+#, python-format
+msgid "Compute_service record created for %s "
+msgstr ""
+
+#: cinder/virt/fake.py:273 cinder/virt/xenapi_conn.py:399
+#: cinder/virt/baremetal/proxy.py:720 cinder/virt/libvirt/connection.py:2048
+#, python-format
+msgid "Compute_service record updated for %s "
+msgstr ""
+
+#: cinder/virt/firewall.py:130
+#, python-format
+msgid "Attempted to unfilter instance %s which is not filtered"
+msgstr ""
+
+#: cinder/virt/firewall.py:137
+#, python-format
+msgid "Filters added to instance %s"
+msgstr ""
+
+#: cinder/virt/firewall.py:139
+msgid "Provider Firewall Rules refreshed"
+msgstr ""
+
+#: cinder/virt/firewall.py:291
+#, python-format
+msgid "Adding security group rule: %r"
+msgstr ""
+
+#: cinder/virt/firewall.py:403 cinder/virt/xenapi/firewall.py:87
+#, python-format
+msgid "Adding provider rule: %s"
+msgstr ""
+
+#: cinder/virt/images.py:86
+msgid "'qemu-img info' parsing failed."
+msgstr ""
+
+#: cinder/virt/images.py:92
+#, python-format
+msgid "fmt=%(fmt)s backed by: %(backing_file)s"
+msgstr ""
+
+#: cinder/virt/images.py:104
+#, python-format
+msgid "Converted to raw, but format is now %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:105
+msgid ""
+"Must specify vmwareapi_host_ip,vmwareapi_host_username and "
+"vmwareapi_host_password to useconnection_type=vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:276
+#, python-format
+msgid "In vmwareapi:_create_session, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:359
+#, python-format
+msgid "In vmwareapi:_call_method, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:398
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: success"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:404
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: error %(error_info)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:409
+#, python-format
+msgid "In vmwareapi:_poll_task, Got this error %s"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:140
+msgid ""
+"Must specify xenapi_connection_url, xenapi_connection_username "
+"(optionally), and xenapi_connection_password to use "
+"connection_type=xenapi"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:329 cinder/virt/libvirt/connection.py:472
+msgid "Could not determine iscsi initiator name"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:460
+msgid "Host startup on XenServer is not supported."
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:489
+msgid "Unable to log in to XenAPI (is the Dom0 disk full?)"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:527
+msgid "Host is member of a pool, but DB says otherwise"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:599 cinder/virt/xenapi_conn.py:612
+#, python-format
+msgid "Got exception: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:93
+msgid "No domains exist."
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:95
+#, python-format
+msgid "============= initial domains =========== : %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:99
+msgid "Building domain: to be removed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:103
+msgid "Not running domain: remove"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:111
+msgid "domain running on an unknown node: discarded"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:127
+#, python-format
+msgid "No such domain (%s)"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:134
+#, python-format
+msgid "Failed power down Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:143
+msgid "deactivate -> activate fails"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:153
+msgid "destroy_domain: no such domain"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:154
+#, python-format
+msgid "No such domain %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:161
+#, python-format
+msgid "Domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:163
+#, python-format
+msgid "Nodes: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:166
+#, python-format
+msgid "After storing domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:169
+msgid "deactivation/removing domain failed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:176
+msgid "===== Domain is being created ====="
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:179
+msgid "Same domain name already exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:181
+msgid "create_domain: before get_idle_node"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:198
+#, python-format
+msgid "Created new domain: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:213
+#, python-format
+msgid "Failed to boot Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:222
+msgid "No such domain exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:226
+#, python-format
+msgid "change_domain_state: to new state %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:233
+#, python-format
+msgid "Stored fake domains to the file: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:244
+msgid "domain does not exist"
+msgstr ""
+
+#: cinder/virt/baremetal/nodes.py:42
+#, python-format
+msgid "Unknown baremetal driver %(d)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:148
+#, python-format
+msgid "Error encountered when destroying instance '%(name)s': %(ex)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:162
+#, python-format
+msgid "instance %(instance_name)s: deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:189
+#, python-format
+msgid "instance %s: rebooted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:192
+msgid "_wait_for_reboot failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:222
+#, python-format
+msgid "instance %s: rescued"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:225
+msgid "_wait_for_rescue failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:242
+msgid "<============= spawn of baremetal =============>"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:255
+#, python-format
+msgid "instance %s: is building"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:260
+msgid "Key is injected but instance is not running yet"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:265
+#, python-format
+msgid "instance %s: booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:268
+#, python-format
+msgid "~~~~~~ current state = %s ~~~~~~"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:269
+#, python-format
+msgid "instance %s spawned successfully"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:272
+#, python-format
+msgid "instance %s:not booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:274
+msgid "Bremetal assignment is overcommitted."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:354
+#, python-format
+msgid "instance %s: Creating image"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:473
+#, python-format
+msgid "instance %(inst_name)s: injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:484
+#, python-format
+msgid ""
+"instance %(inst_name)s: ignoring error injecting data into image "
+"%(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:529
+#, python-format
+msgid "instance %s: starting toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:531
+#, python-format
+msgid "instance %s: finished toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:574 cinder/virt/libvirt/connection.py:1815
+msgid ""
+"Cannot get the number of cpu, because this function is not implemented "
+"for this platform. This error can be safely ignored for now."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:714
+#, python-format
+msgid "#### RLK: cpu_arch = %s "
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:746
+msgid "Updating!"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:773 cinder/virt/libvirt/connection.py:2609
+#: cinder/virt/xenapi/host.py:129
+msgid "Updating host stats"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:185
+msgid "free_node...."
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:216
+#, python-format
+msgid "deactivate_node is called for node_id = %(id)s node_ip = %(ip)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:221
+msgid "status of node is set to 0"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:232
+msgid "rootfs is already removed"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:264
+msgid "Before ping to the bare-metal node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:275
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is ready"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:279
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is not ready, out_msg=%(out_msg)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:292
+msgid "Noting to do for tilera nodes: vmlinux is in CF"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:316
+msgid "activate_node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:330
+msgid "Node is unknown error state."
+msgstr ""
+
+#: cinder/virt/disk/api.py:165
+msgid "no capable image handler configured"
+msgstr ""
+
+#: cinder/virt/disk/api.py:178
+#, python-format
+msgid "unknown disk image handler: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:189
+msgid "image already mounted"
+msgstr ""
+
+#: cinder/virt/disk/api.py:276 cinder/virt/disk/guestfs.py:64
+#: cinder/virt/disk/guestfs.py:78 cinder/virt/disk/mount.py:100
+#, python-format
+msgid "Failed to mount filesystem: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:291
+#, python-format
+msgid "Failed to remove container: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:441
+#, python-format
+msgid "User %(username)s not found in password file."
+msgstr ""
+
+#: cinder/virt/disk/api.py:457
+#, python-format
+msgid "User %(username)s not found in shadow file."
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:39
+#, python-format
+msgid "unsupported partition: %s"
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:77
+msgid "unknown guestmount error"
+msgstr ""
+
+#: cinder/virt/disk/loop.py:30
+#, python-format
+msgid "Could not attach image to loopback: %s"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:76
+msgid "no partitions found"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:77
+#, python-format
+msgid "Failed to map partitions: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:58
+msgid "nbd unavailable: module not loaded"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:63
+msgid "No free nbd devices"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:81
+#, python-format
+msgid "qemu-nbd error: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:93
+#, python-format
+msgid "nbd device %s did not show up"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:265
+#, python-format
+msgid "Connecting to libvirt: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:286
+msgid "Connection to libvirt broke"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:388
+#, python-format
+msgid "Error from libvirt during destroy. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:400
+#, python-format
+msgid ""
+"Error from libvirt during saved instance removal. Code=%(errcode)s "
+"Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:411
+#, python-format
+msgid "Error from libvirt during undefine. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:423
+msgid "Instance destroyed successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:435
+#, python-format
+msgid "Error from libvirt during unfilter. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:461
+#, python-format
+msgid "Deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:554
+msgid "attaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:567
+msgid "detaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:692
+#, fuzzy, python-format
+msgid "Instance soft rebooted successfully."
+msgstr "volume %s: criado com sucesso"
+
+#: cinder/virt/libvirt/connection.py:696
+msgid "Failed to soft reboot instance."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:725
+msgid "Instance shutdown successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:761 cinder/virt/libvirt/connection.py:905
+msgid "During reboot, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:766
+msgid "Instance rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:867 cinder/virt/xenapi/vmops.py:1358
+#, python-format
+msgid ""
+"Found %(migration_count)d unconfirmed migrations older than "
+"%(confirm_window)d seconds"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:871
+#, python-format
+msgid "Automatically confirming migration %d"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:896
+msgid "Instance is running"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:910
+msgid "Instance spawned successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:926
+#, python-format
+msgid "data: %(data)r, fpath: %(fpath)r"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:978
+msgid "Guest does not have a console available"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1020
+#, python-format
+msgid "Path '%(path)s' supports direct I/O"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1024
+#, python-format
+msgid "Path '%(path)s' does not support direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1028 cinder/virt/libvirt/connection.py:1032
+#, python-format
+msgid "Error on '%(path)s' while checking direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1153
+msgid "Creating image"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1339
+#, python-format
+msgid "Injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1349
+#, python-format
+msgid "Ignoring error injecting data into image %(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1381
+#, python-format
+msgid "block_device_list %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1658
+msgid "Starting toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1662
+msgid "Finished toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1679
+#, python-format
+msgid ""
+"Error from libvirt while looking up %(instance_name)s: [Error Code "
+"%(error_code)s] %(ex)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1920
+msgid "libvirt version is too old (does not support getVersion)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1942
+#, python-format
+msgid "'<cpu>' must be 1, but %d\n"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1969
+#, python-format
+msgid "topology (%(topology)s) must have %(ks)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2067
+#, python-format
+msgid ""
+"Instance launched has CPU info:\n"
+"%s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2079
+#, python-format
+msgid ""
+"CPU doesn't have compatibility.\n"
+"\n"
+"%(ret)s\n"
+"\n"
+"Refer to %(u)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2136
+#, python-format
+msgid "Timeout migrating for %s. nwfilter not found."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2352
+#, python-format
+msgid "skipping %(path)s since it looks like volume"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2407
+#, python-format
+msgid "Getting disk size of %(i_name)s: %(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2458
+#, python-format
+msgid "Instance %s: Starting migrate_disk_and_power_off"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2513
+msgid "During wait running, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2518
+msgid "Instance running successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2525
+#, python-format
+msgid "Instance %s: Starting finish_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2565
+#, python-format
+msgid "Instance %s: Starting finish_revert_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:42
+msgid ""
+"Libvirt module could not be loaded. NWFilterFirewall will not work "
+"correctly."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:93
+msgid "Called setup_basic_filtering in nwfilter"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:101
+msgid "Ensuring static filters"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:171
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:217
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) for%(name)s is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:233
+msgid "iptables firewall: Setup Basic Filtering"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:252
+msgid "Attempted to unfilter instance which is not filtered"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:170
+#, python-format
+msgid "%s is a valid instance name"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:173
+#, python-format
+msgid "%s has a disk file"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:175
+#, python-format
+msgid "Instance %(instance)s is backed by %(backing)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:186
+#, python-format
+msgid ""
+"Instance %(instance)s is using a backing file %(backing)s which does not "
+"appear in the image service"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:237
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification failed"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:247
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification skipped, no hash stored"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:266
+#, python-format
+msgid "Cannot remove %(base_file)s, it does not exist"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:278
+#, python-format
+msgid "Base file too young to remove: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:281
+#, python-format
+msgid "Removing base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:288
+#, python-format
+msgid "Failed to remove %(base_file)s, error was %(error)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:299
+#, python-format
+msgid "%(id)s (%(base_file)s): checking"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:318
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): in use: on this node %(local)d local, %(remote)d "
+"on other nodes"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:330
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): warning -- an absent base file is in use! "
+"instances: %(instance_list)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:338
+#, python-format
+msgid "%(id)s (%(base_file)s): in use on (%(remote)d on other nodes)"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:348
+#, python-format
+msgid "%(id)s (%(base_file)s): image is not in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:354
+#, python-format
+msgid "%(id)s (%(base_file)s): image is in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:377
+#, python-format
+msgid "Skipping verification, no base directory at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:381
+msgid "Verify base images"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:388
+#, python-format
+msgid "Image id %(id)s yields fingerprint %(fingerprint)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:406
+#, python-format
+msgid "Unknown base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:411
+#, python-format
+msgid "Active base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:414
+#, python-format
+msgid "Corrupt base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:418
+#, python-format
+msgid "Removable base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:426
+msgid "Verification complete"
+msgstr ""
+
+#: cinder/virt/libvirt/utils.py:264
+msgid "Unable to find an open port"
+msgstr "Impossível localizar uma porta aberta"
+
+#: cinder/virt/libvirt/vif.py:90
+#, python-format
+msgid "Ensuring vlan %(vlan)s and bridge %(bridge)s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:99
+#, python-format
+msgid "Ensuring bridge %s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:165 cinder/virt/libvirt/vif.py:220
+#, python-format
+msgid "Failed while unplugging vif of instance '%s'"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:163
+#, python-format
+msgid "iSCSI device not found at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:166
+#, python-format
+msgid ""
+"ISCSI volume not yet found at: %(mount_device)s. Will rescan & retry.  "
+"Try number: %(tries)s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:178
+#, python-format
+msgid "Found iSCSI node %(mount_device)s (after %(tries)s rescans)"
+msgstr ""
+
+#: cinder/virt/vmwareapi/error_util.py:93
+#, python-format
+msgid "Error(s) %s occurred in the call to RetrieveProperties"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:44 cinder/virt/xenapi/fake.py:77
+#, python-format
+msgid "%(text)s: _db_content => %(content)s"
+msgstr "%(text)s: _db_content => %(content)s"
+
+#: cinder/virt/vmwareapi/fake.py:131
+#, python-format
+msgid "Property %(attr)s not set for the managed object %(objName)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:437
+msgid "There is no VM registered"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:439 cinder/virt/vmwareapi/fake.py:609
+#, python-format
+msgid "Virtual Machine with ref %s is not there"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:502
+#, python-format
+msgid "Logging out a session that is invalid or already logged out: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:517
+msgid "Session is faulty"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:520
+msgid "Session Invalid"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:606
+msgid " No Virtual Machine has been registered yet"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:99
+#, python-format
+msgid "Glance image %s is in killed state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:107
+#, python-format
+msgid "Glance image %(image_id)s is in unknown state - %(state)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:128
+msgid ""
+"ESX SOAP server returned an empty port group for the host system in its "
+"response"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:155
+#, python-format
+msgid "Creating Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:169
+#, python-format
+msgid "Created Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/read_write_util.py:150
+#, python-format
+msgid "Exception during HTTP connection close in VMWareHTTpWrite. Exception is %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:84
+msgid "Unable to import suds."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:90
+msgid "Must specify vmwareapi_wsdl_loc"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:145
+#, python-format
+msgid "No such SOAP method '%s' provided by VI SDK"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:150
+#, python-format
+msgid "httplib error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:157
+#, python-format
+msgid "Socket error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:162
+#, python-format
+msgid "Type error in  %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:166
+#, python-format
+msgid "Exception in %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:66
+msgid "Getting list of instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:82
+#, python-format
+msgid "Got total of %s instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:126
+msgid "Couldn't get a local Datastore reference"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:196
+#, python-format
+msgid "Creating VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:205
+#, python-format
+msgid "Created VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:234
+#, python-format
+msgid ""
+"Creating Virtual Disk of size  %(vmdk_file_size_in_kb)s KB and adapter "
+"type  %(adapter_type)s on the ESX host local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:251
+#, python-format
+msgid ""
+"Created Virtual Disk of size %(vmdk_file_size_in_kb)s KB on the ESX host "
+"local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:260
+#, python-format
+msgid ""
+"Deleting the file %(flat_uploaded_vmdk_path)s on the ESX host localstore "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:272
+#, python-format
+msgid ""
+"Deleted the file %(flat_uploaded_vmdk_path)s on the ESX host local store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:283
+#, python-format
+msgid ""
+"Downloading image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:298
+#, python-format
+msgid ""
+"Downloaded image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:315
+#, python-format
+msgid "Reconfiguring VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:322
+#, python-format
+msgid "Reconfigured VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:329
+#, python-format
+msgid "Powering on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:335
+#, python-format
+msgid "Powered on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:381
+#, python-format
+msgid "Creating Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:391
+#, python-format
+msgid "Created Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:434
+#, python-format
+msgid "Copying disk data before snapshot of the VM  instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:447
+#, python-format
+msgid "Copied disk data before snapshot of the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:456
+#, python-format
+msgid "Uploading image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:469
+#, python-format
+msgid "Uploaded image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:479
+#, python-format
+msgid "Deleting temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:488
+#, python-format
+msgid "Deleted temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:520
+msgid "instance is not powered on"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:527
+#, python-format
+msgid "Rebooting guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:530
+#, python-format
+msgid "Rebooted guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:532
+#, python-format
+msgid "Doing hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:536
+#, python-format
+msgid "Did hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:548
+#, python-format
+msgid "instance - %s not present"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:567
+#, python-format
+msgid "Powering off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:572
+#, python-format
+msgid "Powered off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:576
+#, python-format
+msgid "Unregistering the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:579
+#, python-format
+msgid "Unregistered the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:581
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while un-registering the "
+"VM: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:592
+#, python-format
+msgid "Deleting contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:602
+#, python-format
+msgid "Deleted contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:607
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while deleting the VM "
+"contents from the disk: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:615
+msgid "pause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:619
+msgid "unpause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:633
+#, python-format
+msgid "Suspending the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:637
+#, python-format
+msgid "Suspended the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:640
+msgid "instance is powered off and can not be suspended."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:643
+#, python-format
+msgid "VM %s was already in suspended state. So returning without doing anything"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:656
+#, python-format
+msgid "Resuming the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:661
+#, python-format
+msgid "Resumed the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:663
+msgid "instance is not in a suspended state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:699
+msgid "get_diagnostics not implemented for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:757
+#, python-format
+msgid ""
+"Reconfiguring VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:765
+#, python-format
+msgid ""
+"Reconfigured VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:802
+#, python-format
+msgid "Creating directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:806
+#, python-format
+msgid "Created directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:89
+#, python-format
+msgid "Downloading image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:103
+#, python-format
+msgid "Downloaded image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:108
+#, python-format
+msgid "Uploading image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:129
+#, python-format
+msgid "Uploaded image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:139
+#, python-format
+msgid "Getting image size for the image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:143
+#, python-format
+msgid "Got image size of %(size)s for the image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:553 cinder/virt/xenapi/fake.py:652
+#: cinder/virt/xenapi/fake.py:670 cinder/virt/xenapi/fake.py:732
+msgid "Raising NotImplemented"
+msgstr "Aumento não implementado"
+
+#: cinder/virt/xenapi/fake.py:555
+#, python-format
+msgid "xenapi.fake does not have an implementation for %s"
+msgstr "xenapi.fake não tem uma implementação para %s"
+
+#: cinder/virt/xenapi/fake.py:589
+#, python-format
+msgid "Calling %(localname)s %(impl)s"
+msgstr "Chamando %(localname)s %(impl)s"
+
+#: cinder/virt/xenapi/fake.py:594
+#, python-format
+msgid "Calling getter %s"
+msgstr "Chamando o pai %s"
+
+#: cinder/virt/xenapi/fake.py:654
+#, python-format
+msgid ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+msgstr ""
+"xenapi.fake não tem implementação para %s ou foi chamado com um número de"
+" argumentos inválido"
+
+#: cinder/virt/xenapi/host.py:67
+#, python-format
+msgid ""
+"Instance %(name)s running on %(host)s could not be found in the database:"
+" assuming it is a worker VM and skipping migration to a new host"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:137
+#, python-format
+msgid "Unable to get SR for this host: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:169
+msgid "Unable to get updated status"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:172
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:37
+#, python-format
+msgid "Found non-unique network for name_label %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:55
+#, python-format
+msgid "Found non-unique network for bridge %s"
+msgstr "Encontrado múltiplas redes para a bridge %s"
+
+#: cinder/virt/xenapi/network_utils.py:58
+#, python-format
+msgid "Found no network for bridge %s"
+msgstr "Não foi encontrada rede para bridge %s"
+
+#: cinder/virt/xenapi/pool.py:111
+#, python-format
+msgid "Unable to eject %(host)s from the pool; pool not empty"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:126
+#, python-format
+msgid "Unable to eject %(host)s from the pool; No master found"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:143
+#, python-format
+msgid "Pool-Join failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:146
+#, python-format
+msgid "Unable to join %(host)s in the pool"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:162
+#, python-format
+msgid "Pool-eject failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:174
+#, fuzzy, python-format
+msgid "Unable to set up pool: %(e)s."
+msgstr "Não é possível desconectar o volume %s"
+
+#: cinder/virt/xenapi/pool.py:185
+#, python-format
+msgid "Pool-set_name_label failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:103
+#, python-format
+msgid "Found no PIF for device %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:122
+#, python-format
+msgid ""
+"PIF %(pif_rec['uuid'])s for network %(bridge)s has VLAN id %(pif_vlan)d. "
+"Expected %(vlan_num)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:218
+msgid "Created VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:245
+#, python-format
+msgid "VBD not found in instance %s"
+msgstr "O VBD não foi encontrado na instância %s"
+
+#: cinder/virt/xenapi/vm_utils.py:262
+#, fuzzy, python-format
+msgid "VBD %s already detached"
+msgstr "group %s já existe"
+
+#: cinder/virt/xenapi/vm_utils.py:265
+#, python-format
+msgid "VBD %(vbd_ref)s detach rejected, attempt %(num_attempt)d/%(max_attempts)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:270
+#, python-format
+msgid "Unable to unplug VBD %s"
+msgstr "Não é possível desconectar o VBD %s"
+
+#: cinder/virt/xenapi/vm_utils.py:275
+#, python-format
+msgid "Reached maximum number of retries trying to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:286
+#, python-format
+msgid "Unable to destroy VBD %s"
+msgstr "Não é possível destruir o VBD %s"
+
+#: cinder/virt/xenapi/vm_utils.py:305
+#, fuzzy, python-format
+msgid "Creating %(vbd_type)s-type VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+msgstr "VBD %(vbd_ref)s criado para VM %(vm_ref)s, VDI %(vdi_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:308
+#, python-format
+msgid "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+msgstr "VBD %(vbd_ref)s criado para VM %(vm_ref)s, VDI %(vdi_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:319
+#, python-format
+msgid "Unable to destroy VDI %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:336
+#, python-format
+msgid ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+msgstr ""
+"VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s) no SR "
+"%(sr_ref)s criada com sucesso."
+
+#: cinder/virt/xenapi/vm_utils.py:345
+#, python-format
+msgid "Copied VDI %(vdi_ref)s from VDI %(vdi_to_copy_ref)s on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:353
+#, python-format
+msgid "Cloned VDI %(vdi_ref)s from VDI %(vdi_to_clone_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:372
+#, python-format
+msgid "No primary VDI found for %(vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:379
+#, fuzzy, python-format
+msgid "Snapshotting with label '%(label)s'"
+msgstr "Fazendo um snapshot da VM %(vm_ref)s com rótulo '%(label)s'..."
+
+#: cinder/virt/xenapi/vm_utils.py:392
+#, fuzzy, python-format
+msgid "Created snapshot %(template_vm_ref)s"
+msgstr "Snapshot %(template_vm_ref)s criado a partir da VM %(vm_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:431
+#, python-format
+msgid "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+msgstr ""
+"Solicitando à xapi para realizar upload da imagem %(vdi_uuids)s com ID "
+"%(image_id)s"
+
+#: cinder/virt/xenapi/vm_utils.py:583
+#, python-format
+msgid "Creating blank HD of size %(req_size)d gigs"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:634
+#, python-format
+msgid ""
+"Fast cloning is only supported on default local SR of type ext. SR on "
+"this system was found to be of type %(sr_type)s. Ignoring the cow flag."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:724
+#, python-format
+msgid ""
+"download_vhd %(image)s attempt %(attempt_num)d/%(max_attempts)d from "
+"%(glance_host)s:%(glance_port)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:734
+#, python-format
+msgid "download_vhd failed: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:750
+#, python-format
+msgid "Asking xapi to fetch vhd image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:760
+#, python-format
+msgid ""
+"xapi 'download_vhd' returned VDI of type '%(vdi_type)s' with UUID "
+"'%(vdi_uuid)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:789
+#, python-format
+msgid "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:805
+#, python-format
+msgid "image_size_bytes=%(size_bytes)d, allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:809
+#, python-format
+msgid ""
+"Image size %(size_bytes)d exceeded instance_type allowed size "
+"%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:831
+#, python-format
+msgid "Fetching image %(image)s, type %(image_type_str)"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:844
+#, fuzzy, python-format
+msgid "Size for image %(image)s: %(virtual_size)d"
+msgstr "Tamanho da imagem %(image)s:%(virtual_size)d"
+
+#: cinder/virt/xenapi/vm_utils.py:853
+#, python-format
+msgid ""
+"Kernel/Ramdisk image is too large: %(vdi_size)d bytes, max %(max_size)d "
+"bytes"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:870
+#, python-format
+msgid "Copying VDI %s to /boot/guest on dom0"
+msgstr "Copiando o VDI %s de /boot/guest no dom0"
+
+#: cinder/virt/xenapi/vm_utils.py:884
+#, python-format
+msgid "Kernel/Ramdisk VDI %s destroyed"
+msgstr "Kernel/Ramdisk %s destruidos"
+
+#: cinder/virt/xenapi/vm_utils.py:895
+msgid "Failed to fetch glance image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:934
+#, python-format
+msgid "Detected %(image_type_str)s format for image %(image_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:955
+#, python-format
+msgid "Looking up vdi %s for PV kernel"
+msgstr "Verificando o vdi %s para kernel PV"
+
+#: cinder/virt/xenapi/vm_utils.py:973
+#, python-format
+msgid "Unknown image format %(disk_image_type)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1016
+#, python-format
+msgid "VDI %s is still available"
+msgstr "O VDI %s continua disponível"
+
+#: cinder/virt/xenapi/vm_utils.py:1059
+#, python-format
+msgid "(VM_UTILS) xenserver vm state -> |%s|"
+msgstr "(VM_UTILS) xenserver vm state -> |%s|"
+
+#: cinder/virt/xenapi/vm_utils.py:1061
+#, python-format
+msgid "(VM_UTILS) xenapi power_state -> |%s|"
+msgstr "(VM_UTILS) xenapi power_state -> |%s|"
+
+#: cinder/virt/xenapi/vm_utils.py:1088
+#, python-format
+msgid "Unable to parse rrd of %(vm_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1108
+#, python-format
+msgid "Re-scanning SR %s"
+msgstr "Re-escaneando SR %s"
+
+#: cinder/virt/xenapi/vm_utils.py:1136
+#, python-format
+msgid "Flag sr_matching_filter '%s' does not respect formatting convention"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1154
+msgid ""
+"XenAPI is unable to find a Storage Repository to install guest instances "
+"on. Please check your configuration and/or configure the flag "
+"'sr_matching_filter'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1167
+msgid "Cannot find SR of content-type ISO"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1175
+#, python-format
+msgid "ISO: looking at SR %(sr_rec)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1177
+msgid "ISO: not iso content"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1180
+msgid "ISO: iso content_type, no 'i18n-key' key"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1183
+msgid "ISO: iso content_type, i18n-key value not 'local-storage-iso'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1187
+msgid "ISO: SR MATCHing our criteria"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1189
+msgid "ISO: ISO, looking to see if it is host local"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1192
+#, python-format
+msgid "ISO: PBD %(pbd_ref)s disappeared"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1195
+#, python-format
+msgid "ISO: PBD matching, want %(pbd_rec)s, have %(host)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1198
+msgid "ISO: SR with local PBD"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1220
+#, python-format
+msgid ""
+"Unable to obtain RRD XML for VM %(vm_uuid)s with server details: "
+"%(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1236
+#, python-format
+msgid "Unable to obtain RRD XML updates with server details: %(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1290
+#, python-format
+msgid "Invalid statistics data from Xenserver: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1343
+#, python-format
+msgid "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+msgstr "O VHD %(vdi_uuid)s tem pai %(parent_ref)s"
+
+#: cinder/virt/xenapi/vm_utils.py:1417
+#, python-format
+msgid ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1427
+#, python-format
+msgid "VHD coalesce attempts exceeded (%(max_attempts)d), giving up..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1462
+#, python-format
+msgid "Timeout waiting for device %s to be created"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1473
+#, python-format
+msgid "Plugging VBD %s ... "
+msgstr "Conectando VBD %s ... "
+
+#: cinder/virt/xenapi/vm_utils.py:1476
+#, python-format
+msgid "Plugging VBD %s done."
+msgstr "O VDB %s foi conectado."
+
+#: cinder/virt/xenapi/vm_utils.py:1478
+#, python-format
+msgid "VBD %(vbd_ref)s plugged as %(orig_dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1481
+#, python-format
+msgid "VBD %(vbd_ref)s plugged into wrong dev, remapping to %(dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1490
+#, python-format
+msgid "Destroying VBD for VDI %s ... "
+msgstr "Destruindo VBD para o VDI %s ... "
+
+#: cinder/virt/xenapi/vm_utils.py:1498
+#, python-format
+msgid "Destroying VBD for VDI %s done."
+msgstr "O VBD para o VDI %s foi destruído."
+
+#: cinder/virt/xenapi/vm_utils.py:1511
+#, python-format
+msgid "Running pygrub against %s"
+msgstr "Rodando pygrub cindermente %s"
+
+#: cinder/virt/xenapi/vm_utils.py:1518
+#, python-format
+msgid "Found Xen kernel %s"
+msgstr "Kernel Xen encontrado: %s"
+
+#: cinder/virt/xenapi/vm_utils.py:1520
+msgid "No Xen kernel found.  Booting HVM."
+msgstr "Kernel Xen não encontrado. Iniciando como HVM."
+
+#: cinder/virt/xenapi/vm_utils.py:1533
+msgid "Partitions:"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1539
+#, python-format
+msgid "  %(num)s: %(ptype)s %(size)d sectors"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1565
+#, python-format
+msgid ""
+"Writing partition table %(primary_first)d %(primary_last)d to "
+"%(dev_path)s..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1578
+#, python-format
+msgid "Writing partition table %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1632
+#, python-format
+msgid ""
+"Starting sparse_copy src=%(src_path)s dst=%(dst_path)s "
+"virtual_size=%(virtual_size)d block_size=%(block_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1664
+#, python-format
+msgid ""
+"Finished sparse_copy in %(duration).2f secs, %(compression_pct).2f%% "
+"reduction in size"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1714
+msgid ""
+"XenServer tools installed in this image are capable of network injection."
+"  Networking files will not bemanipulated"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1722
+msgid ""
+"XenServer tools are present in this image but are not capable of network "
+"injection"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1726
+msgid "XenServer tools are not installed in this image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1742
+msgid "Manipulating interface files directly"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1751
+#, python-format
+msgid "Failed to mount filesystem (expected for non-linux instances): %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:131 cinder/virt/xenapi/vmops.py:722
+#, python-format
+msgid "Updating progress to %(progress)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:231
+#, python-format
+msgid "Attempted to power on non-existent instance bad instance id %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:233
+#, fuzzy, python-format
+msgid "Starting instance"
+msgstr "Reiniciando a instância %s"
+
+#: cinder/virt/xenapi/vmops.py:303
+msgid "Removing kernel/ramdisk files from dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:358
+msgid "Failed to spawn, rolling back"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:443
+msgid "Detected ISO image type, creating blank VM for install"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:462
+msgid "Auto configuring disk, attempting to resize partition..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:515
+#, python-format
+msgid "Invalid value for injected_files: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:520
+#, python-format
+msgid "Injecting file path: '%s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:527
+msgid "Setting admin password"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:531
+msgid "Resetting network"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:538
+msgid "Setting VCPU weight"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:544
+msgid "Starting VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:551
+#, python-format
+msgid ""
+"Latest agent build for %(hypervisor)s/%(os)s/%(architecture)s is "
+"%(version)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:554
+#, python-format
+msgid "No agent build found for %(hypervisor)s/%(os)s/%(architecture)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:561
+msgid "Waiting for instance state to become running"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:573
+msgid "Querying agent version"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:576
+#, python-format
+msgid "Instance agent version: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:581
+#, python-format
+msgid "Updating Agent to %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:616
+#, python-format
+msgid "No opaque_ref could be determined for '%s'."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:670
+msgid "Finished snapshot and upload for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:677
+msgid "Starting snapshot for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:686
+#, fuzzy, python-format
+msgid "Unable to Snapshot instance: %(exc)s"
+msgstr "Não é possível anexar o volume na instância %s"
+
+#: cinder/virt/xenapi/vmops.py:702
+msgid "Failed to transfer vhd to new host"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:770
+#, python-format
+msgid "Resizing down VDI %(cow_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:893
+#, python-format
+msgid "Resizing up VDI %(vdi_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:901
+msgid "Resize complete"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:928
+#, python-format
+msgid "Failed to query agent version: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:949
+#, python-format
+msgid "domid changed from %(domid)s to %(newdomid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:962
+#, python-format
+msgid "Failed to update agent: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:983
+#, python-format
+msgid "Failed to exchange keys: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:998
+#, python-format
+msgid "Failed to update password: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1023
+#, python-format
+msgid "Failed to inject file: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1032
+msgid "VM already halted, skipping shutdown..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1036
+msgid "Shutting down VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1054
+msgid "Unable to find VBD for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1097
+msgid "Using RAW or VHD, skipping kernel and ramdisk deletion"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1104
+msgid "instance has a kernel or ramdisk but not both"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1111
+msgid "kernel/ramdisk files removed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1121
+msgid "VM destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1147
+msgid "Destroying VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1169
+msgid "VM is not present, skipping destroy..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1222
+#, python-format
+msgid "Instance is already in Rescue Mode: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1296
+#, python-format
+msgid "Found %(instance_count)d hung reboots older than %(timeout)d seconds"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1300
+msgid "Automatically hard rebooting"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1363
+#, python-format
+msgid "Setting migration %(migration_id)s to error: %(reason)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1374
+#, python-format
+msgid ""
+"Automatically confirming migration %(migration_id)s for instance "
+"%(instance_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1379
+#, python-format
+msgid "Instance %(instance_uuid)s not found"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1383
+msgid "In ERROR state"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1389
+#, python-format
+msgid "In %(task_state)s task_state, not RESIZE_VERIFY"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1396
+#, python-format
+msgid "Error auto-confirming resize: %(e)s. Will retry later."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1418
+msgid "Could not get bandwidth info."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1469
+msgid "Injecting network info to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1483
+msgid "Creating vifs"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1492
+#, fuzzy, python-format
+msgid "Creating VIF for network %(network_ref)s"
+msgstr "Criando a VIF para VM %(vm_ref)s, rede %(network_ref)s."
+
+#: cinder/virt/xenapi/vmops.py:1495
+#, fuzzy, python-format
+msgid "Created VIF %(vif_ref)s, network %(network_ref)s"
+msgstr "Criando a VIF para VM %(vm_ref)s, rede %(network_ref)s."
+
+#: cinder/virt/xenapi/vmops.py:1520
+msgid "Injecting hostname to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1545
+#, python-format
+msgid ""
+"The agent call to %(method)s returned an invalid response: %(ret)r. "
+"path=%(path)s; args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1566
+#, python-format
+msgid "TIMEOUT: The call to %(method)s timed out. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1570
+#, python-format
+msgid ""
+"NOT IMPLEMENTED: The call to %(method)s is not supported by the agent. "
+"args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1575
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1661
+#, python-format
+msgid "OpenSSL error: %s"
+msgstr "Erro de OpenSSL: %s"
+
+#: cinder/virt/xenapi/volume_utils.py:52
+msgid "creating sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:55 cinder/virt/xenapi/volume_utils.py:83
+#, python-format
+msgid "type is = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:58 cinder/virt/xenapi/volume_utils.py:86
+#, python-format
+msgid "name = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:71
+#, python-format
+msgid "Created %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:76 cinder/virt/xenapi/volume_utils.py:174
+msgid "Unable to create Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:80
+msgid "introducing sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:103 cinder/virt/xenapi/volume_utils.py:170
+#: cinder/virt/xenapi/volumeops.py:156
+#, python-format
+msgid "Introduced %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:106
+msgid "Creating pbd for SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:108
+msgid "Plugging SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:116 cinder/virt/xenapi/volumeops.py:160
+msgid "Unable to introduce Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:127 cinder/virt/xenapi/volumeops.py:50
+msgid "Unable to get SR using uuid"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:129
+#, python-format
+msgid "Forgetting SR %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:137
+msgid "Unable to forget Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:157
+#, python-format
+msgid "Introducing %s..."
+msgstr "Introduzindo %s..."
+
+#: cinder/virt/xenapi/volume_utils.py:186
+#, python-format
+msgid "Unable to find SR from VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:204
+#, python-format
+msgid "Ignoring exception %(exc)s when getting PBDs for %(sr_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:210
+#, python-format
+msgid "Ignoring exception %(exc)s when unplugging PBD %(pbd)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:234
+#, python-format
+msgid "Unable to introduce VDI on SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:242
+#, python-format
+msgid "Unable to get record of VDI %s on"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:264
+#, python-format
+msgid "Unable to introduce VDI for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:274
+#, python-format
+msgid "Error finding vdis in SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:281
+#, python-format
+msgid "Unable to find vbd for vdi %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:315
+#, python-format
+msgid "Unable to obtain target information %(data)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:341
+#, python-format
+msgid "Mountpoint cannot be translated: %s"
+msgstr "Ponto de montagem não pode ser traduzido: %s"
+
+#: cinder/virt/xenapi/volumeops.py:64
+msgid "Could not find VDI ref"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:69
+#, python-format
+msgid "Creating SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:73
+msgid "Could not create SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:76
+msgid "Could not retrieve SR record"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:81
+#, python-format
+msgid "Introducing SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:85
+msgid "SR found in xapi database. No need to introduce"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:90
+msgid "Could not introduce SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:94
+#, python-format
+msgid "Checking for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:106
+#, python-format
+msgid "SR %s not found in the xapi database"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:112
+msgid "Could not forget SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:121
+#, python-format
+msgid "Attach_volume: %(connection_info)s, %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:178
+#, python-format
+msgid "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+msgstr ""
+"Não é possível criar o VDI no SR %(sr_ref)s para a instância "
+"%(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:189
+#, python-format
+msgid "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+msgstr "Não é possível usar o SR %(sr_ref)s para a instância %(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:197
+#, python-format
+msgid "Unable to attach volume to instance %s"
+msgstr "Não é possível anexar o volume na instância %s"
+
+#: cinder/virt/xenapi/volumeops.py:200
+#, python-format
+msgid "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+msgstr "Ponto de montagem %(mountpoint)s conectada à instância %(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:210
+#, python-format
+msgid "Detach_volume: %(instance_name)s, %(mountpoint)s"
+msgstr "Detach_volume: %(instance_name)s, %(mountpoint)s"
+
+#: cinder/virt/xenapi/volumeops.py:219
+#, python-format
+msgid "Unable to locate volume %s"
+msgstr "Não é possível localizar o volume %s"
+
+#: cinder/virt/xenapi/volumeops.py:227
+#, python-format
+msgid "Unable to detach volume %s"
+msgstr "Não é possível desconectar o volume %s"
+
+#: cinder/virt/xenapi/volumeops.py:232
+#, python-format
+msgid "Unable to destroy vbd %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:239
+#, python-format
+msgid "Error purging SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:241
+#, python-format
+msgid "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+msgstr "Ponto de montagem %(mountpoint)s desanexada da instância %(instance_name)s"
+
+#: cinder/vnc/xvp_proxy.py:98 cinder/vnc/xvp_proxy.py:103
+#, python-format
+msgid "Error in handshake: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:119
+#, python-format
+msgid "Invalid request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:139
+#, python-format
+msgid "Request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:142
+#, python-format
+msgid "Request made with missing token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:153
+#, python-format
+msgid "Request made with invalid token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:160
+#, python-format
+msgid "Unexpected error: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:180
+#, python-format
+msgid "Starting cinder-xvpvncproxy node (version %s)"
+msgstr ""
+
+#: cinder/volume/api.py:74 cinder/volume/api.py:220
+msgid "status must be available"
+msgstr ""
+
+#: cinder/volume/api.py:85
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to create %(size)sG volume"
+msgstr ""
+
+#: cinder/volume/api.py:137
+#, fuzzy
+msgid "Volume status must be available or error"
+msgstr "O status do volume parece estar disponível"
+
+#: cinder/volume/api.py:142
+#, python-format
+msgid "Volume still has %d dependent snapshots"
+msgstr ""
+
+#: cinder/volume/api.py:223
+msgid "already attached"
+msgstr ""
+
+#: cinder/volume/api.py:230
+msgid "already detached"
+msgstr ""
+
+#: cinder/volume/api.py:292
+msgid "must be available"
+msgstr ""
+
+#: cinder/volume/api.py:325
+#, fuzzy
+msgid "Volume Snapshot status must be available or error"
+msgstr "O status do volume parece estar disponível"
+
+#: cinder/volume/driver.py:96
+#, python-format
+msgid "Recovering from a failed execute.  Try number %s"
+msgstr ""
+
+#: cinder/volume/driver.py:106
+#, python-format
+msgid "volume group %s doesn't exist"
+msgstr ""
+
+#: cinder/volume/driver.py:270
+#, python-format
+msgid "Skipping ensure_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:318
+#, python-format
+msgid "Skipping remove_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:327
+#, python-format
+msgid ""
+"Skipping remove_export. No iscsi_target is presently exported for volume:"
+" %d"
+msgstr ""
+
+#: cinder/volume/driver.py:337
+msgid "ISCSI provider_location not stored, using discovery"
+msgstr ""
+
+#: cinder/volume/driver.py:384
+#, python-format
+msgid "Could not find iSCSI export  for volume %s"
+msgstr ""
+
+#: cinder/volume/driver.py:388
+#, python-format
+msgid "ISCSI Discovery: Found %s"
+msgstr ""
+
+#: cinder/volume/driver.py:466
+#, python-format
+msgid "Cannot confirm exported volume id:%(volume_id)s."
+msgstr ""
+
+#: cinder/volume/driver.py:493
+#, python-format
+msgid "FAKE ISCSI: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:505
+#, python-format
+msgid "rbd has no pool %s"
+msgstr ""
+
+#: cinder/volume/driver.py:579
+#, python-format
+msgid "Sheepdog is not working: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:581
+msgid "Sheepdog is not working"
+msgstr ""
+
+#: cinder/volume/driver.py:680 cinder/volume/driver.py:685
+#, python-format
+msgid "LoggingVolumeDriver: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:96
+#, python-format
+msgid "Re-exporting %s volumes"
+msgstr "Re-exportando %s volumes"
+
+#: cinder/volume/manager.py:101
+#, python-format
+msgid "volume %s: skipping export"
+msgstr "volume %s: ignorando export"
+
+#: cinder/volume/manager.py:107
+#, python-format
+msgid "volume %s: creating"
+msgstr "volume %s: criando"
+
+#: cinder/volume/manager.py:119
+#, python-format
+msgid "volume %(vol_name)s: creating lv of size %(vol_size)sG"
+msgstr "volume %(vol_name)s: criando lv com tamanho %(vol_size)sG"
+
+#: cinder/volume/manager.py:131
+#, python-format
+msgid "volume %s: creating export"
+msgstr "volume %s: criando o export"
+
+#: cinder/volume/manager.py:144
+#, python-format
+msgid "volume %s: created successfully"
+msgstr "volume %s: criado com sucesso"
+
+#: cinder/volume/manager.py:153
+msgid "Volume is still attached"
+msgstr "O volume continua atachado"
+
+#: cinder/volume/manager.py:155
+msgid "Volume is not local to this node"
+msgstr "O volume não pertence à este node"
+
+#: cinder/volume/manager.py:159
+#, python-format
+msgid "volume %s: removing export"
+msgstr "volume %s: removendo export"
+
+#: cinder/volume/manager.py:161
+#, python-format
+msgid "volume %s: deleting"
+msgstr "volume %s: removendo"
+
+#: cinder/volume/manager.py:164
+#, python-format
+msgid "volume %s: volume is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:176
+#, python-format
+msgid "volume %s: deleted successfully"
+msgstr "volume %s: remoção realizada com sucesso"
+
+#: cinder/volume/manager.py:183
+#, python-format
+msgid "snapshot %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:187
+#, python-format
+msgid "snapshot %(snap_name)s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:202
+#, python-format
+msgid "snapshot %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:211
+#, python-format
+msgid "snapshot %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:214
+#, fuzzy, python-format
+msgid "snapshot %s: snapshot is busy"
+msgstr "instância %s: fazendo um snapshot"
+
+#: cinder/volume/manager.py:226
+#, python-format
+msgid "snapshot %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:310
+msgid "Checking volume capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:314
+#, python-format
+msgid "New capabilities found: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:325
+msgid "Clear capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:329
+#, python-format
+msgid "Notification {%s} received"
+msgstr ""
+
+#: cinder/volume/netapp.py:79
+#, python-format
+msgid "API %(name)sfailed: %(reason)s"
+msgstr ""
+
+#: cinder/volume/netapp.py:109
+#, python-format
+msgid "%s is not set"
+msgstr ""
+
+#: cinder/volume/netapp.py:128
+#, fuzzy
+msgid "Connected to DFM server"
+msgstr "Reconectado à fila"
+
+#: cinder/volume/netapp.py:159
+#, fuzzy, python-format
+msgid "Job failed: %s"
+msgstr "NotFound lançado: %s"
+
+#: cinder/volume/netapp.py:240
+msgid "Failed to provision dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:252
+msgid "No LUN was created by the provision job"
+msgstr ""
+
+#: cinder/volume/netapp.py:261 cinder/volume/netapp.py:433
+#, fuzzy, python-format
+msgid "Failed to find LUN ID for volume %s"
+msgstr "Não é possível localizar o volume %s"
+
+#: cinder/volume/netapp.py:280
+msgid "Failed to remove and delete dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:603 cinder/volume/netapp.py:657
+#, fuzzy, python-format
+msgid "No LUN ID for volume %s"
+msgstr "Não é possível localizar o volume %s"
+
+#: cinder/volume/netapp.py:607 cinder/volume/netapp.py:661
+#, fuzzy, python-format
+msgid "Failed to get LUN details for LUN ID %s"
+msgstr "Falha ao obter metadados para o ip: %s"
+
+#: cinder/volume/netapp.py:614
+#, fuzzy, python-format
+msgid "Failed to get host details for host ID %s"
+msgstr "Falha ao obter metadados para o ip: %s"
+
+#: cinder/volume/netapp.py:620
+#, fuzzy, python-format
+msgid "Failed to get target portal for filer: %s"
+msgstr "Falha ao obter metadados para o ip: %s"
+
+#: cinder/volume/netapp.py:625
+#, fuzzy, python-format
+msgid "Failed to get target IQN for filer: %s"
+msgstr "Falha ao obter metadados para o ip: %s"
+
+#: cinder/volume/san.py:113 cinder/volume/san.py:151
+msgid "Specify san_password or san_private_key"
+msgstr ""
+
+#: cinder/volume/san.py:156
+msgid "san_ip must be set"
+msgstr ""
+
+#: cinder/volume/san.py:320
+#, python-format
+msgid "LUID not found for %(zfs_poolname)s. Output=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:452
+#, python-format
+msgid "CLIQ command returned %s"
+msgstr ""
+
+#: cinder/volume/san.py:458
+#, python-format
+msgid "Malformed response to CLIQ command %(verb)s %(cliq_args)s. Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:466
+#, python-format
+msgid "Error running CLIQ command %(verb)s %(cliq_args)s.  Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:496
+#, python-format
+msgid ""
+"Unexpected number of virtual ips for cluster  %(cluster_name)s. "
+"Result=%(_xml)s"
+msgstr ""
+
+#: cinder/volume/san.py:549
+#, python-format
+msgid "Volume info: %(volume_name)s => %(volume_attributes)s"
+msgstr ""
+
+#: cinder/volume/san.py:594
+msgid "local_path not supported"
+msgstr ""
+
+#: cinder/volume/san.py:626
+#, python-format
+msgid "Could not determine project for volume %s, can't export"
+msgstr ""
+
+#: cinder/volume/san.py:696
+#, python-format
+msgid "Payload for SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:713
+#, python-format
+msgid "Call to json.loads() raised an exception: %s"
+msgstr ""
+
+#: cinder/volume/san.py:718
+#, python-format
+msgid "Results of SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:732
+#, python-format
+msgid "Found solidfire account: %s"
+msgstr ""
+
+#: cinder/volume/san.py:746
+#, python-format
+msgid "solidfire account: %s does not exist, create it..."
+msgstr ""
+
+#: cinder/volume/san.py:804
+msgid "Enter SolidFire create_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:846
+msgid "Leaving SolidFire create_volume"
+msgstr ""
+
+#: cinder/volume/san.py:861
+msgid "Enter SolidFire delete_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:880
+#, python-format
+msgid "Deleting volumeID: %s "
+msgstr ""
+
+#: cinder/volume/san.py:888
+msgid "Leaving SolidFire delete_volume"
+msgstr ""
+
+#: cinder/volume/san.py:891
+msgid "Executing SolidFire ensure_export..."
+msgstr ""
+
+#: cinder/volume/san.py:895
+msgid "Executing SolidFire create_export..."
+msgstr ""
+
+#: cinder/volume/volume_types.py:49 cinder/volume/volume_types.py:108
+msgid "name cannot be None"
+msgstr ""
+
+#: cinder/volume/volume_types.py:96
+msgid "id cannot be None"
+msgstr ""
+
+#: cinder/volume/xensm.py:55
+#, python-format
+msgid "SR name = %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:56
+#, python-format
+msgid "Params: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:60
+#, python-format
+msgid "Failed to create sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:62
+msgid "Create failed"
+msgstr ""
+
+#: cinder/volume/xensm.py:64
+#, python-format
+msgid "SR UUID of new SR is: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:71
+msgid "Failed to update db"
+msgstr ""
+
+#: cinder/volume/xensm.py:80
+#, python-format
+msgid "Failed to introduce sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:91
+#, python-format
+msgid "Failed to reach backend %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:100
+msgid "XenSMDriver requires xenapi connection"
+msgstr ""
+
+#: cinder/volume/xensm.py:110
+msgid "Failed to initiate session"
+msgstr ""
+
+#: cinder/volume/xensm.py:142
+#, python-format
+msgid "Volume will be created in backend - %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:154
+msgid "Failed to update volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:157
+msgid "Unable to create volume"
+msgstr ""
+
+#: cinder/volume/xensm.py:171
+msgid "Failed to delete vdi"
+msgstr ""
+
+#: cinder/volume/xensm.py:177
+msgid "Failed to delete volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:210
+msgid "Failed to find volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:221
+msgid "Failed to find backend in db"
+msgstr ""
+
+#: cinder/volume/nexenta/__init__.py:27
+msgid "Nexenta SA returned the error"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:64
+#, python-format
+msgid "Sending JSON data: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:69
+#, python-format
+msgid "Auto switching to HTTPS connection to %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:75
+msgid "No headers in server response"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:76
+msgid "Bad response from server"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:79
+#, fuzzy, python-format
+msgid "Got response: %s"
+msgstr "resposta %s"
+
+#: cinder/volume/nexenta/volume.py:96
+#, python-format
+msgid "Volume %s does not exist in Nexenta SA"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:180
+msgid ""
+"Call to local_path should not happen. Verify that use_local_volumes flag "
+"is turned off."
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:202
+#, python-format
+msgid "Ignored target creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:210
+#, python-format
+msgid "Ignored target group creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:219
+#, python-format
+msgid "Ignored target group member addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:227
+#, python-format
+msgid "Ignored LU creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:237
+#, python-format
+msgid "Ignored LUN mapping entry addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:273
+#, python-format
+msgid ""
+"Got error trying to destroy target group %(target_group)s, assuming it is"
+" already gone: %(exc)s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:280
+#, python-format
+msgid ""
+"Got error trying to delete target %(target)s, assuming it is already "
+"gone: %(exc)s"
+msgstr ""
+
+#~ msgid "Unable to locate account %(account_name) on Solidfire device"
+#~ msgstr ""
+
+#~ msgid "Zone %(zone_id)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Cinder access parameters were not specified."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(id)d could not be found."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(name)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Detected more than one volume with name %(vol_name)"
+#~ msgstr ""
+
+#~ msgid "Detected existing vlan with id %(vlan)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab semaphore \"%(lock)s\" "
+#~ "for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab file lock "
+#~ "\"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Parent group id and group id cannot be same"
+#~ msgstr ""
+
+#~ msgid "No body provided"
+#~ msgstr ""
+
+#~ msgid "Create VSA %(display_name)s of type %(vc_type)s"
+#~ msgstr ""
+
+#~ msgid "Delete VSA with id: %s"
+#~ msgstr ""
+
+#~ msgid "Associate address %(ip)s to VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "Disassociate address from VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "%(obj)s with ID %(id)s not found"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(obj)s with ID %(id)s belongs to "
+#~ "VSA %(own_vsa_id)s and not to VSA "
+#~ "%(vsa_id)s."
+#~ msgstr ""
+
+#~ msgid "Index. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Detail. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Create. vsa_id=%(vsa_id)s, body=%(body)s"
+#~ msgstr ""
+
+#~ msgid "Create volume of %(size)s GB from VSA ID %(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Update %(obj)s with id: %(id)s, changes: %(changes)s"
+#~ msgstr ""
+
+#~ msgid "Delete. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Show. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Index instances for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You cannot run"
+#~ " any more instances of this type."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You can only"
+#~ " run %s more instances of this "
+#~ "type."
+#~ msgstr ""
+
+#~ msgid "Going to try to soft delete %s"
+#~ msgstr ""
+
+#~ msgid "No host for instance %s, deleting immediately"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to stop %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to start %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Going to force the deletion of the"
+#~ " vm %(instance_uuid)s, even if it is"
+#~ " deleted"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s did not exist "
+#~ "in the DB, but I will shut "
+#~ "it down anyway using a special "
+#~ "context"
+#~ msgstr ""
+
+#~ msgid "exception terminating the instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "trying to destroy already destroyed instance: %s"
+#~ msgstr "tentando destruir instância já destruida: %s"
+
+#~ msgid ""
+#~ "Instance %(name)s found in database but"
+#~ " not known by hypervisor. Setting "
+#~ "power state to NOSTATE"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Detected instance  with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Destroying instance with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid "SQL connection failed (%(connstring)s). %(attempts)d attempts left."
+#~ msgstr ""
+
+#~ msgid "Can't downgrade without losing data"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_id)s not found"
+#~ msgstr ""
+
+#~ msgid "Network %s has active ports, cannot delete"
+#~ msgstr ""
+
+#~ msgid "No fixed IPs to deallocate for vif %sid"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "AMQP server on %(fl_host)s:%(fl_port)d is "
+#~ "unreachable: %(e)s. Trying again in "
+#~ "%(fl_intv)d seconds."
+#~ msgstr ""
+
+#~ msgid "Unable to connect to AMQP server after %(tries)d tries. Shutting down."
+#~ msgstr ""
+
+#~ msgid "Failed to fetch message from queue: %s"
+#~ msgstr ""
+
+#~ msgid "Initing the Adapter Consumer for %s"
+#~ msgstr "Iniciando o Adaptador Consumidor para %s"
+
+#~ msgid "Created \"%(exchange)s\" fanout exchange with \"%(key)s\" routing key"
+#~ msgstr ""
+
+#~ msgid "Exception while processing consumer"
+#~ msgstr ""
+
+#~ msgid "Creating \"%(exchange)s\" fanout exchange"
+#~ msgstr ""
+
+#~ msgid "topic is %s"
+#~ msgstr "topico é %s"
+
+#~ msgid "message %s"
+#~ msgstr "mensagem %s"
+
+#~ msgid ""
+#~ "Cannot confirm tmpfile at %(ipath)s is"
+#~ " on same shared storage between "
+#~ "%(src)s and %(dest)s."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of memory(host:%(avail)s <= "
+#~ "instance:%(mem_inst)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of disk(host:%(available)s <="
+#~ " instance:%(necessary)s)"
+#~ msgstr ""
+
+#~ msgid "Driver Method %(driver_method)s missing: %(e)s.Reverting to schedule()"
+#~ msgstr ""
+
+#~ msgid "Setting instance %(instance_uuid)s to ERROR state."
+#~ msgstr ""
+
+#~ msgid "_filter_hosts: %(request_spec)s"
+#~ msgstr ""
+
+#~ msgid "Filter hosts for drive type %s"
+#~ msgstr ""
+
+#~ msgid "Host %s has no free capacity. Skip"
+#~ msgstr ""
+
+#~ msgid "Filter hosts: %s"
+#~ msgstr ""
+
+#~ msgid "Must implement host selection mechanism"
+#~ msgstr ""
+
+#~ msgid "Maximum number of hosts selected (%d)"
+#~ msgstr ""
+
+#~ msgid "Selected excessive host %(host)s"
+#~ msgstr ""
+
+#~ msgid "Provision volume %(name)s of size %(size)s GB on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "volume_params %(volume_params)s"
+#~ msgstr ""
+
+#~ msgid "%(i)d: Volume %(name)s"
+#~ msgstr ""
+
+#~ msgid "Attempting to spawn %(num_volumes)d volume(s)"
+#~ msgstr ""
+
+#~ msgid "Error creating volumes"
+#~ msgstr ""
+
+#~ msgid "Non-VSA volume %d"
+#~ msgstr ""
+
+#~ msgid "Spawning volume %(volume_id)s with drive type %(drive_type)s"
+#~ msgstr ""
+
+#~ msgid "Error creating volume"
+#~ msgstr ""
+
+#~ msgid "No capability selected for volume of size %(size)s"
+#~ msgstr ""
+
+#~ msgid "Host %s:"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\tDrive %(qosgrp)-25s: total %(total)2s, "
+#~ "used %(used)2s, free %(free)2s. Available "
+#~ "capacity %(avail)-5s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t LeastUsedHost: Best host: %(best_host)s."
+#~ " (used capacity %(min_used)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t MostAvailCap: Best host: %(best_host)s. "
+#~ "(available %(max_avail)s %(type_str)s)"
+#~ msgstr ""
+
+#~ msgid "(%(nm)s) publish (key: %(routing_key)s) %(message)s"
+#~ msgstr "(%(nm)s) publicar (key: %(routing_key)s) %(message)s"
+
+#~ msgid "Publishing to route %s"
+#~ msgstr "Publicando para rota %s"
+
+#~ msgid "Declaring queue %s"
+#~ msgstr "Declarando fila %s"
+
+#~ msgid "Declaring exchange %s"
+#~ msgstr "Declarando troca %s"
+
+#~ msgid "Binding %(queue)s to %(exchange)s with key %(routing_key)s"
+#~ msgstr "Ligação %(queue)s para %(exchange)s com chave %(routing_key)s"
+
+#~ msgid "Getting from %(queue)s: %(message)s"
+#~ msgstr "Recebendo de %(queue)s: %(message)s"
+
+#~ msgid "Test: Emulate wrong VSA name. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate DB error. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: user_data = %s"
+#~ msgstr ""
+
+#~ msgid "_create: param=%s"
+#~ msgstr ""
+
+#~ msgid "Host %s"
+#~ msgstr ""
+
+#~ msgid "Test: provision vol %(name)s on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "\t vol=%(vol)s"
+#~ msgstr ""
+
+#~ msgid "Test: VSA update request: vsa_id=%(vsa_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume create: %s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get request: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume update request: id=%(volume_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: success    %(result)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: %(status)s    %(error_info)s"
+#~ msgstr ""
+
+#~ msgid "Unable to get updated status: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "deactivate_node is called for                "
+#~ "node_id = %(id)s node_ip = %(ip)s"
+#~ msgstr ""
+
+#~ msgid "virsh said: %r"
+#~ msgstr ""
+
+#~ msgid "cool, it's a device"
+#~ msgstr ""
+
+#~ msgid "Unable to read LXC console"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "to xml...\n"
+#~ ":%s "
+#~ msgstr ""
+
+#~ msgid "During wait running, %s disappeared."
+#~ msgstr ""
+
+#~ msgid "Instance %s running successfully."
+#~ msgstr ""
+
+#~ msgid "The nwfilter(%(instance_secgroup_filter_name)s) is not found."
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image verification failed"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): image "
+#~ "verification skipped, no hash stored"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): checking"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in use:"
+#~ " on this node %(local)d local, "
+#~ "%(remote)d on other nodes"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): warning "
+#~ "-- an absent base file is in "
+#~ "use! instances: %(instance_list)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in: on"
+#~ " other nodes (%(remote)d on other "
+#~ "nodes)"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is not in use"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is in use"
+#~ msgstr ""
+
+#~ msgid "Created VM %s..."
+#~ msgstr "VM %s criada..."
+
+#~ msgid "Created VM %(instance_name)s as %(vm_ref)s."
+#~ msgstr "VM %(instance_name)s criada como %(vm_ref)s."
+
+#~ msgid "Creating a CDROM-specific VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Created a CDROM-specific VBD %(vbd_ref)s"
+#~ "  for VM %(vm_ref)s, VDI %(vdi_ref)s."
+#~ msgstr ""
+
+#~ msgid "No primary VDI found for%(vm_ref)s"
+#~ msgstr ""
+
+#~ msgid "Fetching image %(image)s"
+#~ msgstr ""
+
+#~ msgid "Image Type: %s"
+#~ msgstr ""
+
+#~ msgid "ISO: Found sr possibly containing the ISO image"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to fetch glance image"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s ... "
+#~ msgstr "Criando VBD para VDI %s ... "
+
+#~ msgid "Creating VBD for VDI %s done."
+#~ msgstr "O VBD para VDI %s foi criado."
+
+#~ msgid "VBD.unplug successful first time."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug rejected: retrying..."
+#~ msgstr ""
+
+#~ msgid "Not sleeping anymore!"
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful eventually."
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure in VBD.unplug: %s"
+#~ msgstr "Ignorando XenAPI.Failure em VBD.unplug: %s"
+
+#~ msgid "Ignoring XenAPI.Failure %s"
+#~ msgstr ""
+
+#~ msgid "Starting instance %s"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn"
+#~ msgstr "instância %s: falha na geração"
+
+#~ msgid "Instance %s failed to spawn - performing clean-up"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn - Unable to create VM"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Auto configuring disk for instance "
+#~ "%(instance_uuid)s, attempting to resize "
+#~ "partition..."
+#~ msgstr ""
+
+#~ msgid "Invalid value for injected_files: '%s'"
+#~ msgstr ""
+
+#~ msgid "Starting VM %s..."
+#~ msgstr ""
+
+#~ msgid "Spawning VM %(instance_uuid)s created %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Instance %s: waiting for running"
+#~ msgstr ""
+
+#~ msgid "Instance %s: running"
+#~ msgstr ""
+
+#~ msgid "Resources to remove:%s"
+#~ msgstr ""
+
+#~ msgid "Removing VDI %(vdi_ref)s(uuid:%(vdi_to_remove)s)"
+#~ msgstr ""
+
+#~ msgid "Skipping VDI destroy for %s"
+#~ msgstr ""
+
+#~ msgid "Finished snapshot and upload for VM %s"
+#~ msgstr ""
+
+#~ msgid "Starting snapshot for VM %s"
+#~ msgstr ""
+
+#~ msgid "Unable to Snapshot instance %(instance_uuid)s: %(exc)s"
+#~ msgstr ""
+
+#~ msgid "Updating instance '%(instance_uuid)s' progress to %(progress)d"
+#~ msgstr ""
+
+#~ msgid "Resize instance %s complete"
+#~ msgstr ""
+
+#~ msgid "domid changed from %(olddomid)s to %(newdomid)s"
+#~ msgstr ""
+
+#~ msgid "VM %(instance_uuid)s already halted,skipping shutdown..."
+#~ msgstr ""
+
+#~ msgid "Shutting down VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Destroying VDIs for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s using RAW or "
+#~ "VHD, skipping kernel and ramdisk "
+#~ "deletion"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_uuid)s VM destroyed"
+#~ msgstr ""
+
+#~ msgid "Destroying VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Automatically hard rebooting %d"
+#~ msgstr ""
+
+#~ msgid "Instance for migration %d not found, skipping"
+#~ msgstr ""
+
+#~ msgid "injecting network info to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "creating vif(s) for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "Created VIF %(vif_ref)s for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr "VIF %(vif_ref)s criada para VM %(vm_ref)s, rede %(network_ref)s."
+
+#~ msgid "injecting hostname to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The agent call to %(method)s returned"
+#~ " an invalid response: %(ret)r. VM "
+#~ "id=%(instance_uuid)s; path=%(path)s; args=%(addl_args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "TIMEOUT: The call to %(method)s timed"
+#~ " out. VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "NOT IMPLEMENTED: The call to %(method)s"
+#~ " is not supported by the agent. "
+#~ "VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The call to %(method)s returned an "
+#~ "error: %(e)s. VM id=%(instance_uuid)s; "
+#~ "args=%(args)r"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr "Criando VBD para VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+
+#~ msgid "Error destroying VDI"
+#~ msgstr ""
+
+#~ msgid "\tVolume %s is NOT VSA volume"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s creation - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s succeeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s deletion - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s suceeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s local path call - call discover"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s ensure export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s create export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s remove export - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE remove_export for %s failed"
+#~ msgstr ""
+
+#~ msgid "Failed to retrieve QoS info"
+#~ msgstr ""
+
+#~ msgid "invalid drive data"
+#~ msgstr ""
+
+#~ msgid "drive_name not defined"
+#~ msgstr ""
+
+#~ msgid "invalid drive type name %s"
+#~ msgstr ""
+
+#~ msgid "*** Experimental VSA code ***"
+#~ msgstr ""
+
+#~ msgid "Requested number of VCs (%d) is too high. Setting to default"
+#~ msgstr ""
+
+#~ msgid "Creating VSA: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d %(vsa_name)s: Create "
+#~ "volume %(vol_name)s, %(vol_size)d GB, type "
+#~ "%(vol_type_id)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA status to %(status)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA call"
+#~ msgstr ""
+
+#~ msgid "Adding %(add_cnt)s VCs to VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "Deleting %(del_cnt)s VCs from VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Deleting %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Unable to delete volume %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Forced delete. %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate VSA ID %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Delete instance %(name)s"
+#~ msgstr ""
+
+#~ msgid "Create call received for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Failed to find VSA %(vsa_id)d"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Drive %(vol_id)s created. Status %(status)s"
+#~ msgstr ""
+
+#~ msgid "Drive %(vol_name)s (%(vol_disp_name)s) still in creating phase - wait"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Not all volumes "
+#~ "are created (%(cvol_real)d of %(cvol_exp)d)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Drive %(vol_name)s "
+#~ "(%(vol_disp_name)s) is in %(status)s state"
+#~ msgstr ""
+
+#~ msgid "Failed to update attach status for volume %(vol_name)s. %(ex)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Delete all BE volumes"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Start %(vc_count)d instances"
+#~ msgstr ""
+
diff --git a/cinder/locale/ru/LC_MESSAGES/nova.po b/cinder/locale/ru/LC_MESSAGES/nova.po
new file mode 100644
index 000000000..bc639e4f1
--- /dev/null
+++ b/cinder/locale/ru/LC_MESSAGES/nova.po
@@ -0,0 +1,8304 @@
+# Russian translation for cinder
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the cinder package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version:  cinder\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-04-08 23:04+0000\n"
+"PO-Revision-Date: 2012-03-25 09:34+0000\n"
+"Last-Translator: Eugene Marshal <Unknown>\n"
+"Language-Team: Russian <ru@li.org>\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: cinder/context.py:59
+#, python-format
+msgid "Arguments dropped when creating context: %s"
+msgstr ""
+
+#: cinder/context.py:90
+#, python-format
+msgid "read_deleted can only be one of 'no', 'yes' or 'only', not %r"
+msgstr ""
+
+#: cinder/crypto.py:48
+msgid "Filename of root CA"
+msgstr "Имя файла корневого центра сертификации"
+
+#: cinder/crypto.py:51
+msgid "Filename of private key"
+msgstr "Имя файла секретного ключа"
+
+#: cinder/crypto.py:54
+msgid "Filename of root Certificate Revocation List"
+msgstr "Имя файла корневого списка отзыва сертификатов"
+
+#: cinder/crypto.py:57
+msgid "Where we keep our keys"
+msgstr "Путь к ключам"
+
+#: cinder/crypto.py:60
+msgid "Where we keep our root CA"
+msgstr "Место расположения нашего корневого центра сертификации"
+
+#: cinder/crypto.py:63
+msgid "Should we use a CA for each project?"
+msgstr "Должны ли мы использовать центр сертификации для каждого проекта?"
+
+#: cinder/crypto.py:67
+#, python-format
+msgid "Subject for certificate for users, %s for project, user, timestamp"
+msgstr ""
+"Тема для сертификатов пользователей, %s для проекта, пользователя, "
+"временной метки"
+
+#: cinder/crypto.py:72
+#, python-format
+msgid "Subject for certificate for projects, %s for project, timestamp"
+msgstr "Тема для сертификатов проектов, %s для проекта, временная метка"
+
+#: cinder/crypto.py:292
+#, python-format
+msgid "Flags path: %s"
+msgstr "Расположение флагов: %s"
+
+#: cinder/exception.py:56
+msgid "Unexpected error while running command."
+msgstr "Неожиданная ошибка при выполнении команды."
+
+#: cinder/exception.py:59
+#, python-format
+msgid ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+msgstr ""
+"%(description)s\n"
+"Команда: %(cmd)s\n"
+"Код выхода: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+
+#: cinder/exception.py:94
+msgid "DB exception wrapped."
+msgstr ""
+
+#: cinder/exception.py:155
+msgid "An unknown exception occurred."
+msgstr "Обнаружено неизвестное исключение."
+
+#: cinder/exception.py:178
+msgid "Failed to decrypt text"
+msgstr "Ошибка дешифровки текста"
+
+#: cinder/exception.py:182
+msgid "Failed to paginate through images from image service"
+msgstr ""
+
+#: cinder/exception.py:186
+msgid "Virtual Interface creation failed"
+msgstr "Ошибка создания виртуального интерфейса"
+
+#: cinder/exception.py:190
+msgid "5 attempts to create virtual interfacewith unique mac address failed"
+msgstr ""
+"5 безуспешных попыток создания виртуального интерфейса с уникальным "
+"mac-адресом"
+
+#: cinder/exception.py:195
+msgid "Connection to glance failed"
+msgstr "Сбой соединения с glance"
+
+#: cinder/exception.py:199
+msgid "Connection to melange failed"
+msgstr "Сбой соединения c melange"
+
+#: cinder/exception.py:203
+msgid "Not authorized."
+msgstr "Не авторизировано."
+
+#: cinder/exception.py:208
+msgid "User does not have admin privileges"
+msgstr "Пользователь не имеет административных привилегий"
+
+#: cinder/exception.py:212
+#, python-format
+msgid "Policy doesn't allow %(action)s to be performed."
+msgstr "Политика не допускает выполнения %(action)s."
+
+#: cinder/exception.py:216
+#, fuzzy, python-format
+msgid "Not authorized for image %(image_id)s."
+msgstr "Ядро не найдено для образа %(image_id)s."
+
+#: cinder/exception.py:220
+msgid "Unacceptable parameters."
+msgstr "Недопустимые параметры."
+
+#: cinder/exception.py:225
+msgid "Invalid snapshot"
+msgstr "Недопустимый снимок"
+
+#: cinder/exception.py:229
+#, python-format
+msgid "Volume %(volume_id)s is not attached to anything"
+msgstr "Том %(volume_id)s никуда не присоединён"
+
+#: cinder/exception.py:233 cinder/api/openstack/compute/contrib/keypairs.py:113
+msgid "Keypair data is invalid"
+msgstr ""
+
+#: cinder/exception.py:237
+msgid "Failed to load data into json format"
+msgstr "Ошибка загрузки данных в формат json"
+
+#: cinder/exception.py:241
+msgid "The request is invalid."
+msgstr "Недопустимый запрос."
+
+#: cinder/exception.py:245
+#, python-format
+msgid "Invalid signature %(signature)s for user %(user)s."
+msgstr "Недопустимая подпись %(signature)s для пользователя %(user)s."
+
+#: cinder/exception.py:249
+msgid "Invalid input received"
+msgstr ""
+
+#: cinder/exception.py:253
+#, python-format
+msgid "Invalid instance type %(instance_type)s."
+msgstr "Недопустимый тип копии %(instance_type)s."
+
+#: cinder/exception.py:257
+msgid "Invalid volume type"
+msgstr "Недопустимый тип тома"
+
+#: cinder/exception.py:261
+msgid "Invalid volume"
+msgstr "Недопустимый том"
+
+#: cinder/exception.py:265
+#, python-format
+msgid "Invalid port range %(from_port)s:%(to_port)s. %(msg)s"
+msgstr "Недопустимый диапазон портов %(from_port)s:%(to_port)s. %(msg)s"
+
+#: cinder/exception.py:269
+#, python-format
+msgid "Invalid IP protocol %(protocol)s."
+msgstr "Недопустимый протокол IP %(protocol)s."
+
+#: cinder/exception.py:273
+#, python-format
+msgid "Invalid content type %(content_type)s."
+msgstr "Недопустимый тип содержимого %(content_type)s."
+
+#: cinder/exception.py:277
+#, python-format
+msgid "Invalid cidr %(cidr)s."
+msgstr "Недопустимый cidr %(cidr)s."
+
+#: cinder/exception.py:281
+msgid "Invalid reuse of an RPC connection."
+msgstr ""
+
+#: cinder/exception.py:285
+msgid "Invalid Parameter: Unicode is not supported by the current database."
+msgstr ""
+
+#: cinder/exception.py:292
+#, python-format
+msgid "%(err)s"
+msgstr ""
+
+#: cinder/exception.py:296
+#, python-format
+msgid ""
+"Cannot perform action '%(action)s' on aggregate %(aggregate_id)s. Reason:"
+" %(reason)s."
+msgstr ""
+
+#: cinder/exception.py:301
+#, fuzzy, python-format
+msgid "Group not valid. Reason: %(reason)s"
+msgstr "Допустимый узел не найден. %(reason)s"
+
+#: cinder/exception.py:305
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot %(method)s while"
+" the instance is in this state."
+msgstr ""
+"Копия %(instance_uuid)s в %(attr)s %(state)s. Невозможно %(method)s во "
+"время нахождения копии в этом состоянии."
+
+#: cinder/exception.py:310
+#, python-format
+msgid "Instance %(instance_id)s is not running."
+msgstr "Копия %(instance_id)s не выполняется."
+
+#: cinder/exception.py:314
+#, python-format
+msgid "Instance %(instance_id)s is not suspended."
+msgstr "Копия %(instance_id)s не переведена в режим приостановления."
+
+#: cinder/exception.py:318
+#, python-format
+msgid "Instance %(instance_id)s is not in rescue mode"
+msgstr "Копия %(instance_id)s не переведена в режим восстановления"
+
+#: cinder/exception.py:322
+msgid "Failed to suspend instance"
+msgstr "Ошибка приостановления копии"
+
+#: cinder/exception.py:326
+msgid "Failed to resume server"
+msgstr "Ошибка возобновления работы сервера"
+
+#: cinder/exception.py:330
+msgid "Failed to reboot instance"
+msgstr "Ошибка перезагрузки копии"
+
+#: cinder/exception.py:334
+#, fuzzy
+msgid "Failed to terminate instance"
+msgstr "Ошибка перезагрузки копии"
+
+#: cinder/exception.py:338
+msgid "Service is unavailable at this time."
+msgstr "В данный момент служба недоступна."
+
+#: cinder/exception.py:342
+msgid "Volume service is unavailable at this time."
+msgstr "Служба томов в данный момент недоступна."
+
+#: cinder/exception.py:346
+msgid "Compute service is unavailable at this time."
+msgstr "Служба Compute недоступна в настоящее время."
+
+#: cinder/exception.py:350
+#, python-format
+msgid "Unable to migrate instance (%(instance_id)s) to current host (%(host)s)."
+msgstr "Невозможно переместить копию (%(instance_id)s) на текущий узел (%(host)s)."
+
+#: cinder/exception.py:355
+msgid "Destination compute host is unavailable at this time."
+msgstr "Назначенный узел compute недоступен в настоящее время."
+
+#: cinder/exception.py:359
+msgid "Original compute host is unavailable at this time."
+msgstr "Исходный узел compute недоступен в настоящее время."
+
+#: cinder/exception.py:363
+msgid "The supplied hypervisor type of is invalid."
+msgstr ""
+
+#: cinder/exception.py:367
+msgid "The instance requires a newer hypervisor version than has been provided."
+msgstr "Копии необходима новая версия гипервизора, вместо предоставленной."
+
+#: cinder/exception.py:372
+#, python-format
+msgid ""
+"The supplied disk path (%(path)s) already exists, it is expected not to "
+"exist."
+msgstr ""
+"Предоставленный адрес диска (%(path)s) уже существует, но ожидалось, что "
+"отсутствует."
+
+#: cinder/exception.py:377
+#, python-format
+msgid "The supplied device path (%(path)s) is invalid."
+msgstr "Недопустимое размещение предоставленного устройства (%(path)s)."
+
+#: cinder/exception.py:381
+#, fuzzy, python-format
+msgid "The supplied device (%(device)s) is busy."
+msgstr "Недопустимое размещение предоставленного устройства (%(path)s)."
+
+#: cinder/exception.py:385
+msgid "Unacceptable CPU info"
+msgstr "Недопустимые сведения ЦПУ"
+
+#: cinder/exception.py:389
+#, python-format
+msgid "%(address)s is not a valid IP v4/6 address."
+msgstr "%(address)s не является допустимым IP-адресом в4/6."
+
+#: cinder/exception.py:393
+#, python-format
+msgid ""
+"VLAN tag is not appropriate for the port group %(bridge)s. Expected VLAN "
+"tag is %(tag)s, but the one associated with the port group is %(pgroup)s."
+msgstr ""
+
+#: cinder/exception.py:399
+#, python-format
+msgid ""
+"vSwitch which contains the port group %(bridge)s is not associated with "
+"the desired physical adapter. Expected vSwitch is %(expected)s, but the "
+"one associated is %(actual)s."
+msgstr ""
+
+#: cinder/exception.py:406
+#, python-format
+msgid "Disk format %(disk_format)s is not acceptable"
+msgstr "Форматирование диска %(disk_format)s недопустимо"
+
+#: cinder/exception.py:410
+#, python-format
+msgid "Image %(image_id)s is unacceptable: %(reason)s"
+msgstr "Образ %(image_id)s недопустим: %(reason)s"
+
+#: cinder/exception.py:414
+#, python-format
+msgid "Instance %(instance_id)s is unacceptable: %(reason)s"
+msgstr "Копия %(instance_id)s недопустима: %(reason)s"
+
+#: cinder/exception.py:418
+#, python-format
+msgid "Ec2 id %(ec2_id)s is unacceptable."
+msgstr "Ec2 id %(ec2_id)s недопустим."
+
+#: cinder/exception.py:422
+msgid "Resource could not be found."
+msgstr "Ресурс не может быть найден."
+
+#: cinder/exception.py:427
+#, python-format
+msgid "Required flag %(flag)s not set."
+msgstr "Необходимый флаг %(flag)s не назначен."
+
+#: cinder/exception.py:431
+#, python-format
+msgid "Volume %(volume_id)s could not be found."
+msgstr "Том %(volume_id)s не найден."
+
+#: cinder/exception.py:435
+#, python-format
+msgid "Unable to locate account %(account_name)s on Solidfire device"
+msgstr ""
+
+#: cinder/exception.py:440
+#, python-format
+msgid "Volume not found for instance %(instance_id)s."
+msgstr "Не найден том для копии %(instance_id)s."
+
+#: cinder/exception.py:444
+#, python-format
+msgid "Volume %(volume_id)s has no metadata with key %(metadata_key)s."
+msgstr "Том %(volume_id)s не имеет метаданных с ключом %(metadata_key)s."
+
+#: cinder/exception.py:449
+msgid "Zero volume types found."
+msgstr ""
+
+#: cinder/exception.py:453
+#, python-format
+msgid "Volume type %(volume_type_id)s could not be found."
+msgstr "Тип тома %(volume_type_id)s не может быть найден."
+
+#: cinder/exception.py:457
+#, python-format
+msgid "Volume type with name %(volume_type_name)s could not be found."
+msgstr "Тип тома под названием %(volume_type_name)s не может быть найден."
+
+#: cinder/exception.py:462
+#, python-format
+msgid ""
+"Volume Type %(volume_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+"Тип тома %(volume_type_id)s не имеет дополнительных особенностей с ключом"
+" %(extra_specs_key)s."
+
+#: cinder/exception.py:467
+#, python-format
+msgid "Snapshot %(snapshot_id)s could not be found."
+msgstr "Снимок %(snapshot_id)s не может быть найден."
+
+#: cinder/exception.py:471
+#, python-format
+msgid "deleting volume %(volume_name)s that has snapshot"
+msgstr "удаление тома %(volume_name)s, который имеет снимок"
+
+#: cinder/exception.py:475
+#, python-format
+msgid "deleting snapshot %(snapshot_name)s that has dependent volumes"
+msgstr ""
+
+#: cinder/exception.py:480
+#, python-format
+msgid "No target id found for volume %(volume_id)s."
+msgstr ""
+
+#: cinder/exception.py:484
+#, python-format
+msgid "No disk at %(location)s"
+msgstr "Отсутствует диск в %(location)s"
+
+#: cinder/exception.py:488
+#, python-format
+msgid "Could not find a handler for %(driver_type)s volume."
+msgstr "Невозможно найти обработчик для тома %(driver_type)s."
+
+#: cinder/exception.py:492
+#, python-format
+msgid "Invalid image href %(image_href)s."
+msgstr "Недопустимый образ href %(image_href)s."
+
+#: cinder/exception.py:496
+msgid ""
+"Some images have been stored via hrefs. This version of the api does not "
+"support displaying image hrefs."
+msgstr ""
+
+#: cinder/exception.py:501
+#, python-format
+msgid "Image %(image_id)s could not be found."
+msgstr "Образ %(image_id)s не найден."
+
+#: cinder/exception.py:505
+#, python-format
+msgid "Kernel not found for image %(image_id)s."
+msgstr "Ядро не найдено для образа %(image_id)s."
+
+#: cinder/exception.py:509
+#, python-format
+msgid "User %(user_id)s could not be found."
+msgstr "Пользователь %(user_id)s не найден."
+
+#: cinder/exception.py:513
+#, python-format
+msgid "Project %(project_id)s could not be found."
+msgstr "Проект %(project_id)s не найден."
+
+#: cinder/exception.py:517
+#, python-format
+msgid "User %(user_id)s is not a member of project %(project_id)s."
+msgstr "Пользователь %(user_id)s не является участником проекта %(project_id)s."
+
+#: cinder/exception.py:521
+#, python-format
+msgid "Role %(role_id)s could not be found."
+msgstr "Полномочия %(role_id)s не могут быть найдены."
+
+#: cinder/exception.py:525
+msgid "Cannot find SR to read/write VDI."
+msgstr "Невозможно найти SR для чтения/записи VDI."
+
+#: cinder/exception.py:529
+#, python-format
+msgid "%(req)s is required to create a network."
+msgstr "%(req)s необходимо для создания сети."
+
+#: cinder/exception.py:533
+#, python-format
+msgid "Network %(network_id)s could not be found."
+msgstr "Сеть %(network_id)s не найдена."
+
+#: cinder/exception.py:537
+#, python-format
+msgid "Network could not be found for bridge %(bridge)s"
+msgstr "Сеть не может быть найдена для моста %(bridge)s"
+
+#: cinder/exception.py:541
+#, python-format
+msgid "Network could not be found for uuid %(uuid)s"
+msgstr "Сеть не может быть найдена для uuid %(uuid)s"
+
+#: cinder/exception.py:545
+#, python-format
+msgid "Network could not be found with cidr %(cidr)s."
+msgstr "Сеть не найдена с cidr %(cidr)s."
+
+#: cinder/exception.py:549
+#, python-format
+msgid "Network could not be found for instance %(instance_id)s."
+msgstr "Сеть не найдена для копии %(instance_id)s."
+
+#: cinder/exception.py:553
+msgid "No networks defined."
+msgstr "Сети не определены."
+
+#: cinder/exception.py:557
+#, python-format
+msgid ""
+"Either Network uuid %(network_uuid)s is not present or is not assigned to"
+" the project %(project_id)s."
+msgstr ""
+"Или uuid %(network_uuid)s сети не предоставлено или не присвоено проекту "
+"%(project_id)s."
+
+#: cinder/exception.py:562
+#, python-format
+msgid "Host is not set to the network (%(network_id)s)."
+msgstr "Узел не назначен сети (%(network_id)s)."
+
+#: cinder/exception.py:566
+#, python-format
+msgid "Network %(network)s has active ports, cannot delete."
+msgstr ""
+
+#: cinder/exception.py:570
+msgid "Could not find the datastore reference(s) which the VM uses."
+msgstr ""
+
+#: cinder/exception.py:574
+#, python-format
+msgid "No fixed IP associated with id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:578
+#, python-format
+msgid "Fixed ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:582
+#, python-format
+msgid "Instance %(instance_id)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:586
+#, python-format
+msgid "Network host %(host)s has zero fixed ips in network %(network_id)s."
+msgstr ""
+
+#: cinder/exception.py:591
+#, python-format
+msgid "Instance %(instance_id)s doesn't have fixed ip '%(ip)s'."
+msgstr ""
+
+#: cinder/exception.py:595
+#, python-format
+msgid "Host %(host)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:599
+#, python-format
+msgid ""
+"Fixed IP address (%(address)s) does not exist in network "
+"(%(network_uuid)s)."
+msgstr ""
+
+#: cinder/exception.py:604
+#, python-format
+msgid "Fixed IP address %(address)s is already in use."
+msgstr ""
+
+#: cinder/exception.py:608
+#, python-format
+msgid "Fixed IP address %(address)s is invalid."
+msgstr "Недопустимый фиксированный IP-адрес %(address)s."
+
+#: cinder/exception.py:612
+msgid "Zero fixed ips available."
+msgstr ""
+
+#: cinder/exception.py:616
+msgid "Zero fixed ips could be found."
+msgstr ""
+
+#: cinder/exception.py:620
+#, python-format
+msgid "Floating ip not found for id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:624
+#, python-format
+msgid "The DNS entry %(name)s already exists in domain %(domain)s."
+msgstr "Запись DNS %(name)s уже существует в домене %(domain)s."
+
+#: cinder/exception.py:628
+#, python-format
+msgid "Floating ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:632
+#, python-format
+msgid "Floating ip not found for host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:636
+msgid "Zero floating ips available."
+msgstr ""
+
+#: cinder/exception.py:640
+#, python-format
+msgid "Floating ip %(address)s is associated."
+msgstr ""
+
+#: cinder/exception.py:644
+#, python-format
+msgid "Floating ip %(address)s is not associated."
+msgstr ""
+
+#: cinder/exception.py:648
+msgid "Zero floating ips exist."
+msgstr ""
+
+#: cinder/exception.py:652
+#, python-format
+msgid "Interface %(interface)s not found."
+msgstr "Интерфейс %(interface)s не найден."
+
+#: cinder/exception.py:656
+#, python-format
+msgid "Keypair %(name)s not found for user %(user_id)s"
+msgstr ""
+
+#: cinder/exception.py:660
+#, python-format
+msgid "Certificate %(certificate_id)s not found."
+msgstr "Сертификат %(certificate_id)s не найден."
+
+#: cinder/exception.py:664
+#, python-format
+msgid "Service %(service_id)s could not be found."
+msgstr "Служба %(service_id)s не найдена."
+
+#: cinder/exception.py:668
+#, python-format
+msgid "Host %(host)s could not be found."
+msgstr "Узел %(host)s не найден."
+
+#: cinder/exception.py:672
+#, python-format
+msgid "Compute host %(host)s could not be found."
+msgstr "Узел сompute %(host)s не найден."
+
+#: cinder/exception.py:676
+#, python-format
+msgid "Could not find binary %(binary)s on host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:680
+#, python-format
+msgid "Auth token %(token)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:684
+#, python-format
+msgid "Access Key %(access_key)s could not be found."
+msgstr "Ключ доступа %(access_key)s не найден."
+
+#: cinder/exception.py:688
+msgid "Quota could not be found"
+msgstr "Квота не найдена"
+
+#: cinder/exception.py:692
+#, python-format
+msgid "Quota for project %(project_id)s could not be found."
+msgstr "Квота проекта %(project_id)s не найдена."
+
+#: cinder/exception.py:696
+#, fuzzy, python-format
+msgid "Quota class %(class_name)s could not be found."
+msgstr "Класс %(class_name)s не найден: %(exception)s"
+
+#: cinder/exception.py:700
+#, python-format
+msgid "Security group %(security_group_id)s not found."
+msgstr "Группа безопасности %(security_group_id)s не найдена."
+
+#: cinder/exception.py:704
+#, python-format
+msgid "Security group %(security_group_id)s not found for project %(project_id)s."
+msgstr ""
+"Группа безопасности %(security_group_id)s не найдена для проекта "
+"%(project_id)s."
+
+#: cinder/exception.py:709
+#, python-format
+msgid "Security group with rule %(rule_id)s not found."
+msgstr "Группа безопасности с правилом %(rule_id)s не найдена."
+
+#: cinder/exception.py:713
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is already associated with the "
+"instance %(instance_id)s"
+msgstr ""
+"Группа безопасности %(security_group_id)s уже ассоциирована с копией "
+"%(instance_id)s"
+
+#: cinder/exception.py:718
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is not associated with the instance "
+"%(instance_id)s"
+msgstr ""
+"Группа безопасности %(security_group_id)s не ассоциирована с копией "
+"%(instance_id)s"
+
+#: cinder/exception.py:723
+#, python-format
+msgid "Migration %(migration_id)s could not be found."
+msgstr "Перемещение %(migration_id)s не найдено."
+
+#: cinder/exception.py:727
+#, python-format
+msgid "Migration not found for instance %(instance_id)s with status %(status)s."
+msgstr "Перемещение не найдено для копии %(instance_id)s в состоянии %(status)s."
+
+#: cinder/exception.py:732
+#, python-format
+msgid "Console pool %(pool_id)s could not be found."
+msgstr "Пул консоли %(pool_id)s не найден."
+
+#: cinder/exception.py:736
+#, python-format
+msgid ""
+"Console pool of type %(console_type)s for compute host %(compute_host)s "
+"on proxy host %(host)s not found."
+msgstr ""
+
+#: cinder/exception.py:742
+#, python-format
+msgid "Console %(console_id)s could not be found."
+msgstr "Консоль %(console_id)s не найдена."
+
+#: cinder/exception.py:746
+#, python-format
+msgid "Console for instance %(instance_id)s could not be found."
+msgstr "Консоль для копии %(instance_id)s не найдена."
+
+#: cinder/exception.py:750
+#, python-format
+msgid ""
+"Console for instance %(instance_id)s in pool %(pool_id)s could not be "
+"found."
+msgstr "Консоль для копии %(instance_id)s в пуле %(pool_id)s не найдена."
+
+#: cinder/exception.py:755
+#, python-format
+msgid "Invalid console type %(console_type)s "
+msgstr "Недопустимый тип консоли %(console_type)s "
+
+#: cinder/exception.py:759
+msgid "Zero instance types found."
+msgstr ""
+
+#: cinder/exception.py:763
+#, python-format
+msgid "Instance type %(instance_type_id)s could not be found."
+msgstr "Тип копии %(instance_type_id)s не найден."
+
+#: cinder/exception.py:767
+#, python-format
+msgid "Instance type with name %(instance_type_name)s could not be found."
+msgstr "Тип копии с названием %(instance_type_name)s не найден."
+
+#: cinder/exception.py:772
+#, python-format
+msgid "Flavor %(flavor_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:776
+#, fuzzy, python-format
+msgid "Cell %(cell_id)s could not be found."
+msgstr "Зона %(zone_id)s не найдена."
+
+#: cinder/exception.py:780
+#, python-format
+msgid "Scheduler Host Filter %(filter_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:784
+#, python-format
+msgid "Scheduler cost function %(cost_fn_str)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:789
+#, python-format
+msgid "Scheduler weight flag not found: %(flag_name)s"
+msgstr ""
+
+#: cinder/exception.py:793
+#, python-format
+msgid "Instance %(instance_id)s has no metadata with key %(metadata_key)s."
+msgstr "Копия %(instance_id)s не имеет метаданных с ключом %(metadata_key)s."
+
+#: cinder/exception.py:798
+#, python-format
+msgid ""
+"Instance Type %(instance_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:803
+msgid "LDAP object could not be found"
+msgstr "Объект LDAP не найден"
+
+#: cinder/exception.py:807
+#, python-format
+msgid "LDAP user %(user_id)s could not be found."
+msgstr "Пользователь LDAP %(user_id)s не найден."
+
+#: cinder/exception.py:811
+#, python-format
+msgid "LDAP group %(group_id)s could not be found."
+msgstr "Группа LDAP %(group_id)s не найдена."
+
+#: cinder/exception.py:815
+#, python-format
+msgid "LDAP user %(user_id)s is not a member of group %(group_id)s."
+msgstr "Пользователь LDAP %(user_id)s не является участником группы %(group_id)s."
+
+#: cinder/exception.py:819
+#, python-format
+msgid "File %(file_path)s could not be found."
+msgstr "Файл %(file_path)s не может быть найден."
+
+#: cinder/exception.py:823
+msgid "Zero files could be found."
+msgstr ""
+
+#: cinder/exception.py:827
+#, python-format
+msgid "Virtual switch associated with the network adapter %(adapter)s not found."
+msgstr ""
+"Не найден виртуальный переключатель ассоциированный с сетевым адаптером "
+"%(adapter)s."
+
+#: cinder/exception.py:832
+#, python-format
+msgid "Network adapter %(adapter)s could not be found."
+msgstr "Сетевой адаптер %(adapter)s не может быть найден."
+
+#: cinder/exception.py:836
+#, python-format
+msgid "Class %(class_name)s could not be found: %(exception)s"
+msgstr "Класс %(class_name)s не найден: %(exception)s"
+
+#: cinder/exception.py:840
+msgid "Action not allowed."
+msgstr "Действие не разрешено."
+
+#: cinder/exception.py:844
+#, python-format
+msgid "Unable to use global role %(role_id)s"
+msgstr "Невозможно использовать глобальные полномочия %(role_id)s"
+
+#: cinder/exception.py:848
+msgid "Rotation is not allowed for snapshots"
+msgstr ""
+
+#: cinder/exception.py:852
+msgid "Rotation param is required for backup image_type"
+msgstr ""
+
+#: cinder/exception.py:861
+#, python-format
+msgid "Key pair %(key_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:865
+#, python-format
+msgid "User %(user)s already exists."
+msgstr "Пользователь %(user)s уже существует."
+
+#: cinder/exception.py:869
+#, python-format
+msgid "LDAP user %(user)s already exists."
+msgstr "Пользователь LDAP %(user)s уже существует."
+
+#: cinder/exception.py:873
+#, python-format
+msgid "LDAP group %(group)s already exists."
+msgstr "Группа LDAP %(group)s уже существует."
+
+#: cinder/exception.py:877
+#, python-format
+msgid "User %(uid)s is already a member of the group %(group_dn)s"
+msgstr "Пользователь %(uid)s уже является участником группы %(group_dn)s"
+
+#: cinder/exception.py:882
+#, python-format
+msgid "Project %(project)s already exists."
+msgstr "Проект %(project)s уже существует."
+
+#: cinder/exception.py:886
+#, python-format
+msgid "Instance %(name)s already exists."
+msgstr "Копия %(name)s уже существует."
+
+#: cinder/exception.py:890
+#, python-format
+msgid "Instance Type %(name)s already exists."
+msgstr "Тип копии %(name)s уже существует."
+
+#: cinder/exception.py:894
+#, python-format
+msgid "Volume Type %(name)s already exists."
+msgstr "Тип тома %(name)s уже существует."
+
+#: cinder/exception.py:898
+#, python-format
+msgid "%(path)s is on shared storage: %(reason)s"
+msgstr "%(path)s располагается на общедоступном накопителе: %(reason)s"
+
+#: cinder/exception.py:902
+msgid "Migration error"
+msgstr "Ошибка перемещения"
+
+#: cinder/exception.py:906
+#, python-format
+msgid "Malformed message body: %(reason)s"
+msgstr "Неправильное тело сообщения: %(reason)s"
+
+#: cinder/exception.py:910
+#, python-format
+msgid "Could not find config at %(path)s"
+msgstr "Невозможно найти конфигурацию по адресу %(path)s"
+
+#: cinder/exception.py:914
+#, python-format
+msgid "Could not load paste app '%(name)s' from %(path)s"
+msgstr ""
+
+#: cinder/exception.py:918
+msgid "When resizing, instances must change size!"
+msgstr "При изменении размера, копии должны изменить размер!"
+
+#: cinder/exception.py:922
+msgid "Image is larger than instance type allows"
+msgstr "Образ больше, чем допустимо для этого типа копии"
+
+#: cinder/exception.py:926
+msgid "1 or more Zones could not complete the request"
+msgstr "1-а или несколько зон не могут завершить запрос"
+
+#: cinder/exception.py:930
+msgid "Instance type's memory is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:934
+msgid "Instance type's disk is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:938
+#, python-format
+msgid "Insufficient free memory on compute node to start %(uuid)s."
+msgstr "Недостаточно памяти на узле сети compute для запуска %(uuid)s."
+
+#: cinder/exception.py:942
+msgid "Could not fetch bandwidth/cpu/disk metrics for this host."
+msgstr ""
+
+#: cinder/exception.py:946
+#, python-format
+msgid "No valid host was found. %(reason)s"
+msgstr "Допустимый узел не найден. %(reason)s"
+
+#: cinder/exception.py:950
+#, python-format
+msgid "Host %(host)s is not up or doesn't exist."
+msgstr "Узел %(host)s не работает или не существует."
+
+#: cinder/exception.py:954
+msgid "Quota exceeded"
+msgstr "Превышена квота"
+
+#: cinder/exception.py:958
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: action '%(action)s' caused an error: "
+"%(reason)s."
+msgstr ""
+
+#: cinder/exception.py:963
+#, python-format
+msgid "Aggregate %(aggregate_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:967
+#, python-format
+msgid "Aggregate %(aggregate_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:971
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:975
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:980
+#, python-format
+msgid "Host %(host)s already member of another aggregate."
+msgstr ""
+
+#: cinder/exception.py:984
+#, python-format
+msgid "Aggregate %(aggregate_id)s already has host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:988
+#, python-format
+msgid "Detected more than one volume with name %(vol_name)s"
+msgstr ""
+
+#: cinder/exception.py:992
+#, python-format
+msgid "Cannot create volume_type with name %(name)s and specs %(extra_specs)s"
+msgstr ""
+"Невозможно создать volume_type с именем %(name)s и спецификациями "
+"%(extra_specs)s"
+
+#: cinder/exception.py:997
+msgid "Unable to create instance type"
+msgstr ""
+
+#: cinder/exception.py:1001
+msgid "Bad response from SolidFire API"
+msgstr ""
+
+#: cinder/exception.py:1005
+#, python-format
+msgid "Error in SolidFire API response: status=%(status)s"
+msgstr ""
+
+#: cinder/exception.py:1009
+#, python-format
+msgid "Error in SolidFire API response: data=%(data)s"
+msgstr ""
+
+#: cinder/exception.py:1013
+#, python-format
+msgid "Detected existing vlan with id %(vlan)d"
+msgstr ""
+
+#: cinder/exception.py:1017
+#, python-format
+msgid "Instance %(instance_id)s could not be found."
+msgstr "Копия %(instance_id)s не найдена."
+
+#: cinder/exception.py:1021
+#, python-format
+msgid "Invalid id: %(val)s (expecting \"i-...\")."
+msgstr ""
+
+#: cinder/exception.py:1025
+#, fuzzy, python-format
+msgid "Could not fetch image %(image)s"
+msgstr "Получение образа %(image)s"
+
+#: cinder/log.py:315
+#, python-format
+msgid "syslog facility must be one of: %s"
+msgstr ""
+
+#: cinder/manager.py:146
+#, python-format
+msgid "Skipping %(full_task_name)s, %(ticks_to_skip)s ticks left until next run"
+msgstr ""
+"Пропуск %(full_task_name)s, %(ticks_to_skip)s раз осталось, для "
+"произведения следующего запуска"
+
+#: cinder/manager.py:152
+#, python-format
+msgid "Running periodic task %(full_task_name)s"
+msgstr "Запуск повторяющегося задания %(full_task_name)s"
+
+#: cinder/manager.py:159
+#, python-format
+msgid "Error during %(full_task_name)s: %(e)s"
+msgstr "Ошибка во время %(full_task_name)s: %(e)s"
+
+#: cinder/manager.py:203
+msgid "Notifying Schedulers of capabilities ..."
+msgstr ""
+
+#: cinder/policy.py:30
+msgid "JSON file representing policy"
+msgstr ""
+
+#: cinder/policy.py:33
+msgid "Rule checked when requested rule is not found"
+msgstr ""
+
+#: cinder/service.py:137
+msgid "SIGTERM received"
+msgstr ""
+
+#: cinder/service.py:177
+#, python-format
+msgid "Starting %(topic)s node (version %(vcs_string)s)"
+msgstr "Запуск узла сети (версия %(vcs_string)s) %(topic)s"
+
+#: cinder/service.py:195
+#, python-format
+msgid "Creating Consumer connection for Service %s"
+msgstr ""
+
+#: cinder/service.py:282
+msgid "Service killed that has no database entry"
+msgstr "Служба завершила работу из-за отсутствия записи базы данных"
+
+#: cinder/service.py:319
+msgid "The service database object disappeared, Recreating it."
+msgstr "Объект сервиса в базе данных отсутствует, Повторное создание."
+
+#: cinder/service.py:334
+msgid "Recovered model server connection!"
+msgstr ""
+
+#: cinder/service.py:340
+msgid "model server went away"
+msgstr ""
+
+#: cinder/service.py:433
+msgid "Full set of FLAGS:"
+msgstr "Полный набор ФЛАГОВ:"
+
+#: cinder/service.py:440
+#, python-format
+msgid "%(flag)s : FLAG SET "
+msgstr ""
+
+#: cinder/utils.py:79
+#, python-format
+msgid "Inner Exception: %s"
+msgstr "Вложенное исключение: %s"
+
+#: cinder/utils.py:165
+#, python-format
+msgid "Fetching %s"
+msgstr "Получение %s"
+
+#: cinder/utils.py:210
+#, python-format
+msgid "Got unknown keyword args to utils.execute: %r"
+msgstr "Приняты неизвестные аргументы ключевого слова для utils.execute: %r"
+
+#: cinder/utils.py:220
+#, python-format
+msgid "Running cmd (subprocess): %s"
+msgstr "Выполнение команды (субпроцесс): %s"
+
+#: cinder/utils.py:236 cinder/utils.py:315
+#, python-format
+msgid "Result was %s"
+msgstr "Результат %s"
+
+#: cinder/utils.py:249
+#, python-format
+msgid "%r failed. Retrying."
+msgstr "%r ошибка. Выполняется повтор."
+
+#: cinder/utils.py:291
+#, python-format
+msgid "Running cmd (SSH): %s"
+msgstr "Выполнение команды (SSH): %s"
+
+#: cinder/utils.py:293
+msgid "Environment not supported over SSH"
+msgstr "Среда не поддерживается с использованием SSH"
+
+#: cinder/utils.py:297
+msgid "process_input not supported over SSH"
+msgstr "process_input не поддерживается с использованием SSH"
+
+#: cinder/utils.py:352
+#, python-format
+msgid "debug in callback: %s"
+msgstr "отладка в обратном вызове: %s"
+
+#: cinder/utils.py:534
+#, python-format
+msgid "Link Local address is not found.:%s"
+msgstr ""
+
+#: cinder/utils.py:537
+#, python-format
+msgid "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+msgstr ""
+
+#: cinder/utils.py:648
+#, python-format
+msgid "Invalid backend: %s"
+msgstr "Недопустимый внутренний интерфейс: %s"
+
+#: cinder/utils.py:659
+#, python-format
+msgid "backend %s"
+msgstr "внутренний интерфейс %s"
+
+#: cinder/utils.py:709
+msgid "in looping call"
+msgstr ""
+
+#: cinder/utils.py:927
+#, python-format
+msgid "Attempting to grab semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:931
+#, python-format
+msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:935
+#, python-format
+msgid "Attempting to grab file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:942
+#, python-format
+msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:1001
+#, python-format
+msgid "Found sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1008
+#, python-format
+msgid "Cleaned sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1023
+#, python-format
+msgid "Found lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1028
+#, python-format
+msgid "Cleaned lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1138
+#, python-format
+msgid "Expected object of type: %s"
+msgstr "Ожидался объект типа: %s"
+
+#: cinder/utils.py:1169
+#, python-format
+msgid "Invalid server_string: %s"
+msgstr "Недопустимая server_string: %s"
+
+#: cinder/utils.py:1298
+#, python-format
+msgid "timefunc: '%(name)s' took %(total_time).2f secs"
+msgstr "timefunc: '%(name)s' заняла %(total_time).2f с."
+
+#: cinder/utils.py:1330
+msgid "Original exception being dropped"
+msgstr "Исходное исключение было сброшено"
+
+#: cinder/utils.py:1461
+#, python-format
+msgid "Class %(fullname)s is deprecated: %(msg)s"
+msgstr "Класс %(fullname)s устарел: %(msg)s"
+
+#: cinder/utils.py:1463
+#, python-format
+msgid "Class %(fullname)s is deprecated"
+msgstr "Класс %(fullname)s устарел"
+
+#: cinder/utils.py:1495
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated: %(msg)s"
+msgstr "Функция %(name)s в %(location)s устарела: %(msg)s"
+
+#: cinder/utils.py:1497
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated"
+msgstr "Функция %(name)s в %(location)s устарела"
+
+#: cinder/utils.py:1681
+#, fuzzy, python-format
+msgid "Could not remove tmpdir: %s"
+msgstr "Ошибка удаления контейнера: %s"
+
+#: cinder/wsgi.py:97
+#, python-format
+msgid "Started %(name)s on %(host)s:%(port)s"
+msgstr "Выполняется %(name)s на %(host)s:%(port)s"
+
+#: cinder/wsgi.py:108
+msgid "Stopping WSGI server."
+msgstr "Выполняется останов сервера WSGI."
+
+#: cinder/wsgi.py:111
+msgid "Stopping raw TCP server."
+msgstr "Выполняется останов сервера TCP."
+
+#: cinder/wsgi.py:117
+#, python-format
+msgid "Starting TCP server %(arg0)s on %(host)s:%(port)s"
+msgstr "Запуск TCP сервера %(arg0)s на %(host)s:%(port)s"
+
+#: cinder/wsgi.py:133
+msgid "WSGI server has stopped."
+msgstr "Сервер WSGI был остановлен."
+
+#: cinder/wsgi.py:211
+msgid "You must implement __call__"
+msgstr ""
+
+#: cinder/api/direct.py:218
+msgid "not available"
+msgstr "недоступно"
+
+#: cinder/api/direct.py:299
+#, python-format
+msgid "Returned non-serializeable type: %s"
+msgstr ""
+
+#: cinder/api/sizelimit.py:51
+msgid "Request is too large."
+msgstr ""
+
+#: cinder/api/validator.py:142
+#, python-format
+msgid "%(key)s with value %(value)s failed validator  %(validator)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:73
+#, python-format
+msgid "%(code)s: %(message)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:95
+#, python-format
+msgid "FaultWrapper: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:170
+msgid "Too many failed authentications."
+msgstr "Слишком много неудачных попыток аутентификации."
+
+#: cinder/api/ec2/__init__.py:180
+#, python-format
+msgid ""
+"Access key %(access_key)s has had %(failures)d failed authentications and"
+" will be locked out for %(lock_mins)d minutes."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:267
+msgid "Signature not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:271
+msgid "Access key not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:306 cinder/api/ec2/__init__.py:319
+msgid "Failure communicating with keystone"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:388
+#, python-format
+msgid "Authentication Failure: %s"
+msgstr "Ошибка аутентификации: %s"
+
+#: cinder/api/ec2/__init__.py:404
+#, python-format
+msgid "Authenticated Request For %(uname)s:%(pname)s)"
+msgstr "Запрос аутентификации для %(uname)s:%(pname)s)"
+
+#: cinder/api/ec2/__init__.py:435
+#, python-format
+msgid "action: %s"
+msgstr "действие: %s"
+
+#: cinder/api/ec2/__init__.py:437
+#, python-format
+msgid "arg: %(key)s\t\tval: %(value)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:512
+#, python-format
+msgid "Unauthorized request for controller=%(controller)s and action=%(action)s"
+msgstr ""
+"Неавторизированный запрос для контроллера=%(controller)s и "
+"действия=%(action)s"
+
+#: cinder/api/ec2/__init__.py:584
+#, python-format
+msgid "InstanceNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:590
+#, python-format
+msgid "VolumeNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:596
+#, python-format
+msgid "SnapshotNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:602
+#, python-format
+msgid "NotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:605
+#, python-format
+msgid "EC2APIError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:613
+#, python-format
+msgid "KeyPairExists raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:617
+#, python-format
+msgid "InvalidParameterValue raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:621
+#, python-format
+msgid "InvalidPortRange raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:625
+#, python-format
+msgid "NotAuthorized raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:629
+#, python-format
+msgid "InvalidRequest raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:633
+#, python-format
+msgid "QuotaError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:637
+#, python-format
+msgid "Invalid id: bogus (expecting \"i-...\"): %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:646
+#, python-format
+msgid "Unexpected error raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:647
+#, python-format
+msgid "Environment: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:649 cinder/api/metadata/handler.py:248
+msgid "An unknown error has occurred. Please try your request again."
+msgstr ""
+"Произошла неизвестная ошибка. Пожалуйста, попытайтесь повторить ваш "
+"запрос."
+
+#: cinder/api/ec2/apirequest.py:64
+#, python-format
+msgid "Unsupported API request: controller = %(controller)s, action = %(action)s"
+msgstr ""
+"Неподдерживаемый запрос API: контроллер = %(controller)s, действие = "
+"%(action)s"
+
+#: cinder/api/ec2/cloud.py:336
+#, python-format
+msgid "Create snapshot of volume %s"
+msgstr "Создать снимок тома %s"
+
+#: cinder/api/ec2/cloud.py:372
+#, fuzzy, python-format
+msgid ""
+"Value (%s) for KeyName is invalid. Content limited to Alphanumeric "
+"character, spaces, dashes, and underscore."
+msgstr ""
+"Значение (%s) для параметра GroupName недопустимо. Содержание ограничено "
+"буквенно-цифровыми символами, пробелами, тире и подчёркиваниями."
+
+#: cinder/api/ec2/cloud.py:378
+#, fuzzy, python-format
+msgid "Value (%s) for Keyname is invalid. Length exceeds maximum of 255."
+msgstr ""
+"Значение (%s) для параметра GroupName недопустимо. Длина превышает "
+"максимально допустимое значение 255."
+
+#: cinder/api/ec2/cloud.py:382
+#, python-format
+msgid "Create key pair %s"
+msgstr "Создание пары ключей %s"
+
+#: cinder/api/ec2/cloud.py:391
+#, python-format
+msgid "Import key %s"
+msgstr "Импортировать ключ %s"
+
+#: cinder/api/ec2/cloud.py:409
+#, python-format
+msgid "Delete key pair %s"
+msgstr "Удаление пары ключей %s"
+
+#: cinder/api/ec2/cloud.py:551
+#, fuzzy, python-format
+msgid "Invalid CIDR"
+msgstr "Недопустимый cidr %(cidr)s."
+
+#: cinder/api/ec2/cloud.py:639 cinder/api/ec2/cloud.py:693
+#: cinder/api/ec2/cloud.py:800
+msgid "Not enough parameters, need group_name or group_id"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:654
+#: cinder/api/openstack/compute/contrib/security_groups.py:517
+#, python-format
+msgid "Revoke security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:666 cinder/api/ec2/cloud.py:719
+#, fuzzy, python-format
+msgid "%s Not enough parameters to build a valid rule"
+msgstr "Недостаточно параметров для сбора правильного правила."
+
+#: cinder/api/ec2/cloud.py:684 cinder/api/ec2/cloud.py:744
+msgid "No rule for the specified parameters."
+msgstr "Отсутствует правило для заданных параметров."
+
+#: cinder/api/ec2/cloud.py:708
+#: cinder/api/openstack/compute/contrib/security_groups.py:354
+#, python-format
+msgid "Authorize security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:725
+#, fuzzy, python-format
+msgid "%s - This rule already exists in group"
+msgstr "Это правило уже существует в группе %s"
+
+#: cinder/api/ec2/cloud.py:769
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Content limited to "
+"Alphanumeric characters, spaces, dashes, and underscores."
+msgstr ""
+"Значение (%s) для параметра GroupName недопустимо. Содержание ограничено "
+"буквенно-цифровыми символами, пробелами, тире и подчёркиваниями."
+
+#: cinder/api/ec2/cloud.py:776
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Length exceeds maximum of "
+"255."
+msgstr ""
+"Значение (%s) для параметра GroupName недопустимо. Длина превышает "
+"максимально допустимое значение 255."
+
+#: cinder/api/ec2/cloud.py:780
+#: cinder/api/openstack/compute/contrib/security_groups.py:292
+#, python-format
+msgid "Create Security Group %s"
+msgstr "Создать группу безопасности %s"
+
+#: cinder/api/ec2/cloud.py:783
+#, python-format
+msgid "group %s already exists"
+msgstr "группа %s уже существует"
+
+#: cinder/api/ec2/cloud.py:815
+#: cinder/api/openstack/compute/contrib/security_groups.py:245
+#, python-format
+msgid "Delete security group %s"
+msgstr "Удалить группу безопасности %s"
+
+#: cinder/api/ec2/cloud.py:823 cinder/compute/manager.py:1630
+#, python-format
+msgid "Get console output for instance %s"
+msgstr "Получить консольный вывод для копии %s"
+
+#: cinder/api/ec2/cloud.py:894
+#, python-format
+msgid "Create volume from snapshot %s"
+msgstr "Создать том из снимка %s"
+
+#: cinder/api/ec2/cloud.py:898 cinder/api/openstack/compute/contrib/volumes.py:186
+#: cinder/api/openstack/volume/volumes.py:222
+#, python-format
+msgid "Create volume of %s GB"
+msgstr "Создание раздела %s ГБ"
+
+#: cinder/api/ec2/cloud.py:921
+#, fuzzy
+msgid "Delete Failed"
+msgstr "Ошибка создания"
+
+#: cinder/api/ec2/cloud.py:931
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(instance_id)s at %(device)s"
+msgstr "Подключить том %(volume_id)s для копии %(instance_id)s на %(device)s"
+
+#: cinder/api/ec2/cloud.py:939
+#, fuzzy
+msgid "Attach Failed."
+msgstr "Ошибка создания"
+
+#: cinder/api/ec2/cloud.py:952 cinder/api/openstack/compute/contrib/volumes.py:366
+#, python-format
+msgid "Detach volume %s"
+msgstr "Отсоединить том %s"
+
+#: cinder/api/ec2/cloud.py:959
+#, fuzzy, python-format
+msgid "Detach Volume Failed."
+msgstr "Отсоединить том %s"
+
+#: cinder/api/ec2/cloud.py:984 cinder/api/ec2/cloud.py:1041
+#: cinder/api/ec2/cloud.py:1518 cinder/api/ec2/cloud.py:1533
+#, python-format
+msgid "attribute not supported: %s"
+msgstr "аттрибут не поддерживается: %s"
+
+#: cinder/api/ec2/cloud.py:1107
+#, python-format
+msgid "vol = %s\n"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1255
+msgid "Allocate address"
+msgstr "Выделить адрес"
+
+#: cinder/api/ec2/cloud.py:1267
+#, python-format
+msgid "Release address %s"
+msgstr "Присвоить адрес %s"
+
+#: cinder/api/ec2/cloud.py:1272
+#, python-format
+msgid "Associate address %(public_ip)s to instance %(instance_id)s"
+msgstr "Присвоить адрес %(public_ip)s копии %(instance_id)s"
+
+#: cinder/api/ec2/cloud.py:1282
+#, python-format
+msgid "Disassociate address %s"
+msgstr "Исключить адрес %s"
+
+#: cinder/api/ec2/cloud.py:1308
+msgid "Image must be available"
+msgstr "Образ должен быть доступен"
+
+#: cinder/api/ec2/cloud.py:1329
+msgid "Going to start terminating instances"
+msgstr "Выполнение завершения работы копий"
+
+#: cinder/api/ec2/cloud.py:1343
+#, python-format
+msgid "Reboot instance %r"
+msgstr "Перезагрузить копию %r"
+
+#: cinder/api/ec2/cloud.py:1354
+msgid "Going to stop instances"
+msgstr "Выполнение остановки копий"
+
+#: cinder/api/ec2/cloud.py:1365
+msgid "Going to start instances"
+msgstr "Выполнение запуска копий"
+
+#: cinder/api/ec2/cloud.py:1455
+#, python-format
+msgid "De-registering image %s"
+msgstr "Исключение регистрации образа %s"
+
+#: cinder/api/ec2/cloud.py:1471
+msgid "imageLocation is required"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1490
+#, python-format
+msgid "Registered image %(image_location)s with id %(image_id)s"
+msgstr "Зарегистрированный образ %(image_location)s с идентификатором %(image_id)s"
+
+#: cinder/api/ec2/cloud.py:1536
+msgid "user or group not specified"
+msgstr "не указан пользователь или группа"
+
+#: cinder/api/ec2/cloud.py:1538
+msgid "only group \"all\" is supported"
+msgstr "поддерживается только группа \"все(all)\""
+
+#: cinder/api/ec2/cloud.py:1540
+msgid "operation_type must be add or remove"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1542
+#, python-format
+msgid "Updating image %s publicity"
+msgstr "Обновление осведомлённости об образе %s"
+
+#: cinder/api/ec2/cloud.py:1555
+#, python-format
+msgid "Not allowed to modify attributes for image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1603
+#, python-format
+msgid "Couldn't stop instance with in %d sec"
+msgstr "Невозможно остановить копию в течении %d с."
+
+#: cinder/api/metadata/handler.py:246 cinder/api/metadata/handler.py:253
+#, python-format
+msgid "Failed to get metadata for ip: %s"
+msgstr "Ошибка получения метаданных для ip: %s"
+
+#: cinder/api/openstack/__init__.py:43
+#, python-format
+msgid "Caught error: %s"
+msgstr "Обнаружена ошибка: %s"
+
+#: cinder/api/openstack/__init__.py:45 cinder/api/openstack/wsgi.py:886
+#, python-format
+msgid "%(url)s returned with HTTP %(status)d"
+msgstr "%(url)s возвратил с HTTP %(status)d"
+
+#: cinder/api/openstack/__init__.py:94
+msgid "Must specify an ExtensionManager class"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:105
+#, python-format
+msgid "Extended resource: %s"
+msgstr "Расширенный ресурс: %s"
+
+#: cinder/api/openstack/__init__.py:130
+#, python-format
+msgid ""
+"Extension %(ext_name)s: Cannot extend resource %(collection)s: No such "
+"resource"
+msgstr ""
+"Расширение %(ext_name)s: Невозможно расширить ресурс %(collection)s: Нет "
+"такого ресурса"
+
+#: cinder/api/openstack/__init__.py:135
+#, python-format
+msgid "Extension %(ext_name)s extending resource: %(collection)s"
+msgstr "Расширение %(ext_name)s расширение ресурса: %(collection)s"
+
+#: cinder/api/openstack/auth.py:90
+#, python-format
+msgid "%(user_id)s could not be found with token '%(token)s'"
+msgstr "%(user_id)s не может быть найден с токеном '%(token)s'"
+
+#: cinder/api/openstack/auth.py:134
+#, python-format
+msgid "%(user_id)s must be an admin or a member of %(project_id)s"
+msgstr "%(user_id)s должен быть администратором или участником %(project_id)s"
+
+#: cinder/api/openstack/auth.py:152
+msgid "Authentication requests must be made against a version root (e.g. /v2)."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:167
+#, python-format
+msgid "Could not find %s in request."
+msgstr "В запросе невозможно найти %s."
+
+#: cinder/api/openstack/auth.py:191
+#, python-format
+msgid "Successfully authenticated '%s'"
+msgstr "Аутентификация '%s' выполнена"
+
+#: cinder/api/openstack/auth.py:241
+msgid "User not found with provided API key."
+msgstr "Не найден пользователь с предоставленным API ключом."
+
+#: cinder/api/openstack/auth.py:258
+#, python-format
+msgid "Provided API key is valid, but not for user '%(username)s'"
+msgstr "Предоставленный ключ API допустим, но не для пользователя '%(username)s'"
+
+#: cinder/api/openstack/common.py:133 cinder/api/openstack/common.py:167
+msgid "limit param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:136 cinder/api/openstack/common.py:171
+msgid "limit param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:161
+msgid "offset param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:175
+msgid "offset param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:203
+#, python-format
+msgid "marker [%s] not found"
+msgstr "маркер [%s] не найден"
+
+#: cinder/api/openstack/common.py:243
+#, python-format
+msgid "href %s does not contain version"
+msgstr "href %s не содержит версию"
+
+#: cinder/api/openstack/common.py:278
+msgid "Image metadata limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/common.py:295
+#, python-format
+msgid "Converting nw_info: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:305
+#, fuzzy, python-format
+msgid "Converted networks: %s"
+msgstr "Непредвиденная ошибка: %s"
+
+#: cinder/api/openstack/common.py:338
+#, python-format
+msgid "Cannot '%(action)s' while instance is in %(attr)s %(state)s"
+msgstr "Невозможно '%(action)s', когда копия в %(attr)s %(state)s"
+
+#: cinder/api/openstack/common.py:341
+#, python-format
+msgid "Instance is in an invalid state for '%(action)s'"
+msgstr "Копия в недопустимом состоянии для '%(action)s'"
+
+#: cinder/api/openstack/common.py:421
+msgid "Rejecting snapshot request, snapshots currently disabled"
+msgstr "Отклонение запроса снимка, снимки в данный момент отключены"
+
+#: cinder/api/openstack/common.py:423
+msgid "Instance snapshots are not permitted at this time."
+msgstr "Снимки копии в настоящий момент недопустимы."
+
+#: cinder/api/openstack/extensions.py:188
+#, python-format
+msgid "Loaded extension: %s"
+msgstr "Загруженное расширение: %s"
+
+#: cinder/api/openstack/extensions.py:225
+#, python-format
+msgid "Ext name: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:226
+#, python-format
+msgid "Ext alias: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:227
+#, python-format
+msgid "Ext description: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:229
+#, python-format
+msgid "Ext namespace: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:230
+#, python-format
+msgid "Ext updated: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:232
+#, python-format
+msgid "Exception loading extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:246
+#, python-format
+msgid "Loading extension %s"
+msgstr "Загрузка расширения %s"
+
+#: cinder/api/openstack/extensions.py:252
+#, python-format
+msgid "Calling extension factory %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:264
+#, python-format
+msgid "Failed to load extension %(ext_factory)s: %(exc)s"
+msgstr "Ошибка загрузки расширения %(ext_factory)s: %(exc)s"
+
+#: cinder/api/openstack/extensions.py:344
+#, python-format
+msgid "Failed to load extension %(classpath)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:368
+#, python-format
+msgid "Failed to load extension %(ext_name)s: %(exc)s"
+msgstr "Ошибка загрузки расширения %(ext_name)s: %(exc)s"
+
+#: cinder/api/openstack/wsgi.py:135 cinder/api/openstack/wsgi.py:538
+msgid "cannot understand JSON"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:159
+#: cinder/api/openstack/compute/contrib/hosts.py:86
+msgid "cannot understand XML"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:543
+msgid "too many body keys"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:582
+#, fuzzy, python-format
+msgid "Exception handling resource: %s"
+msgstr "Расширенный ресурс: %s"
+
+#: cinder/api/openstack/wsgi.py:586
+#, python-format
+msgid "Fault thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:589
+#, python-format
+msgid "HTTP exception thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:697
+msgid "Unrecognized Content-Type provided in request"
+msgstr "В запросе предоставлен не распознанный тип-содержимого"
+
+#: cinder/api/openstack/wsgi.py:701
+msgid "No Content-Type provided in request"
+msgstr "Тип содержимого не предоставлен в запросе"
+
+#: cinder/api/openstack/wsgi.py:705
+msgid "Empty body provided in request"
+msgstr "Пустое тело предоставлено в запросе"
+
+#: cinder/api/openstack/wsgi.py:816
+#, python-format
+msgid "There is no such action: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:819 cinder/api/openstack/wsgi.py:832
+#: cinder/api/openstack/compute/server_metadata.py:58
+#: cinder/api/openstack/compute/server_metadata.py:76
+#: cinder/api/openstack/compute/server_metadata.py:101
+#: cinder/api/openstack/compute/server_metadata.py:126
+#: cinder/api/openstack/compute/contrib/admin_actions.py:211
+#: cinder/api/openstack/compute/contrib/console_output.py:52
+msgid "Malformed request body"
+msgstr "Неправильное тело запроса"
+
+#: cinder/api/openstack/wsgi.py:829
+msgid "Unsupported Content-Type"
+msgstr "Не поддерживаемый  тип содержимого"
+
+#: cinder/api/openstack/wsgi.py:841
+msgid "Malformed request url"
+msgstr "Неправильный запрос url"
+
+#: cinder/api/openstack/wsgi.py:889
+#, python-format
+msgid "%(url)s returned a fault: %(e)s"
+msgstr "%(url)s возвратил ошибку: %(e)s"
+
+#: cinder/api/openstack/xmlutil.py:265
+msgid "element is not a child"
+msgstr "элемент не является потомком"
+
+#: cinder/api/openstack/xmlutil.py:414
+msgid "root element selecting a list"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:739
+#, python-format
+msgid "Template tree mismatch; adding slave %(slavetag)s to master %(mastertag)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:858
+msgid "subclasses must implement construct()!"
+msgstr ""
+
+#: cinder/api/openstack/compute/extensions.py:29
+#: cinder/api/openstack/volume/extensions.py:29
+msgid "Initializing extension manager."
+msgstr "Инициализация диспетчера расширений."
+
+#: cinder/api/openstack/compute/image_metadata.py:40
+#: cinder/api/openstack/compute/images.py:146
+#: cinder/api/openstack/compute/images.py:161
+msgid "Image not found."
+msgstr "образ не найден."
+
+#: cinder/api/openstack/compute/image_metadata.py:79
+msgid "Incorrect request body format"
+msgstr "Неправильный формат тела запроса"
+
+#: cinder/api/openstack/compute/image_metadata.py:83
+#: cinder/api/openstack/compute/server_metadata.py:80
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:79
+#: cinder/api/openstack/compute/contrib/volumetypes.py:188
+msgid "Request body and URI mismatch"
+msgstr "Тело запроса и URI не совпадают"
+
+#: cinder/api/openstack/compute/image_metadata.py:86
+#: cinder/api/openstack/compute/server_metadata.py:84
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:82
+#: cinder/api/openstack/compute/contrib/volumetypes.py:191
+msgid "Request body contains too many items"
+msgstr "Тело запроса содержит избыточное количество объектов"
+
+#: cinder/api/openstack/compute/image_metadata.py:111
+msgid "Invalid metadata key"
+msgstr "Неправильный ключ метаданных"
+
+#: cinder/api/openstack/compute/ips.py:74
+msgid "Instance does not exist"
+msgstr "Копия не существует"
+
+#: cinder/api/openstack/compute/ips.py:97
+msgid "Instance is not a member of specified network"
+msgstr "Копия не является участником заданной сети"
+
+#: cinder/api/openstack/compute/limits.py:140
+#, python-format
+msgid ""
+"Only %(value)s %(verb)s request(s) can be made to %(uri)s every "
+"%(unit_string)s."
+msgstr ""
+"Только %(value)s %(verb)s запрос(ов) могут быть сделаны для %(uri)s, "
+"каждые %(unit_string)s."
+
+#: cinder/api/openstack/compute/limits.py:266
+msgid "This request was rate-limited."
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:38
+#: cinder/api/openstack/compute/server_metadata.py:122
+#: cinder/api/openstack/compute/server_metadata.py:159
+msgid "Server does not exist"
+msgstr "Сервер не существует"
+
+#: cinder/api/openstack/compute/server_metadata.py:141
+#: cinder/api/openstack/compute/server_metadata.py:152
+msgid "Metadata item was not found"
+msgstr "Элемент метаданных не найден"
+
+#: cinder/api/openstack/compute/servers.py:425
+#, python-format
+msgid "Invalid server status: %(status)s"
+msgstr "Недопустимое состояние сервера: %(status)s"
+
+#: cinder/api/openstack/compute/servers.py:433
+msgid "Invalid changes-since value"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:483
+msgid "Personality file limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:485
+msgid "Personality file path too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:487
+msgid "Personality file content too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:501
+msgid "Server name is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:505
+msgid "Server name is an empty string"
+msgstr "Имя сервера является пустой строкой"
+
+#: cinder/api/openstack/compute/servers.py:509
+msgid "Server name must be less than 256 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:527
+#, python-format
+msgid "Bad personality format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:530
+msgid "Bad personality format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:535
+#, python-format
+msgid "Personality content for %s cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:550
+#, python-format
+msgid "Bad networks format: network uuid is not in proper format (%s)"
+msgstr "Недопустимый сетевой формат: сетевой uuid имеет неправильный формат (%s)"
+
+#: cinder/api/openstack/compute/servers.py:559
+#, python-format
+msgid "Invalid fixed IP address (%s)"
+msgstr "Недопустимый фиксированный IP-адрес (%s)"
+
+#: cinder/api/openstack/compute/servers.py:566
+#, python-format
+msgid "Duplicate networks (%s) are not allowed"
+msgstr "Дубликаты сетей (%s) не разрешены"
+
+#: cinder/api/openstack/compute/servers.py:572
+#, python-format
+msgid "Bad network format: missing %s"
+msgstr "Недопустимый сетевой формат: отсутствует %s"
+
+#: cinder/api/openstack/compute/servers.py:575
+msgid "Bad networks format"
+msgstr "Недопустимый сетевой формат"
+
+#: cinder/api/openstack/compute/servers.py:587
+msgid "Userdata content cannot be decoded"
+msgstr "Содержимое данных пользователя не может быть дешифровано"
+
+#: cinder/api/openstack/compute/servers.py:594
+msgid "accessIPv4 is not proper IPv4 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:601
+msgid "accessIPv6 is not proper IPv6 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:633
+msgid "Server name is not defined"
+msgstr "Имя сервера не задано"
+
+#: cinder/api/openstack/compute/servers.py:675
+#: cinder/api/openstack/compute/servers.py:740
+msgid "Invalid flavorRef provided."
+msgstr "Предоставлен недопустимый flavorRef."
+
+#: cinder/api/openstack/compute/servers.py:737
+msgid "Can not find requested image"
+msgstr "Невозможно найти запрошенный образ"
+
+#: cinder/api/openstack/compute/servers.py:743
+msgid "Invalid key_name provided."
+msgstr "Предоставлен недопустимый key_name."
+
+#: cinder/api/openstack/compute/servers.py:829
+#: cinder/api/openstack/compute/servers.py:849
+msgid "Instance has not been resized."
+msgstr "С копией не производилось изменение размера."
+
+#: cinder/api/openstack/compute/servers.py:835
+#, python-format
+msgid "Error in confirm-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:855
+#, python-format
+msgid "Error in revert-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:868
+msgid "Argument 'type' for reboot is not HARD or SOFT"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:872
+msgid "Missing argument 'type' for reboot"
+msgstr "Отсутствует аргумент типа 'type' для перезагрузки"
+
+#: cinder/api/openstack/compute/servers.py:885
+#, python-format
+msgid "Error in reboot %s"
+msgstr "Ошибка при перезагрузке %s"
+
+#: cinder/api/openstack/compute/servers.py:897
+msgid "Unable to locate requested flavor."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:900
+msgid "Resize requires a change in size."
+msgstr "Изменение размера требует изменения объёма."
+
+#: cinder/api/openstack/compute/servers.py:924
+msgid "Malformed server entity"
+msgstr "Неправильный объект сервера"
+
+#: cinder/api/openstack/compute/servers.py:931
+msgid "Missing imageRef attribute"
+msgstr "Отсутствует атрибут imageRef"
+
+#: cinder/api/openstack/compute/servers.py:940
+msgid "Invalid imageRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:949
+msgid "Missing flavorRef attribute"
+msgstr "Отсутствует атрибут flavorRef"
+
+#: cinder/api/openstack/compute/servers.py:962
+msgid "No adminPass was specified"
+msgstr "adminPass не был задан"
+
+#: cinder/api/openstack/compute/servers.py:966
+#: cinder/api/openstack/compute/servers.py:1144
+msgid "Invalid adminPass"
+msgstr "Недопустимый adminPass"
+
+#: cinder/api/openstack/compute/servers.py:980
+msgid "Unable to parse metadata key/value pairs."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:993
+msgid "Resize request has invalid 'flavorRef' attribute."
+msgstr "Запрос изменения размера имеет недопустимый атрибут 'flavorRef'."
+
+#: cinder/api/openstack/compute/servers.py:996
+msgid "Resize requests require 'flavorRef' attribute."
+msgstr "Запросы изменение размера требуют атрибут 'flavorRef'."
+
+#: cinder/api/openstack/compute/servers.py:1014
+#: cinder/api/openstack/compute/contrib/aggregates.py:142
+#: cinder/api/openstack/compute/contrib/networks.py:65
+msgid "Invalid request body"
+msgstr "Недопустимый запрос тела"
+
+#: cinder/api/openstack/compute/servers.py:1019
+msgid "Could not parse imageRef from request."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1071
+msgid "Instance could not be found"
+msgstr "Копия не найдена"
+
+#: cinder/api/openstack/compute/servers.py:1074
+msgid "Cannot find image for rebuild"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1103
+msgid "createImage entity requires name attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1112
+#: cinder/api/openstack/compute/contrib/admin_actions.py:238
+msgid "Invalid metadata"
+msgstr "Недопустимые метаданные"
+
+#: cinder/api/openstack/compute/servers.py:1167
+#, python-format
+msgid "Removing options '%(unk_opt_str)s' from query"
+msgstr "Удаление параметров '%(unk_opt_str)s' из запроса"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:60
+#, python-format
+msgid "Compute.api::pause %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:77
+#, python-format
+msgid "Compute.api::unpause %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:94
+#, python-format
+msgid "compute.api::suspend %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:111
+#, python-format
+msgid "compute.api::resume %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:127
+#, python-format
+msgid "Error in migrate %s"
+msgstr "Ошибка перемещения %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:141
+#, python-format
+msgid "Compute.api::reset_network %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:154
+#: cinder/api/openstack/compute/contrib/admin_actions.py:170
+#: cinder/api/openstack/compute/contrib/admin_actions.py:186
+#: cinder/api/openstack/compute/contrib/multinic.py:41
+#: cinder/api/openstack/compute/contrib/rescue.py:44
+msgid "Server not found"
+msgstr "Сервер не найден"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:157
+#, python-format
+msgid "Compute.api::inject_network_info %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:173
+#, python-format
+msgid "Compute.api::lock %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:189
+#, python-format
+msgid "Compute.api::unlock %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:219
+#, python-format
+msgid "createBackup entity requires %s attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:223
+msgid "Malformed createBackup entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:229
+msgid "createBackup attribute 'rotation' must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:244
+#: cinder/api/openstack/compute/contrib/console_output.py:47
+#: cinder/api/openstack/compute/contrib/console_output.py:59
+#: cinder/api/openstack/compute/contrib/consoles.py:49
+#: cinder/api/openstack/compute/contrib/consoles.py:60
+#: cinder/api/openstack/compute/contrib/server_action_list.py:49
+#: cinder/api/openstack/compute/contrib/server_diagnostics.py:47
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:38
+msgid "Instance not found"
+msgstr "Копия не найдена"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:272
+msgid "host and block_migration must be specified."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:284
+#, python-format
+msgid "Live migration of instance %(id)s to host %(host)s failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:76
+#, fuzzy, python-format
+msgid ""
+"Cannot create aggregate with name %(name)s and availability zone "
+"%(avail_zone)s"
+msgstr ""
+"Невозможно создать volume_type с именем %(name)s и спецификациями "
+"%(extra_specs)s"
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:88
+#, python-format
+msgid "Cannot show aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:114
+#, fuzzy, python-format
+msgid "Cannot update aggregate: %(id)s"
+msgstr "Ошибка обновления агента: %(resp)r"
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:126
+#, python-format
+msgid "Cannot delete aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:139
+#, python-format
+msgid "Aggregates does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:152
+#: cinder/api/openstack/compute/contrib/aggregates.py:158
+#, python-format
+msgid "Cannot add host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:171
+#: cinder/api/openstack/compute/contrib/aggregates.py:175
+#, python-format
+msgid "Cannot remove host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:195
+#, python-format
+msgid "Cannot set metadata %(metadata)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/certificates.py:75
+msgid "Only root certificate can be retrieved."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/cloudpipe.py:146
+msgid ""
+"Unable to claim IP for VPN instances, ensure it isn't running, and try "
+"again in a few minutes"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:44
+msgid "Missing type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:56
+msgid "Invalid type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/disk_config.py:44
+#, python-format
+msgid "%s must be either 'MANUAL' or 'AUTO'."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/extended_server_attributes.py:77
+#: cinder/api/openstack/compute/contrib/extended_status.py:61
+msgid "Server not found."
+msgstr "Сервер не найден."
+
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:61
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:91
+#, fuzzy
+msgid "Flavor not found."
+msgstr "Сервер не найден."
+
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:49
+#: cinder/api/openstack/compute/contrib/volumetypes.py:158
+msgid "No Request Body"
+msgstr "Нет тела запроса"
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:159
+#, python-format
+msgid "No more floating ips in pool %s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:161
+msgid "No more floating ips available."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:201
+#: cinder/api/openstack/compute/contrib/floating_ips.py:230
+#: cinder/api/openstack/compute/contrib/security_groups.py:571
+#: cinder/api/openstack/compute/contrib/security_groups.py:604
+msgid "Missing parameter dict"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:204
+#: cinder/api/openstack/compute/contrib/floating_ips.py:233
+msgid "Address not specified"
+msgstr "Адрес не задан"
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:213
+msgid "No fixed ips associated to instance"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:216
+msgid "Associate floating ip failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:144
+#, python-format
+msgid "Invalid status: '%s'"
+msgstr "Недопустимое состояние: '%s'"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:148
+#, fuzzy, python-format
+msgid "Invalid mode: '%s'"
+msgstr "Недопустимое состояние: '%s'"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:152
+#, python-format
+msgid "Invalid update setting: '%s'"
+msgstr "Недопустимый параметр обновления: '%s'"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:170
+#, fuzzy, python-format
+msgid "Putting host %(host)s in maintenance mode %(mode)s."
+msgstr "Перевод узла %(host)s в %(state)s."
+
+#: cinder/api/openstack/compute/contrib/hosts.py:181
+#, python-format
+msgid "Setting host %(host)s to %(state)s."
+msgstr "Перевод узла %(host)s в %(state)s."
+
+#: cinder/api/openstack/compute/contrib/hosts.py:230
+msgid "Describe-resource is admin only functionality"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:238
+msgid "Host not found"
+msgstr "Узел не найден"
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:70
+msgid "Keypair name contains unsafe characters"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:95
+msgid "Keypair name must be between 1 and 255 characters long"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:100
+#, python-format
+msgid "Key pair '%s' already exists."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:52
+msgid "Missing 'networkId' argument for addFixedIp"
+msgstr "Отсутствует аргумент 'networkId' для addFixedIp"
+
+#: cinder/api/openstack/compute/contrib/multinic.py:68
+msgid "Missing 'address' argument for removeFixedIp"
+msgstr "Отсутствует аргумент 'address' для removeFixedIp"
+
+#: cinder/api/openstack/compute/contrib/multinic.py:77
+#, python-format
+msgid "Unable to find address %r"
+msgstr "Невозможно найти адрес %r"
+
+#: cinder/api/openstack/compute/contrib/networks.py:62
+#, python-format
+msgid "Network does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:70
+#, python-format
+msgid "Disassociating network with id %s"
+msgstr "Исключение сети с идентификатором %s"
+
+#: cinder/api/openstack/compute/contrib/networks.py:74
+#: cinder/api/openstack/compute/contrib/networks.py:91
+#: cinder/api/openstack/compute/contrib/networks.py:101
+msgid "Network not found"
+msgstr "Сеть не найдена"
+
+#: cinder/api/openstack/compute/contrib/networks.py:87
+#, python-format
+msgid "Showing network with id %s"
+msgstr "Отображение сети с идентификатором %s"
+
+#: cinder/api/openstack/compute/contrib/networks.py:97
+#, python-format
+msgid "Deleting network with id %s"
+msgstr "Удаление сети с идентификатором %s"
+
+#: cinder/api/openstack/compute/contrib/scheduler_hints.py:41
+msgid "Malformed scheduler_hints attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:222
+msgid "Security group id should be integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:243
+#, fuzzy, python-format
+msgid "Security group is still in use"
+msgstr "Группа безопасности (%s) не найдена"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:295
+#, python-format
+msgid "Security group %s already exists"
+msgstr "Группа безопасности %s уже существует"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:315
+#, python-format
+msgid "Security group %s is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:318
+#, python-format
+msgid "Security group %s cannot be empty."
+msgstr "Группа безопасности %s не может быть пустой."
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:321
+#, python-format
+msgid "Security group %s should not be greater than 255 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:348
+msgid "Parent group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:351
+#, python-format
+msgid "Security group (%s) not found"
+msgstr "Группа безопасности (%s) не найдена"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:369
+msgid "Not enough parameters to build a valid rule."
+msgstr "Недостаточно параметров для сбора правильного правила."
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:376
+#, python-format
+msgid "This rule already exists in group %s"
+msgstr "Это правило уже существует в группе %s"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:414
+msgid "Parent or group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:507
+msgid "Rule id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:510
+#, python-format
+msgid "Rule (%s) not found"
+msgstr "Правило (%s) не найдено"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:574
+#: cinder/api/openstack/compute/contrib/security_groups.py:607
+msgid "Security group not specified"
+msgstr "Группа безопасности не задана"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:578
+#: cinder/api/openstack/compute/contrib/security_groups.py:611
+msgid "Security group name cannot be empty"
+msgstr "Наименование группы безопасности не может отсутствовать"
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:45
+#, python-format
+msgid "start instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:54
+#, python-format
+msgid "stop instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:73
+#: cinder/api/openstack/volume/volumes.py:106
+#, python-format
+msgid "vol=%s"
+msgstr "vol=%s"
+
+#: cinder/api/openstack/compute/contrib/volumes.py:146
+#: cinder/api/openstack/volume/volumes.py:184
+#, python-format
+msgid "Delete volume with id: %s"
+msgstr "Удалить том с идентификатором: %s"
+
+#: cinder/api/openstack/compute/contrib/volumes.py:329
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(server_id)s at %(device)s"
+msgstr "Присоединить том %(volume_id)s к копии %(server_id)s на %(device)s"
+
+#: cinder/api/openstack/compute/contrib/volumes.py:481
+#: cinder/api/openstack/volume/snapshots.py:110
+#, python-format
+msgid "Delete snapshot with id: %s"
+msgstr "Удалить снимок с идентификатором: %s"
+
+#: cinder/api/openstack/compute/contrib/volumes.py:524
+#: cinder/api/openstack/volume/snapshots.py:150
+#, python-format
+msgid "Create snapshot from volume %s"
+msgstr "Создать снимок из тома %s"
+
+#: cinder/auth/fakeldap.py:33
+msgid "Attempted to instantiate singleton"
+msgstr ""
+
+#: cinder/auth/ldapdriver.py:650
+#, python-format
+msgid ""
+"Attempted to remove the last member of a group. Deleting the group at %s "
+"instead."
+msgstr ""
+"Попытка удаление последнего участника группы. Будет выполнено удаление "
+"группы в %s."
+
+#: cinder/auth/manager.py:298
+#, python-format
+msgid "Looking up user: %r"
+msgstr "Поиск пользователя: %r"
+
+#: cinder/auth/manager.py:302
+#, python-format
+msgid "Failed authorization for access key %s"
+msgstr "Ошибка авторизации для ключа доступа %s"
+
+#: cinder/auth/manager.py:308
+#, python-format
+msgid "Using project name = user name (%s)"
+msgstr ""
+
+#: cinder/auth/manager.py:315
+#, python-format
+msgid "failed authorization: no project named %(pjid)s (user=%(uname)s)"
+msgstr "ошибка авторизации: нет проекта под названием %(pjid)s (user=%(uname)s)"
+
+#: cinder/auth/manager.py:324
+#, python-format
+msgid ""
+"Failed authorization: user %(uname)s not admin and not member of project "
+"%(pjname)s"
+msgstr ""
+"Ошибка авторизации: пользователь %(uname)s не является администратором и "
+"не является участником проекта %(pjname)s"
+
+#: cinder/auth/manager.py:331 cinder/auth/manager.py:343
+#, python-format
+msgid "user.secret: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:332 cinder/auth/manager.py:344
+#, python-format
+msgid "expected_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:333 cinder/auth/manager.py:345
+#, python-format
+msgid "signature: %s"
+msgstr "подпись: %s"
+
+#: cinder/auth/manager.py:335 cinder/auth/manager.py:357
+#, python-format
+msgid "Invalid signature for user %s"
+msgstr "Не допустимая подпись для пользователя %s"
+
+#: cinder/auth/manager.py:353
+#, python-format
+msgid "host_only_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:449
+msgid "Must specify project"
+msgstr "Необходимо указать проект"
+
+#: cinder/auth/manager.py:490
+#, python-format
+msgid "Adding role %(role)s to user %(uid)s in project %(pid)s"
+msgstr "Добавление полномочий %(role)s для пользователя %(uid)s в проекте %(pid)s"
+
+#: cinder/auth/manager.py:493
+#, python-format
+msgid "Adding sitewide role %(role)s to user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:519
+#, python-format
+msgid "Removing role %(role)s from user %(uid)s on project %(pid)s"
+msgstr "Удаление полномочий %(role)s для пользователя %(uid)s в проекте %(pid)s"
+
+#: cinder/auth/manager.py:522
+#, python-format
+msgid "Removing sitewide role %(role)s from user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:595
+#, python-format
+msgid "Created project %(name)s with manager %(manager_user)s"
+msgstr "Созданный проект %(name)s с диспетчером %(manager_user)s"
+
+#: cinder/auth/manager.py:613
+#, python-format
+msgid "modifying project %s"
+msgstr "изменение проекта %s"
+
+#: cinder/auth/manager.py:625
+#, python-format
+msgid "Adding user %(uid)s to project %(pid)s"
+msgstr "Добавление пользователя %(uid)s в проект %(pid)s"
+
+#: cinder/auth/manager.py:646
+#, python-format
+msgid "Remove user %(uid)s from project %(pid)s"
+msgstr "Исключить пользователя %(uid)s из проекта %(pid)s"
+
+#: cinder/auth/manager.py:676
+#, python-format
+msgid "Deleting project %s"
+msgstr "Удаление проекта %s"
+
+#: cinder/auth/manager.py:734
+#, python-format
+msgid "Created user %(rvname)s (admin: %(rvadmin)r)"
+msgstr "Созданный пользователь %(rvname)s (admin: %(rvadmin)r)"
+
+#: cinder/auth/manager.py:743
+#, python-format
+msgid "Deleting user %s"
+msgstr "Удаление пользователя %s"
+
+#: cinder/auth/manager.py:753
+#, python-format
+msgid "Access Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:755
+#, python-format
+msgid "Secret Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:757
+#, python-format
+msgid "Admin status set to %(admin)r for user %(uid)s"
+msgstr "Режим администратора назначен %(admin)r для пользователя %(uid)s"
+
+#: cinder/auth/manager.py:802
+#, python-format
+msgid "No vpn data for project %s"
+msgstr "Нет vpn данных для проекта %s"
+
+#: cinder/cloudpipe/pipelib.py:46
+#, fuzzy, python-format
+msgid "Instance type for vpn instances"
+msgstr "Недопустимый тип копии %(instance_type)s."
+
+#: cinder/cloudpipe/pipelib.py:49
+msgid "Template for cloudpipe instance boot script"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:52
+msgid "Network to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:55
+msgid "Netmask to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:107
+#, python-format
+msgid "Launching VPN for %s"
+msgstr "Запуск VPN для %s"
+
+#: cinder/compute/api.py:141
+msgid "No compute host specified"
+msgstr ""
+
+#: cinder/compute/api.py:144
+#, python-format
+msgid "Unable to find host for Instance %s"
+msgstr "Невозможно найти узел для копии %s"
+
+#: cinder/compute/api.py:192
+#, python-format
+msgid ""
+"Quota exceeded for %(pid)s, tried to set %(num_metadata)s metadata "
+"properties"
+msgstr ""
+"Превышена квота для %(pid)s, попытка назначить %(num_metadata)s свойств "
+"метаданных"
+
+#: cinder/compute/api.py:203
+#, python-format
+msgid "Quota exceeded for %(pid)s, metadata property key or value too long"
+msgstr ""
+"Превышена квота для %(pid)s, превышено ключевое свойство метаданных или "
+"значение"
+
+#: cinder/compute/api.py:257
+#, fuzzy
+msgid "Cannot run any more instances of this type."
+msgstr ""
+"Превышена квота копий. Вы не можете запустить дополнительные копии этого "
+"типа."
+
+#: cinder/compute/api.py:259
+#, fuzzy, python-format
+msgid "Can only run %s more instances of this type."
+msgstr "Превышена квота копий. Вы можете запустить только %s копий этого типа."
+
+#: cinder/compute/api.py:261
+#, fuzzy, python-format
+msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances. "
+msgstr "Превышена квота для %(pid)s, попытка выполнить %(min_count)s копий"
+
+#: cinder/compute/api.py:310
+msgid "Creating a raw instance"
+msgstr "Создание необработанной копии"
+
+#: cinder/compute/api.py:312
+#, python-format
+msgid "Using Kernel=%(kernel_id)s, Ramdisk=%(ramdisk_id)s"
+msgstr ""
+
+#: cinder/compute/api.py:383
+#, python-format
+msgid "Going to run %s instances..."
+msgstr "Выполняет запуск %s копий..."
+
+#: cinder/compute/api.py:447
+#, python-format
+msgid "bdm %s"
+msgstr "bdm %s"
+
+#: cinder/compute/api.py:474
+#, python-format
+msgid "block_device_mapping %s"
+msgstr "block_device_mapping %s"
+
+#: cinder/compute/api.py:591
+#, python-format
+msgid "Sending create to scheduler for %(pid)s/%(uid)s's"
+msgstr "Отправка операции создания в расписание для %(pid)s/%(uid)s's"
+
+#: cinder/compute/api.py:871
+#, fuzzy
+msgid "Going to try to soft delete instance"
+msgstr "Выполнение запуска копий"
+
+#: cinder/compute/api.py:891
+#, fuzzy, python-format
+msgid "No host for instance, deleting immediately"
+msgstr "Отсутствует узел для копии %s, немедленное удаление"
+
+#: cinder/compute/api.py:939
+#, fuzzy, python-format
+msgid "Going to try to terminate instance"
+msgstr "Будет выполнения попытка завершить работу %s"
+
+#: cinder/compute/api.py:977
+#, fuzzy, python-format
+msgid "Going to try to stop instance"
+msgstr "Попытка остановить %s"
+
+#: cinder/compute/api.py:996
+#, fuzzy, python-format
+msgid "Going to try to start instance"
+msgstr "Попытка запустить %s"
+
+#: cinder/compute/api.py:1000
+#, python-format
+msgid "Instance %(instance_uuid)s is not stopped. (%(vm_state)s"
+msgstr "Копия %(instance_uuid)s не остановлена. (%(vm_state)s"
+
+#: cinder/compute/api.py:1071 cinder/volume/api.py:173
+#: cinder/volume/volume_types.py:64
+#, python-format
+msgid "Searching by: %s"
+msgstr "Поиск по: %s"
+
+#: cinder/compute/api.py:1201
+#, python-format
+msgid "Image type not recognized %s"
+msgstr "Тип образа не распознан %s"
+
+#: cinder/compute/api.py:1369
+msgid "flavor_id is None. Assuming migration."
+msgstr ""
+
+#: cinder/compute/api.py:1377
+#, python-format
+msgid ""
+"Old instance type %(current_instance_type_name)s,  new instance type "
+"%(new_instance_type_name)s"
+msgstr ""
+"Устаревший тип копии %(current_instance_type_name)s,  новый тип копии "
+"%(new_instance_type_name)s"
+
+#: cinder/compute/api.py:1644
+#, python-format
+msgid "multiple fixedips exist, using the first: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:57 cinder/compute/instance_types.py:65
+msgid "create arguments must be positive integers"
+msgstr ""
+
+#: cinder/compute/instance_types.py:76 cinder/volume/volume_types.py:41
+#, python-format
+msgid "DB error: %s"
+msgstr "Ошибка БД: %s"
+
+#: cinder/compute/instance_types.py:86
+#, python-format
+msgid "Instance type %s not found for deletion"
+msgstr "Копия типа %s не найдена для выполнения удаления"
+
+#: cinder/compute/manager.py:138
+#, python-format
+msgid "check_instance_lock: decorating: |%s|"
+msgstr "check_instance_lock: оформление: |%s|"
+
+#: cinder/compute/manager.py:140
+#, python-format
+msgid ""
+"check_instance_lock: arguments: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+msgstr ""
+"check_instance_lock: аргументы: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+
+#: cinder/compute/manager.py:144
+#, python-format
+msgid "check_instance_lock: locked: |%s|"
+msgstr "check_instance_lock: заблокирован: |%s|"
+
+#: cinder/compute/manager.py:146
+#, python-format
+msgid "check_instance_lock: admin: |%s|"
+msgstr "check_instance_lock: администратор: |%s|"
+
+#: cinder/compute/manager.py:151
+#, python-format
+msgid "check_instance_lock: executing: |%s|"
+msgstr "check_instance_lock: исполнение: |%s|"
+
+#: cinder/compute/manager.py:155
+#, python-format
+msgid "check_instance_lock: not executing |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:201
+#, python-format
+msgid "Unable to load the virtualization driver: %s"
+msgstr "Невозможно загрузить драйвер виртуализации: %s"
+
+#: cinder/compute/manager.py:223
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s has been destroyed from under us while trying "
+"to set it to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:240
+#, python-format
+msgid "Current state is %(drv_state)s, state in DB is %(db_state)s."
+msgstr ""
+
+#: cinder/compute/manager.py:245
+msgid "Rebooting instance after cinder-compute restart."
+msgstr ""
+
+#: cinder/compute/manager.py:255
+msgid "Hypervisor driver does not support firewall rules"
+msgstr "Драйвер гипервизора не поддерживает правила брандмауэра"
+
+#: cinder/compute/manager.py:260
+msgid "Checking state"
+msgstr ""
+
+#: cinder/compute/manager.py:329
+#, python-format
+msgid "Setting up bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:400
+#, python-format
+msgid "Instance %s already deleted from database. Attempting forceful vm deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:406
+#, fuzzy, python-format
+msgid "Exception encountered while terminating the instance %s"
+msgstr "исключение завершает работу копии %(instance_uuid)s"
+
+#: cinder/compute/manager.py:444
+#, python-format
+msgid "Instance %s not found."
+msgstr "Копия %s не найдена."
+
+#: cinder/compute/manager.py:480
+msgid "Instance has already been created"
+msgstr "Копия уже была создана"
+
+#: cinder/compute/manager.py:523
+#, python-format
+msgid ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+
+#: cinder/compute/manager.py:528
+#, python-format
+msgid ""
+"Image '%(image_id)s' size %(size_bytes)d exceeded instance_type allowed "
+"size %(allowed_size_bytes)d"
+msgstr ""
+"Образ '%(image_id)s' размером %(size_bytes)d, превышает exceeded "
+"instance_type допустимый размер %(allowed_size_bytes)d"
+
+#: cinder/compute/manager.py:538
+msgid "Starting instance..."
+msgstr ""
+
+#: cinder/compute/manager.py:548
+msgid "Skipping network allocation for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:561
+msgid "Instance failed network setup"
+msgstr ""
+
+#: cinder/compute/manager.py:565
+#, python-format
+msgid "Instance network_info: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:578
+msgid "Instance failed block device setup"
+msgstr ""
+
+#: cinder/compute/manager.py:594
+msgid "Instance failed to spawn"
+msgstr ""
+
+#: cinder/compute/manager.py:615
+msgid "Deallocating network for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:672
+#, python-format
+msgid "%(action_str)s instance"
+msgstr ""
+
+#: cinder/compute/manager.py:699
+#, python-format
+msgid "Ignoring DiskNotFound: %s"
+msgstr "Пропуск DiskNotFound: %s"
+
+#: cinder/compute/manager.py:708
+#, python-format
+msgid "terminating bdm %s"
+msgstr "завершение работы bdm %s"
+
+#: cinder/compute/manager.py:742 cinder/compute/manager.py:1328
+#: cinder/compute/manager.py:1416 cinder/compute/manager.py:2501
+#, python-format
+msgid "%s. Setting instance vm_state to ERROR"
+msgstr "%s. Установка состояния копии vm_state на ERROR"
+
+#: cinder/compute/manager.py:811
+#, python-format
+msgid ""
+"Cannot rebuild instance [%(instance_uuid)s], because the given image does"
+" not exist."
+msgstr ""
+
+#: cinder/compute/manager.py:816
+#, python-format
+msgid "Cannot rebuild instance [%(instance_uuid)s]: %(exc)s"
+msgstr ""
+
+#: cinder/compute/manager.py:823
+#, python-format
+msgid "Rebuilding instance %s"
+msgstr "Обновление сборки %s"
+
+#: cinder/compute/manager.py:876
+#, python-format
+msgid "Rebooting instance %s"
+msgstr "Перезагрузка копии %s"
+
+#: cinder/compute/manager.py:891
+#, python-format
+msgid ""
+"trying to reboot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+"попытка перезагрузки не выполняемой копии: %(instance_uuid)s (состояние: "
+"%(state)s ожидалось: %(running)s)"
+
+#: cinder/compute/manager.py:933
+#, python-format
+msgid "instance %s: snapshotting"
+msgstr "копия %s: выполнение снимка"
+
+#: cinder/compute/manager.py:939
+#, python-format
+msgid ""
+"trying to snapshot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+"попытка создания снимка не выполняемой копии: %(instance_uuid)s "
+"(состояние: %(state)s ожидалось: %(running)s)"
+
+#: cinder/compute/manager.py:995
+#, python-format
+msgid "Found %(num_images)d images (rotation: %(rotation)d)"
+msgstr "Найдено %(num_images)d образов (ротация: %(rotation)d)"
+
+#: cinder/compute/manager.py:1001
+#, python-format
+msgid "Rotating out %d backups"
+msgstr ""
+
+#: cinder/compute/manager.py:1005
+#, python-format
+msgid "Deleting image %s"
+msgstr "Удаление образа %s"
+
+#: cinder/compute/manager.py:1035
+#, python-format
+msgid "Failed to set admin password. Instance %s is not running"
+msgstr "Невозможно назначить пароль администратора. Копия %s не выполняется"
+
+#: cinder/compute/manager.py:1041
+#, python-format
+msgid "Instance %s: Root password set"
+msgstr "Копия %s: Назначение административного пароля"
+
+#: cinder/compute/manager.py:1050
+msgid "set_admin_password is not implemented by this driver."
+msgstr "set_admin_password не реализован в этой драйвере."
+
+#: cinder/compute/manager.py:1064
+msgid "Error setting admin password"
+msgstr "Ошибка назначения пароля администратора"
+
+#: cinder/compute/manager.py:1079
+#, python-format
+msgid ""
+"trying to inject a file into a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1084
+#, python-format
+msgid "instance %(instance_uuid)s: injecting file to %(path)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1098
+#, python-format
+msgid ""
+"trying to update agent on a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1103
+#, python-format
+msgid "instance %(instance_uuid)s: updating agent to %(url)s"
+msgstr "копия %(instance_uuid)s: обновление агента до %(url)s"
+
+#: cinder/compute/manager.py:1116
+#, python-format
+msgid "instance %s: rescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1141
+#, python-format
+msgid "instance %s: unrescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1270
+msgid "destination same as source!"
+msgstr "назначение совпадает с источником!"
+
+#: cinder/compute/manager.py:1287
+#, python-format
+msgid "instance %s: migrating"
+msgstr "копия %s: перемещение"
+
+#: cinder/compute/manager.py:1471
+#, python-format
+msgid "instance %s: pausing"
+msgstr "копия %s: приостановление"
+
+#: cinder/compute/manager.py:1489
+#, python-format
+msgid "instance %s: unpausing"
+msgstr "копия %s: снятие с приостановления"
+
+#: cinder/compute/manager.py:1525
+#, python-format
+msgid "instance %s: retrieving diagnostics"
+msgstr "копия %s: принятие диагностики"
+
+#: cinder/compute/manager.py:1534
+#, python-format
+msgid "instance %s: suspending"
+msgstr "копия %s: приостановление"
+
+#: cinder/compute/manager.py:1556
+#, python-format
+msgid "instance %s: resuming"
+msgstr "копия %s: возобновление"
+
+#: cinder/compute/manager.py:1579
+#, python-format
+msgid "instance %s: locking"
+msgstr "копия %s: блокирование"
+
+#: cinder/compute/manager.py:1588
+#, python-format
+msgid "instance %s: unlocking"
+msgstr "копия %s: разблокирование"
+
+#: cinder/compute/manager.py:1596
+#, python-format
+msgid "instance %s: getting locked state"
+msgstr "копия %s: получение заблокированного состояния"
+
+#: cinder/compute/manager.py:1606
+#, python-format
+msgid "instance %s: reset network"
+msgstr "копия %s: сброс сети"
+
+#: cinder/compute/manager.py:1614
+#, python-format
+msgid "instance %s: inject network info"
+msgstr ""
+
+#: cinder/compute/manager.py:1618
+#, python-format
+msgid "network_info to inject: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:1655
+#, python-format
+msgid "instance %s: getting vnc console"
+msgstr "копия %s: получение консоли vnc"
+
+#: cinder/compute/manager.py:1685
+#, python-format
+msgid "Booting with volume %(volume_id)s at %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1703
+#, fuzzy, python-format
+msgid ""
+"instance %(instance_uuid)s: attaching volume %(volume_id)s to "
+"%(mountpoint)s"
+msgstr "копия %(instance_uuid)s: обновление агента до %(url)s"
+
+#: cinder/compute/manager.py:1705
+#, python-format
+msgid "Attaching volume %(volume_id)s to %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1714
+#, fuzzy, python-format
+msgid "instance %(instance_uuid)s: attach failed %(mountpoint)s, removing"
+msgstr "Копия %(instance_id)s не переведена в режим восстановления"
+
+#: cinder/compute/manager.py:1724
+#, python-format
+msgid "Attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1752
+#, python-format
+msgid "Detach volume %(volume_id)s from mountpoint %(mp)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1756
+#, python-format
+msgid "Detaching volume from unknown instance %s"
+msgstr "Отсоединение тома от неизвестной копии %s"
+
+#: cinder/compute/manager.py:1822
+#, python-format
+msgid ""
+"Creating tmpfile %s to notify to other compute nodes that they should "
+"mount the same storage."
+msgstr ""
+"Создание временного файла %s для оповещения других узлов сети compute о "
+"необходимости присоединения того же хранилища."
+
+#: cinder/compute/manager.py:1884
+msgid "Instance has no volume."
+msgstr ""
+
+#: cinder/compute/manager.py:1916
+#, python-format
+msgid "plug_vifs() failed %(cnt)d.Retry up to %(max_retry)d for %(hostname)s."
+msgstr "plug_vifs() ошибка %(cnt)d.До %(max_retry)d попыток для %(hostname)s."
+
+#: cinder/compute/manager.py:1973
+#, python-format
+msgid "Pre live migration failed at  %(dest)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2000
+msgid "post_live_migration() is started.."
+msgstr "Запущено post_live_migration().."
+
+#: cinder/compute/manager.py:2030
+msgid "No floating_ip found"
+msgstr ""
+
+#: cinder/compute/manager.py:2038
+msgid "No floating_ip found."
+msgstr ""
+
+#: cinder/compute/manager.py:2040
+#, python-format
+msgid ""
+"Live migration: Unexpected error: cannot inherit floating ip.\n"
+"%(e)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2073
+#, python-format
+msgid "Migrating instance to %(dest)s finished successfully."
+msgstr ""
+
+#: cinder/compute/manager.py:2075
+msgid ""
+"You may see the error \"libvirt: QEMU error: Domain not found: no domain "
+"with matching name.\" This error can be safely ignored."
+msgstr ""
+"Вы можете увидеть ошибку \"libvirt: ошибка QEMU: Домен не найден: "
+"отсутствует домен с соответствующим именем.\" Эта ошибка может быть "
+"безопасно пропущена."
+
+#: cinder/compute/manager.py:2090
+msgid "Post operation of migraton started"
+msgstr ""
+
+#: cinder/compute/manager.py:2226
+#, python-format
+msgid "Updated the info_cache for instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:2255
+msgid "Updating bandwidth usage cache"
+msgstr "Обновление временных данных использования полосы пропускания"
+
+#: cinder/compute/manager.py:2277
+msgid "Updating host status"
+msgstr "Обновление состояния узла"
+
+#: cinder/compute/manager.py:2305
+#, python-format
+msgid ""
+"Found %(num_db_instances)s in the database and %(num_vm_instances)s on "
+"the hypervisor."
+msgstr ""
+"Найдено %(num_db_instances)s в базе данных и %(num_vm_instances)s в "
+"гипервизоре."
+
+#: cinder/compute/manager.py:2331
+#, python-format
+msgid ""
+"During the sync_power process the instance %(uuid)s has moved from host "
+"%(src)s to host %(dst)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2344
+#, python-format
+msgid ""
+"Instance %s is in the process of migrating to this host. Wait next "
+"sync_power cycle before setting power state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2350
+msgid ""
+"Instance found in database but not known by hypervisor. Setting power "
+"state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2380
+msgid "FLAGS.reclaim_instance_interval <= 0, skipping..."
+msgstr "FLAGS.reclaim_instance_interval <= 0, пропуск..."
+
+#: cinder/compute/manager.py:2392
+msgid "Reclaiming deleted instance"
+msgstr ""
+
+#: cinder/compute/manager.py:2458
+#, python-format
+msgid ""
+"Detected instance with name label '%(name)s' which is marked as DELETED "
+"but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2465
+#, python-format
+msgid ""
+"Destroying instance with name label '%(name)s' which is marked as DELETED"
+" but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2472
+#, python-format
+msgid "Unrecognized value '%(action)s' for FLAGS.running_deleted_instance_action"
+msgstr ""
+"Не распознанное значение '%(action)s' для "
+"FLAGS.running_deleted_instance_action"
+
+#: cinder/compute/manager.py:2542
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: unrecoverable state during operation on "
+"%(host)s"
+msgstr ""
+
+#: cinder/compute/utils.py:142
+msgid "v4 subnets are required for legacy nw_info"
+msgstr ""
+
+#: cinder/console/manager.py:77 cinder/console/vmrc_manager.py:70
+msgid "Adding console"
+msgstr "Добавление консоли"
+
+#: cinder/console/manager.py:97
+#, python-format
+msgid "Tried to remove non-existant console %(console_id)s."
+msgstr "Выполнена попытка удаления несуществующей консоли %(console_id)s."
+
+#: cinder/console/vmrc_manager.py:122
+#, python-format
+msgid "Tried to remove non-existent console %(console_id)s."
+msgstr "Попытка удаления несуществующей консоли %(console_id)s."
+
+#: cinder/console/vmrc_manager.py:125
+#, python-format
+msgid "Removing console %(console_id)s."
+msgstr "Удаление консоли %(console_id)s."
+
+#: cinder/console/xvp.py:98
+msgid "Rebuilding xvp conf"
+msgstr "Обновление сборки xvp conf"
+
+#: cinder/console/xvp.py:116
+#, python-format
+msgid "Re-wrote %s"
+msgstr ""
+
+#: cinder/console/xvp.py:121
+msgid "Stopping xvp"
+msgstr "Выполнение останова xvp"
+
+#: cinder/console/xvp.py:134
+msgid "Starting xvp"
+msgstr "Запуск xvp"
+
+#: cinder/console/xvp.py:141
+#, python-format
+msgid "Error starting xvp: %s"
+msgstr "Ошибка запуска xvp: %s"
+
+#: cinder/console/xvp.py:144
+msgid "Restarting xvp"
+msgstr "Выполнение перезагрузки xvp"
+
+#: cinder/console/xvp.py:146
+msgid "xvp not running..."
+msgstr "xvp не выполняется..."
+
+#: cinder/consoleauth/manager.py:63
+#, python-format
+msgid "Deleting Expired Token: (%s)"
+msgstr "Удаление токена с истёкшим сроком: (%s)"
+
+#: cinder/consoleauth/manager.py:75
+#, python-format
+msgid "Received Token: %(token)s, %(token_dict)s)"
+msgstr "Полученный токен: %(token)s, %(token_dict)s)"
+
+#: cinder/consoleauth/manager.py:79
+#, python-format
+msgid "Checking Token: %(token)s, %(token_valid)s)"
+msgstr "Проверка токена: %(token)s, %(token_valid)s)"
+
+#: cinder/db/sqlalchemy/api.py:57
+msgid "Use of empty request context is deprecated"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:198
+#, python-format
+msgid "Unrecognized read_deleted value '%s'"
+msgstr "Нераспознанное значение read_deleted '%s'"
+
+#: cinder/db/sqlalchemy/api.py:516 cinder/db/sqlalchemy/api.py:551
+#, python-format
+msgid "No ComputeNode for %(host)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4019 cinder/db/sqlalchemy/api.py:4045
+#, python-format
+msgid "No backend config with id %(sm_backend_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4103
+#, python-format
+msgid "No sm_flavor called %(sm_flavor)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4147
+#, python-format
+msgid "No sm_volume with id %(volume_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:66
+msgid "python-migrate is not installed. Exiting."
+msgstr "python-migrate не установлен. Выход."
+
+#: cinder/db/sqlalchemy/migration.py:78
+msgid "version should be an integer"
+msgstr ""
+
+#: cinder/db/sqlalchemy/session.py:137
+#, fuzzy, python-format
+msgid "SQL connection failed. %s attempts left."
+msgstr "Ошибка соединения с SQL (%(connstring)s). %(attempts)d попыток осталось."
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:48
+msgid "interface column not added to networks table"
+msgstr "столбец интерфейса не добавлен  в таблицу сетей"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:80
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:54
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:48
+#, python-format
+msgid "Table |%s| not created!"
+msgstr "Таблица |%s| не создана!"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:87
+msgid "VIF column not added to fixed_ips table"
+msgstr "Столбец VIF не добавлен в таблицу fixed_ips"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:97
+#, python-format
+msgid "join list for moving mac_addresses |%s|"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:39
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:60
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:99
+msgid "foreign key constraint couldn't be added"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:58
+msgid "foreign key constraint couldn't be dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py:34
+msgid "priority column not added to networks table"
+msgstr "столбец приоритета не добавлен в таблицу сетей"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:41
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:42
+#: cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py:56
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:68
+msgid "foreign key constraint couldn't be removed"
+msgstr "ограничения внешнего ключа не могут быть удалены"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py:34
+msgid "progress column not added to instances table"
+msgstr "столбец выполнения не добавлен в таблицу копий"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py:97
+#, python-format
+msgid ""
+"Could not cast flavorid to integer: %s. Set flavorid to an integer-like "
+"string to downgrade."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:69
+msgid "instance_info_caches tables not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py:41
+msgid "progress column not added to compute_nodes table"
+msgstr "столбец выполнения не добавлен в таблицу compute_nodes"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:76
+msgid "dns_domains table not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:60
+msgid "quota_classes table not dropped"
+msgstr ""
+
+#: cinder/image/glance.py:147
+msgid "Connection error contacting glance server, retrying"
+msgstr ""
+
+#: cinder/image/glance.py:153 cinder/network/quantum/melange_connection.py:104
+msgid "Maximum attempts reached"
+msgstr ""
+
+#: cinder/image/glance.py:278
+#, python-format
+msgid "Creating image in Glance. Metadata passed in %s"
+msgstr ""
+
+#: cinder/image/glance.py:281
+#, python-format
+msgid "Metadata after formatting for Glance %s"
+msgstr ""
+
+#: cinder/image/glance.py:289
+#, python-format
+msgid "Metadata returned from Glance formatted for Base %s"
+msgstr ""
+
+#: cinder/image/glance.py:331 cinder/image/glance.py:335
+msgid "Not the image owner"
+msgstr "Не владелец образа"
+
+#: cinder/image/glance.py:410
+#, python-format
+msgid "%(timestamp)s does not follow any of the signatures: %(iso_formats)s"
+msgstr ""
+
+#: cinder/image/s3.py:309
+#, python-format
+msgid "Failed to download %(image_location)s to %(image_path)s"
+msgstr "Ошибка загрузки %(image_location)s в %(image_path)s"
+
+#: cinder/image/s3.py:328
+#, python-format
+msgid "Failed to decrypt %(image_location)s to %(image_path)s"
+msgstr "Ошибка расшифрования %(image_location)s в %(image_path)s"
+
+#: cinder/image/s3.py:340
+#, python-format
+msgid "Failed to untar %(image_location)s to %(image_path)s"
+msgstr "Ошибка извлечения %(image_location)s в %(image_path)s"
+
+#: cinder/image/s3.py:353
+#, python-format
+msgid "Failed to upload %(image_location)s to %(image_path)s"
+msgstr "Ошибка выгрузки %(image_location)s в %(image_path)s"
+
+#: cinder/image/s3.py:379
+#, python-format
+msgid "Failed to decrypt private key: %s"
+msgstr "Ошибка дешифрирования личного ключа: %s"
+
+#: cinder/image/s3.py:387
+#, python-format
+msgid "Failed to decrypt initialization vector: %s"
+msgstr "Ошибка дешифрирования вектора инициализации: %s"
+
+#: cinder/image/s3.py:398
+#, python-format
+msgid "Failed to decrypt image file %(image_file)s: %(err)s"
+msgstr "Ошибка дешифрирования файла образа %(image_file)s: %(err)s"
+
+#: cinder/image/s3.py:410
+msgid "Unsafe filenames in image"
+msgstr "В образе небезопасные имена файлов"
+
+#: cinder/ipv6/account_identifier.py:38 cinder/ipv6/rfc2462.py:34
+#, python-format
+msgid "Bad mac for to_global_ipv6: %s"
+msgstr "Недопустимый mac для to_global_ipv6: %s"
+
+#: cinder/ipv6/account_identifier.py:40 cinder/ipv6/rfc2462.py:36
+#, python-format
+msgid "Bad prefix for to_global_ipv6: %s"
+msgstr "Недопустимый префикс для to_global_ipv6: %s"
+
+#: cinder/ipv6/account_identifier.py:42
+#, python-format
+msgid "Bad project_id for to_global_ipv6: %s"
+msgstr "Недопустимый project_id для to_global_ipv6: %s"
+
+#: cinder/network/ldapdns.py:321
+msgid "This driver only supports type 'a' entries."
+msgstr "Этот драйвер поддерживает только записи типа 'a'."
+
+#: cinder/network/linux_net.py:166
+#, python-format
+msgid "Attempted to remove chain %s which does not exist"
+msgstr "Предпринята удалить цепочку %s, которая не существует"
+
+#: cinder/network/linux_net.py:192
+#, python-format
+msgid "Unknown chain: %r"
+msgstr "Неизвестная цепочка: %r"
+
+#: cinder/network/linux_net.py:215
+#, python-format
+msgid ""
+"Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r "
+"%(top)r"
+msgstr ""
+"Предпринята попытка удалить правило, которого там нет: %(chain)r %(rule)r"
+" %(wrap)r %(top)r"
+
+#: cinder/network/linux_net.py:335
+msgid "IPTablesManager.apply completed with success"
+msgstr ""
+
+#: cinder/network/linux_net.py:694
+#, python-format
+msgid "Hupping dnsmasq threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:696
+#, python-format
+msgid "Pid %d is stale, relaunching dnsmasq"
+msgstr ""
+
+#: cinder/network/linux_net.py:756
+#, python-format
+msgid "killing radvd threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:758
+#, python-format
+msgid "Pid %d is stale, relaunching radvd"
+msgstr ""
+
+#: cinder/network/linux_net.py:967
+#, python-format
+msgid "Starting VLAN inteface %s"
+msgstr "Запуск интерфейса VLAN %s"
+
+#: cinder/network/linux_net.py:999
+#, python-format
+msgid "Starting Bridge interface for %s"
+msgstr "Запуск моста интерфейса для %s"
+
+#: cinder/network/linux_net.py:1142
+#, fuzzy, python-format
+msgid "Starting bridge %s "
+msgstr "Запуск копии %s"
+
+#: cinder/network/linux_net.py:1149
+#, fuzzy, python-format
+msgid "Done starting bridge %s"
+msgstr "Ошибка запуска xvp: %s"
+
+#: cinder/network/linux_net.py:1167
+#, fuzzy, python-format
+msgid "Failed unplugging gateway interface '%s'"
+msgstr "Ошибка отсоединения vif копии '%s'"
+
+#: cinder/network/linux_net.py:1170
+#, python-format
+msgid "Unplugged gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/manager.py:291
+#, fuzzy, python-format
+msgid "Fixed ip %(fixed_ip_id)s not found"
+msgstr "Сертификат %(certificate_id)s не найден."
+
+#: cinder/network/manager.py:300 cinder/network/manager.py:496
+#, python-format
+msgid "Interface %(interface)s not found"
+msgstr "Интерфейс %(interface)s не найден"
+
+#: cinder/network/manager.py:315
+#, python-format
+msgid "floating IP allocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:353
+#, python-format
+msgid "floating IP deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:386
+#, python-format
+msgid "Address |%(address)s| is not allocated"
+msgstr "Адрес |%(address)s| не выделен"
+
+#: cinder/network/manager.py:390
+#, python-format
+msgid "Address |%(address)s| is not allocated to your project |%(project)s|"
+msgstr "Адрес |%(address)s| не выделен вашему проекту |%(project)s|"
+
+#: cinder/network/manager.py:402
+#, python-format
+msgid "Quota exceeded for %s, tried to allocate address"
+msgstr "Превышена квота для %s, попытка выделения адреса"
+
+#: cinder/network/manager.py:614
+#, python-format
+msgid ""
+"Database inconsistency: DNS domain |%s| is registered in the Cinder db but "
+"not visible to either the floating or instance DNS driver. It will be "
+"ignored."
+msgstr ""
+
+#: cinder/network/manager.py:660
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing zone to |%(av_zone)s|."
+msgstr "Домен |%(domain)s| уже существует, изменение зоны на |%(av_zone)s|."
+
+#: cinder/network/manager.py:670
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing project to |%(project)s|."
+msgstr "Домен |%(domain)s| уже существует, изменение проекта на |%(project)s|."
+
+#: cinder/network/manager.py:778
+#, python-format
+msgid "Disassociated %s stale fixed ip(s)"
+msgstr ""
+
+#: cinder/network/manager.py:782
+msgid "setting network host"
+msgstr "установка сетевого узла"
+
+#: cinder/network/manager.py:896
+#, python-format
+msgid "network allocations for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:901
+#, python-format
+msgid "networks retrieved for instance |%(instance_id)s|: |%(networks)s|"
+msgstr ""
+
+#: cinder/network/manager.py:930
+#, python-format
+msgid "network deallocation for instance |%s|"
+msgstr "исключение сетевых распределений для копии |%s|"
+
+#: cinder/network/manager.py:1152
+#, python-format
+msgid ""
+"instance-dns-zone is |%(domain)s|, which is in availability zone "
+"|%(zone)s|. Instance |%(instance)s| is in zone |%(zone2)s|. No DNS record"
+" will be created."
+msgstr ""
+"instance-dns-zone является |%(domain)s|, который располагается в "
+"доступной зоне |%(zone)s|. Копия |%(instance)s| расположена в зоне "
+"|%(zone2)s|. Запись DNS не будет создана."
+
+#: cinder/network/manager.py:1227
+#, python-format
+msgid "Unable to release %s because vif doesn't exist."
+msgstr ""
+
+#: cinder/network/manager.py:1244
+#, python-format
+msgid "Leased IP |%(address)s|"
+msgstr "Арендованный IP |%(address)s|"
+
+#: cinder/network/manager.py:1248
+#, python-format
+msgid "IP %s leased that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1256
+#, python-format
+msgid "IP |%s| leased that isn't allocated"
+msgstr ""
+
+#: cinder/network/manager.py:1261
+#, python-format
+msgid "Released IP |%(address)s|"
+msgstr "Присвоенный IP |%(address)s|"
+
+#: cinder/network/manager.py:1265
+#, python-format
+msgid "IP %s released that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1268
+#, python-format
+msgid "IP %s released that was not leased"
+msgstr ""
+
+#: cinder/network/manager.py:1331
+msgid "cidr already in use"
+msgstr "cidr уже используется"
+
+#: cinder/network/manager.py:1334
+#, python-format
+msgid "requested cidr (%(cidr)s) conflicts with existing supernet (%(super)s)"
+msgstr ""
+"запрошенная cidr (%(cidr)s) конфликтует с существующей супер-сетью "
+"(%(super)s)"
+
+#: cinder/network/manager.py:1345
+#, python-format
+msgid ""
+"requested cidr (%(cidr)s) conflicts with existing smaller cidr "
+"(%(smaller)s)"
+msgstr ""
+"запрошенная cidr (%(cidr)s) конфликтует с существующей, меньшей cidr "
+"(%(smaller)s)"
+
+#: cinder/network/manager.py:1404
+msgid "Network already exists!"
+msgstr "Сеть уже существует!"
+
+#: cinder/network/manager.py:1423
+#, python-format
+msgid "Network must be disassociated from project %s before delete"
+msgstr "Сеть должна быть исключена из проекта %s перед удалением"
+
+#: cinder/network/manager.py:1832
+msgid ""
+"The sum between the number of networks and the vlan start cannot be "
+"greater than 4094"
+msgstr ""
+
+#: cinder/network/manager.py:1839
+#, python-format
+msgid ""
+"The network range is not big enough to fit %(num_networks)s. Network size"
+" is %(network_size)s"
+msgstr ""
+"Сетевой диапазон недостаточен для соответствия %(num_networks)s. Размер "
+"сети %(network_size)s"
+
+#: cinder/network/minidns.py:65
+msgid "This driver only supports type 'a'"
+msgstr "Этот драйвер поддерживает только тип 'a'"
+
+#: cinder/network/quantum/client.py:154
+msgid "Tenant ID not set"
+msgstr ""
+
+#: cinder/network/quantum/client.py:180
+#, python-format
+msgid "Quantum Client Request: %(method)s %(action)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:196
+#, python-format
+msgid "Quantum entity not found: %s"
+msgstr "Объект Quantum не найден: %s"
+
+#: cinder/network/quantum/client.py:206
+#, python-format
+msgid "Server %(status_code)s error: %(data)s"
+msgstr "Серверная %(status_code)s ошибка: %(data)s"
+
+#: cinder/network/quantum/client.py:210
+#, python-format
+msgid "Unable to connect to server. Got error: %s"
+msgstr "Невозможно подключиться к серверу. Принята ошибка: %s"
+
+#: cinder/network/quantum/client.py:228
+#, python-format
+msgid "unable to deserialize object of type = '%s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:162
+msgid "QuantumManager does not use 'multi_host' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:166
+msgid "QuantumManager requires that only one network is created per call"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:176
+msgid "QuantumManager does not use 'vlan_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:182
+msgid "QuantumManager does not use 'vpn_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:186
+msgid "QuantumManager does not use 'bridge' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:190
+msgid "QuantumManager does not use 'bridge_interface' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:195
+msgid "QuantumManager requires a valid (.1) gateway address."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:204
+#, python-format
+msgid ""
+"Unable to find existing quantum network for tenant '%(q_tenant_id)s' with"
+" net-id '%(quantum_net_id)s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:301
+#, python-format
+msgid "network allocations for instance %s"
+msgstr "сетевые распределения для копии %s"
+
+#: cinder/network/quantum/manager.py:588
+#, python-format
+msgid ""
+"port deallocation failed for instance: |%(instance_id)s|, port_id: "
+"|%(port_id)s|"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:606
+#, python-format
+msgid ""
+"ipam deallocation failed for instance: |%(instance_id)s|, vif_uuid: "
+"|%(vif_uuid)s|"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:96
+#, python-format
+msgid "Server returned error: %s"
+msgstr "Сервер возвратил ошибку: %s"
+
+#: cinder/network/quantum/melange_connection.py:98
+msgid "Connection error contacting melange service, retrying"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:108
+#, python-format
+msgid ""
+"allocate IP on network |%(network_id)s| belonging to "
+"|%(network_tenant_id)s| to this vif |%(vif_id)s| with mac "
+"|%(mac_address)s| belonging to |%(project_id)s| "
+msgstr ""
+
+#: cinder/network/quantum/melange_ipam_lib.py:133
+msgid "get_project_and_global_net_ids must be called with a non-null project_id"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:75
+msgid "Error creating network entry"
+msgstr "Ошибка создания сетевой записи"
+
+#: cinder/network/quantum/cinder_ipam_lib.py:90
+#, python-format
+msgid "No network with net_id = %s"
+msgstr "Нет сети с net_id = %s"
+
+#: cinder/network/quantum/cinder_ipam_lib.py:221
+#, fuzzy, python-format
+msgid "No fixed IPs to deallocate for vif %s"
+msgstr "исключение сетевых распределений для копии |%s|"
+
+#: cinder/network/quantum/quantum_connection.py:99
+#, python-format
+msgid "Connecting interface %(interface_id)s to net %(net_id)s for %(tenant_id)s"
+msgstr ""
+"Подключение интерфейса %(interface_id)s к сети %(net_id)s для "
+"%(tenant_id)s"
+
+#: cinder/network/quantum/quantum_connection.py:113
+#, python-format
+msgid "Deleting port %(port_id)s on net %(net_id)s for %(tenant_id)s"
+msgstr "Удаление порта %(port_id)s в сети %(net_id)s для %(tenant_id)s"
+
+#: cinder/notifier/api.py:115
+#, python-format
+msgid "%s not in valid priorities"
+msgstr "%s не в допустимых приоритетах"
+
+#: cinder/notifier/api.py:130
+#, python-format
+msgid ""
+"Problem '%(e)s' attempting to send to notification system. "
+"Payload=%(payload)s"
+msgstr ""
+"Неполадка '%(e)s', попытка отправить в систему уведомлений. "
+"Нагрузка=%(payload)s"
+
+#: cinder/notifier/list_notifier.py:65
+#, python-format
+msgid "Problem '%(e)s' attempting to send to notification driver %(driver)s."
+msgstr ""
+
+#: cinder/notifier/rabbit_notifier.py:46
+#, python-format
+msgid "Could not send notification to %(topic)s. Payload=%(message)s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:146
+#, python-format
+msgid "Returning exception %s to caller"
+msgstr "Возврат исключения %s вызывающему"
+
+#: cinder/rpc/amqp.py:188
+#, python-format
+msgid "unpacked context: %s"
+msgstr "неизвлечённый контекст: %s"
+
+#: cinder/rpc/amqp.py:231
+#, python-format
+msgid "received %s"
+msgstr "получено %s"
+
+#: cinder/rpc/amqp.py:236
+#, python-format
+msgid "no method for message: %s"
+msgstr "не определен метод для сообщения: %s"
+
+#: cinder/rpc/amqp.py:237
+#, python-format
+msgid "No method for message: %s"
+msgstr "Не определен метод для сообщения: %s"
+
+#: cinder/rpc/amqp.py:321
+#, python-format
+msgid "Making asynchronous call on %s ..."
+msgstr "Выполнение асинхронного вызова %s ..."
+
+#: cinder/rpc/amqp.py:324
+#, python-format
+msgid "MSG_ID is %s"
+msgstr "MSG_ID is %s"
+
+#: cinder/rpc/amqp.py:346
+#, python-format
+msgid "Making asynchronous cast on %s..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:354
+msgid "Making asynchronous fanout cast..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:379
+#, python-format
+msgid "Sending notification on %s..."
+msgstr "Отправка оповещения на %s..."
+
+#: cinder/rpc/common.py:54
+#, python-format
+msgid ""
+"Remote error: %(exc_type)s %(value)s\n"
+"%(traceback)s."
+msgstr ""
+"Удалённая ошибка: %(exc_type)s %(value)s\n"
+"%(traceback)s."
+
+#: cinder/rpc/common.py:71
+msgid "Timeout while waiting on RPC response."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:111
+msgid "Failed to process message... skipping it."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:407
+#, python-format
+msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d"
+msgstr "Повторное подключение к серверу AMQP на %(hostname)s:%(port)d"
+
+#: cinder/rpc/impl_kombu.py:430
+#, python-format
+msgid "Connected to AMQP server on %(hostname)s:%(port)d"
+msgstr "Подключение к серверу AMQP на %(hostname)s:%(port)d"
+
+#: cinder/rpc/impl_kombu.py:466
+#, python-format
+msgid ""
+"Unable to connect to AMQP server on %(hostname)s:%(port)d after "
+"%(max_retries)d tries: %(err_str)s"
+msgstr ""
+"Невозможно подключиться к серверу AMQP на %(hostname)s:%(port)d после "
+"%(max_retries)d попыток: %(err_str)s"
+
+#: cinder/rpc/impl_kombu.py:482
+#, python-format
+msgid ""
+"AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying "
+"again in %(sleep_time)d seconds."
+msgstr ""
+"AMQP сервер на %(hostname)s:%(port)d недоступен: %(err_str)s. Повторная "
+"попытка через %(sleep_time)d секунд."
+
+#: cinder/rpc/impl_kombu.py:533 cinder/rpc/impl_qpid.py:385
+#, python-format
+msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s"
+msgstr "Ошибка объявления потребителю темы '%(topic)s': %(err_str)s"
+
+#: cinder/rpc/impl_kombu.py:551 cinder/rpc/impl_qpid.py:400
+#, python-format
+msgid "Timed out waiting for RPC response: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:555 cinder/rpc/impl_qpid.py:404
+#, python-format
+msgid "Failed to consume message from queue: %s"
+msgstr "Ошибка принятия сообщения из очереди: %s"
+
+#: cinder/rpc/impl_kombu.py:589 cinder/rpc/impl_qpid.py:434
+#, python-format
+msgid "Failed to publish message to topic '%(topic)s': %(err_str)s"
+msgstr "Ошибка публикации сообщения в тему '%(topic)s': %(err_str)s"
+
+#: cinder/rpc/impl_qpid.py:341
+#, python-format
+msgid "Unable to connect to AMQP server: %s "
+msgstr "Невозможно подключиться к серверу AMQP: %s "
+
+#: cinder/rpc/impl_qpid.py:346
+#, python-format
+msgid "Connected to AMQP server on %s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:354
+msgid "Re-established AMQP queues"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:412
+msgid "Error processing message.  Skipping it."
+msgstr ""
+
+#: cinder/scheduler/chance.py:47 cinder/scheduler/simple.py:91
+#: cinder/scheduler/simple.py:143
+msgid "Is the appropriate service running?"
+msgstr "Выполняется ли соответствующая служба?"
+
+#: cinder/scheduler/chance.py:52
+msgid "Could not find another compute"
+msgstr "Невозможно найти другой compute"
+
+#: cinder/scheduler/driver.py:63
+#, python-format
+msgid "Casted '%(method)s' to volume '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:80
+#, python-format
+msgid "Casted '%(method)s' to compute '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:89
+#, python-format
+msgid "Casted '%(method)s' to network '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:107
+#, python-format
+msgid "Casted '%(method)s' to %(topic)s '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:181
+msgid "Must implement a fallback schedule"
+msgstr ""
+
+#: cinder/scheduler/driver.py:185
+msgid "Driver must implement schedule_prep_resize"
+msgstr ""
+
+#: cinder/scheduler/driver.py:190
+msgid "Driver must implement schedule_run_instance"
+msgstr ""
+
+#: cinder/scheduler/driver.py:325
+msgid "Block migration can not be used with shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:330
+msgid "Live migration can not be used without shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:367 cinder/scheduler/driver.py:457
+#, python-format
+msgid "host %(dest)s is not compatible with original host %(src)s."
+msgstr "узел %(dest)s несовместим с исходным узлом %(src)s."
+
+#: cinder/scheduler/driver.py:416
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"memory(host:%(avail)s <= instance:%(mem_inst)s)"
+msgstr ""
+
+#: cinder/scheduler/driver.py:472
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"disk(host:%(available)s <= instance:%(necessary)s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:51
+#, python-format
+msgid "No host selection for %s defined."
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:64
+#, python-format
+msgid "Attempting to build %(num_instances)d instance(s)"
+msgstr "Попытка собрать %(num_instances)d копию(й)"
+
+#: cinder/scheduler/filter_scheduler.py:157
+msgid "Scheduler only understands Compute nodes (for now)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:199
+#, python-format
+msgid "Filtered %(hosts)s"
+msgstr "Отфильтрованы %(hosts)s"
+
+#: cinder/scheduler/filter_scheduler.py:209
+#, python-format
+msgid "Weighted %(weighted_host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:144
+#, python-format
+msgid "Host filter fails for ignored host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:151
+#, python-format
+msgid "Host filter fails for non-forced host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:157
+#, python-format
+msgid "Host filter function %(func)s failed for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:163
+#, fuzzy, python-format
+msgid "Host filter passes for %(host)s"
+msgstr "Отфильтрованы %(hosts)s"
+
+#: cinder/scheduler/host_manager.py:272
+#, python-format
+msgid "Received %(service_name)s service update from %(host)s."
+msgstr "Принято служебное обновление для %(service_name)s от %(host)s."
+
+#: cinder/scheduler/host_manager.py:313
+msgid "host_manager only implemented for 'compute'"
+msgstr "host_manager реализован только для 'compute'"
+
+#: cinder/scheduler/host_manager.py:323
+#, python-format
+msgid "No service for compute ID %s"
+msgstr "Нет службы для compute ID %s"
+
+#: cinder/scheduler/manager.py:85
+#, python-format
+msgid ""
+"Driver Method %(driver_method_name)s missing: %(e)s. Reverting to "
+"schedule()"
+msgstr ""
+
+#: cinder/scheduler/manager.py:150
+#, python-format
+msgid "Failed to schedule_%(method)s: %(ex)s"
+msgstr "Ошибка schedule_%(method)s: %(ex)s"
+
+#: cinder/scheduler/manager.py:159
+#, fuzzy, python-format
+msgid "Setting instance %(instance_uuid)s to %(state)s state."
+msgstr "Копия %(instance_uuid)s не остановлена. (%(vm_state)s"
+
+#: cinder/scheduler/scheduler_options.py:66
+#, python-format
+msgid "Could not stat scheduler options file %(filename)s: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:75
+#, python-format
+msgid "Could not decode scheduler options: '%(e)s'"
+msgstr "Невозможно декодировать параметры расписания: '%(e)s'"
+
+#: cinder/scheduler/simple.py:87
+msgid "Not enough allocatable CPU cores remaining"
+msgstr ""
+
+#: cinder/scheduler/simple.py:137
+msgid "Not enough allocatable volume gigabytes remaining"
+msgstr ""
+
+#: cinder/scheduler/filters/core_filter.py:45
+msgid "VCPUs not set; assuming CPU collection broken"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:72
+#, python-format
+msgid "Faking execution of cmd (subprocess): %s"
+msgstr "Имитация выполнения команды (субпроцесс): %s"
+
+#: cinder/tests/fake_utils.py:80
+#, python-format
+msgid "Faked command matched %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:96
+#, python-format
+msgid "Faked command raised an exception %s"
+msgstr "Имитация команды привела к исключению %s"
+
+#: cinder/tests/fake_utils.py:101
+#, python-format
+msgid "Reply to faked command is stdout='%(stdout)s' stderr='%(stderr)s'"
+msgstr "Ответ на имитацию команды в stdout='%(stdout)s' stderr='%(stderr)s'"
+
+#: cinder/tests/fakelibvirt.py:784
+msgid "Please extend mock libvirt module to support flags"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:790
+msgid "Please extend fake libvirt module to support this auth method"
+msgstr ""
+
+#: cinder/tests/test_compute.py:365 cinder/tests/test_compute.py:1419
+#, python-format
+msgid "Running instances: %s"
+msgstr "Выполняемые копии: %s"
+
+#: cinder/tests/test_compute.py:371
+#, python-format
+msgid "After terminating instances: %s"
+msgstr "После завершения работы копий: %s"
+
+#: cinder/tests/test_compute.py:589
+msgid "Internal error"
+msgstr "Внутренняя ошибка"
+
+#: cinder/tests/test_compute.py:1430
+#, python-format
+msgid "After force-killing instances: %s"
+msgstr "После принудительного завершения работы копий: %s"
+
+#: cinder/tests/test_misc.py:92
+#, python-format
+msgid ""
+"The following migrations are missing a downgrade:\n"
+"\t%s"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:169
+msgid "id"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:170
+msgid "IPv4"
+msgstr "IPv4"
+
+#: cinder/tests/test_cinder_manage.py:171
+msgid "IPv6"
+msgstr "IPv6"
+
+#: cinder/tests/test_cinder_manage.py:172
+msgid "start address"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:173
+msgid "DNS1"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:174
+msgid "DNS2"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:175
+msgid "VlanID"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:176
+msgid "project"
+msgstr "проект"
+
+#: cinder/tests/test_cinder_manage.py:177
+msgid "uuid"
+msgstr ""
+
+#: cinder/tests/test_volume.py:216
+#, python-format
+msgid "Target %s allocated"
+msgstr ""
+
+#: cinder/tests/test_volume.py:468
+#, python-format
+msgid "Cannot confirm exported volume id:%s."
+msgstr "Невозможно подтвердить идентификатор экспортированного тома:%s."
+
+#: cinder/tests/test_volume_types.py:58
+#, python-format
+msgid "Given data: %s"
+msgstr "Заданные данные: %s"
+
+#: cinder/tests/test_volume_types.py:59
+#, python-format
+msgid "Result data: %s"
+msgstr "Итоговые данные: %s"
+
+#: cinder/tests/test_xenapi.py:626
+#, python-format
+msgid "Creating files in %s to simulate guest agent"
+msgstr "Создание файлов в %s для имитации гостевого агента"
+
+#: cinder/tests/test_xenapi.py:637
+#, python-format
+msgid "Removing simulated guest agent files in %s"
+msgstr "Удаление файлов имитации гостевого агента в %s"
+
+#: cinder/tests/api/openstack/compute/test_servers.py:2144
+#, fuzzy, python-format
+msgid "Quota exceeded: code=%(code)s"
+msgstr "Превышена квота"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:57
+#, python-format
+msgid "_create: %s"
+msgstr "_создать: %s"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:66
+#, python-format
+msgid "_delete: %s"
+msgstr "_удалить: %s"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:75
+#, python-format
+msgid "_get: %s"
+msgstr "_get: %s"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:85
+#, python-format
+msgid "_get_all: %s"
+msgstr "_get_all: %s"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:125
+#, python-format
+msgid "test_snapshot_create: param=%s"
+msgstr "test_snapshot_create: param=%s"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:134
+#, python-format
+msgid "test_snapshot_create: resp_dict=%s"
+msgstr "test_snapshot_create: resp_dict=%s"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:156
+#, python-format
+msgid "test_snapshot_create_force: param=%s"
+msgstr "test_snapshot_create_force: param=%s"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:165
+#, python-format
+msgid "test_snapshot_create_force: resp_dict=%s"
+msgstr "test_snapshot_create_force: resp_dict=%s"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:205
+#, python-format
+msgid "test_snapshot_show: resp=%s"
+msgstr "test_snapshot_show: resp=%s"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:231
+#, python-format
+msgid "test_snapshot_detail: resp_dict=%s"
+msgstr "test_snapshot_detail: resp_dict=%s"
+
+#: cinder/tests/integrated/test_login.py:31
+#, python-format
+msgid "flavor: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:38
+#, python-format
+msgid ""
+"%(message)s\n"
+"Status Code: %(_status)s\n"
+"Body: %(_body)s"
+msgstr ""
+"%(message)s\n"
+"Код состояния: %(_status)s\n"
+"Тело: %(_body)s"
+
+#: cinder/tests/integrated/api/client.py:47
+msgid "Authentication error"
+msgstr "Ошибка аутентификации"
+
+#: cinder/tests/integrated/api/client.py:55
+msgid "Authorization error"
+msgstr "Ошибка авторизации"
+
+#: cinder/tests/integrated/api/client.py:63
+msgid "Item not found"
+msgstr "объект не найден"
+
+#: cinder/tests/integrated/api/client.py:105
+#, python-format
+msgid "Doing %(method)s on %(relative_url)s"
+msgstr "Выполнение %(method)s на %(relative_url)s"
+
+#: cinder/tests/integrated/api/client.py:107
+#, python-format
+msgid "Body: %s"
+msgstr "Тело: %s"
+
+#: cinder/tests/integrated/api/client.py:125
+#, python-format
+msgid "%(auth_uri)s => code %(http_status)s"
+msgstr "%(auth_uri)s => код %(http_status)s"
+
+#: cinder/tests/integrated/api/client.py:151
+#, python-format
+msgid "%(relative_uri)s => code %(http_status)s"
+msgstr "%(relative_uri)s => код %(http_status)s"
+
+#: cinder/tests/integrated/api/client.py:161
+msgid "Unexpected status code"
+msgstr "Непредвиденный код состояния"
+
+#: cinder/tests/integrated/api/client.py:168
+#, python-format
+msgid "Decoding JSON: %s"
+msgstr "Декодирование JSON: %s"
+
+#: cinder/tests/rpc/common.py:133
+#, python-format
+msgid "Nested received %(queue)s, %(value)s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:142
+#, python-format
+msgid "Nested return %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:160
+msgid "RPC backend does not support timeouts"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:227 cinder/tests/rpc/common.py:233
+#, python-format
+msgid "Received %s"
+msgstr "Получено %s"
+
+#: cinder/virt/connection.py:85
+msgid "Failed to open connection to the hypervisor"
+msgstr "Ошибка открытия соединения c гипервизором"
+
+#: cinder/virt/fake.py:270 cinder/virt/xenapi_conn.py:396
+#: cinder/virt/baremetal/proxy.py:716 cinder/virt/libvirt/connection.py:2045
+#, python-format
+msgid "Compute_service record created for %s "
+msgstr "Запись Compute_service создана для %s "
+
+#: cinder/virt/fake.py:273 cinder/virt/xenapi_conn.py:399
+#: cinder/virt/baremetal/proxy.py:720 cinder/virt/libvirt/connection.py:2048
+#, python-format
+msgid "Compute_service record updated for %s "
+msgstr "Запись Compute_service обновлена для %s "
+
+#: cinder/virt/firewall.py:130
+#, python-format
+msgid "Attempted to unfilter instance %s which is not filtered"
+msgstr ""
+
+#: cinder/virt/firewall.py:137
+#, python-format
+msgid "Filters added to instance %s"
+msgstr ""
+
+#: cinder/virt/firewall.py:139
+msgid "Provider Firewall Rules refreshed"
+msgstr "Выполненое обновление правил брандмауэра поставщика"
+
+#: cinder/virt/firewall.py:291
+#, python-format
+msgid "Adding security group rule: %r"
+msgstr "Добавление правила группы безопасности: %r"
+
+#: cinder/virt/firewall.py:403 cinder/virt/xenapi/firewall.py:87
+#, python-format
+msgid "Adding provider rule: %s"
+msgstr "Добавление правила поставщика: %s"
+
+#: cinder/virt/images.py:86
+msgid "'qemu-img info' parsing failed."
+msgstr "Ошибка анализа 'qemu-img info'."
+
+#: cinder/virt/images.py:92
+#, python-format
+msgid "fmt=%(fmt)s backed by: %(backing_file)s"
+msgstr ""
+
+#: cinder/virt/images.py:104
+#, python-format
+msgid "Converted to raw, but format is now %s"
+msgstr "Преобразование в необработанный, но текущий формат %s"
+
+#: cinder/virt/vmwareapi_conn.py:105
+msgid ""
+"Must specify vmwareapi_host_ip,vmwareapi_host_username and "
+"vmwareapi_host_password to useconnection_type=vmwareapi"
+msgstr ""
+"Необходимо указать vmwareapi_host_ip,vmwareapi_host_username и "
+"vmwareapi_host_password useconnection_type=vmwareapi"
+
+#: cinder/virt/vmwareapi_conn.py:276
+#, python-format
+msgid "In vmwareapi:_create_session, got this exception: %s"
+msgstr "В vmwareapi:_create_session, принято это исключение: %s"
+
+#: cinder/virt/vmwareapi_conn.py:359
+#, python-format
+msgid "In vmwareapi:_call_method, got this exception: %s"
+msgstr "В vmwareapi:_call_method, принято это исключение: %s"
+
+#: cinder/virt/vmwareapi_conn.py:398
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: success"
+msgstr "Состояние задачи [%(task_name)s] %(task_ref)s: готово"
+
+#: cinder/virt/vmwareapi_conn.py:404
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: error %(error_info)s"
+msgstr "Состояние задачи [%(task_name)s] %(task_ref)s: ошибка %(error_info)s"
+
+#: cinder/virt/vmwareapi_conn.py:409
+#, python-format
+msgid "In vmwareapi:_poll_task, Got this error %s"
+msgstr "В vmwareapi:_poll_task, принята эта ошибка %s"
+
+#: cinder/virt/xenapi_conn.py:140
+msgid ""
+"Must specify xenapi_connection_url, xenapi_connection_username "
+"(optionally), and xenapi_connection_password to use "
+"connection_type=xenapi"
+msgstr ""
+"Необходимо указать xenapi_connection_url, xenapi_connection_username "
+"(необязательно) и xenapi_connection_password для использования "
+"connection_type=xenapi"
+
+#: cinder/virt/xenapi_conn.py:329 cinder/virt/libvirt/connection.py:472
+msgid "Could not determine iscsi initiator name"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:460
+msgid "Host startup on XenServer is not supported."
+msgstr "Запуск узла на XenServer не поддерживается."
+
+#: cinder/virt/xenapi_conn.py:489
+msgid "Unable to log in to XenAPI (is the Dom0 disk full?)"
+msgstr ""
+"Невозможно выполнить вход в XenAPI (недостаточно свободного места на "
+"Dom0?)"
+
+#: cinder/virt/xenapi_conn.py:527
+msgid "Host is member of a pool, but DB says otherwise"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:599 cinder/virt/xenapi_conn.py:612
+#, python-format
+msgid "Got exception: %s"
+msgstr "Исключение: %s"
+
+#: cinder/virt/baremetal/dom.py:93
+msgid "No domains exist."
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:95
+#, python-format
+msgid "============= initial domains =========== : %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:99
+msgid "Building domain: to be removed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:103
+msgid "Not running domain: remove"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:111
+msgid "domain running on an unknown node: discarded"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:127
+#, python-format
+msgid "No such domain (%s)"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:134
+#, python-format
+msgid "Failed power down Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:143
+msgid "deactivate -> activate fails"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:153
+msgid "destroy_domain: no such domain"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:154
+#, python-format
+msgid "No such domain %s"
+msgstr "Домен %s не существует"
+
+#: cinder/virt/baremetal/dom.py:161
+#, python-format
+msgid "Domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:163
+#, python-format
+msgid "Nodes: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:166
+#, python-format
+msgid "After storing domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:169
+msgid "deactivation/removing domain failed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:176
+msgid "===== Domain is being created ====="
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:179
+msgid "Same domain name already exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:181
+msgid "create_domain: before get_idle_node"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:198
+#, python-format
+msgid "Created new domain: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:213
+#, python-format
+msgid "Failed to boot Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:222
+msgid "No such domain exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:226
+#, python-format
+msgid "change_domain_state: to new state %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:233
+#, python-format
+msgid "Stored fake domains to the file: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:244
+msgid "domain does not exist"
+msgstr ""
+
+#: cinder/virt/baremetal/nodes.py:42
+#, python-format
+msgid "Unknown baremetal driver %(d)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:148
+#, python-format
+msgid "Error encountered when destroying instance '%(name)s': %(ex)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:162
+#, python-format
+msgid "instance %(instance_name)s: deleting instance files %(target)s"
+msgstr "копия %(instance_name)s: удаление файлов копии %(target)s"
+
+#: cinder/virt/baremetal/proxy.py:189
+#, python-format
+msgid "instance %s: rebooted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:192
+msgid "_wait_for_reboot failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:222
+#, python-format
+msgid "instance %s: rescued"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:225
+msgid "_wait_for_rescue failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:242
+msgid "<============= spawn of baremetal =============>"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:255
+#, python-format
+msgid "instance %s: is building"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:260
+msgid "Key is injected but instance is not running yet"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:265
+#, python-format
+msgid "instance %s: booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:268
+#, python-format
+msgid "~~~~~~ current state = %s ~~~~~~"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:269
+#, python-format
+msgid "instance %s spawned successfully"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:272
+#, python-format
+msgid "instance %s:not booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:274
+msgid "Bremetal assignment is overcommitted."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:354
+#, python-format
+msgid "instance %s: Creating image"
+msgstr "копия %s: Создание образа"
+
+#: cinder/virt/baremetal/proxy.py:473
+#, python-format
+msgid "instance %(inst_name)s: injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:484
+#, python-format
+msgid ""
+"instance %(inst_name)s: ignoring error injecting data into image "
+"%(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:529
+#, python-format
+msgid "instance %s: starting toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:531
+#, python-format
+msgid "instance %s: finished toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:574 cinder/virt/libvirt/connection.py:1815
+msgid ""
+"Cannot get the number of cpu, because this function is not implemented "
+"for this platform. This error can be safely ignored for now."
+msgstr ""
+"Невозможно получить количество ЦПУ, так как эта возможность не "
+"реализована для этой платформы. Эту ошибку можно безопасно пропустить."
+
+#: cinder/virt/baremetal/proxy.py:714
+#, python-format
+msgid "#### RLK: cpu_arch = %s "
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:746
+msgid "Updating!"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:773 cinder/virt/libvirt/connection.py:2609
+#: cinder/virt/xenapi/host.py:129
+msgid "Updating host stats"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:185
+msgid "free_node...."
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:216
+#, python-format
+msgid "deactivate_node is called for node_id = %(id)s node_ip = %(ip)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:221
+msgid "status of node is set to 0"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:232
+msgid "rootfs is already removed"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:264
+msgid "Before ping to the bare-metal node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:275
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is ready"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:279
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is not ready, out_msg=%(out_msg)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:292
+msgid "Noting to do for tilera nodes: vmlinux is in CF"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:316
+msgid "activate_node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:330
+msgid "Node is unknown error state."
+msgstr ""
+
+#: cinder/virt/disk/api.py:165
+msgid "no capable image handler configured"
+msgstr "нет настроенного совместимого обработчика образа"
+
+#: cinder/virt/disk/api.py:178
+#, python-format
+msgid "unknown disk image handler: %s"
+msgstr "неизвестный обработчик образа диска: %s"
+
+#: cinder/virt/disk/api.py:189
+msgid "image already mounted"
+msgstr "образ уже присоединён"
+
+#: cinder/virt/disk/api.py:276 cinder/virt/disk/guestfs.py:64
+#: cinder/virt/disk/guestfs.py:78 cinder/virt/disk/mount.py:100
+#, python-format
+msgid "Failed to mount filesystem: %s"
+msgstr "Ошибка монтирования файловой системы: %s"
+
+#: cinder/virt/disk/api.py:291
+#, python-format
+msgid "Failed to remove container: %s"
+msgstr "Ошибка удаления контейнера: %s"
+
+#: cinder/virt/disk/api.py:441
+#, python-format
+msgid "User %(username)s not found in password file."
+msgstr ""
+
+#: cinder/virt/disk/api.py:457
+#, python-format
+msgid "User %(username)s not found in shadow file."
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:39
+#, python-format
+msgid "unsupported partition: %s"
+msgstr "неподдерживаемый раздел: %s"
+
+#: cinder/virt/disk/guestfs.py:77
+msgid "unknown guestmount error"
+msgstr ""
+
+#: cinder/virt/disk/loop.py:30
+#, python-format
+msgid "Could not attach image to loopback: %s"
+msgstr "Невозможно прикрепить образ для замыкания: %s"
+
+#: cinder/virt/disk/mount.py:76
+msgid "no partitions found"
+msgstr "разделы не найдена"
+
+#: cinder/virt/disk/mount.py:77
+#, python-format
+msgid "Failed to map partitions: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:58
+msgid "nbd unavailable: module not loaded"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:63
+msgid "No free nbd devices"
+msgstr "Нет свободных устройств nbd"
+
+#: cinder/virt/disk/nbd.py:81
+#, python-format
+msgid "qemu-nbd error: %s"
+msgstr "ошибка qemu-nbd: %s"
+
+#: cinder/virt/disk/nbd.py:93
+#, python-format
+msgid "nbd device %s did not show up"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:265
+#, python-format
+msgid "Connecting to libvirt: %s"
+msgstr "Подключение к libvirt: %s"
+
+#: cinder/virt/libvirt/connection.py:286
+msgid "Connection to libvirt broke"
+msgstr "Неполадка с подключением к libvirt"
+
+#: cinder/virt/libvirt/connection.py:388
+#, python-format
+msgid "Error from libvirt during destroy. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:400
+#, python-format
+msgid ""
+"Error from libvirt during saved instance removal. Code=%(errcode)s "
+"Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:411
+#, python-format
+msgid "Error from libvirt during undefine. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:423
+msgid "Instance destroyed successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:435
+#, python-format
+msgid "Error from libvirt during unfilter. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:461
+#, python-format
+msgid "Deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:554
+msgid "attaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:567
+msgid "detaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:692
+#, fuzzy, python-format
+msgid "Instance soft rebooted successfully."
+msgstr "снимок %s: создание завершено"
+
+#: cinder/virt/libvirt/connection.py:696
+#, fuzzy
+msgid "Failed to soft reboot instance."
+msgstr "Ошибка перезагрузки копии"
+
+#: cinder/virt/libvirt/connection.py:725
+msgid "Instance shutdown successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:761 cinder/virt/libvirt/connection.py:905
+msgid "During reboot, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:766
+msgid "Instance rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:867 cinder/virt/xenapi/vmops.py:1358
+#, python-format
+msgid ""
+"Found %(migration_count)d unconfirmed migrations older than "
+"%(confirm_window)d seconds"
+msgstr ""
+"Найдены %(migration_count)d неподтверждённых перемещений, старше "
+"%(confirm_window)d секунд"
+
+#: cinder/virt/libvirt/connection.py:871
+#, python-format
+msgid "Automatically confirming migration %d"
+msgstr "Автоматические подтверждение перемещения %d"
+
+#: cinder/virt/libvirt/connection.py:896
+msgid "Instance is running"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:910
+msgid "Instance spawned successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:926
+#, python-format
+msgid "data: %(data)r, fpath: %(fpath)r"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:978
+#, fuzzy
+msgid "Guest does not have a console available"
+msgstr "Пользователь не имеет административных привилегий"
+
+#: cinder/virt/libvirt/connection.py:1020
+#, python-format
+msgid "Path '%(path)s' supports direct I/O"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1024
+#, python-format
+msgid "Path '%(path)s' does not support direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1028 cinder/virt/libvirt/connection.py:1032
+#, python-format
+msgid "Error on '%(path)s' while checking direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1153
+msgid "Creating image"
+msgstr "Создание изображения"
+
+#: cinder/virt/libvirt/connection.py:1339
+#, python-format
+msgid "Injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1349
+#, python-format
+msgid "Ignoring error injecting data into image %(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1381
+#, python-format
+msgid "block_device_list %s"
+msgstr "block_device_list %s"
+
+#: cinder/virt/libvirt/connection.py:1658
+msgid "Starting toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1662
+msgid "Finished toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1679
+#, python-format
+msgid ""
+"Error from libvirt while looking up %(instance_name)s: [Error Code "
+"%(error_code)s] %(ex)s"
+msgstr ""
+"Ошибка libvirt во время поиска %(instance_name)s: [Код ошибки "
+"%(error_code)s] %(ex)s"
+
+#: cinder/virt/libvirt/connection.py:1920
+msgid "libvirt version is too old (does not support getVersion)"
+msgstr "устаревшая версия libvirt (не поддерживается getVersion)"
+
+#: cinder/virt/libvirt/connection.py:1942
+#, python-format
+msgid "'<cpu>' must be 1, but %d\n"
+msgstr "'<cpu>' должно быть 1, но %d\n"
+
+#: cinder/virt/libvirt/connection.py:1969
+#, python-format
+msgid "topology (%(topology)s) must have %(ks)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2067
+#, python-format
+msgid ""
+"Instance launched has CPU info:\n"
+"%s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2079
+#, python-format
+msgid ""
+"CPU doesn't have compatibility.\n"
+"\n"
+"%(ret)s\n"
+"\n"
+"Refer to %(u)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2136
+#, python-format
+msgid "Timeout migrating for %s. nwfilter not found."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2352
+#, python-format
+msgid "skipping %(path)s since it looks like volume"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2407
+#, python-format
+msgid "Getting disk size of %(i_name)s: %(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2458
+#, python-format
+msgid "Instance %s: Starting migrate_disk_and_power_off"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2513
+msgid "During wait running, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2518
+#, fuzzy, python-format
+msgid "Instance running successfully."
+msgstr "Копия %s: выполнение"
+
+#: cinder/virt/libvirt/connection.py:2525
+#, python-format
+msgid "Instance %s: Starting finish_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2565
+#, python-format
+msgid "Instance %s: Starting finish_revert_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:42
+msgid ""
+"Libvirt module could not be loaded. NWFilterFirewall will not work "
+"correctly."
+msgstr ""
+"Модуль Libvirt не может быть загружен. NWFilterFirewall не будет работать"
+" надлежащим образом."
+
+#: cinder/virt/libvirt/firewall.py:93
+msgid "Called setup_basic_filtering in nwfilter"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:101
+msgid "Ensuring static filters"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:171
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:217
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) for%(name)s is not found."
+msgstr "nwfilter(%(instance_filter_name)s) для%(name)s не найден."
+
+#: cinder/virt/libvirt/firewall.py:233
+msgid "iptables firewall: Setup Basic Filtering"
+msgstr "Брандмауэр iptables: Настройка базовой фильтрации"
+
+#: cinder/virt/libvirt/firewall.py:252
+msgid "Attempted to unfilter instance which is not filtered"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:170
+#, python-format
+msgid "%s is a valid instance name"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:173
+#, python-format
+msgid "%s has a disk file"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:175
+#, python-format
+msgid "Instance %(instance)s is backed by %(backing)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:186
+#, python-format
+msgid ""
+"Instance %(instance)s is using a backing file %(backing)s which does not "
+"appear in the image service"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:237
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification failed"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:247
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification skipped, no hash stored"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:266
+#, python-format
+msgid "Cannot remove %(base_file)s, it does not exist"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:278
+#, python-format
+msgid "Base file too young to remove: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:281
+#, python-format
+msgid "Removing base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:288
+#, python-format
+msgid "Failed to remove %(base_file)s, error was %(error)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:299
+#, python-format
+msgid "%(id)s (%(base_file)s): checking"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:318
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): in use: on this node %(local)d local, %(remote)d "
+"on other nodes"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:330
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): warning -- an absent base file is in use! "
+"instances: %(instance_list)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:338
+#, python-format
+msgid "%(id)s (%(base_file)s): in use on (%(remote)d on other nodes)"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:348
+#, python-format
+msgid "%(id)s (%(base_file)s): image is not in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:354
+#, python-format
+msgid "%(id)s (%(base_file)s): image is in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:377
+#, python-format
+msgid "Skipping verification, no base directory at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:381
+msgid "Verify base images"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:388
+#, python-format
+msgid "Image id %(id)s yields fingerprint %(fingerprint)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:406
+#, python-format
+msgid "Unknown base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:411
+#, python-format
+msgid "Active base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:414
+#, python-format
+msgid "Corrupt base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:418
+#, python-format
+msgid "Removable base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:426
+msgid "Verification complete"
+msgstr ""
+
+#: cinder/virt/libvirt/utils.py:264
+msgid "Unable to find an open port"
+msgstr "Невозможно найти открытый порт"
+
+#: cinder/virt/libvirt/vif.py:90
+#, python-format
+msgid "Ensuring vlan %(vlan)s and bridge %(bridge)s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:99
+#, python-format
+msgid "Ensuring bridge %s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:165 cinder/virt/libvirt/vif.py:220
+#, python-format
+msgid "Failed while unplugging vif of instance '%s'"
+msgstr "Ошибка отсоединения vif копии '%s'"
+
+#: cinder/virt/libvirt/volume.py:163
+#, python-format
+msgid "iSCSI device not found at %s"
+msgstr "iSCSI-устройство не найдено в %s"
+
+#: cinder/virt/libvirt/volume.py:166
+#, python-format
+msgid ""
+"ISCSI volume not yet found at: %(mount_device)s. Will rescan & retry.  "
+"Try number: %(tries)s"
+msgstr ""
+"Том ISCSI не найден в: %(mount_device)s. Будет выполнена повторная "
+"проверка и попытка.  Повторение: %(tries)s"
+
+#: cinder/virt/libvirt/volume.py:178
+#, python-format
+msgid "Found iSCSI node %(mount_device)s (after %(tries)s rescans)"
+msgstr "Найден узел iSCSI %(mount_device)s (после %(tries)s повторных проверок)"
+
+#: cinder/virt/vmwareapi/error_util.py:93
+#, python-format
+msgid "Error(s) %s occurred in the call to RetrieveProperties"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:44 cinder/virt/xenapi/fake.py:77
+#, python-format
+msgid "%(text)s: _db_content => %(content)s"
+msgstr "%(text)s: _db_content => %(content)s"
+
+#: cinder/virt/vmwareapi/fake.py:131
+#, python-format
+msgid "Property %(attr)s not set for the managed object %(objName)s"
+msgstr "Свойство %(attr)s не назначено для управляемого объекта %(objName)s"
+
+#: cinder/virt/vmwareapi/fake.py:437
+msgid "There is no VM registered"
+msgstr "Отсутствуют зарегистрированные ВМ"
+
+#: cinder/virt/vmwareapi/fake.py:439 cinder/virt/vmwareapi/fake.py:609
+#, python-format
+msgid "Virtual Machine with ref %s is not there"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:502
+#, python-format
+msgid "Logging out a session that is invalid or already logged out: %s"
+msgstr "Завершение сеанса с неполадками или уже завершённого сеанса: %s"
+
+#: cinder/virt/vmwareapi/fake.py:517
+msgid "Session is faulty"
+msgstr "Сеанс имеет неполадки"
+
+#: cinder/virt/vmwareapi/fake.py:520
+msgid "Session Invalid"
+msgstr "Недопустимый сеанс"
+
+#: cinder/virt/vmwareapi/fake.py:606
+msgid " No Virtual Machine has been registered yet"
+msgstr " Отсутствуют зарегистриованные виртуальные машины"
+
+#: cinder/virt/vmwareapi/io_util.py:99
+#, python-format
+msgid "Glance image %s is in killed state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:107
+#, python-format
+msgid "Glance image %(image_id)s is in unknown state - %(state)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:128
+msgid ""
+"ESX SOAP server returned an empty port group for the host system in its "
+"response"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:155
+#, python-format
+msgid "Creating Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:169
+#, python-format
+msgid "Created Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/read_write_util.py:150
+#, python-format
+msgid "Exception during HTTP connection close in VMWareHTTpWrite. Exception is %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:84
+msgid "Unable to import suds."
+msgstr "Невозможно импортировать suds."
+
+#: cinder/virt/vmwareapi/vim.py:90
+msgid "Must specify vmwareapi_wsdl_loc"
+msgstr "Необходимо задать vmwareapi_wsdl_loc"
+
+#: cinder/virt/vmwareapi/vim.py:145
+#, python-format
+msgid "No such SOAP method '%s' provided by VI SDK"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:150
+#, python-format
+msgid "httplib error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:157
+#, python-format
+msgid "Socket error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:162
+#, python-format
+msgid "Type error in  %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:166
+#, python-format
+msgid "Exception in %s "
+msgstr "Исключение в %s "
+
+#: cinder/virt/vmwareapi/vmops.py:66
+msgid "Getting list of instances"
+msgstr "Перечень копий"
+
+#: cinder/virt/vmwareapi/vmops.py:82
+#, python-format
+msgid "Got total of %s instances"
+msgstr "Всего %s копий"
+
+#: cinder/virt/vmwareapi/vmops.py:126
+msgid "Couldn't get a local Datastore reference"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:196
+#, python-format
+msgid "Creating VM with the name %s on the ESX  host"
+msgstr "Создание ВМ с именем %s на узле ESX"
+
+#: cinder/virt/vmwareapi/vmops.py:205
+#, python-format
+msgid "Created VM with the name %s on the ESX  host"
+msgstr "Создание ВМ с именем %s на узле ESX"
+
+#: cinder/virt/vmwareapi/vmops.py:234
+#, python-format
+msgid ""
+"Creating Virtual Disk of size  %(vmdk_file_size_in_kb)s KB and adapter "
+"type  %(adapter_type)s on the ESX host local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:251
+#, python-format
+msgid ""
+"Created Virtual Disk of size %(vmdk_file_size_in_kb)s KB on the ESX host "
+"local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:260
+#, python-format
+msgid ""
+"Deleting the file %(flat_uploaded_vmdk_path)s on the ESX host localstore "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:272
+#, python-format
+msgid ""
+"Deleted the file %(flat_uploaded_vmdk_path)s on the ESX host local store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:283
+#, python-format
+msgid ""
+"Downloading image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:298
+#, python-format
+msgid ""
+"Downloaded image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:315
+#, python-format
+msgid "Reconfiguring VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:322
+#, python-format
+msgid "Reconfigured VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:329
+#, python-format
+msgid "Powering on the VM instance %s"
+msgstr "Включение питания на копии ВМ %s"
+
+#: cinder/virt/vmwareapi/vmops.py:335
+#, python-format
+msgid "Powered on the VM instance %s"
+msgstr "Питание включено на копии ВМ %s"
+
+#: cinder/virt/vmwareapi/vmops.py:381
+#, python-format
+msgid "Creating Snapshot of the VM instance %s "
+msgstr "Создание снимка копии ВМ %s "
+
+#: cinder/virt/vmwareapi/vmops.py:391
+#, python-format
+msgid "Created Snapshot of the VM instance %s "
+msgstr "Создание снимка копии ВМ %s "
+
+#: cinder/virt/vmwareapi/vmops.py:434
+#, python-format
+msgid "Copying disk data before snapshot of the VM  instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:447
+#, python-format
+msgid "Copied disk data before snapshot of the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:456
+#, python-format
+msgid "Uploading image %s"
+msgstr "Выгрузка образа %s"
+
+#: cinder/virt/vmwareapi/vmops.py:469
+#, python-format
+msgid "Uploaded image %s"
+msgstr "Выгруженный образ %s"
+
+#: cinder/virt/vmwareapi/vmops.py:479
+#, python-format
+msgid "Deleting temporary vmdk file %s"
+msgstr "Удаление временного файла vmdk %s"
+
+#: cinder/virt/vmwareapi/vmops.py:488
+#, python-format
+msgid "Deleted temporary vmdk file %s"
+msgstr "Удалённый временный файл vmdk %s"
+
+#: cinder/virt/vmwareapi/vmops.py:520
+msgid "instance is not powered on"
+msgstr "копия не включена"
+
+#: cinder/virt/vmwareapi/vmops.py:527
+#, python-format
+msgid "Rebooting guest OS of VM %s"
+msgstr "Перезагрузка гостевой ОС ВМ %s"
+
+#: cinder/virt/vmwareapi/vmops.py:530
+#, python-format
+msgid "Rebooted guest OS of VM %s"
+msgstr "Выполнена перезагрузка гостевой ОС ВМ %s"
+
+#: cinder/virt/vmwareapi/vmops.py:532
+#, python-format
+msgid "Doing hard reboot of VM %s"
+msgstr "Выполнение безотказной перезагрузки ВМ %s"
+
+#: cinder/virt/vmwareapi/vmops.py:536
+#, python-format
+msgid "Did hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:548
+#, python-format
+msgid "instance - %s not present"
+msgstr "копия - %s не представлена"
+
+#: cinder/virt/vmwareapi/vmops.py:567
+#, python-format
+msgid "Powering off the VM %s"
+msgstr "Выключение питания ВМ %s"
+
+#: cinder/virt/vmwareapi/vmops.py:572
+#, python-format
+msgid "Powered off the VM %s"
+msgstr "Питание ВМ %s выключено"
+
+#: cinder/virt/vmwareapi/vmops.py:576
+#, python-format
+msgid "Unregistering the VM %s"
+msgstr "Исключение регистрации ВМ %s"
+
+#: cinder/virt/vmwareapi/vmops.py:579
+#, python-format
+msgid "Unregistered the VM %s"
+msgstr "Незарегистрированная ВМ %s"
+
+#: cinder/virt/vmwareapi/vmops.py:581
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while un-registering the "
+"VM: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:592
+#, python-format
+msgid "Deleting contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:602
+#, python-format
+msgid "Deleted contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:607
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while deleting the VM "
+"contents from the disk: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:615
+msgid "pause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:619
+msgid "unpause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:633
+#, python-format
+msgid "Suspending the VM %s "
+msgstr "Приостановка ВМ %s "
+
+#: cinder/virt/vmwareapi/vmops.py:637
+#, python-format
+msgid "Suspended the VM %s "
+msgstr "Приостановленная ВМ %s "
+
+#: cinder/virt/vmwareapi/vmops.py:640
+msgid "instance is powered off and can not be suspended."
+msgstr "Питание копии выключено и следовательно она не может быть приостановлена."
+
+#: cinder/virt/vmwareapi/vmops.py:643
+#, python-format
+msgid "VM %s was already in suspended state. So returning without doing anything"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:656
+#, python-format
+msgid "Resuming the VM %s"
+msgstr "Возобновление работы ВМ %s"
+
+#: cinder/virt/vmwareapi/vmops.py:661
+#, python-format
+msgid "Resumed the VM %s "
+msgstr "Работа ВМ %s возобновлена "
+
+#: cinder/virt/vmwareapi/vmops.py:663
+msgid "instance is not in a suspended state"
+msgstr "копия не в приостановленном состоянии"
+
+#: cinder/virt/vmwareapi/vmops.py:699
+msgid "get_diagnostics not implemented for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:757
+#, python-format
+msgid ""
+"Reconfiguring VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:765
+#, python-format
+msgid ""
+"Reconfigured VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:802
+#, python-format
+msgid "Creating directory with path %s"
+msgstr "Создание папки с адресом %s"
+
+#: cinder/virt/vmwareapi/vmops.py:806
+#, python-format
+msgid "Created directory with path %s"
+msgstr "Создана папка с адресом %s"
+
+#: cinder/virt/vmwareapi/vmware_images.py:89
+#, python-format
+msgid "Downloading image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:103
+#, python-format
+msgid "Downloaded image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:108
+#, python-format
+msgid "Uploading image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:129
+#, python-format
+msgid "Uploaded image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:139
+#, python-format
+msgid "Getting image size for the image %s"
+msgstr "Получение размера образа для образа %s"
+
+#: cinder/virt/vmwareapi/vmware_images.py:143
+#, python-format
+msgid "Got image size of %(size)s for the image %(image)s"
+msgstr "Принят размер образа %(size)s для образа %(image)s"
+
+#: cinder/virt/xenapi/fake.py:553 cinder/virt/xenapi/fake.py:652
+#: cinder/virt/xenapi/fake.py:670 cinder/virt/xenapi/fake.py:732
+msgid "Raising NotImplemented"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:555
+#, python-format
+msgid "xenapi.fake does not have an implementation for %s"
+msgstr "xenapi.fake не имеет реализации для %s"
+
+#: cinder/virt/xenapi/fake.py:589
+#, python-format
+msgid "Calling %(localname)s %(impl)s"
+msgstr "Выполняется вызов %(localname)s %(impl)s"
+
+#: cinder/virt/xenapi/fake.py:594
+#, python-format
+msgid "Calling getter %s"
+msgstr "Выполняется вызов getter %s"
+
+#: cinder/virt/xenapi/fake.py:654
+#, python-format
+msgid ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+msgstr ""
+"xenapi.fake не имеет реализации для %s или был вызван с использованием "
+"неправильным числом аргументов"
+
+#: cinder/virt/xenapi/host.py:67
+#, python-format
+msgid ""
+"Instance %(name)s running on %(host)s could not be found in the database:"
+" assuming it is a worker VM and skipping migration to a new host"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:137
+#, python-format
+msgid "Unable to get SR for this host: %s"
+msgstr "Невозможно принять SR для этого узла: %s"
+
+#: cinder/virt/xenapi/host.py:169
+#, fuzzy, python-format
+msgid "Unable to get updated status"
+msgstr "Невозможно получить обновлённое состояние: %s"
+
+#: cinder/virt/xenapi/host.py:172
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s."
+msgstr "Вызов %(method)s возвратил ошибку: %(e)s."
+
+#: cinder/virt/xenapi/network_utils.py:37
+#, python-format
+msgid "Found non-unique network for name_label %s"
+msgstr "Найдена не уникальная сеть для name_label %s"
+
+#: cinder/virt/xenapi/network_utils.py:55
+#, python-format
+msgid "Found non-unique network for bridge %s"
+msgstr "Найдена не уникальная сеть для моста %s"
+
+#: cinder/virt/xenapi/network_utils.py:58
+#, python-format
+msgid "Found no network for bridge %s"
+msgstr "Не найдена сеть для моста %s"
+
+#: cinder/virt/xenapi/pool.py:111
+#, python-format
+msgid "Unable to eject %(host)s from the pool; pool not empty"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:126
+#, python-format
+msgid "Unable to eject %(host)s from the pool; No master found"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:143
+#, python-format
+msgid "Pool-Join failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:146
+#, fuzzy, python-format
+msgid "Unable to join %(host)s in the pool"
+msgstr "Невозможно найти узел для копии %s"
+
+#: cinder/virt/xenapi/pool.py:162
+#, python-format
+msgid "Pool-eject failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:174
+#, fuzzy, python-format
+msgid "Unable to set up pool: %(e)s."
+msgstr "Невозможно использовать глобальные полномочия %(role_id)s"
+
+#: cinder/virt/xenapi/pool.py:185
+#, python-format
+msgid "Pool-set_name_label failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:103
+#, python-format
+msgid "Found no PIF for device %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:122
+#, python-format
+msgid ""
+"PIF %(pif_rec['uuid'])s for network %(bridge)s has VLAN id %(pif_vlan)d. "
+"Expected %(vlan_num)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:218
+#, fuzzy, python-format
+msgid "Created VM"
+msgstr "_создать: %s"
+
+#: cinder/virt/xenapi/vm_utils.py:245
+#, python-format
+msgid "VBD not found in instance %s"
+msgstr "VBD не найдено для копии %s"
+
+#: cinder/virt/xenapi/vm_utils.py:262
+#, fuzzy, python-format
+msgid "VBD %s already detached"
+msgstr "группа %s уже существует"
+
+#: cinder/virt/xenapi/vm_utils.py:265
+#, python-format
+msgid "VBD %(vbd_ref)s detach rejected, attempt %(num_attempt)d/%(max_attempts)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:270
+#, python-format
+msgid "Unable to unplug VBD %s"
+msgstr "Невозможно отсоединить VBD %s"
+
+#: cinder/virt/xenapi/vm_utils.py:275
+#, python-format
+msgid "Reached maximum number of retries trying to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:286
+#, python-format
+msgid "Unable to destroy VBD %s"
+msgstr "Невозможно ликвидировать VBD %s"
+
+#: cinder/virt/xenapi/vm_utils.py:305
+#, fuzzy, python-format
+msgid "Creating %(vbd_type)s-type VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+msgstr "Создана VBD %(vbd_ref)s для ВМ %(vm_ref)s, VDI %(vdi_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:308
+#, python-format
+msgid "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+msgstr "Создана VBD %(vbd_ref)s для ВМ %(vm_ref)s, VDI %(vdi_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:319
+#, python-format
+msgid "Unable to destroy VDI %s"
+msgstr "Невозможно ликвидировать VDI %s"
+
+#: cinder/virt/xenapi/vm_utils.py:336
+#, python-format
+msgid ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+msgstr ""
+"Создан VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s) "
+"на %(sr_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:345
+#, python-format
+msgid "Copied VDI %(vdi_ref)s from VDI %(vdi_to_copy_ref)s on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:353
+#, python-format
+msgid "Cloned VDI %(vdi_ref)s from VDI %(vdi_to_clone_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:372
+#, fuzzy, python-format
+msgid "No primary VDI found for %(vm_ref)s"
+msgstr "Отсутствует первичный VDI для%(vm_ref)s"
+
+#: cinder/virt/xenapi/vm_utils.py:379
+#, fuzzy, python-format
+msgid "Snapshotting with label '%(label)s'"
+msgstr "Снимок ВМ %(vm_ref)s с меткой '%(label)s'..."
+
+#: cinder/virt/xenapi/vm_utils.py:392
+#, fuzzy, python-format
+msgid "Created snapshot %(template_vm_ref)s"
+msgstr "Создан снимок %(template_vm_ref)s из ВМ %(vm_ref)s."
+
+#: cinder/virt/xenapi/vm_utils.py:431
+#, python-format
+msgid "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+msgstr "Запрос xapi для выгрузки %(vdi_uuids)s в качестве ID %(image_id)s"
+
+#: cinder/virt/xenapi/vm_utils.py:583
+#, python-format
+msgid "Creating blank HD of size %(req_size)d gigs"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:634
+#, python-format
+msgid ""
+"Fast cloning is only supported on default local SR of type ext. SR on "
+"this system was found to be of type %(sr_type)s. Ignoring the cow flag."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:724
+#, python-format
+msgid ""
+"download_vhd %(image)s attempt %(attempt_num)d/%(max_attempts)d from "
+"%(glance_host)s:%(glance_port)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:734
+#, python-format
+msgid "download_vhd failed: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:750
+#, python-format
+msgid "Asking xapi to fetch vhd image %(image)s"
+msgstr "Запрос xapi на приём образа vhd %(image)s"
+
+#: cinder/virt/xenapi/vm_utils.py:760
+#, python-format
+msgid ""
+"xapi 'download_vhd' returned VDI of type '%(vdi_type)s' with UUID "
+"'%(vdi_uuid)s'"
+msgstr ""
+"xapi 'download_vhd' возвратил VDI типа '%(vdi_type)s' с UUID "
+"'%(vdi_uuid)s'"
+
+#: cinder/virt/xenapi/vm_utils.py:789
+#, python-format
+msgid "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+msgstr "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+
+#: cinder/virt/xenapi/vm_utils.py:805
+#, python-format
+msgid "image_size_bytes=%(size_bytes)d, allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr "image_size_bytes=%(size_bytes)d, allowed_size_bytes=%(allowed_size_bytes)d"
+
+#: cinder/virt/xenapi/vm_utils.py:809
+#, python-format
+msgid ""
+"Image size %(size_bytes)d exceeded instance_type allowed size "
+"%(allowed_size_bytes)d"
+msgstr ""
+"Размер образа %(size_bytes)d превышает допустимый instance_type  размер "
+"%(allowed_size_bytes)d"
+
+#: cinder/virt/xenapi/vm_utils.py:831
+#, fuzzy, python-format
+msgid "Fetching image %(image)s, type %(image_type_str)"
+msgstr "Получение образа %(image)s"
+
+#: cinder/virt/xenapi/vm_utils.py:844
+#, python-format
+msgid "Size for image %(image)s: %(virtual_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:853
+#, python-format
+msgid ""
+"Kernel/Ramdisk image is too large: %(vdi_size)d bytes, max %(max_size)d "
+"bytes"
+msgstr ""
+"Превышен размер ядра/Ramdisk образа: %(vdi_size)d байт, макс. "
+"%(max_size)d байт"
+
+#: cinder/virt/xenapi/vm_utils.py:870
+#, python-format
+msgid "Copying VDI %s to /boot/guest on dom0"
+msgstr "Копирование VDI %s в /boot/guest на dom0"
+
+#: cinder/virt/xenapi/vm_utils.py:884
+#, python-format
+msgid "Kernel/Ramdisk VDI %s destroyed"
+msgstr "Ядро/Ramdisk VDI %s ликвидирован"
+
+#: cinder/virt/xenapi/vm_utils.py:895
+#, fuzzy
+msgid "Failed to fetch glance image"
+msgstr "Ошибка перезагрузки копии"
+
+#: cinder/virt/xenapi/vm_utils.py:934
+#, python-format
+msgid "Detected %(image_type_str)s format for image %(image_ref)s"
+msgstr "Обнаружен %(image_type_str)s формат для образа %(image_ref)s"
+
+#: cinder/virt/xenapi/vm_utils.py:955
+#, python-format
+msgid "Looking up vdi %s for PV kernel"
+msgstr "Поиск vdi %s для ядра PV"
+
+#: cinder/virt/xenapi/vm_utils.py:973
+#, python-format
+msgid "Unknown image format %(disk_image_type)s"
+msgstr "Неизвестный формат образа %(disk_image_type)s"
+
+#: cinder/virt/xenapi/vm_utils.py:1016
+#, python-format
+msgid "VDI %s is still available"
+msgstr "VDI %s до сих пор доступен"
+
+#: cinder/virt/xenapi/vm_utils.py:1059
+#, python-format
+msgid "(VM_UTILS) xenserver vm state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1061
+#, python-format
+msgid "(VM_UTILS) xenapi power_state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1088
+#, python-format
+msgid "Unable to parse rrd of %(vm_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1108
+#, python-format
+msgid "Re-scanning SR %s"
+msgstr "Повторная проверка SR %s"
+
+#: cinder/virt/xenapi/vm_utils.py:1136
+#, python-format
+msgid "Flag sr_matching_filter '%s' does not respect formatting convention"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1154
+msgid ""
+"XenAPI is unable to find a Storage Repository to install guest instances "
+"on. Please check your configuration and/or configure the flag "
+"'sr_matching_filter'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1167
+msgid "Cannot find SR of content-type ISO"
+msgstr "Невозможно найти SR типа содержимого ISO"
+
+#: cinder/virt/xenapi/vm_utils.py:1175
+#, python-format
+msgid "ISO: looking at SR %(sr_rec)s"
+msgstr "ISO: поиск SR %(sr_rec)s"
+
+#: cinder/virt/xenapi/vm_utils.py:1177
+msgid "ISO: not iso content"
+msgstr "ISO: не содержимое iso типа"
+
+#: cinder/virt/xenapi/vm_utils.py:1180
+msgid "ISO: iso content_type, no 'i18n-key' key"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1183
+msgid "ISO: iso content_type, i18n-key value not 'local-storage-iso'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1187
+msgid "ISO: SR MATCHing our criteria"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1189
+msgid "ISO: ISO, looking to see if it is host local"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1192
+#, python-format
+msgid "ISO: PBD %(pbd_ref)s disappeared"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1195
+#, python-format
+msgid "ISO: PBD matching, want %(pbd_rec)s, have %(host)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1198
+msgid "ISO: SR with local PBD"
+msgstr "ISO: SR с локальной PBD"
+
+#: cinder/virt/xenapi/vm_utils.py:1220
+#, python-format
+msgid ""
+"Unable to obtain RRD XML for VM %(vm_uuid)s with server details: "
+"%(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1236
+#, python-format
+msgid "Unable to obtain RRD XML updates with server details: %(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1290
+#, python-format
+msgid "Invalid statistics data from Xenserver: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1343
+#, python-format
+msgid "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1417
+#, python-format
+msgid ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1427
+#, python-format
+msgid "VHD coalesce attempts exceeded (%(max_attempts)d), giving up..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1462
+#, python-format
+msgid "Timeout waiting for device %s to be created"
+msgstr "Время ожидания при создании устройства %s"
+
+#: cinder/virt/xenapi/vm_utils.py:1473
+#, python-format
+msgid "Plugging VBD %s ... "
+msgstr "Подсоединение VBD %s ... "
+
+#: cinder/virt/xenapi/vm_utils.py:1476
+#, python-format
+msgid "Plugging VBD %s done."
+msgstr "Подсоединение VBD %s выполнено."
+
+#: cinder/virt/xenapi/vm_utils.py:1478
+#, python-format
+msgid "VBD %(vbd_ref)s plugged as %(orig_dev)s"
+msgstr "VBD %(vbd_ref)s подсоединено как %(orig_dev)s"
+
+#: cinder/virt/xenapi/vm_utils.py:1481
+#, python-format
+msgid "VBD %(vbd_ref)s plugged into wrong dev, remapping to %(dev)s"
+msgstr ""
+"VBD %(vbd_ref)s подсоединено в неправильный dev, изменение назначения на "
+"%(dev)s"
+
+#: cinder/virt/xenapi/vm_utils.py:1490
+#, python-format
+msgid "Destroying VBD for VDI %s ... "
+msgstr "Ликвидирование VBD для VDI %s ... "
+
+#: cinder/virt/xenapi/vm_utils.py:1498
+#, python-format
+msgid "Destroying VBD for VDI %s done."
+msgstr "Ликвидирование VBD для VDI %s завершено."
+
+#: cinder/virt/xenapi/vm_utils.py:1511
+#, python-format
+msgid "Running pygrub against %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1518
+#, python-format
+msgid "Found Xen kernel %s"
+msgstr "Найдено ядро Xen %s"
+
+#: cinder/virt/xenapi/vm_utils.py:1520
+msgid "No Xen kernel found.  Booting HVM."
+msgstr "Ядро Xen не найдено.  Загрузка HVM."
+
+#: cinder/virt/xenapi/vm_utils.py:1533
+msgid "Partitions:"
+msgstr "Разделы:"
+
+#: cinder/virt/xenapi/vm_utils.py:1539
+#, python-format
+msgid "  %(num)s: %(ptype)s %(size)d sectors"
+msgstr "  %(num)s: %(ptype)s %(size)d секторов"
+
+#: cinder/virt/xenapi/vm_utils.py:1565
+#, python-format
+msgid ""
+"Writing partition table %(primary_first)d %(primary_last)d to "
+"%(dev_path)s..."
+msgstr ""
+"Запись таблицы разделов %(primary_first)d %(primary_last)d в "
+"%(dev_path)s..."
+
+#: cinder/virt/xenapi/vm_utils.py:1578
+#, python-format
+msgid "Writing partition table %s done."
+msgstr "Запись таблицы разделов %s выполнена."
+
+#: cinder/virt/xenapi/vm_utils.py:1632
+#, python-format
+msgid ""
+"Starting sparse_copy src=%(src_path)s dst=%(dst_path)s "
+"virtual_size=%(virtual_size)d block_size=%(block_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1664
+#, python-format
+msgid ""
+"Finished sparse_copy in %(duration).2f secs, %(compression_pct).2f%% "
+"reduction in size"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1714
+msgid ""
+"XenServer tools installed in this image are capable of network injection."
+"  Networking files will not bemanipulated"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1722
+msgid ""
+"XenServer tools are present in this image but are not capable of network "
+"injection"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1726
+msgid "XenServer tools are not installed in this image"
+msgstr "Средства XenServer не установлены в этот образ"
+
+#: cinder/virt/xenapi/vm_utils.py:1742
+msgid "Manipulating interface files directly"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1751
+#, python-format
+msgid "Failed to mount filesystem (expected for non-linux instances): %s"
+msgstr ""
+"Ошибка присоединения файловой системы (ожидаемо для копий не на базе "
+"linux): %s"
+
+#: cinder/virt/xenapi/vmops.py:131 cinder/virt/xenapi/vmops.py:722
+#, fuzzy, python-format
+msgid "Updating progress to %(progress)d"
+msgstr "Обновление выполнения копии '%(instance_uuid)s' до %(progress)d"
+
+#: cinder/virt/xenapi/vmops.py:231
+#, python-format
+msgid "Attempted to power on non-existent instance bad instance id %s"
+msgstr ""
+"Предпринята попытка включения несуществующей копии, копии с неполадками с"
+" идентификатором %s"
+
+#: cinder/virt/xenapi/vmops.py:233
+#, fuzzy, python-format
+msgid "Starting instance"
+msgstr "Запуск копии %s"
+
+#: cinder/virt/xenapi/vmops.py:303
+msgid "Removing kernel/ramdisk files from dom0"
+msgstr "Удаление ядра/ramdisk файлов из dom0"
+
+#: cinder/virt/xenapi/vmops.py:358
+#, fuzzy
+msgid "Failed to spawn, rolling back"
+msgstr "Ошибка обновления тома в базе данных"
+
+#: cinder/virt/xenapi/vmops.py:443
+msgid "Detected ISO image type, creating blank VM for install"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:462
+#, fuzzy, python-format
+msgid "Auto configuring disk, attempting to resize partition..."
+msgstr ""
+"Автоматическая настройка диска для копии %(instance_uuid)s, выполняется "
+"попытка изменения размера раздела..."
+
+#: cinder/virt/xenapi/vmops.py:515
+#, fuzzy, python-format
+msgid "Invalid value for injected_files: %r"
+msgstr "Недопустимое значение для injected_files: '%s'"
+
+#: cinder/virt/xenapi/vmops.py:520
+#, python-format
+msgid "Injecting file path: '%s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:527
+msgid "Setting admin password"
+msgstr "Настройка пароля администратора"
+
+#: cinder/virt/xenapi/vmops.py:531
+msgid "Resetting network"
+msgstr "Восстановление сети"
+
+#: cinder/virt/xenapi/vmops.py:538
+msgid "Setting VCPU weight"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:544
+#, fuzzy
+msgid "Starting VM"
+msgstr "Выполнение перезагрузки xvp"
+
+#: cinder/virt/xenapi/vmops.py:551
+#, python-format
+msgid ""
+"Latest agent build for %(hypervisor)s/%(os)s/%(architecture)s is "
+"%(version)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:554
+#, python-format
+msgid "No agent build found for %(hypervisor)s/%(os)s/%(architecture)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:561
+msgid "Waiting for instance state to become running"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:573
+msgid "Querying agent version"
+msgstr "Запрос версии агента"
+
+#: cinder/virt/xenapi/vmops.py:576
+#, python-format
+msgid "Instance agent version: %s"
+msgstr "Версия агента копии: %s"
+
+#: cinder/virt/xenapi/vmops.py:581
+#, python-format
+msgid "Updating Agent to %s"
+msgstr "Обновление агента до %s"
+
+#: cinder/virt/xenapi/vmops.py:616
+#, python-format
+msgid "No opaque_ref could be determined for '%s'."
+msgstr "opaque_ref не может быть определён для '%s'."
+
+#: cinder/virt/xenapi/vmops.py:670
+#, fuzzy, python-format
+msgid "Finished snapshot and upload for VM"
+msgstr "Готовый снимок и выгрузка для ВМ %s"
+
+#: cinder/virt/xenapi/vmops.py:677
+#, fuzzy, python-format
+msgid "Starting snapshot for VM"
+msgstr "Запуск снимка для ВМ %s"
+
+#: cinder/virt/xenapi/vmops.py:686
+#, fuzzy, python-format
+msgid "Unable to Snapshot instance: %(exc)s"
+msgstr "Невозможно найти узел для копии %s"
+
+#: cinder/virt/xenapi/vmops.py:702
+msgid "Failed to transfer vhd to new host"
+msgstr "Ошибка перемещения vhd на новый узел"
+
+#: cinder/virt/xenapi/vmops.py:770
+#, python-format
+msgid "Resizing down VDI %(cow_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr "Изменение размера VDI %(cow_uuid)s с %(old_gb)dГБ до %(new_gb)dГБ"
+
+#: cinder/virt/xenapi/vmops.py:893
+#, python-format
+msgid "Resizing up VDI %(vdi_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr "Изменение размера VDI %(vdi_uuid)s с %(old_gb)dГБ до %(new_gb)dГБ"
+
+#: cinder/virt/xenapi/vmops.py:901
+#, fuzzy, python-format
+msgid "Resize complete"
+msgstr "Изменение размера копии %s завершено"
+
+#: cinder/virt/xenapi/vmops.py:928
+#, python-format
+msgid "Failed to query agent version: %(resp)r"
+msgstr "Ошибка запроса версии агента: %(resp)r"
+
+#: cinder/virt/xenapi/vmops.py:949
+#, python-format
+msgid "domid changed from %(domid)s to %(newdomid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:962
+#, python-format
+msgid "Failed to update agent: %(resp)r"
+msgstr "Ошибка обновления агента: %(resp)r"
+
+#: cinder/virt/xenapi/vmops.py:983
+#, python-format
+msgid "Failed to exchange keys: %(resp)r"
+msgstr "Ошибка обмена ключей: %(resp)r"
+
+#: cinder/virt/xenapi/vmops.py:998
+#, python-format
+msgid "Failed to update password: %(resp)r"
+msgstr "Ошибка обновления пароля: %(resp)r"
+
+#: cinder/virt/xenapi/vmops.py:1023
+#, python-format
+msgid "Failed to inject file: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1032
+msgid "VM already halted, skipping shutdown..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1036
+msgid "Shutting down VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1054
+msgid "Unable to find VBD for VM"
+msgstr "Невозможно найти VBD для ВМ"
+
+#: cinder/virt/xenapi/vmops.py:1097
+#, fuzzy, python-format
+msgid "Using RAW or VHD, skipping kernel and ramdisk deletion"
+msgstr ""
+"Копия %(instance_uuid)s использует RAW или VHD, пропуск ядра и удаление "
+"ramdisk"
+
+#: cinder/virt/xenapi/vmops.py:1104
+msgid "instance has a kernel or ramdisk but not both"
+msgstr "копия содержит ядро или ramdisk, но не оба"
+
+#: cinder/virt/xenapi/vmops.py:1111
+msgid "kernel/ramdisk files removed"
+msgstr "файлы ядра/ramdisk удалены"
+
+#: cinder/virt/xenapi/vmops.py:1121
+msgid "VM destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1147
+#, fuzzy
+msgid "Destroying VM"
+msgstr "Выполнение перезагрузки xvp"
+
+#: cinder/virt/xenapi/vmops.py:1169
+msgid "VM is not present, skipping destroy..."
+msgstr "ВМ не предоставлена, пропуск выполнения ликвидации..."
+
+#: cinder/virt/xenapi/vmops.py:1222
+#, python-format
+msgid "Instance is already in Rescue Mode: %s"
+msgstr "Копия в состоянии режима восстановления: %s"
+
+#: cinder/virt/xenapi/vmops.py:1296
+#, python-format
+msgid "Found %(instance_count)d hung reboots older than %(timeout)d seconds"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1300
+#, fuzzy, python-format
+msgid "Automatically hard rebooting"
+msgstr "Автоматическая безотказная перезагрузка %d"
+
+#: cinder/virt/xenapi/vmops.py:1363
+#, python-format
+msgid "Setting migration %(migration_id)s to error: %(reason)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1374
+#, fuzzy, python-format
+msgid ""
+"Automatically confirming migration %(migration_id)s for instance "
+"%(instance_uuid)s"
+msgstr "Завершение работы ВМ для копии %(instance_uuid)s"
+
+#: cinder/virt/xenapi/vmops.py:1379
+#, fuzzy, python-format
+msgid "Instance %(instance_uuid)s not found"
+msgstr "Копия %(instance_id)s не найдена"
+
+#: cinder/virt/xenapi/vmops.py:1383
+#, fuzzy, python-format
+msgid "In ERROR state"
+msgstr "Ошибка БД: %s"
+
+#: cinder/virt/xenapi/vmops.py:1389
+#, python-format
+msgid "In %(task_state)s task_state, not RESIZE_VERIFY"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1396
+#, python-format
+msgid "Error auto-confirming resize: %(e)s. Will retry later."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1418
+msgid "Could not get bandwidth info."
+msgstr "Невозможно получить сведения о пропускной способности."
+
+#: cinder/virt/xenapi/vmops.py:1469
+#, fuzzy
+msgid "Injecting network info to xenstore"
+msgstr "установка сетевого узла"
+
+#: cinder/virt/xenapi/vmops.py:1483
+#, fuzzy
+msgid "Creating vifs"
+msgstr "Создание изображения"
+
+#: cinder/virt/xenapi/vmops.py:1492
+#, fuzzy, python-format
+msgid "Creating VIF for network %(network_ref)s"
+msgstr "Создание VIF для ВМ %(vm_ref)s, сеть %(network_ref)s."
+
+#: cinder/virt/xenapi/vmops.py:1495
+#, fuzzy, python-format
+msgid "Created VIF %(vif_ref)s, network %(network_ref)s"
+msgstr "Создание VIF для ВМ %(vm_ref)s, сеть %(network_ref)s."
+
+#: cinder/virt/xenapi/vmops.py:1520
+msgid "Injecting hostname to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1545
+#, fuzzy, python-format
+msgid ""
+"The agent call to %(method)s returned an invalid response: %(ret)r. "
+"path=%(path)s; args=%(args)r"
+msgstr ""
+"Вызов агентом %(method)s возвратил недопустимый ответ: %(ret)r. VM "
+"id=%(instance_uuid)s; path=%(path)s; args=%(addl_args)r"
+
+#: cinder/virt/xenapi/vmops.py:1566
+#, fuzzy, python-format
+msgid "TIMEOUT: The call to %(method)s timed out. args=%(args)r"
+msgstr ""
+"ВРЕМЯ ПРОСТОЯ: Срок вызова %(method)s истёк. VM id=%(instance_uuid)s; "
+"args=%(args)r"
+
+#: cinder/virt/xenapi/vmops.py:1570
+#, fuzzy, python-format
+msgid ""
+"NOT IMPLEMENTED: The call to %(method)s is not supported by the agent. "
+"args=%(args)r"
+msgstr ""
+"НЕ РЕАЛИЗОВАНО: Вызов %(method)s не поддерживается агентом. VM "
+"id=%(instance_uuid)s; args=%(args)r"
+
+#: cinder/virt/xenapi/vmops.py:1575
+#, fuzzy, python-format
+msgid "The call to %(method)s returned an error: %(e)s. args=%(args)r"
+msgstr "Вызов %(method)s возвратил ошибку: %(e)s."
+
+#: cinder/virt/xenapi/vmops.py:1661
+#, python-format
+msgid "OpenSSL error: %s"
+msgstr "Ошибка OpenSSL: %s"
+
+#: cinder/virt/xenapi/volume_utils.py:52
+msgid "creating sr within volume_utils"
+msgstr "создание sr в volume_utils"
+
+#: cinder/virt/xenapi/volume_utils.py:55 cinder/virt/xenapi/volume_utils.py:83
+#, python-format
+msgid "type is = %s"
+msgstr "тип = %s"
+
+#: cinder/virt/xenapi/volume_utils.py:58 cinder/virt/xenapi/volume_utils.py:86
+#, python-format
+msgid "name = %s"
+msgstr "наименование = %s"
+
+#: cinder/virt/xenapi/volume_utils.py:71
+#, python-format
+msgid "Created %(label)s as %(sr_ref)s."
+msgstr "Создано %(label)s как %(sr_ref)s."
+
+#: cinder/virt/xenapi/volume_utils.py:76 cinder/virt/xenapi/volume_utils.py:174
+msgid "Unable to create Storage Repository"
+msgstr "Невозможно создать репозиторий хранилища"
+
+#: cinder/virt/xenapi/volume_utils.py:80
+msgid "introducing sr within volume_utils"
+msgstr "внедрение sr в volume_utils"
+
+#: cinder/virt/xenapi/volume_utils.py:103 cinder/virt/xenapi/volume_utils.py:170
+#: cinder/virt/xenapi/volumeops.py:156
+#, python-format
+msgid "Introduced %(label)s as %(sr_ref)s."
+msgstr "внедрён %(label)s в качестве %(sr_ref)s."
+
+#: cinder/virt/xenapi/volume_utils.py:106
+msgid "Creating pbd for SR"
+msgstr "Создание pbd для SR"
+
+#: cinder/virt/xenapi/volume_utils.py:108
+msgid "Plugging SR"
+msgstr "Подключение SR"
+
+#: cinder/virt/xenapi/volume_utils.py:116 cinder/virt/xenapi/volumeops.py:160
+msgid "Unable to introduce Storage Repository"
+msgstr "Невозможно внедрить Репозиторий хранения"
+
+#: cinder/virt/xenapi/volume_utils.py:127 cinder/virt/xenapi/volumeops.py:50
+msgid "Unable to get SR using uuid"
+msgstr "Невозможно получить SR с использованием uuid"
+
+#: cinder/virt/xenapi/volume_utils.py:129
+#, python-format
+msgid "Forgetting SR %s..."
+msgstr "Забывание SR %s..."
+
+#: cinder/virt/xenapi/volume_utils.py:137
+msgid "Unable to forget Storage Repository"
+msgstr "Невозможно забыть Репозиторий хранения"
+
+#: cinder/virt/xenapi/volume_utils.py:157
+#, python-format
+msgid "Introducing %s..."
+msgstr "Внедрение %s..."
+
+#: cinder/virt/xenapi/volume_utils.py:186
+#, python-format
+msgid "Unable to find SR from VBD %s"
+msgstr "Невозможно найти SR из VBD %s"
+
+#: cinder/virt/xenapi/volume_utils.py:204
+#, python-format
+msgid "Ignoring exception %(exc)s when getting PBDs for %(sr_ref)s"
+msgstr "Пропуск исключения %(exc)s при получении PBD для %(sr_ref)s"
+
+#: cinder/virt/xenapi/volume_utils.py:210
+#, python-format
+msgid "Ignoring exception %(exc)s when unplugging PBD %(pbd)s"
+msgstr "Пропуск исключения %(exc)s при отсоединении PBD %(pbd)s"
+
+#: cinder/virt/xenapi/volume_utils.py:234
+#, python-format
+msgid "Unable to introduce VDI on SR %s"
+msgstr "Невозможно внедрить VDI на SR %s"
+
+#: cinder/virt/xenapi/volume_utils.py:242
+#, python-format
+msgid "Unable to get record of VDI %s on"
+msgstr "Невозможно получить запись VDI %s на"
+
+#: cinder/virt/xenapi/volume_utils.py:264
+#, python-format
+msgid "Unable to introduce VDI for SR %s"
+msgstr "Невозможно внедрить VDI для SR %s"
+
+#: cinder/virt/xenapi/volume_utils.py:274
+#, python-format
+msgid "Error finding vdis in SR %s"
+msgstr "Ошибка поиска vdis в SR %s"
+
+#: cinder/virt/xenapi/volume_utils.py:281
+#, python-format
+msgid "Unable to find vbd for vdi %s"
+msgstr "Ошибка поиска vbd для vdi %s"
+
+#: cinder/virt/xenapi/volume_utils.py:315
+#, python-format
+msgid "Unable to obtain target information %(data)s, %(mountpoint)s"
+msgstr "Невозможно получить сведения назначения %(data)s, %(mountpoint)s"
+
+#: cinder/virt/xenapi/volume_utils.py:341
+#, python-format
+msgid "Mountpoint cannot be translated: %s"
+msgstr "Точка подключения не может быть переведена: %s"
+
+#: cinder/virt/xenapi/volumeops.py:64
+msgid "Could not find VDI ref"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:69
+#, python-format
+msgid "Creating SR %s"
+msgstr "Создание SR %s"
+
+#: cinder/virt/xenapi/volumeops.py:73
+msgid "Could not create SR"
+msgstr "Невозможно создать SR"
+
+#: cinder/virt/xenapi/volumeops.py:76
+msgid "Could not retrieve SR record"
+msgstr "Невозможно получить запись SR"
+
+#: cinder/virt/xenapi/volumeops.py:81
+#, python-format
+msgid "Introducing SR %s"
+msgstr "Внедрение SR %s"
+
+#: cinder/virt/xenapi/volumeops.py:85
+msgid "SR found in xapi database. No need to introduce"
+msgstr "SR найдено в базе данных xapi. Нет необходимости во внедрении"
+
+#: cinder/virt/xenapi/volumeops.py:90
+msgid "Could not introduce SR"
+msgstr "Невозможно внедрить SR"
+
+#: cinder/virt/xenapi/volumeops.py:94
+#, python-format
+msgid "Checking for SR %s"
+msgstr "Проверка SR %s"
+
+#: cinder/virt/xenapi/volumeops.py:106
+#, python-format
+msgid "SR %s not found in the xapi database"
+msgstr "SR %s не найден в базе данных xapi"
+
+#: cinder/virt/xenapi/volumeops.py:112
+msgid "Could not forget SR"
+msgstr "Невозможно забыть SR"
+
+#: cinder/virt/xenapi/volumeops.py:121
+#, python-format
+msgid "Attach_volume: %(connection_info)s, %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:178
+#, python-format
+msgid "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+msgstr "Невозможно создать VDI на SR %(sr_ref)s для копии %(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:189
+#, python-format
+msgid "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+msgstr "Невозможно использовать SR %(sr_ref)s для копии %(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:197
+#, python-format
+msgid "Unable to attach volume to instance %s"
+msgstr "Невозможно присоединить том для копии %s"
+
+#: cinder/virt/xenapi/volumeops.py:200
+#, python-format
+msgid "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+msgstr "Точка подключения %(mountpoint)s присоединена к копии %(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:210
+#, python-format
+msgid "Detach_volume: %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:219
+#, python-format
+msgid "Unable to locate volume %s"
+msgstr "Невозможно найти том %s"
+
+#: cinder/virt/xenapi/volumeops.py:227
+#, python-format
+msgid "Unable to detach volume %s"
+msgstr "Невозможно отсоединить том %s"
+
+#: cinder/virt/xenapi/volumeops.py:232
+#, python-format
+msgid "Unable to destroy vbd %s"
+msgstr "Невозможно ликвидировать vbd %s"
+
+#: cinder/virt/xenapi/volumeops.py:239
+#, python-format
+msgid "Error purging SR %s"
+msgstr "Ошибка очистки SR %s"
+
+#: cinder/virt/xenapi/volumeops.py:241
+#, python-format
+msgid "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+msgstr "Точка подключения %(mountpoint)s отсоединена от копии %(instance_name)s"
+
+#: cinder/vnc/xvp_proxy.py:98 cinder/vnc/xvp_proxy.py:103
+#, python-format
+msgid "Error in handshake: %s"
+msgstr "Ошибка в соглашении: %s"
+
+#: cinder/vnc/xvp_proxy.py:119
+#, python-format
+msgid "Invalid request: %s"
+msgstr "Недопустимый запрос: %s"
+
+#: cinder/vnc/xvp_proxy.py:139
+#, python-format
+msgid "Request: %s"
+msgstr "Запрос: %s"
+
+#: cinder/vnc/xvp_proxy.py:142
+#, python-format
+msgid "Request made with missing token: %s"
+msgstr "Запрос сделан с отсутствующим токеном: %s"
+
+#: cinder/vnc/xvp_proxy.py:153
+#, python-format
+msgid "Request made with invalid token: %s"
+msgstr "Запрос сделан с недопустимым токеном: %s"
+
+#: cinder/vnc/xvp_proxy.py:160
+#, python-format
+msgid "Unexpected error: %s"
+msgstr "Непредвиденная ошибка: %s"
+
+#: cinder/vnc/xvp_proxy.py:180
+#, python-format
+msgid "Starting cinder-xvpvncproxy node (version %s)"
+msgstr "Запуск узла сети cinder-xvpvncproxy (версия %s)"
+
+#: cinder/volume/api.py:74 cinder/volume/api.py:220
+msgid "status must be available"
+msgstr ""
+
+#: cinder/volume/api.py:85
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to create %(size)sG volume"
+msgstr "Превышена квота для %(pid)s, попытка создания тома %(size)sG"
+
+#: cinder/volume/api.py:137
+#, fuzzy
+msgid "Volume status must be available or error"
+msgstr "Состояние тома должно быть доступно"
+
+#: cinder/volume/api.py:142
+#, python-format
+msgid "Volume still has %d dependent snapshots"
+msgstr ""
+
+#: cinder/volume/api.py:223
+msgid "already attached"
+msgstr ""
+
+#: cinder/volume/api.py:230
+msgid "already detached"
+msgstr ""
+
+#: cinder/volume/api.py:292
+msgid "must be available"
+msgstr ""
+
+#: cinder/volume/api.py:325
+#, fuzzy
+msgid "Volume Snapshot status must be available or error"
+msgstr "Состояние тома должно быть доступно"
+
+#: cinder/volume/driver.py:96
+#, python-format
+msgid "Recovering from a failed execute.  Try number %s"
+msgstr "Восстановление после недопустимого выполнения.  Попытка номер %s"
+
+#: cinder/volume/driver.py:106
+#, python-format
+msgid "volume group %s doesn't exist"
+msgstr "том группы %s не существует"
+
+#: cinder/volume/driver.py:270
+#, python-format
+msgid "Skipping ensure_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:318
+#, python-format
+msgid "Skipping remove_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:327
+#, python-format
+msgid ""
+"Skipping remove_export. No iscsi_target is presently exported for volume:"
+" %d"
+msgstr ""
+
+#: cinder/volume/driver.py:337
+msgid "ISCSI provider_location not stored, using discovery"
+msgstr ""
+
+#: cinder/volume/driver.py:384
+#, python-format
+msgid "Could not find iSCSI export  for volume %s"
+msgstr "Невозможно найти экспортирование iSCSI для тома %s"
+
+#: cinder/volume/driver.py:388
+#, python-format
+msgid "ISCSI Discovery: Found %s"
+msgstr ""
+
+#: cinder/volume/driver.py:466
+#, python-format
+msgid "Cannot confirm exported volume id:%(volume_id)s."
+msgstr ""
+"Невозможно подтвердить идентификатора экспортированного "
+"тома:%(volume_id)s."
+
+#: cinder/volume/driver.py:493
+#, python-format
+msgid "FAKE ISCSI: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:505
+#, python-format
+msgid "rbd has no pool %s"
+msgstr "rbd не имеет пула %s"
+
+#: cinder/volume/driver.py:579
+#, python-format
+msgid "Sheepdog is not working: %s"
+msgstr "Sheepdog не выполняется: %s"
+
+#: cinder/volume/driver.py:581
+msgid "Sheepdog is not working"
+msgstr "Sheepdog не выполняется"
+
+#: cinder/volume/driver.py:680 cinder/volume/driver.py:685
+#, python-format
+msgid "LoggingVolumeDriver: %s"
+msgstr "LoggingVolumeDriver: %s"
+
+#: cinder/volume/manager.py:96
+#, python-format
+msgid "Re-exporting %s volumes"
+msgstr "Повторное экспортирование %s томов"
+
+#: cinder/volume/manager.py:101
+#, python-format
+msgid "volume %s: skipping export"
+msgstr "том %s: пропуск экспортирования"
+
+#: cinder/volume/manager.py:107
+#, python-format
+msgid "volume %s: creating"
+msgstr "том %s: создание"
+
+#: cinder/volume/manager.py:119
+#, python-format
+msgid "volume %(vol_name)s: creating lv of size %(vol_size)sG"
+msgstr "том %(vol_name)s: создание lv объёмом %(vol_size)sG"
+
+#: cinder/volume/manager.py:131
+#, python-format
+msgid "volume %s: creating export"
+msgstr "том %s: создание экспортирования"
+
+#: cinder/volume/manager.py:144
+#, python-format
+msgid "volume %s: created successfully"
+msgstr "том %s: создание завершено"
+
+#: cinder/volume/manager.py:153
+msgid "Volume is still attached"
+msgstr "Том до сих пор присоединён"
+
+#: cinder/volume/manager.py:155
+msgid "Volume is not local to this node"
+msgstr ""
+
+#: cinder/volume/manager.py:159
+#, python-format
+msgid "volume %s: removing export"
+msgstr "том %s: удаление экспортирования"
+
+#: cinder/volume/manager.py:161
+#, python-format
+msgid "volume %s: deleting"
+msgstr "том %s: удаление"
+
+#: cinder/volume/manager.py:164
+#, python-format
+msgid "volume %s: volume is busy"
+msgstr "том %s: том занят"
+
+#: cinder/volume/manager.py:176
+#, python-format
+msgid "volume %s: deleted successfully"
+msgstr "том %s: удаление завершено"
+
+#: cinder/volume/manager.py:183
+#, python-format
+msgid "snapshot %s: creating"
+msgstr "снимок %s: создание"
+
+#: cinder/volume/manager.py:187
+#, python-format
+msgid "snapshot %(snap_name)s: creating"
+msgstr "снимок %(snap_name)s: создание"
+
+#: cinder/volume/manager.py:202
+#, python-format
+msgid "snapshot %s: created successfully"
+msgstr "снимок %s: создание завершено"
+
+#: cinder/volume/manager.py:211
+#, python-format
+msgid "snapshot %s: deleting"
+msgstr "снимок %s: удаление"
+
+#: cinder/volume/manager.py:214
+#, fuzzy, python-format
+msgid "snapshot %s: snapshot is busy"
+msgstr "снимок %s: создание завершено"
+
+#: cinder/volume/manager.py:226
+#, python-format
+msgid "snapshot %s: deleted successfully"
+msgstr "снимок %s: удаление выполнено"
+
+#: cinder/volume/manager.py:310
+msgid "Checking volume capabilities"
+msgstr "Проверка возможностей тома"
+
+#: cinder/volume/manager.py:314
+#, python-format
+msgid "New capabilities found: %s"
+msgstr "Обнаружены новые возможности: %s"
+
+#: cinder/volume/manager.py:325
+msgid "Clear capabilities"
+msgstr "Очистить возможности"
+
+#: cinder/volume/manager.py:329
+#, python-format
+msgid "Notification {%s} received"
+msgstr "Принято уведомление {%s}"
+
+#: cinder/volume/netapp.py:79
+#, fuzzy, python-format
+msgid "API %(name)sfailed: %(reason)s"
+msgstr "Образ %(image_id)s недопустим: %(reason)s"
+
+#: cinder/volume/netapp.py:109
+#, python-format
+msgid "%s is not set"
+msgstr ""
+
+#: cinder/volume/netapp.py:128
+#, fuzzy
+msgid "Connected to DFM server"
+msgstr "Переподлючено к очереди"
+
+#: cinder/volume/netapp.py:159
+#, python-format
+msgid "Job failed: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:240
+#, fuzzy
+msgid "Failed to provision dataset member"
+msgstr "Ошибка обновления базы данных"
+
+#: cinder/volume/netapp.py:252
+msgid "No LUN was created by the provision job"
+msgstr ""
+
+#: cinder/volume/netapp.py:261 cinder/volume/netapp.py:433
+#, fuzzy, python-format
+msgid "Failed to find LUN ID for volume %s"
+msgstr "Ошибка поиска vbd для vdi %s"
+
+#: cinder/volume/netapp.py:280
+msgid "Failed to remove and delete dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:603 cinder/volume/netapp.py:657
+#, fuzzy, python-format
+msgid "No LUN ID for volume %s"
+msgstr "Невозможно найти экспортирование iSCSI для тома %s"
+
+#: cinder/volume/netapp.py:607 cinder/volume/netapp.py:661
+#, fuzzy, python-format
+msgid "Failed to get LUN details for LUN ID %s"
+msgstr "Ошибка получения метаданных для ip: %s"
+
+#: cinder/volume/netapp.py:614
+#, fuzzy, python-format
+msgid "Failed to get host details for host ID %s"
+msgstr "Ошибка получения метаданных для ip: %s"
+
+#: cinder/volume/netapp.py:620
+#, fuzzy, python-format
+msgid "Failed to get target portal for filer: %s"
+msgstr "Ошибка получения метаданных для ip: %s"
+
+#: cinder/volume/netapp.py:625
+#, fuzzy, python-format
+msgid "Failed to get target IQN for filer: %s"
+msgstr "Ошибка получения метаданных для ip: %s"
+
+#: cinder/volume/san.py:113 cinder/volume/san.py:151
+msgid "Specify san_password or san_private_key"
+msgstr "Задайте san_password или san_private_key"
+
+#: cinder/volume/san.py:156
+msgid "san_ip must be set"
+msgstr "san_ip должен быть назначен"
+
+#: cinder/volume/san.py:320
+#, python-format
+msgid "LUID not found for %(zfs_poolname)s. Output=%(out)s"
+msgstr "LUID не найден для %(zfs_poolname)s. Вывод=%(out)s"
+
+#: cinder/volume/san.py:452
+#, python-format
+msgid "CLIQ command returned %s"
+msgstr "Возврат команды CLIQ %s"
+
+#: cinder/volume/san.py:458
+#, python-format
+msgid "Malformed response to CLIQ command %(verb)s %(cliq_args)s. Result=%(out)s"
+msgstr ""
+"Неправильный ответ на команду CLIQ %(verb)s %(cliq_args)s. "
+"Результат=%(out)s"
+
+#: cinder/volume/san.py:466
+#, python-format
+msgid "Error running CLIQ command %(verb)s %(cliq_args)s.  Result=%(out)s"
+msgstr "Ошибка выполнения команды CLIQ %(verb)s %(cliq_args)s.  Результат=%(out)s"
+
+#: cinder/volume/san.py:496
+#, python-format
+msgid ""
+"Unexpected number of virtual ips for cluster  %(cluster_name)s. "
+"Result=%(_xml)s"
+msgstr ""
+"Непредвиденное количество виртуальных ip для кластера  %(cluster_name)s. "
+"Результат=%(_xml)s"
+
+#: cinder/volume/san.py:549
+#, python-format
+msgid "Volume info: %(volume_name)s => %(volume_attributes)s"
+msgstr "Сведения о томе: %(volume_name)s => %(volume_attributes)s"
+
+#: cinder/volume/san.py:594
+msgid "local_path not supported"
+msgstr "local_path не поддерживается"
+
+#: cinder/volume/san.py:626
+#, python-format
+msgid "Could not determine project for volume %s, can't export"
+msgstr "Невозможно определить проект для тома %s, невозможно экспортировать"
+
+#: cinder/volume/san.py:696
+#, python-format
+msgid "Payload for SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:713
+#, python-format
+msgid "Call to json.loads() raised an exception: %s"
+msgstr ""
+
+#: cinder/volume/san.py:718
+#, python-format
+msgid "Results of SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:732
+#, python-format
+msgid "Found solidfire account: %s"
+msgstr ""
+
+#: cinder/volume/san.py:746
+#, python-format
+msgid "solidfire account: %s does not exist, create it..."
+msgstr ""
+
+#: cinder/volume/san.py:804
+msgid "Enter SolidFire create_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:846
+msgid "Leaving SolidFire create_volume"
+msgstr ""
+
+#: cinder/volume/san.py:861
+msgid "Enter SolidFire delete_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:880
+#, python-format
+msgid "Deleting volumeID: %s "
+msgstr ""
+
+#: cinder/volume/san.py:888
+msgid "Leaving SolidFire delete_volume"
+msgstr ""
+
+#: cinder/volume/san.py:891
+msgid "Executing SolidFire ensure_export..."
+msgstr ""
+
+#: cinder/volume/san.py:895
+msgid "Executing SolidFire create_export..."
+msgstr ""
+
+#: cinder/volume/volume_types.py:49 cinder/volume/volume_types.py:108
+msgid "name cannot be None"
+msgstr ""
+
+#: cinder/volume/volume_types.py:96
+msgid "id cannot be None"
+msgstr ""
+
+#: cinder/volume/xensm.py:55
+#, python-format
+msgid "SR name = %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:56
+#, python-format
+msgid "Params: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:60
+#, python-format
+msgid "Failed to create sr %s...continuing"
+msgstr "Ошибка создания sr %s...продолжение"
+
+#: cinder/volume/xensm.py:62
+msgid "Create failed"
+msgstr "Ошибка создания"
+
+#: cinder/volume/xensm.py:64
+#, python-format
+msgid "SR UUID of new SR is: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:71
+msgid "Failed to update db"
+msgstr "Ошибка обновления базы данных"
+
+#: cinder/volume/xensm.py:80
+#, python-format
+msgid "Failed to introduce sr %s...continuing"
+msgstr "Ошибка внедрения sr %s...продолжение"
+
+#: cinder/volume/xensm.py:91
+#, python-format
+msgid "Failed to reach backend %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:100
+msgid "XenSMDriver requires xenapi connection"
+msgstr "XenSMDriver необходимо xenapi соединение"
+
+#: cinder/volume/xensm.py:110
+msgid "Failed to initiate session"
+msgstr "Ошибка начала сеанса"
+
+#: cinder/volume/xensm.py:142
+#, python-format
+msgid "Volume will be created in backend - %d"
+msgstr "Том будет создан во внутреннем интерфейсе - %d"
+
+#: cinder/volume/xensm.py:154
+msgid "Failed to update volume in db"
+msgstr "Ошибка обновления тома в базе данных"
+
+#: cinder/volume/xensm.py:157
+msgid "Unable to create volume"
+msgstr "Невозможно создать том"
+
+#: cinder/volume/xensm.py:171
+msgid "Failed to delete vdi"
+msgstr "Ошибка удаления vdi"
+
+#: cinder/volume/xensm.py:177
+msgid "Failed to delete volume in db"
+msgstr "Ошибка удаления тома в базе данных"
+
+#: cinder/volume/xensm.py:210
+msgid "Failed to find volume in db"
+msgstr "Ошибка поиска тома в базе данных"
+
+#: cinder/volume/xensm.py:221
+msgid "Failed to find backend in db"
+msgstr "Ошибка поиска внутреннего интерфейса в базе данных"
+
+#: cinder/volume/nexenta/__init__.py:27
+#, fuzzy, python-format
+msgid "Nexenta SA returned the error"
+msgstr "Сервер возвратил ошибку: %s"
+
+#: cinder/volume/nexenta/jsonrpc.py:64
+#, fuzzy, python-format
+msgid "Sending JSON data: %s"
+msgstr "Заданные данные: %s"
+
+#: cinder/volume/nexenta/jsonrpc.py:69
+#, python-format
+msgid "Auto switching to HTTPS connection to %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:75
+msgid "No headers in server response"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:76
+msgid "Bad response from server"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:79
+#, fuzzy, python-format
+msgid "Got response: %s"
+msgstr "ответ %s"
+
+#: cinder/volume/nexenta/volume.py:96
+#, fuzzy, python-format
+msgid "Volume %s does not exist in Nexenta SA"
+msgstr "том группы %s не существует"
+
+#: cinder/volume/nexenta/volume.py:180
+msgid ""
+"Call to local_path should not happen. Verify that use_local_volumes flag "
+"is turned off."
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:202
+#, python-format
+msgid "Ignored target creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:210
+#, python-format
+msgid "Ignored target group creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:219
+#, python-format
+msgid "Ignored target group member addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:227
+#, python-format
+msgid "Ignored LU creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:237
+#, python-format
+msgid "Ignored LUN mapping entry addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:273
+#, python-format
+msgid ""
+"Got error trying to destroy target group %(target_group)s, assuming it is"
+" already gone: %(exc)s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:280
+#, python-format
+msgid ""
+"Got error trying to delete target %(target)s, assuming it is already "
+"gone: %(exc)s"
+msgstr ""
+
+#~ msgid "Unable to locate account %(account_name) on Solidfire device"
+#~ msgstr ""
+
+#~ msgid "Cinder access parameters were not specified."
+#~ msgstr "Параметры доступы Cinder не заданы."
+
+#~ msgid "Virtual Storage Array %(id)d could not be found."
+#~ msgstr "Виртуальный массив для хранения данных %(id)d не найден."
+
+#~ msgid "Virtual Storage Array %(name)s could not be found."
+#~ msgstr "Виртуальный массив для хранения данных %(name)s не найден."
+
+#~ msgid "Detected more than one volume with name %(vol_name)"
+#~ msgstr ""
+
+#~ msgid "Detected existing vlan with id %(vlan)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab semaphore \"%(lock)s\" "
+#~ "for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab file lock "
+#~ "\"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Parent group id and group id cannot be same"
+#~ msgstr ""
+
+#~ msgid "No body provided"
+#~ msgstr "Тело не предоставлено"
+
+#~ msgid "Create VSA %(display_name)s of type %(vc_type)s"
+#~ msgstr "Создать VSA %(display_name)s типа %(vc_type)s"
+
+#~ msgid "Delete VSA with id: %s"
+#~ msgstr "Удалить VSA с идентификатором: %s"
+
+#~ msgid "Associate address %(ip)s to VSA %(id)s"
+#~ msgstr "Ассоциировать адрес %(ip)s с VSA %(id)s"
+
+#~ msgid "Disassociate address from VSA %(id)s"
+#~ msgstr "Исключить адрес для VSA %(id)s"
+
+#~ msgid "%(obj)s with ID %(id)s not found"
+#~ msgstr "%(obj)s с идентификатором %(id)s не найден"
+
+#~ msgid ""
+#~ "%(obj)s with ID %(id)s belongs to "
+#~ "VSA %(own_vsa_id)s and not to VSA "
+#~ "%(vsa_id)s."
+#~ msgstr ""
+#~ "%(obj)s с идентификатором %(id)s относится "
+#~ "к VSA %(own_vsa_id)s и не VSA "
+#~ "%(vsa_id)s."
+
+#~ msgid "Index. vsa_id=%(vsa_id)s"
+#~ msgstr "Index. vsa_id=%(vsa_id)s"
+
+#~ msgid "Detail. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Create. vsa_id=%(vsa_id)s, body=%(body)s"
+#~ msgstr ""
+
+#~ msgid "Create volume of %(size)s GB from VSA ID %(vsa_id)s"
+#~ msgstr "Создать том %(size)s ГБ из VSA ID %(vsa_id)s"
+
+#~ msgid "Update %(obj)s with id: %(id)s, changes: %(changes)s"
+#~ msgstr "Обновить %(obj)s с идентификатором: %(id)s, изменения: %(changes)s"
+
+#~ msgid "Delete. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Show. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Index instances for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to soft delete %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Going to force the deletion of the"
+#~ " vm %(instance_uuid)s, even if it is"
+#~ " deleted"
+#~ msgstr "Принудительное удаление вм %(instance_uuid)s, даже если она удалена"
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s did not exist "
+#~ "in the DB, but I will shut "
+#~ "it down anyway using a special "
+#~ "context"
+#~ msgstr ""
+#~ "Копия %(instance_uuid)s не существует в "
+#~ "БД, но будет выполнено выключение "
+#~ "используя особый контекст"
+
+#~ msgid "trying to destroy already destroyed instance: %s"
+#~ msgstr "попытка ликвидации уже ликвидированной копии: %s"
+
+#~ msgid ""
+#~ "Instance %(name)s found in database but"
+#~ " not known by hypervisor. Setting "
+#~ "power state to NOSTATE"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Detected instance  with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Destroying instance with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid "Can't downgrade without losing data"
+#~ msgstr "Невозможно перейти на предыдущую версию без потери данных"
+
+#~ msgid "Network %s has active ports, cannot delete"
+#~ msgstr ""
+
+#~ msgid "No fixed IPs to deallocate for vif %sid"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "AMQP server on %(fl_host)s:%(fl_port)d is "
+#~ "unreachable: %(e)s. Trying again in "
+#~ "%(fl_intv)d seconds."
+#~ msgstr ""
+#~ "Сервер AMQP на %(fl_host)s:%(fl_port)d "
+#~ "недоступен: %(e)s. Очередная попытка через "
+#~ "%(fl_intv)d секунд."
+
+#~ msgid "Unable to connect to AMQP server after %(tries)d tries. Shutting down."
+#~ msgstr ""
+#~ "Невозможно подключиться к серверу AMQP "
+#~ "после выполнения %(tries)d попыток. Завершение"
+#~ " работы."
+
+#~ msgid "Failed to fetch message from queue: %s"
+#~ msgstr "Ошибка получения сообщения из очереди: %s"
+
+#~ msgid "Initing the Adapter Consumer for %s"
+#~ msgstr ""
+
+#~ msgid "Created \"%(exchange)s\" fanout exchange with \"%(key)s\" routing key"
+#~ msgstr ""
+
+#~ msgid "Exception while processing consumer"
+#~ msgstr ""
+
+#~ msgid "Creating \"%(exchange)s\" fanout exchange"
+#~ msgstr ""
+
+#~ msgid "topic is %s"
+#~ msgstr "тема %s"
+
+#~ msgid "message %s"
+#~ msgstr "сообщение %s"
+
+#~ msgid ""
+#~ "Cannot confirm tmpfile at %(ipath)s is"
+#~ " on same shared storage between "
+#~ "%(src)s and %(dest)s."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of memory(host:%(avail)s <= "
+#~ "instance:%(mem_inst)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of disk(host:%(available)s <="
+#~ " instance:%(necessary)s)"
+#~ msgstr ""
+
+#~ msgid "Driver Method %(driver_method)s missing: %(e)s.Reverting to schedule()"
+#~ msgstr ""
+
+#~ msgid "Setting instance %(instance_uuid)s to ERROR state."
+#~ msgstr ""
+
+#~ msgid "_filter_hosts: %(request_spec)s"
+#~ msgstr "_filter_hosts: %(request_spec)s"
+
+#~ msgid "Filter hosts for drive type %s"
+#~ msgstr ""
+
+#~ msgid "Host %s has no free capacity. Skip"
+#~ msgstr "На узле %s недостаточно свободного места. Пропуск"
+
+#~ msgid "Filter hosts: %s"
+#~ msgstr "Фильтр узлов: %s"
+
+#~ msgid "Must implement host selection mechanism"
+#~ msgstr ""
+
+#~ msgid "Maximum number of hosts selected (%d)"
+#~ msgstr "Выбрано макс. количество узлов (%d)"
+
+#~ msgid "Selected excessive host %(host)s"
+#~ msgstr ""
+
+#~ msgid "Provision volume %(name)s of size %(size)s GB on host %(host)s"
+#~ msgstr "Том обеспечения %(name)s размером %(size)s ГБ на узле %(host)s"
+
+#~ msgid "volume_params %(volume_params)s"
+#~ msgstr ""
+
+#~ msgid "%(i)d: Volume %(name)s"
+#~ msgstr "%(i)d: Том %(name)s"
+
+#~ msgid "Attempting to spawn %(num_volumes)d volume(s)"
+#~ msgstr ""
+
+#~ msgid "Error creating volumes"
+#~ msgstr "Ошибка создания томов"
+
+#~ msgid "Non-VSA volume %d"
+#~ msgstr "Том не-VSA %d"
+
+#~ msgid "Spawning volume %(volume_id)s with drive type %(drive_type)s"
+#~ msgstr ""
+
+#~ msgid "Error creating volume"
+#~ msgstr "Ошибка создания тома"
+
+#~ msgid "No capability selected for volume of size %(size)s"
+#~ msgstr "Возможность для тома, объёмом %(size)s, не выбрана"
+
+#~ msgid "Host %s:"
+#~ msgstr "Узел %s:"
+
+#~ msgid ""
+#~ "\tDrive %(qosgrp)-25s: total %(total)2s, "
+#~ "used %(used)2s, free %(free)2s. Available "
+#~ "capacity %(avail)-5s"
+#~ msgstr ""
+#~ "\tДиск %(qosgrp)-25s: всего %(total)2s, "
+#~ "занято %(used)2s, свободно %(free)2s. "
+#~ "Доступный объём %(avail)-5s"
+
+#~ msgid ""
+#~ "\t LeastUsedHost: Best host: %(best_host)s."
+#~ " (used capacity %(min_used)s)"
+#~ msgstr "\t LeastUsedHost: Наилучший узел: %(best_host)s. (занято %(min_used)s)"
+
+#~ msgid ""
+#~ "\t MostAvailCap: Best host: %(best_host)s. "
+#~ "(available %(max_avail)s %(type_str)s)"
+#~ msgstr ""
+#~ "\t MostAvailCap: Наилучший узел: "
+#~ "%(best_host)s. (доступно %(max_avail)s %(type_str)s)"
+
+#~ msgid "(%(nm)s) publish (key: %(routing_key)s) %(message)s"
+#~ msgstr ""
+
+#~ msgid "Publishing to route %s"
+#~ msgstr ""
+
+#~ msgid "Declaring queue %s"
+#~ msgstr "Объявление очереди %s"
+
+#~ msgid "Declaring exchange %s"
+#~ msgstr "Объявление точки обмена %s"
+
+#~ msgid "Binding %(queue)s to %(exchange)s with key %(routing_key)s"
+#~ msgstr ""
+
+#~ msgid "Getting from %(queue)s: %(message)s"
+#~ msgstr "Получение из %(queue)s: %(message)s"
+
+#~ msgid "Test: Emulate wrong VSA name. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate DB error. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: user_data = %s"
+#~ msgstr "Тест: user_data = %s"
+
+#~ msgid "_create: param=%s"
+#~ msgstr "_create: param=%s"
+
+#~ msgid "Host %s"
+#~ msgstr "Узел %s"
+
+#~ msgid "Test: provision vol %(name)s on host %(host)s"
+#~ msgstr "Проверка: обеспечение vol %(name)s на узле %(host)s"
+
+#~ msgid "\t vol=%(vol)s"
+#~ msgstr "\t vol=%(vol)s"
+
+#~ msgid "Test: VSA update request: vsa_id=%(vsa_id)s values=%(values)s"
+#~ msgstr "Тест: запрос обновления VSA: vsa_id=%(vsa_id)s values=%(values)s"
+
+#~ msgid "Test: Volume create: %s"
+#~ msgstr "Тест: Создание тома: %s"
+
+#~ msgid "Test: Volume get request: id=%(volume_id)s"
+#~ msgstr "Тест: Том получает запрос: id=%(volume_id)s"
+
+#~ msgid "Test: Volume update request: id=%(volume_id)s values=%(values)s"
+#~ msgstr "Тест: Запрос обновления тома: id=%(volume_id)s значения=%(values)s"
+
+#~ msgid "Test: Volume get: id=%(volume_id)s"
+#~ msgstr "Тест: Том получает: id=%(volume_id)s"
+
+#~ msgid "Task [%(name)s] %(task)s status: success    %(result)s"
+#~ msgstr "Состояние задачи [%(name)s] %(task)s: готово    %(result)s"
+
+#~ msgid "Task [%(name)s] %(task)s status: %(status)s    %(error_info)s"
+#~ msgstr "Состояние задачи [%(name)s] %(task)s: %(status)s    %(error_info)s"
+
+#~ msgid ""
+#~ "deactivate_node is called for                "
+#~ "node_id = %(id)s node_ip = %(ip)s"
+#~ msgstr ""
+
+#~ msgid "virsh said: %r"
+#~ msgstr ""
+
+#~ msgid "cool, it's a device"
+#~ msgstr ""
+
+#~ msgid "Unable to read LXC console"
+#~ msgstr "Невозможно прочитать консоль LXC"
+
+#~ msgid ""
+#~ "to xml...\n"
+#~ ":%s "
+#~ msgstr ""
+#~ "в xml...\n"
+#~ ":%s "
+
+#~ msgid "During wait running, %s disappeared."
+#~ msgstr ""
+
+#~ msgid "Instance %s running successfully."
+#~ msgstr ""
+
+#~ msgid "The nwfilter(%(instance_secgroup_filter_name)s) is not found."
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image verification failed"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): image "
+#~ "verification skipped, no hash stored"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): checking"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in use:"
+#~ " on this node %(local)d local, "
+#~ "%(remote)d on other nodes"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): warning "
+#~ "-- an absent base file is in "
+#~ "use! instances: %(instance_list)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in: on"
+#~ " other nodes (%(remote)d on other "
+#~ "nodes)"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is not in use"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is in use"
+#~ msgstr ""
+
+#~ msgid "Created VM %s..."
+#~ msgstr "Созданная ВМ %s..."
+
+#~ msgid "Created VM %(instance_name)s as %(vm_ref)s."
+#~ msgstr "Созданная ВМ %(instance_name)s как %(vm_ref)s."
+
+#~ msgid "Creating a CDROM-specific VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr "Создание особого CDROM VBD для ВМ %(vm_ref)s, VDI %(vdi_ref)s ... "
+
+#~ msgid ""
+#~ "Created a CDROM-specific VBD %(vbd_ref)s"
+#~ "  for VM %(vm_ref)s, VDI %(vdi_ref)s."
+#~ msgstr ""
+#~ "Создана VBD на основе CDROM  %(vbd_ref)s"
+#~ "  для ВМ %(vm_ref)s, VDI %(vdi_ref)s."
+
+#~ msgid "Image Type: %s"
+#~ msgstr "Тип образа: %s"
+
+#~ msgid "ISO: Found sr possibly containing the ISO image"
+#~ msgstr "ISO: Найден sr, возможно содержащий образ ISO"
+
+#~ msgid "Size for image %(image)s:%(virtual_size)d"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to fetch glance image"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s ... "
+#~ msgstr "Создание VBD для VDI %s ... "
+
+#~ msgid "Creating VBD for VDI %s done."
+#~ msgstr "Создание VBD для VDI %s выполнено."
+
+#~ msgid "VBD.unplug successful first time."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug rejected: retrying..."
+#~ msgstr ""
+
+#~ msgid "Not sleeping anymore!"
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful eventually."
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure in VBD.unplug: %s"
+#~ msgstr "Пропуск XenAPI.Failure в VBD.unplug: %s"
+
+#~ msgid "Ignoring XenAPI.Failure %s"
+#~ msgstr "Пропуск XenAPI.Failure %s"
+
+#~ msgid "instance %s: Failed to spawn"
+#~ msgstr ""
+
+#~ msgid "Instance %s failed to spawn - performing clean-up"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn - Unable to create VM"
+#~ msgstr ""
+
+#~ msgid "Starting VM %s..."
+#~ msgstr "Запуск ВМ %s..."
+
+#~ msgid "Spawning VM %(instance_uuid)s created %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Instance %s: waiting for running"
+#~ msgstr "Копия %s: ожидание запуска"
+
+#~ msgid "Resources to remove:%s"
+#~ msgstr "Ресурсы для удаления:%s"
+
+#~ msgid "Removing VDI %(vdi_ref)s(uuid:%(vdi_to_remove)s)"
+#~ msgstr ""
+
+#~ msgid "Skipping VDI destroy for %s"
+#~ msgstr "Пропуск ликвидации VDI для %s"
+
+#~ msgid "Unable to Snapshot instance %(instance_uuid)s: %(exc)s"
+#~ msgstr ""
+
+#~ msgid "domid changed from %(olddomid)s to %(newdomid)s"
+#~ msgstr ""
+
+#~ msgid "VM %(instance_uuid)s already halted,skipping shutdown..."
+#~ msgstr ""
+
+#~ msgid "Destroying VDIs for Instance %(instance_uuid)s"
+#~ msgstr "Ликвидирование VDI для копии %(instance_uuid)s"
+
+#~ msgid "Instance %(instance_uuid)s VM destroyed"
+#~ msgstr "Копия %(instance_uuid)s ВМ ликвидирована"
+
+#~ msgid "Destroying VM for Instance %(instance_uuid)s"
+#~ msgstr "Ликвидирование ВМ для копии %(instance_uuid)s"
+
+#~ msgid "Instance for migration %d not found, skipping"
+#~ msgstr ""
+
+#~ msgid "injecting network info to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "creating vif(s) for vm: |%s|"
+#~ msgstr "создание vif(s) для вм: |%s|"
+
+#~ msgid "Created VIF %(vif_ref)s for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr "Создан VIF %(vif_ref)s для ВМ %(vm_ref)s, сеть %(network_ref)s."
+
+#~ msgid "injecting hostname to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The call to %(method)s returned an "
+#~ "error: %(e)s. VM id=%(instance_uuid)s; "
+#~ "args=%(args)r"
+#~ msgstr ""
+#~ "Вызов %(method)s возвратил ошибку: %(e)s. "
+#~ "VM id=%(instance_uuid)s; args=%(args)r"
+
+#~ msgid "Creating VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr "Создание VBD для ВМ %(vm_ref)s, VDI %(vdi_ref)s ... "
+
+#~ msgid "Error destroying VDI"
+#~ msgstr "Ошибка ликвидации VDI"
+
+#~ msgid "\tVolume %s is NOT VSA volume"
+#~ msgstr "\tТом %s не является VSA томом"
+
+#~ msgid "\tFE VSA Volume %s creation - do nothing"
+#~ msgstr "\tСоздание тома FE VSA %s - ничего не выполнять"
+
+#~ msgid "VSA BE create_volume for %s failed"
+#~ msgstr "Ошибка VSA BE create_volume для %s"
+
+#~ msgid "VSA BE create_volume for %s succeeded"
+#~ msgstr "VSA BE create_volume для %s выполнено"
+
+#~ msgid "\tFE VSA Volume %s deletion - do nothing"
+#~ msgstr "\tУдаление FE VSA тома %s - ничего не выполнять"
+
+#~ msgid "VSA BE delete_volume for %s failed"
+#~ msgstr "Ошибка VSA BE delete_volume для %s"
+
+#~ msgid "VSA BE delete_volume for %s suceeded"
+#~ msgstr "VSA BE delete_volume для %s выполнено"
+
+#~ msgid "\tFE VSA Volume %s local path call - call discover"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s ensure export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s create export - do nothing"
+#~ msgstr "\tТом FE VSA %s создать экспортирование - ничего не выполнять"
+
+#~ msgid "\tFE VSA Volume %s remove export - do nothing"
+#~ msgstr "\tТом FE VSA %s удалить экспортирование - ничего не выполнять"
+
+#~ msgid "VSA BE remove_export for %s failed"
+#~ msgstr ""
+
+#~ msgid "Failed to retrieve QoS info"
+#~ msgstr "Ошибка приёма сведений QoS"
+
+#~ msgid "invalid drive data"
+#~ msgstr ""
+
+#~ msgid "drive_name not defined"
+#~ msgstr ""
+
+#~ msgid "invalid drive type name %s"
+#~ msgstr ""
+
+#~ msgid "*** Experimental VSA code ***"
+#~ msgstr "*** Экспериментальный код VSA ***"
+
+#~ msgid "Requested number of VCs (%d) is too high. Setting to default"
+#~ msgstr "Запрошенное количество VC (%d) избыточно. Назначение по умолчанию"
+
+#~ msgid "Creating VSA: %s"
+#~ msgstr "Создание VSA: %s"
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d %(vsa_name)s: Create "
+#~ "volume %(vol_name)s, %(vol_size)d GB, type "
+#~ "%(vol_type_id)s"
+#~ msgstr ""
+#~ "VSA ID %(vsa_id)d %(vsa_name)s: Создать "
+#~ "том %(vol_name)s, %(vol_size)d ГБ, тип "
+#~ "%(vol_type_id)s"
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA status to %(status)s"
+#~ msgstr "VSA ID %(vsa_id)d: Обновить состояние VSA на %(status)s"
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA call"
+#~ msgstr "VSA ID %(vsa_id)d: Обновить вызов VSA"
+
+#~ msgid "Adding %(add_cnt)s VCs to VSA %(vsa_name)s."
+#~ msgstr "Добавление %(add_cnt)s VC в VSA %(vsa_name)s."
+
+#~ msgid "Deleting %(del_cnt)s VCs from VSA %(vsa_name)s."
+#~ msgstr "Удаление %(del_cnt)s VC из VSA %(vsa_name)s."
+
+#~ msgid "VSA ID %(vsa_id)s: Deleting %(direction)s volume %(vol_name)s"
+#~ msgstr "VSA ID %(vsa_id)s: Удаление %(direction)s тома %(vol_name)s"
+
+#~ msgid "Unable to delete volume %s"
+#~ msgstr "Невозможно удалить том %s"
+
+#~ msgid "VSA ID %(vsa_id)s: Forced delete. %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+#~ "VSA ID %(vsa_id)s: Принудительное удаление."
+#~ " %(direction)s том %(vol_name)s"
+
+#~ msgid "Going to try to terminate VSA ID %s"
+#~ msgstr "Выполнение завершения работы VSA ID %s"
+
+#~ msgid "VSA ID %(vsa_id)s: Delete instance %(name)s"
+#~ msgstr "VSA ID %(vsa_id)s: Удалить копию %(name)s"
+
+#~ msgid "Create call received for VSA %s"
+#~ msgstr "Создать вызов полученный для VSA %s"
+
+#~ msgid "Failed to find VSA %(vsa_id)d"
+#~ msgstr "Ошибка поиска VSA %(vsa_id)d"
+
+#~ msgid "VSA ID %(vsa_id)s: Drive %(vol_id)s created. Status %(status)s"
+#~ msgstr "VSA ID %(vsa_id)s: Создан накопитель %(vol_id)s. Состояние %(status)s"
+
+#~ msgid "Drive %(vol_name)s (%(vol_disp_name)s) still in creating phase - wait"
+#~ msgstr "Накопитель %(vol_name)s (%(vol_disp_name)s) в фазе создания - подождите"
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Not all volumes "
+#~ "are created (%(cvol_real)d of %(cvol_exp)d)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Drive %(vol_name)s "
+#~ "(%(vol_disp_name)s) is in %(status)s state"
+#~ msgstr ""
+
+#~ msgid "Failed to update attach status for volume %(vol_name)s. %(ex)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Delete all BE volumes"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Start %(vc_count)d instances"
+#~ msgstr ""
+
diff --git a/cinder/locale/tl/LC_MESSAGES/nova.po b/cinder/locale/tl/LC_MESSAGES/nova.po
new file mode 100644
index 000000000..206650836
--- /dev/null
+++ b/cinder/locale/tl/LC_MESSAGES/nova.po
@@ -0,0 +1,8200 @@
+# Tagalog translation for cinder
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the cinder package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version:  cinder\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-04-08 23:04+0000\n"
+"PO-Revision-Date: 2011-08-23 11:21+0000\n"
+"Last-Translator: Thierry Carrez <thierry.carrez+lp@gmail.com>\n"
+"Language-Team: Tagalog <tl@li.org>\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: cinder/context.py:59
+#, python-format
+msgid "Arguments dropped when creating context: %s"
+msgstr ""
+
+#: cinder/context.py:90
+#, python-format
+msgid "read_deleted can only be one of 'no', 'yes' or 'only', not %r"
+msgstr ""
+
+#: cinder/crypto.py:48
+msgid "Filename of root CA"
+msgstr ""
+
+#: cinder/crypto.py:51
+msgid "Filename of private key"
+msgstr ""
+
+#: cinder/crypto.py:54
+msgid "Filename of root Certificate Revocation List"
+msgstr ""
+
+#: cinder/crypto.py:57
+msgid "Where we keep our keys"
+msgstr ""
+
+#: cinder/crypto.py:60
+msgid "Where we keep our root CA"
+msgstr ""
+
+#: cinder/crypto.py:63
+msgid "Should we use a CA for each project?"
+msgstr "Kailangan bang gumamit ng CA bawat proyekto?"
+
+#: cinder/crypto.py:67
+#, python-format
+msgid "Subject for certificate for users, %s for project, user, timestamp"
+msgstr ""
+
+#: cinder/crypto.py:72
+#, python-format
+msgid "Subject for certificate for projects, %s for project, timestamp"
+msgstr ""
+
+#: cinder/crypto.py:292
+#, python-format
+msgid "Flags path: %s"
+msgstr ""
+
+#: cinder/exception.py:56
+msgid "Unexpected error while running command."
+msgstr "Merong hindi-inaasahang pagkakamali habang tumatakbo ang command."
+
+#: cinder/exception.py:59
+#, python-format
+msgid ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+msgstr ""
+
+#: cinder/exception.py:94
+msgid "DB exception wrapped."
+msgstr ""
+
+#: cinder/exception.py:155
+msgid "An unknown exception occurred."
+msgstr ""
+
+#: cinder/exception.py:178
+msgid "Failed to decrypt text"
+msgstr ""
+
+#: cinder/exception.py:182
+msgid "Failed to paginate through images from image service"
+msgstr ""
+
+#: cinder/exception.py:186
+msgid "Virtual Interface creation failed"
+msgstr ""
+
+#: cinder/exception.py:190
+msgid "5 attempts to create virtual interfacewith unique mac address failed"
+msgstr ""
+
+#: cinder/exception.py:195
+msgid "Connection to glance failed"
+msgstr ""
+
+#: cinder/exception.py:199
+msgid "Connection to melange failed"
+msgstr ""
+
+#: cinder/exception.py:203
+msgid "Not authorized."
+msgstr ""
+
+#: cinder/exception.py:208
+msgid "User does not have admin privileges"
+msgstr ""
+
+#: cinder/exception.py:212
+#, python-format
+msgid "Policy doesn't allow %(action)s to be performed."
+msgstr ""
+
+#: cinder/exception.py:216
+#, fuzzy, python-format
+msgid "Not authorized for image %(image_id)s."
+msgstr "walang paraan para sa mensahe: %s"
+
+#: cinder/exception.py:220
+msgid "Unacceptable parameters."
+msgstr ""
+
+#: cinder/exception.py:225
+msgid "Invalid snapshot"
+msgstr ""
+
+#: cinder/exception.py:229
+#, python-format
+msgid "Volume %(volume_id)s is not attached to anything"
+msgstr ""
+
+#: cinder/exception.py:233 cinder/api/openstack/compute/contrib/keypairs.py:113
+msgid "Keypair data is invalid"
+msgstr ""
+
+#: cinder/exception.py:237
+msgid "Failed to load data into json format"
+msgstr ""
+
+#: cinder/exception.py:241
+msgid "The request is invalid."
+msgstr ""
+
+#: cinder/exception.py:245
+#, python-format
+msgid "Invalid signature %(signature)s for user %(user)s."
+msgstr ""
+
+#: cinder/exception.py:249
+msgid "Invalid input received"
+msgstr ""
+
+#: cinder/exception.py:253
+#, python-format
+msgid "Invalid instance type %(instance_type)s."
+msgstr ""
+
+#: cinder/exception.py:257
+msgid "Invalid volume type"
+msgstr ""
+
+#: cinder/exception.py:261
+msgid "Invalid volume"
+msgstr ""
+
+#: cinder/exception.py:265
+#, python-format
+msgid "Invalid port range %(from_port)s:%(to_port)s. %(msg)s"
+msgstr ""
+
+#: cinder/exception.py:269
+#, python-format
+msgid "Invalid IP protocol %(protocol)s."
+msgstr ""
+
+#: cinder/exception.py:273
+#, python-format
+msgid "Invalid content type %(content_type)s."
+msgstr ""
+
+#: cinder/exception.py:277
+#, python-format
+msgid "Invalid cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:281
+msgid "Invalid reuse of an RPC connection."
+msgstr ""
+
+#: cinder/exception.py:285
+msgid "Invalid Parameter: Unicode is not supported by the current database."
+msgstr ""
+
+#: cinder/exception.py:292
+#, python-format
+msgid "%(err)s"
+msgstr ""
+
+#: cinder/exception.py:296
+#, python-format
+msgid ""
+"Cannot perform action '%(action)s' on aggregate %(aggregate_id)s. Reason:"
+" %(reason)s."
+msgstr ""
+
+#: cinder/exception.py:301
+#, python-format
+msgid "Group not valid. Reason: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:305
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot %(method)s while"
+" the instance is in this state."
+msgstr ""
+
+#: cinder/exception.py:310
+#, python-format
+msgid "Instance %(instance_id)s is not running."
+msgstr ""
+
+#: cinder/exception.py:314
+#, python-format
+msgid "Instance %(instance_id)s is not suspended."
+msgstr ""
+
+#: cinder/exception.py:318
+#, python-format
+msgid "Instance %(instance_id)s is not in rescue mode"
+msgstr ""
+
+#: cinder/exception.py:322
+msgid "Failed to suspend instance"
+msgstr ""
+
+#: cinder/exception.py:326
+msgid "Failed to resume server"
+msgstr ""
+
+#: cinder/exception.py:330
+msgid "Failed to reboot instance"
+msgstr ""
+
+#: cinder/exception.py:334
+msgid "Failed to terminate instance"
+msgstr ""
+
+#: cinder/exception.py:338
+msgid "Service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:342
+msgid "Volume service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:346
+msgid "Compute service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:350
+#, python-format
+msgid "Unable to migrate instance (%(instance_id)s) to current host (%(host)s)."
+msgstr ""
+
+#: cinder/exception.py:355
+msgid "Destination compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:359
+msgid "Original compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:363
+msgid "The supplied hypervisor type of is invalid."
+msgstr ""
+
+#: cinder/exception.py:367
+msgid "The instance requires a newer hypervisor version than has been provided."
+msgstr ""
+
+#: cinder/exception.py:372
+#, python-format
+msgid ""
+"The supplied disk path (%(path)s) already exists, it is expected not to "
+"exist."
+msgstr ""
+
+#: cinder/exception.py:377
+#, python-format
+msgid "The supplied device path (%(path)s) is invalid."
+msgstr ""
+
+#: cinder/exception.py:381
+#, python-format
+msgid "The supplied device (%(device)s) is busy."
+msgstr ""
+
+#: cinder/exception.py:385
+msgid "Unacceptable CPU info"
+msgstr ""
+
+#: cinder/exception.py:389
+#, python-format
+msgid "%(address)s is not a valid IP v4/6 address."
+msgstr ""
+
+#: cinder/exception.py:393
+#, python-format
+msgid ""
+"VLAN tag is not appropriate for the port group %(bridge)s. Expected VLAN "
+"tag is %(tag)s, but the one associated with the port group is %(pgroup)s."
+msgstr ""
+
+#: cinder/exception.py:399
+#, python-format
+msgid ""
+"vSwitch which contains the port group %(bridge)s is not associated with "
+"the desired physical adapter. Expected vSwitch is %(expected)s, but the "
+"one associated is %(actual)s."
+msgstr ""
+
+#: cinder/exception.py:406
+#, python-format
+msgid "Disk format %(disk_format)s is not acceptable"
+msgstr ""
+
+#: cinder/exception.py:410
+#, python-format
+msgid "Image %(image_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:414
+#, python-format
+msgid "Instance %(instance_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:418
+#, python-format
+msgid "Ec2 id %(ec2_id)s is unacceptable."
+msgstr ""
+
+#: cinder/exception.py:422
+msgid "Resource could not be found."
+msgstr ""
+
+#: cinder/exception.py:427
+#, python-format
+msgid "Required flag %(flag)s not set."
+msgstr ""
+
+#: cinder/exception.py:431
+#, python-format
+msgid "Volume %(volume_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:435
+#, python-format
+msgid "Unable to locate account %(account_name)s on Solidfire device"
+msgstr ""
+
+#: cinder/exception.py:440
+#, python-format
+msgid "Volume not found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:444
+#, python-format
+msgid "Volume %(volume_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:449
+msgid "Zero volume types found."
+msgstr ""
+
+#: cinder/exception.py:453
+#, python-format
+msgid "Volume type %(volume_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:457
+#, python-format
+msgid "Volume type with name %(volume_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:462
+#, python-format
+msgid ""
+"Volume Type %(volume_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:467
+#, python-format
+msgid "Snapshot %(snapshot_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:471
+#, python-format
+msgid "deleting volume %(volume_name)s that has snapshot"
+msgstr ""
+
+#: cinder/exception.py:475
+#, python-format
+msgid "deleting snapshot %(snapshot_name)s that has dependent volumes"
+msgstr ""
+
+#: cinder/exception.py:480
+#, python-format
+msgid "No target id found for volume %(volume_id)s."
+msgstr ""
+
+#: cinder/exception.py:484
+#, python-format
+msgid "No disk at %(location)s"
+msgstr ""
+
+#: cinder/exception.py:488
+#, python-format
+msgid "Could not find a handler for %(driver_type)s volume."
+msgstr ""
+
+#: cinder/exception.py:492
+#, python-format
+msgid "Invalid image href %(image_href)s."
+msgstr ""
+
+#: cinder/exception.py:496
+msgid ""
+"Some images have been stored via hrefs. This version of the api does not "
+"support displaying image hrefs."
+msgstr ""
+
+#: cinder/exception.py:501
+#, python-format
+msgid "Image %(image_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:505
+#, python-format
+msgid "Kernel not found for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:509
+#, python-format
+msgid "User %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:513
+#, python-format
+msgid "Project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:517
+#, python-format
+msgid "User %(user_id)s is not a member of project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:521
+#, python-format
+msgid "Role %(role_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:525
+msgid "Cannot find SR to read/write VDI."
+msgstr ""
+
+#: cinder/exception.py:529
+#, python-format
+msgid "%(req)s is required to create a network."
+msgstr ""
+
+#: cinder/exception.py:533
+#, python-format
+msgid "Network %(network_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:537
+#, python-format
+msgid "Network could not be found for bridge %(bridge)s"
+msgstr ""
+
+#: cinder/exception.py:541
+#, python-format
+msgid "Network could not be found for uuid %(uuid)s"
+msgstr ""
+
+#: cinder/exception.py:545
+#, python-format
+msgid "Network could not be found with cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:549
+#, python-format
+msgid "Network could not be found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:553
+msgid "No networks defined."
+msgstr ""
+
+#: cinder/exception.py:557
+#, python-format
+msgid ""
+"Either Network uuid %(network_uuid)s is not present or is not assigned to"
+" the project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:562
+#, python-format
+msgid "Host is not set to the network (%(network_id)s)."
+msgstr ""
+
+#: cinder/exception.py:566
+#, python-format
+msgid "Network %(network)s has active ports, cannot delete."
+msgstr ""
+
+#: cinder/exception.py:570
+msgid "Could not find the datastore reference(s) which the VM uses."
+msgstr ""
+
+#: cinder/exception.py:574
+#, python-format
+msgid "No fixed IP associated with id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:578
+#, python-format
+msgid "Fixed ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:582
+#, python-format
+msgid "Instance %(instance_id)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:586
+#, python-format
+msgid "Network host %(host)s has zero fixed ips in network %(network_id)s."
+msgstr ""
+
+#: cinder/exception.py:591
+#, python-format
+msgid "Instance %(instance_id)s doesn't have fixed ip '%(ip)s'."
+msgstr ""
+
+#: cinder/exception.py:595
+#, python-format
+msgid "Host %(host)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:599
+#, python-format
+msgid ""
+"Fixed IP address (%(address)s) does not exist in network "
+"(%(network_uuid)s)."
+msgstr ""
+
+#: cinder/exception.py:604
+#, python-format
+msgid "Fixed IP address %(address)s is already in use."
+msgstr ""
+
+#: cinder/exception.py:608
+#, python-format
+msgid "Fixed IP address %(address)s is invalid."
+msgstr ""
+
+#: cinder/exception.py:612
+msgid "Zero fixed ips available."
+msgstr ""
+
+#: cinder/exception.py:616
+msgid "Zero fixed ips could be found."
+msgstr ""
+
+#: cinder/exception.py:620
+#, python-format
+msgid "Floating ip not found for id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:624
+#, python-format
+msgid "The DNS entry %(name)s already exists in domain %(domain)s."
+msgstr ""
+
+#: cinder/exception.py:628
+#, python-format
+msgid "Floating ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:632
+#, python-format
+msgid "Floating ip not found for host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:636
+msgid "Zero floating ips available."
+msgstr ""
+
+#: cinder/exception.py:640
+#, python-format
+msgid "Floating ip %(address)s is associated."
+msgstr ""
+
+#: cinder/exception.py:644
+#, python-format
+msgid "Floating ip %(address)s is not associated."
+msgstr ""
+
+#: cinder/exception.py:648
+msgid "Zero floating ips exist."
+msgstr ""
+
+#: cinder/exception.py:652
+#, python-format
+msgid "Interface %(interface)s not found."
+msgstr ""
+
+#: cinder/exception.py:656
+#, python-format
+msgid "Keypair %(name)s not found for user %(user_id)s"
+msgstr ""
+
+#: cinder/exception.py:660
+#, python-format
+msgid "Certificate %(certificate_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:664
+#, python-format
+msgid "Service %(service_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:668
+#, python-format
+msgid "Host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:672
+#, python-format
+msgid "Compute host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:676
+#, python-format
+msgid "Could not find binary %(binary)s on host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:680
+#, python-format
+msgid "Auth token %(token)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:684
+#, python-format
+msgid "Access Key %(access_key)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:688
+msgid "Quota could not be found"
+msgstr ""
+
+#: cinder/exception.py:692
+#, python-format
+msgid "Quota for project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:696
+#, python-format
+msgid "Quota class %(class_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:700
+#, python-format
+msgid "Security group %(security_group_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:704
+#, python-format
+msgid "Security group %(security_group_id)s not found for project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:709
+#, python-format
+msgid "Security group with rule %(rule_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:713
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is already associated with the "
+"instance %(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:718
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is not associated with the instance "
+"%(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:723
+#, python-format
+msgid "Migration %(migration_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:727
+#, python-format
+msgid "Migration not found for instance %(instance_id)s with status %(status)s."
+msgstr ""
+
+#: cinder/exception.py:732
+#, python-format
+msgid "Console pool %(pool_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:736
+#, python-format
+msgid ""
+"Console pool of type %(console_type)s for compute host %(compute_host)s "
+"on proxy host %(host)s not found."
+msgstr ""
+
+#: cinder/exception.py:742
+#, python-format
+msgid "Console %(console_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:746
+#, python-format
+msgid "Console for instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:750
+#, python-format
+msgid ""
+"Console for instance %(instance_id)s in pool %(pool_id)s could not be "
+"found."
+msgstr ""
+
+#: cinder/exception.py:755
+#, python-format
+msgid "Invalid console type %(console_type)s "
+msgstr ""
+
+#: cinder/exception.py:759
+msgid "Zero instance types found."
+msgstr ""
+
+#: cinder/exception.py:763
+#, python-format
+msgid "Instance type %(instance_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:767
+#, python-format
+msgid "Instance type with name %(instance_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:772
+#, python-format
+msgid "Flavor %(flavor_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:776
+#, python-format
+msgid "Cell %(cell_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:780
+#, python-format
+msgid "Scheduler Host Filter %(filter_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:784
+#, python-format
+msgid "Scheduler cost function %(cost_fn_str)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:789
+#, python-format
+msgid "Scheduler weight flag not found: %(flag_name)s"
+msgstr ""
+
+#: cinder/exception.py:793
+#, python-format
+msgid "Instance %(instance_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:798
+#, python-format
+msgid ""
+"Instance Type %(instance_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:803
+msgid "LDAP object could not be found"
+msgstr ""
+
+#: cinder/exception.py:807
+#, python-format
+msgid "LDAP user %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:811
+#, python-format
+msgid "LDAP group %(group_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:815
+#, python-format
+msgid "LDAP user %(user_id)s is not a member of group %(group_id)s."
+msgstr ""
+
+#: cinder/exception.py:819
+#, python-format
+msgid "File %(file_path)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:823
+msgid "Zero files could be found."
+msgstr ""
+
+#: cinder/exception.py:827
+#, python-format
+msgid "Virtual switch associated with the network adapter %(adapter)s not found."
+msgstr ""
+
+#: cinder/exception.py:832
+#, python-format
+msgid "Network adapter %(adapter)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:836
+#, python-format
+msgid "Class %(class_name)s could not be found: %(exception)s"
+msgstr ""
+
+#: cinder/exception.py:840
+msgid "Action not allowed."
+msgstr ""
+
+#: cinder/exception.py:844
+#, python-format
+msgid "Unable to use global role %(role_id)s"
+msgstr ""
+
+#: cinder/exception.py:848
+msgid "Rotation is not allowed for snapshots"
+msgstr ""
+
+#: cinder/exception.py:852
+msgid "Rotation param is required for backup image_type"
+msgstr ""
+
+#: cinder/exception.py:861
+#, python-format
+msgid "Key pair %(key_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:865
+#, python-format
+msgid "User %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:869
+#, python-format
+msgid "LDAP user %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:873
+#, python-format
+msgid "LDAP group %(group)s already exists."
+msgstr ""
+
+#: cinder/exception.py:877
+#, python-format
+msgid "User %(uid)s is already a member of the group %(group_dn)s"
+msgstr ""
+
+#: cinder/exception.py:882
+#, python-format
+msgid "Project %(project)s already exists."
+msgstr ""
+
+#: cinder/exception.py:886
+#, python-format
+msgid "Instance %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:890
+#, python-format
+msgid "Instance Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:894
+#, python-format
+msgid "Volume Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:898
+#, python-format
+msgid "%(path)s is on shared storage: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:902
+msgid "Migration error"
+msgstr ""
+
+#: cinder/exception.py:906
+#, python-format
+msgid "Malformed message body: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:910
+#, python-format
+msgid "Could not find config at %(path)s"
+msgstr ""
+
+#: cinder/exception.py:914
+#, python-format
+msgid "Could not load paste app '%(name)s' from %(path)s"
+msgstr ""
+
+#: cinder/exception.py:918
+msgid "When resizing, instances must change size!"
+msgstr ""
+
+#: cinder/exception.py:922
+msgid "Image is larger than instance type allows"
+msgstr ""
+
+#: cinder/exception.py:926
+msgid "1 or more Zones could not complete the request"
+msgstr ""
+
+#: cinder/exception.py:930
+msgid "Instance type's memory is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:934
+msgid "Instance type's disk is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:938
+#, python-format
+msgid "Insufficient free memory on compute node to start %(uuid)s."
+msgstr ""
+
+#: cinder/exception.py:942
+msgid "Could not fetch bandwidth/cpu/disk metrics for this host."
+msgstr ""
+
+#: cinder/exception.py:946
+#, python-format
+msgid "No valid host was found. %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:950
+#, python-format
+msgid "Host %(host)s is not up or doesn't exist."
+msgstr ""
+
+#: cinder/exception.py:954
+msgid "Quota exceeded"
+msgstr ""
+
+#: cinder/exception.py:958
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: action '%(action)s' caused an error: "
+"%(reason)s."
+msgstr ""
+
+#: cinder/exception.py:963
+#, python-format
+msgid "Aggregate %(aggregate_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:967
+#, python-format
+msgid "Aggregate %(aggregate_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:971
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:975
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:980
+#, python-format
+msgid "Host %(host)s already member of another aggregate."
+msgstr ""
+
+#: cinder/exception.py:984
+#, python-format
+msgid "Aggregate %(aggregate_id)s already has host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:988
+#, python-format
+msgid "Detected more than one volume with name %(vol_name)s"
+msgstr ""
+
+#: cinder/exception.py:992
+#, python-format
+msgid "Cannot create volume_type with name %(name)s and specs %(extra_specs)s"
+msgstr ""
+
+#: cinder/exception.py:997
+msgid "Unable to create instance type"
+msgstr ""
+
+#: cinder/exception.py:1001
+msgid "Bad response from SolidFire API"
+msgstr ""
+
+#: cinder/exception.py:1005
+#, python-format
+msgid "Error in SolidFire API response: status=%(status)s"
+msgstr ""
+
+#: cinder/exception.py:1009
+#, python-format
+msgid "Error in SolidFire API response: data=%(data)s"
+msgstr ""
+
+#: cinder/exception.py:1013
+#, python-format
+msgid "Detected existing vlan with id %(vlan)d"
+msgstr ""
+
+#: cinder/exception.py:1017
+#, python-format
+msgid "Instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:1021
+#, python-format
+msgid "Invalid id: %(val)s (expecting \"i-...\")."
+msgstr ""
+
+#: cinder/exception.py:1025
+#, python-format
+msgid "Could not fetch image %(image)s"
+msgstr ""
+
+#: cinder/log.py:315
+#, python-format
+msgid "syslog facility must be one of: %s"
+msgstr ""
+
+#: cinder/manager.py:146
+#, python-format
+msgid "Skipping %(full_task_name)s, %(ticks_to_skip)s ticks left until next run"
+msgstr ""
+
+#: cinder/manager.py:152
+#, python-format
+msgid "Running periodic task %(full_task_name)s"
+msgstr ""
+
+#: cinder/manager.py:159
+#, python-format
+msgid "Error during %(full_task_name)s: %(e)s"
+msgstr ""
+
+#: cinder/manager.py:203
+msgid "Notifying Schedulers of capabilities ..."
+msgstr ""
+
+#: cinder/policy.py:30
+msgid "JSON file representing policy"
+msgstr ""
+
+#: cinder/policy.py:33
+msgid "Rule checked when requested rule is not found"
+msgstr ""
+
+#: cinder/service.py:137
+msgid "SIGTERM received"
+msgstr ""
+
+#: cinder/service.py:177
+#, python-format
+msgid "Starting %(topic)s node (version %(vcs_string)s)"
+msgstr ""
+
+#: cinder/service.py:195
+#, python-format
+msgid "Creating Consumer connection for Service %s"
+msgstr ""
+
+#: cinder/service.py:282
+msgid "Service killed that has no database entry"
+msgstr ""
+
+#: cinder/service.py:319
+msgid "The service database object disappeared, Recreating it."
+msgstr ""
+
+#: cinder/service.py:334
+msgid "Recovered model server connection!"
+msgstr ""
+
+#: cinder/service.py:340
+msgid "model server went away"
+msgstr ""
+
+#: cinder/service.py:433
+msgid "Full set of FLAGS:"
+msgstr ""
+
+#: cinder/service.py:440
+#, python-format
+msgid "%(flag)s : FLAG SET "
+msgstr ""
+
+#: cinder/utils.py:79
+#, python-format
+msgid "Inner Exception: %s"
+msgstr ""
+
+#: cinder/utils.py:165
+#, python-format
+msgid "Fetching %s"
+msgstr ""
+
+#: cinder/utils.py:210
+#, python-format
+msgid "Got unknown keyword args to utils.execute: %r"
+msgstr ""
+
+#: cinder/utils.py:220
+#, python-format
+msgid "Running cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/utils.py:236 cinder/utils.py:315
+#, python-format
+msgid "Result was %s"
+msgstr ""
+
+#: cinder/utils.py:249
+#, python-format
+msgid "%r failed. Retrying."
+msgstr ""
+
+#: cinder/utils.py:291
+#, python-format
+msgid "Running cmd (SSH): %s"
+msgstr ""
+
+#: cinder/utils.py:293
+msgid "Environment not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:297
+msgid "process_input not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:352
+#, python-format
+msgid "debug in callback: %s"
+msgstr ""
+
+#: cinder/utils.py:534
+#, python-format
+msgid "Link Local address is not found.:%s"
+msgstr ""
+
+#: cinder/utils.py:537
+#, python-format
+msgid "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+msgstr ""
+
+#: cinder/utils.py:648
+#, python-format
+msgid "Invalid backend: %s"
+msgstr ""
+
+#: cinder/utils.py:659
+#, python-format
+msgid "backend %s"
+msgstr ""
+
+#: cinder/utils.py:709
+msgid "in looping call"
+msgstr ""
+
+#: cinder/utils.py:927
+#, python-format
+msgid "Attempting to grab semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:931
+#, python-format
+msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:935
+#, python-format
+msgid "Attempting to grab file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:942
+#, python-format
+msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:1001
+#, python-format
+msgid "Found sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1008
+#, python-format
+msgid "Cleaned sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1023
+#, python-format
+msgid "Found lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1028
+#, python-format
+msgid "Cleaned lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1138
+#, python-format
+msgid "Expected object of type: %s"
+msgstr ""
+
+#: cinder/utils.py:1169
+#, python-format
+msgid "Invalid server_string: %s"
+msgstr ""
+
+#: cinder/utils.py:1298
+#, python-format
+msgid "timefunc: '%(name)s' took %(total_time).2f secs"
+msgstr ""
+
+#: cinder/utils.py:1330
+msgid "Original exception being dropped"
+msgstr ""
+
+#: cinder/utils.py:1461
+#, python-format
+msgid "Class %(fullname)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1463
+#, python-format
+msgid "Class %(fullname)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1495
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1497
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1681
+#, python-format
+msgid "Could not remove tmpdir: %s"
+msgstr ""
+
+#: cinder/wsgi.py:97
+#, python-format
+msgid "Started %(name)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:108
+msgid "Stopping WSGI server."
+msgstr ""
+
+#: cinder/wsgi.py:111
+msgid "Stopping raw TCP server."
+msgstr ""
+
+#: cinder/wsgi.py:117
+#, python-format
+msgid "Starting TCP server %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:133
+msgid "WSGI server has stopped."
+msgstr ""
+
+#: cinder/wsgi.py:211
+msgid "You must implement __call__"
+msgstr ""
+
+#: cinder/api/direct.py:218
+msgid "not available"
+msgstr ""
+
+#: cinder/api/direct.py:299
+#, python-format
+msgid "Returned non-serializeable type: %s"
+msgstr ""
+
+#: cinder/api/sizelimit.py:51
+msgid "Request is too large."
+msgstr ""
+
+#: cinder/api/validator.py:142
+#, python-format
+msgid "%(key)s with value %(value)s failed validator  %(validator)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:73
+#, python-format
+msgid "%(code)s: %(message)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:95
+#, python-format
+msgid "FaultWrapper: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:170
+msgid "Too many failed authentications."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:180
+#, python-format
+msgid ""
+"Access key %(access_key)s has had %(failures)d failed authentications and"
+" will be locked out for %(lock_mins)d minutes."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:267
+msgid "Signature not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:271
+msgid "Access key not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:306 cinder/api/ec2/__init__.py:319
+msgid "Failure communicating with keystone"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:388
+#, python-format
+msgid "Authentication Failure: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:404
+#, python-format
+msgid "Authenticated Request For %(uname)s:%(pname)s)"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:435
+#, python-format
+msgid "action: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:437
+#, python-format
+msgid "arg: %(key)s\t\tval: %(value)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:512
+#, python-format
+msgid "Unauthorized request for controller=%(controller)s and action=%(action)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:584
+#, python-format
+msgid "InstanceNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:590
+#, python-format
+msgid "VolumeNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:596
+#, python-format
+msgid "SnapshotNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:602
+#, python-format
+msgid "NotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:605
+#, python-format
+msgid "EC2APIError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:613
+#, python-format
+msgid "KeyPairExists raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:617
+#, python-format
+msgid "InvalidParameterValue raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:621
+#, python-format
+msgid "InvalidPortRange raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:625
+#, python-format
+msgid "NotAuthorized raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:629
+#, python-format
+msgid "InvalidRequest raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:633
+#, python-format
+msgid "QuotaError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:637
+#, python-format
+msgid "Invalid id: bogus (expecting \"i-...\"): %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:646
+#, python-format
+msgid "Unexpected error raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:647
+#, python-format
+msgid "Environment: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:649 cinder/api/metadata/handler.py:248
+msgid "An unknown error has occurred. Please try your request again."
+msgstr ""
+
+#: cinder/api/ec2/apirequest.py:64
+#, python-format
+msgid "Unsupported API request: controller = %(controller)s, action = %(action)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:336
+#, python-format
+msgid "Create snapshot of volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:372
+#, python-format
+msgid ""
+"Value (%s) for KeyName is invalid. Content limited to Alphanumeric "
+"character, spaces, dashes, and underscore."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:378
+#, python-format
+msgid "Value (%s) for Keyname is invalid. Length exceeds maximum of 255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:382
+#, python-format
+msgid "Create key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:391
+#, python-format
+msgid "Import key %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:409
+#, python-format
+msgid "Delete key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:551
+msgid "Invalid CIDR"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:639 cinder/api/ec2/cloud.py:693
+#: cinder/api/ec2/cloud.py:800
+msgid "Not enough parameters, need group_name or group_id"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:654
+#: cinder/api/openstack/compute/contrib/security_groups.py:517
+#, python-format
+msgid "Revoke security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:666 cinder/api/ec2/cloud.py:719
+#, python-format
+msgid "%s Not enough parameters to build a valid rule"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:684 cinder/api/ec2/cloud.py:744
+msgid "No rule for the specified parameters."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:708
+#: cinder/api/openstack/compute/contrib/security_groups.py:354
+#, python-format
+msgid "Authorize security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:725
+#, python-format
+msgid "%s - This rule already exists in group"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:769
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Content limited to "
+"Alphanumeric characters, spaces, dashes, and underscores."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:776
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Length exceeds maximum of "
+"255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:780
+#: cinder/api/openstack/compute/contrib/security_groups.py:292
+#, python-format
+msgid "Create Security Group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:783
+#, python-format
+msgid "group %s already exists"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:815
+#: cinder/api/openstack/compute/contrib/security_groups.py:245
+#, python-format
+msgid "Delete security group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:823 cinder/compute/manager.py:1630
+#, python-format
+msgid "Get console output for instance %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:894
+#, python-format
+msgid "Create volume from snapshot %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:898 cinder/api/openstack/compute/contrib/volumes.py:186
+#: cinder/api/openstack/volume/volumes.py:222
+#, python-format
+msgid "Create volume of %s GB"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:921
+msgid "Delete Failed"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:931
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(instance_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:939
+msgid "Attach Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:952 cinder/api/openstack/compute/contrib/volumes.py:366
+#, python-format
+msgid "Detach volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:959
+msgid "Detach Volume Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:984 cinder/api/ec2/cloud.py:1041
+#: cinder/api/ec2/cloud.py:1518 cinder/api/ec2/cloud.py:1533
+#, python-format
+msgid "attribute not supported: %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1107
+#, python-format
+msgid "vol = %s\n"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1255
+msgid "Allocate address"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1267
+#, python-format
+msgid "Release address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1272
+#, python-format
+msgid "Associate address %(public_ip)s to instance %(instance_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1282
+#, python-format
+msgid "Disassociate address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1308
+msgid "Image must be available"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1329
+msgid "Going to start terminating instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1343
+#, python-format
+msgid "Reboot instance %r"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1354
+msgid "Going to stop instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1365
+msgid "Going to start instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1455
+#, python-format
+msgid "De-registering image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1471
+msgid "imageLocation is required"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1490
+#, python-format
+msgid "Registered image %(image_location)s with id %(image_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1536
+msgid "user or group not specified"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1538
+msgid "only group \"all\" is supported"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1540
+msgid "operation_type must be add or remove"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1542
+#, python-format
+msgid "Updating image %s publicity"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1555
+#, python-format
+msgid "Not allowed to modify attributes for image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1603
+#, python-format
+msgid "Couldn't stop instance with in %d sec"
+msgstr ""
+
+#: cinder/api/metadata/handler.py:246 cinder/api/metadata/handler.py:253
+#, python-format
+msgid "Failed to get metadata for ip: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:43
+#, python-format
+msgid "Caught error: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:45 cinder/api/openstack/wsgi.py:886
+#, python-format
+msgid "%(url)s returned with HTTP %(status)d"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:94
+msgid "Must specify an ExtensionManager class"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:105
+#, python-format
+msgid "Extended resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:130
+#, python-format
+msgid ""
+"Extension %(ext_name)s: Cannot extend resource %(collection)s: No such "
+"resource"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:135
+#, python-format
+msgid "Extension %(ext_name)s extending resource: %(collection)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:90
+#, python-format
+msgid "%(user_id)s could not be found with token '%(token)s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:134
+#, python-format
+msgid "%(user_id)s must be an admin or a member of %(project_id)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:152
+msgid "Authentication requests must be made against a version root (e.g. /v2)."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:167
+#, python-format
+msgid "Could not find %s in request."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:191
+#, python-format
+msgid "Successfully authenticated '%s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:241
+msgid "User not found with provided API key."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:258
+#, python-format
+msgid "Provided API key is valid, but not for user '%(username)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:133 cinder/api/openstack/common.py:167
+msgid "limit param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:136 cinder/api/openstack/common.py:171
+msgid "limit param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:161
+msgid "offset param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:175
+msgid "offset param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:203
+#, python-format
+msgid "marker [%s] not found"
+msgstr ""
+
+#: cinder/api/openstack/common.py:243
+#, python-format
+msgid "href %s does not contain version"
+msgstr ""
+
+#: cinder/api/openstack/common.py:278
+msgid "Image metadata limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/common.py:295
+#, python-format
+msgid "Converting nw_info: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:305
+#, python-format
+msgid "Converted networks: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:338
+#, python-format
+msgid "Cannot '%(action)s' while instance is in %(attr)s %(state)s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:341
+#, python-format
+msgid "Instance is in an invalid state for '%(action)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:421
+msgid "Rejecting snapshot request, snapshots currently disabled"
+msgstr ""
+
+#: cinder/api/openstack/common.py:423
+msgid "Instance snapshots are not permitted at this time."
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:188
+#, python-format
+msgid "Loaded extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:225
+#, python-format
+msgid "Ext name: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:226
+#, python-format
+msgid "Ext alias: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:227
+#, python-format
+msgid "Ext description: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:229
+#, python-format
+msgid "Ext namespace: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:230
+#, python-format
+msgid "Ext updated: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:232
+#, python-format
+msgid "Exception loading extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:246
+#, python-format
+msgid "Loading extension %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:252
+#, python-format
+msgid "Calling extension factory %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:264
+#, python-format
+msgid "Failed to load extension %(ext_factory)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:344
+#, python-format
+msgid "Failed to load extension %(classpath)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:368
+#, python-format
+msgid "Failed to load extension %(ext_name)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:135 cinder/api/openstack/wsgi.py:538
+msgid "cannot understand JSON"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:159
+#: cinder/api/openstack/compute/contrib/hosts.py:86
+msgid "cannot understand XML"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:543
+msgid "too many body keys"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:582
+#, python-format
+msgid "Exception handling resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:586
+#, python-format
+msgid "Fault thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:589
+#, python-format
+msgid "HTTP exception thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:697
+msgid "Unrecognized Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:701
+msgid "No Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:705
+msgid "Empty body provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:816
+#, python-format
+msgid "There is no such action: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:819 cinder/api/openstack/wsgi.py:832
+#: cinder/api/openstack/compute/server_metadata.py:58
+#: cinder/api/openstack/compute/server_metadata.py:76
+#: cinder/api/openstack/compute/server_metadata.py:101
+#: cinder/api/openstack/compute/server_metadata.py:126
+#: cinder/api/openstack/compute/contrib/admin_actions.py:211
+#: cinder/api/openstack/compute/contrib/console_output.py:52
+msgid "Malformed request body"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:829
+msgid "Unsupported Content-Type"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:841
+msgid "Malformed request url"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:889
+#, python-format
+msgid "%(url)s returned a fault: %(e)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:265
+msgid "element is not a child"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:414
+msgid "root element selecting a list"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:739
+#, python-format
+msgid "Template tree mismatch; adding slave %(slavetag)s to master %(mastertag)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:858
+msgid "subclasses must implement construct()!"
+msgstr ""
+
+#: cinder/api/openstack/compute/extensions.py:29
+#: cinder/api/openstack/volume/extensions.py:29
+msgid "Initializing extension manager."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:40
+#: cinder/api/openstack/compute/images.py:146
+#: cinder/api/openstack/compute/images.py:161
+msgid "Image not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:79
+msgid "Incorrect request body format"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:83
+#: cinder/api/openstack/compute/server_metadata.py:80
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:79
+#: cinder/api/openstack/compute/contrib/volumetypes.py:188
+msgid "Request body and URI mismatch"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:86
+#: cinder/api/openstack/compute/server_metadata.py:84
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:82
+#: cinder/api/openstack/compute/contrib/volumetypes.py:191
+msgid "Request body contains too many items"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:111
+msgid "Invalid metadata key"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:74
+msgid "Instance does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:97
+msgid "Instance is not a member of specified network"
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:140
+#, python-format
+msgid ""
+"Only %(value)s %(verb)s request(s) can be made to %(uri)s every "
+"%(unit_string)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:266
+msgid "This request was rate-limited."
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:38
+#: cinder/api/openstack/compute/server_metadata.py:122
+#: cinder/api/openstack/compute/server_metadata.py:159
+msgid "Server does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:141
+#: cinder/api/openstack/compute/server_metadata.py:152
+msgid "Metadata item was not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:425
+#, python-format
+msgid "Invalid server status: %(status)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:433
+msgid "Invalid changes-since value"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:483
+msgid "Personality file limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:485
+msgid "Personality file path too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:487
+msgid "Personality file content too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:501
+msgid "Server name is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:505
+msgid "Server name is an empty string"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:509
+msgid "Server name must be less than 256 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:527
+#, python-format
+msgid "Bad personality format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:530
+msgid "Bad personality format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:535
+#, python-format
+msgid "Personality content for %s cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:550
+#, python-format
+msgid "Bad networks format: network uuid is not in proper format (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:559
+#, python-format
+msgid "Invalid fixed IP address (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:566
+#, python-format
+msgid "Duplicate networks (%s) are not allowed"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:572
+#, python-format
+msgid "Bad network format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:575
+msgid "Bad networks format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:587
+msgid "Userdata content cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:594
+msgid "accessIPv4 is not proper IPv4 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:601
+msgid "accessIPv6 is not proper IPv6 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:633
+msgid "Server name is not defined"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:675
+#: cinder/api/openstack/compute/servers.py:740
+msgid "Invalid flavorRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:737
+msgid "Can not find requested image"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:743
+msgid "Invalid key_name provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:829
+#: cinder/api/openstack/compute/servers.py:849
+msgid "Instance has not been resized."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:835
+#, python-format
+msgid "Error in confirm-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:855
+#, python-format
+msgid "Error in revert-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:868
+msgid "Argument 'type' for reboot is not HARD or SOFT"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:872
+msgid "Missing argument 'type' for reboot"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:885
+#, python-format
+msgid "Error in reboot %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:897
+msgid "Unable to locate requested flavor."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:900
+msgid "Resize requires a change in size."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:924
+msgid "Malformed server entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:931
+msgid "Missing imageRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:940
+msgid "Invalid imageRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:949
+msgid "Missing flavorRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:962
+msgid "No adminPass was specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:966
+#: cinder/api/openstack/compute/servers.py:1144
+msgid "Invalid adminPass"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:980
+msgid "Unable to parse metadata key/value pairs."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:993
+msgid "Resize request has invalid 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:996
+msgid "Resize requests require 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1014
+#: cinder/api/openstack/compute/contrib/aggregates.py:142
+#: cinder/api/openstack/compute/contrib/networks.py:65
+msgid "Invalid request body"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1019
+msgid "Could not parse imageRef from request."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1071
+msgid "Instance could not be found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1074
+msgid "Cannot find image for rebuild"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1103
+msgid "createImage entity requires name attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1112
+#: cinder/api/openstack/compute/contrib/admin_actions.py:238
+msgid "Invalid metadata"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1167
+#, python-format
+msgid "Removing options '%(unk_opt_str)s' from query"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:60
+#, python-format
+msgid "Compute.api::pause %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:77
+#, python-format
+msgid "Compute.api::unpause %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:94
+#, python-format
+msgid "compute.api::suspend %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:111
+#, python-format
+msgid "compute.api::resume %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:127
+#, python-format
+msgid "Error in migrate %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:141
+#, python-format
+msgid "Compute.api::reset_network %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:154
+#: cinder/api/openstack/compute/contrib/admin_actions.py:170
+#: cinder/api/openstack/compute/contrib/admin_actions.py:186
+#: cinder/api/openstack/compute/contrib/multinic.py:41
+#: cinder/api/openstack/compute/contrib/rescue.py:44
+msgid "Server not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:157
+#, python-format
+msgid "Compute.api::inject_network_info %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:173
+#, python-format
+msgid "Compute.api::lock %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:189
+#, python-format
+msgid "Compute.api::unlock %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:219
+#, python-format
+msgid "createBackup entity requires %s attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:223
+msgid "Malformed createBackup entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:229
+msgid "createBackup attribute 'rotation' must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:244
+#: cinder/api/openstack/compute/contrib/console_output.py:47
+#: cinder/api/openstack/compute/contrib/console_output.py:59
+#: cinder/api/openstack/compute/contrib/consoles.py:49
+#: cinder/api/openstack/compute/contrib/consoles.py:60
+#: cinder/api/openstack/compute/contrib/server_action_list.py:49
+#: cinder/api/openstack/compute/contrib/server_diagnostics.py:47
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:38
+msgid "Instance not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:272
+msgid "host and block_migration must be specified."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:284
+#, python-format
+msgid "Live migration of instance %(id)s to host %(host)s failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:76
+#, python-format
+msgid ""
+"Cannot create aggregate with name %(name)s and availability zone "
+"%(avail_zone)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:88
+#, python-format
+msgid "Cannot show aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:114
+#, python-format
+msgid "Cannot update aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:126
+#, python-format
+msgid "Cannot delete aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:139
+#, python-format
+msgid "Aggregates does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:152
+#: cinder/api/openstack/compute/contrib/aggregates.py:158
+#, python-format
+msgid "Cannot add host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:171
+#: cinder/api/openstack/compute/contrib/aggregates.py:175
+#, python-format
+msgid "Cannot remove host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:195
+#, python-format
+msgid "Cannot set metadata %(metadata)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/certificates.py:75
+msgid "Only root certificate can be retrieved."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/cloudpipe.py:146
+msgid ""
+"Unable to claim IP for VPN instances, ensure it isn't running, and try "
+"again in a few minutes"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:44
+msgid "Missing type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:56
+msgid "Invalid type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/disk_config.py:44
+#, python-format
+msgid "%s must be either 'MANUAL' or 'AUTO'."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/extended_server_attributes.py:77
+#: cinder/api/openstack/compute/contrib/extended_status.py:61
+msgid "Server not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:61
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:91
+msgid "Flavor not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:49
+#: cinder/api/openstack/compute/contrib/volumetypes.py:158
+msgid "No Request Body"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:159
+#, python-format
+msgid "No more floating ips in pool %s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:161
+msgid "No more floating ips available."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:201
+#: cinder/api/openstack/compute/contrib/floating_ips.py:230
+#: cinder/api/openstack/compute/contrib/security_groups.py:571
+#: cinder/api/openstack/compute/contrib/security_groups.py:604
+msgid "Missing parameter dict"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:204
+#: cinder/api/openstack/compute/contrib/floating_ips.py:233
+msgid "Address not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:213
+msgid "No fixed ips associated to instance"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:216
+msgid "Associate floating ip failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:144
+#, python-format
+msgid "Invalid status: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:148
+#, python-format
+msgid "Invalid mode: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:152
+#, python-format
+msgid "Invalid update setting: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:170
+#, python-format
+msgid "Putting host %(host)s in maintenance mode %(mode)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:181
+#, python-format
+msgid "Setting host %(host)s to %(state)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:230
+msgid "Describe-resource is admin only functionality"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:238
+msgid "Host not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:70
+msgid "Keypair name contains unsafe characters"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:95
+msgid "Keypair name must be between 1 and 255 characters long"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:100
+#, python-format
+msgid "Key pair '%s' already exists."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:52
+msgid "Missing 'networkId' argument for addFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:68
+msgid "Missing 'address' argument for removeFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:77
+#, python-format
+msgid "Unable to find address %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:62
+#, python-format
+msgid "Network does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:70
+#, python-format
+msgid "Disassociating network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:74
+#: cinder/api/openstack/compute/contrib/networks.py:91
+#: cinder/api/openstack/compute/contrib/networks.py:101
+msgid "Network not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:87
+#, python-format
+msgid "Showing network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:97
+#, python-format
+msgid "Deleting network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/scheduler_hints.py:41
+msgid "Malformed scheduler_hints attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:222
+msgid "Security group id should be integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:243
+msgid "Security group is still in use"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:295
+#, python-format
+msgid "Security group %s already exists"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:315
+#, python-format
+msgid "Security group %s is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:318
+#, python-format
+msgid "Security group %s cannot be empty."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:321
+#, python-format
+msgid "Security group %s should not be greater than 255 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:348
+msgid "Parent group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:351
+#, python-format
+msgid "Security group (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:369
+msgid "Not enough parameters to build a valid rule."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:376
+#, python-format
+msgid "This rule already exists in group %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:414
+msgid "Parent or group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:507
+msgid "Rule id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:510
+#, python-format
+msgid "Rule (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:574
+#: cinder/api/openstack/compute/contrib/security_groups.py:607
+msgid "Security group not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:578
+#: cinder/api/openstack/compute/contrib/security_groups.py:611
+msgid "Security group name cannot be empty"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:45
+#, python-format
+msgid "start instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:54
+#, python-format
+msgid "stop instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:73
+#: cinder/api/openstack/volume/volumes.py:106
+#, python-format
+msgid "vol=%s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:146
+#: cinder/api/openstack/volume/volumes.py:184
+#, python-format
+msgid "Delete volume with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:329
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(server_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:481
+#: cinder/api/openstack/volume/snapshots.py:110
+#, python-format
+msgid "Delete snapshot with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:524
+#: cinder/api/openstack/volume/snapshots.py:150
+#, python-format
+msgid "Create snapshot from volume %s"
+msgstr ""
+
+#: cinder/auth/fakeldap.py:33
+msgid "Attempted to instantiate singleton"
+msgstr ""
+
+#: cinder/auth/ldapdriver.py:650
+#, python-format
+msgid ""
+"Attempted to remove the last member of a group. Deleting the group at %s "
+"instead."
+msgstr ""
+
+#: cinder/auth/manager.py:298
+#, python-format
+msgid "Looking up user: %r"
+msgstr ""
+
+#: cinder/auth/manager.py:302
+#, python-format
+msgid "Failed authorization for access key %s"
+msgstr ""
+
+#: cinder/auth/manager.py:308
+#, python-format
+msgid "Using project name = user name (%s)"
+msgstr ""
+
+#: cinder/auth/manager.py:315
+#, python-format
+msgid "failed authorization: no project named %(pjid)s (user=%(uname)s)"
+msgstr ""
+
+#: cinder/auth/manager.py:324
+#, python-format
+msgid ""
+"Failed authorization: user %(uname)s not admin and not member of project "
+"%(pjname)s"
+msgstr ""
+
+#: cinder/auth/manager.py:331 cinder/auth/manager.py:343
+#, python-format
+msgid "user.secret: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:332 cinder/auth/manager.py:344
+#, python-format
+msgid "expected_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:333 cinder/auth/manager.py:345
+#, python-format
+msgid "signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:335 cinder/auth/manager.py:357
+#, python-format
+msgid "Invalid signature for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:353
+#, python-format
+msgid "host_only_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:449
+msgid "Must specify project"
+msgstr ""
+
+#: cinder/auth/manager.py:490
+#, python-format
+msgid "Adding role %(role)s to user %(uid)s in project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:493
+#, python-format
+msgid "Adding sitewide role %(role)s to user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:519
+#, python-format
+msgid "Removing role %(role)s from user %(uid)s on project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:522
+#, python-format
+msgid "Removing sitewide role %(role)s from user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:595
+#, python-format
+msgid "Created project %(name)s with manager %(manager_user)s"
+msgstr ""
+
+#: cinder/auth/manager.py:613
+#, python-format
+msgid "modifying project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:625
+#, python-format
+msgid "Adding user %(uid)s to project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:646
+#, python-format
+msgid "Remove user %(uid)s from project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:676
+#, python-format
+msgid "Deleting project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:734
+#, python-format
+msgid "Created user %(rvname)s (admin: %(rvadmin)r)"
+msgstr ""
+
+#: cinder/auth/manager.py:743
+#, python-format
+msgid "Deleting user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:753
+#, python-format
+msgid "Access Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:755
+#, python-format
+msgid "Secret Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:757
+#, python-format
+msgid "Admin status set to %(admin)r for user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:802
+#, python-format
+msgid "No vpn data for project %s"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:46
+msgid "Instance type for vpn instances"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:49
+msgid "Template for cloudpipe instance boot script"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:52
+msgid "Network to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:55
+msgid "Netmask to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:107
+#, python-format
+msgid "Launching VPN for %s"
+msgstr ""
+
+#: cinder/compute/api.py:141
+msgid "No compute host specified"
+msgstr ""
+
+#: cinder/compute/api.py:144
+#, python-format
+msgid "Unable to find host for Instance %s"
+msgstr ""
+
+#: cinder/compute/api.py:192
+#, python-format
+msgid ""
+"Quota exceeded for %(pid)s, tried to set %(num_metadata)s metadata "
+"properties"
+msgstr ""
+
+#: cinder/compute/api.py:203
+#, python-format
+msgid "Quota exceeded for %(pid)s, metadata property key or value too long"
+msgstr ""
+
+#: cinder/compute/api.py:257
+msgid "Cannot run any more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:259
+#, python-format
+msgid "Can only run %s more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:261
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances. "
+msgstr ""
+
+#: cinder/compute/api.py:310
+msgid "Creating a raw instance"
+msgstr ""
+
+#: cinder/compute/api.py:312
+#, python-format
+msgid "Using Kernel=%(kernel_id)s, Ramdisk=%(ramdisk_id)s"
+msgstr ""
+
+#: cinder/compute/api.py:383
+#, python-format
+msgid "Going to run %s instances..."
+msgstr ""
+
+#: cinder/compute/api.py:447
+#, python-format
+msgid "bdm %s"
+msgstr ""
+
+#: cinder/compute/api.py:474
+#, python-format
+msgid "block_device_mapping %s"
+msgstr ""
+
+#: cinder/compute/api.py:591
+#, python-format
+msgid "Sending create to scheduler for %(pid)s/%(uid)s's"
+msgstr ""
+
+#: cinder/compute/api.py:871
+msgid "Going to try to soft delete instance"
+msgstr ""
+
+#: cinder/compute/api.py:891
+msgid "No host for instance, deleting immediately"
+msgstr ""
+
+#: cinder/compute/api.py:939
+msgid "Going to try to terminate instance"
+msgstr ""
+
+#: cinder/compute/api.py:977
+msgid "Going to try to stop instance"
+msgstr ""
+
+#: cinder/compute/api.py:996
+msgid "Going to try to start instance"
+msgstr ""
+
+#: cinder/compute/api.py:1000
+#, python-format
+msgid "Instance %(instance_uuid)s is not stopped. (%(vm_state)s"
+msgstr ""
+
+#: cinder/compute/api.py:1071 cinder/volume/api.py:173
+#: cinder/volume/volume_types.py:64
+#, python-format
+msgid "Searching by: %s"
+msgstr ""
+
+#: cinder/compute/api.py:1201
+#, python-format
+msgid "Image type not recognized %s"
+msgstr ""
+
+#: cinder/compute/api.py:1369
+msgid "flavor_id is None. Assuming migration."
+msgstr ""
+
+#: cinder/compute/api.py:1377
+#, python-format
+msgid ""
+"Old instance type %(current_instance_type_name)s,  new instance type "
+"%(new_instance_type_name)s"
+msgstr ""
+
+#: cinder/compute/api.py:1644
+#, python-format
+msgid "multiple fixedips exist, using the first: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:57 cinder/compute/instance_types.py:65
+msgid "create arguments must be positive integers"
+msgstr ""
+
+#: cinder/compute/instance_types.py:76 cinder/volume/volume_types.py:41
+#, python-format
+msgid "DB error: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:86
+#, python-format
+msgid "Instance type %s not found for deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:138
+#, python-format
+msgid "check_instance_lock: decorating: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:140
+#, python-format
+msgid ""
+"check_instance_lock: arguments: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+msgstr ""
+
+#: cinder/compute/manager.py:144
+#, python-format
+msgid "check_instance_lock: locked: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:146
+#, python-format
+msgid "check_instance_lock: admin: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:151
+#, python-format
+msgid "check_instance_lock: executing: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:155
+#, python-format
+msgid "check_instance_lock: not executing |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:201
+#, python-format
+msgid "Unable to load the virtualization driver: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:223
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s has been destroyed from under us while trying "
+"to set it to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:240
+#, python-format
+msgid "Current state is %(drv_state)s, state in DB is %(db_state)s."
+msgstr ""
+
+#: cinder/compute/manager.py:245
+msgid "Rebooting instance after cinder-compute restart."
+msgstr ""
+
+#: cinder/compute/manager.py:255
+msgid "Hypervisor driver does not support firewall rules"
+msgstr ""
+
+#: cinder/compute/manager.py:260
+msgid "Checking state"
+msgstr ""
+
+#: cinder/compute/manager.py:329
+#, python-format
+msgid "Setting up bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:400
+#, python-format
+msgid "Instance %s already deleted from database. Attempting forceful vm deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:406
+#, python-format
+msgid "Exception encountered while terminating the instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:444
+#, python-format
+msgid "Instance %s not found."
+msgstr ""
+
+#: cinder/compute/manager.py:480
+msgid "Instance has already been created"
+msgstr ""
+
+#: cinder/compute/manager.py:523
+#, python-format
+msgid ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:528
+#, python-format
+msgid ""
+"Image '%(image_id)s' size %(size_bytes)d exceeded instance_type allowed "
+"size %(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:538
+msgid "Starting instance..."
+msgstr ""
+
+#: cinder/compute/manager.py:548
+msgid "Skipping network allocation for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:561
+msgid "Instance failed network setup"
+msgstr ""
+
+#: cinder/compute/manager.py:565
+#, python-format
+msgid "Instance network_info: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:578
+msgid "Instance failed block device setup"
+msgstr ""
+
+#: cinder/compute/manager.py:594
+msgid "Instance failed to spawn"
+msgstr ""
+
+#: cinder/compute/manager.py:615
+msgid "Deallocating network for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:672
+#, python-format
+msgid "%(action_str)s instance"
+msgstr ""
+
+#: cinder/compute/manager.py:699
+#, python-format
+msgid "Ignoring DiskNotFound: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:708
+#, python-format
+msgid "terminating bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:742 cinder/compute/manager.py:1328
+#: cinder/compute/manager.py:1416 cinder/compute/manager.py:2501
+#, python-format
+msgid "%s. Setting instance vm_state to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:811
+#, python-format
+msgid ""
+"Cannot rebuild instance [%(instance_uuid)s], because the given image does"
+" not exist."
+msgstr ""
+
+#: cinder/compute/manager.py:816
+#, python-format
+msgid "Cannot rebuild instance [%(instance_uuid)s]: %(exc)s"
+msgstr ""
+
+#: cinder/compute/manager.py:823
+#, python-format
+msgid "Rebuilding instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:876
+#, python-format
+msgid "Rebooting instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:891
+#, python-format
+msgid ""
+"trying to reboot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:933
+#, python-format
+msgid "instance %s: snapshotting"
+msgstr ""
+
+#: cinder/compute/manager.py:939
+#, python-format
+msgid ""
+"trying to snapshot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:995
+#, python-format
+msgid "Found %(num_images)d images (rotation: %(rotation)d)"
+msgstr ""
+
+#: cinder/compute/manager.py:1001
+#, python-format
+msgid "Rotating out %d backups"
+msgstr ""
+
+#: cinder/compute/manager.py:1005
+#, python-format
+msgid "Deleting image %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1035
+#, python-format
+msgid "Failed to set admin password. Instance %s is not running"
+msgstr ""
+
+#: cinder/compute/manager.py:1041
+#, python-format
+msgid "Instance %s: Root password set"
+msgstr ""
+
+#: cinder/compute/manager.py:1050
+msgid "set_admin_password is not implemented by this driver."
+msgstr ""
+
+#: cinder/compute/manager.py:1064
+msgid "Error setting admin password"
+msgstr ""
+
+#: cinder/compute/manager.py:1079
+#, python-format
+msgid ""
+"trying to inject a file into a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1084
+#, python-format
+msgid "instance %(instance_uuid)s: injecting file to %(path)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1098
+#, python-format
+msgid ""
+"trying to update agent on a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1103
+#, python-format
+msgid "instance %(instance_uuid)s: updating agent to %(url)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1116
+#, python-format
+msgid "instance %s: rescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1141
+#, python-format
+msgid "instance %s: unrescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1270
+msgid "destination same as source!"
+msgstr ""
+
+#: cinder/compute/manager.py:1287
+#, python-format
+msgid "instance %s: migrating"
+msgstr ""
+
+#: cinder/compute/manager.py:1471
+#, python-format
+msgid "instance %s: pausing"
+msgstr ""
+
+#: cinder/compute/manager.py:1489
+#, python-format
+msgid "instance %s: unpausing"
+msgstr ""
+
+#: cinder/compute/manager.py:1525
+#, python-format
+msgid "instance %s: retrieving diagnostics"
+msgstr ""
+
+#: cinder/compute/manager.py:1534
+#, python-format
+msgid "instance %s: suspending"
+msgstr ""
+
+#: cinder/compute/manager.py:1556
+#, python-format
+msgid "instance %s: resuming"
+msgstr ""
+
+#: cinder/compute/manager.py:1579
+#, python-format
+msgid "instance %s: locking"
+msgstr ""
+
+#: cinder/compute/manager.py:1588
+#, python-format
+msgid "instance %s: unlocking"
+msgstr ""
+
+#: cinder/compute/manager.py:1596
+#, python-format
+msgid "instance %s: getting locked state"
+msgstr ""
+
+#: cinder/compute/manager.py:1606
+#, python-format
+msgid "instance %s: reset network"
+msgstr ""
+
+#: cinder/compute/manager.py:1614
+#, python-format
+msgid "instance %s: inject network info"
+msgstr ""
+
+#: cinder/compute/manager.py:1618
+#, python-format
+msgid "network_info to inject: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:1655
+#, python-format
+msgid "instance %s: getting vnc console"
+msgstr ""
+
+#: cinder/compute/manager.py:1685
+#, python-format
+msgid "Booting with volume %(volume_id)s at %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1703
+#, python-format
+msgid ""
+"instance %(instance_uuid)s: attaching volume %(volume_id)s to "
+"%(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1705
+#, python-format
+msgid "Attaching volume %(volume_id)s to %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1714
+#, python-format
+msgid "instance %(instance_uuid)s: attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1724
+#, python-format
+msgid "Attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1752
+#, python-format
+msgid "Detach volume %(volume_id)s from mountpoint %(mp)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1756
+#, python-format
+msgid "Detaching volume from unknown instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1822
+#, python-format
+msgid ""
+"Creating tmpfile %s to notify to other compute nodes that they should "
+"mount the same storage."
+msgstr ""
+
+#: cinder/compute/manager.py:1884
+msgid "Instance has no volume."
+msgstr ""
+
+#: cinder/compute/manager.py:1916
+#, python-format
+msgid "plug_vifs() failed %(cnt)d.Retry up to %(max_retry)d for %(hostname)s."
+msgstr ""
+
+#: cinder/compute/manager.py:1973
+#, python-format
+msgid "Pre live migration failed at  %(dest)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2000
+msgid "post_live_migration() is started.."
+msgstr ""
+
+#: cinder/compute/manager.py:2030
+msgid "No floating_ip found"
+msgstr ""
+
+#: cinder/compute/manager.py:2038
+msgid "No floating_ip found."
+msgstr ""
+
+#: cinder/compute/manager.py:2040
+#, python-format
+msgid ""
+"Live migration: Unexpected error: cannot inherit floating ip.\n"
+"%(e)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2073
+#, python-format
+msgid "Migrating instance to %(dest)s finished successfully."
+msgstr ""
+
+#: cinder/compute/manager.py:2075
+msgid ""
+"You may see the error \"libvirt: QEMU error: Domain not found: no domain "
+"with matching name.\" This error can be safely ignored."
+msgstr ""
+
+#: cinder/compute/manager.py:2090
+msgid "Post operation of migraton started"
+msgstr ""
+
+#: cinder/compute/manager.py:2226
+#, python-format
+msgid "Updated the info_cache for instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:2255
+msgid "Updating bandwidth usage cache"
+msgstr ""
+
+#: cinder/compute/manager.py:2277
+msgid "Updating host status"
+msgstr ""
+
+#: cinder/compute/manager.py:2305
+#, python-format
+msgid ""
+"Found %(num_db_instances)s in the database and %(num_vm_instances)s on "
+"the hypervisor."
+msgstr ""
+
+#: cinder/compute/manager.py:2331
+#, python-format
+msgid ""
+"During the sync_power process the instance %(uuid)s has moved from host "
+"%(src)s to host %(dst)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2344
+#, python-format
+msgid ""
+"Instance %s is in the process of migrating to this host. Wait next "
+"sync_power cycle before setting power state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2350
+msgid ""
+"Instance found in database but not known by hypervisor. Setting power "
+"state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2380
+msgid "FLAGS.reclaim_instance_interval <= 0, skipping..."
+msgstr ""
+
+#: cinder/compute/manager.py:2392
+msgid "Reclaiming deleted instance"
+msgstr ""
+
+#: cinder/compute/manager.py:2458
+#, python-format
+msgid ""
+"Detected instance with name label '%(name)s' which is marked as DELETED "
+"but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2465
+#, python-format
+msgid ""
+"Destroying instance with name label '%(name)s' which is marked as DELETED"
+" but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2472
+#, python-format
+msgid "Unrecognized value '%(action)s' for FLAGS.running_deleted_instance_action"
+msgstr ""
+
+#: cinder/compute/manager.py:2542
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: unrecoverable state during operation on "
+"%(host)s"
+msgstr ""
+
+#: cinder/compute/utils.py:142
+msgid "v4 subnets are required for legacy nw_info"
+msgstr ""
+
+#: cinder/console/manager.py:77 cinder/console/vmrc_manager.py:70
+msgid "Adding console"
+msgstr ""
+
+#: cinder/console/manager.py:97
+#, python-format
+msgid "Tried to remove non-existant console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:122
+#, python-format
+msgid "Tried to remove non-existent console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:125
+#, python-format
+msgid "Removing console %(console_id)s."
+msgstr ""
+
+#: cinder/console/xvp.py:98
+msgid "Rebuilding xvp conf"
+msgstr ""
+
+#: cinder/console/xvp.py:116
+#, python-format
+msgid "Re-wrote %s"
+msgstr ""
+
+#: cinder/console/xvp.py:121
+msgid "Stopping xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:134
+msgid "Starting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:141
+#, python-format
+msgid "Error starting xvp: %s"
+msgstr ""
+
+#: cinder/console/xvp.py:144
+msgid "Restarting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:146
+msgid "xvp not running..."
+msgstr ""
+
+#: cinder/consoleauth/manager.py:63
+#, python-format
+msgid "Deleting Expired Token: (%s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:75
+#, python-format
+msgid "Received Token: %(token)s, %(token_dict)s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:79
+#, python-format
+msgid "Checking Token: %(token)s, %(token_valid)s)"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:57
+msgid "Use of empty request context is deprecated"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:198
+#, python-format
+msgid "Unrecognized read_deleted value '%s'"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:516 cinder/db/sqlalchemy/api.py:551
+#, python-format
+msgid "No ComputeNode for %(host)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4019 cinder/db/sqlalchemy/api.py:4045
+#, python-format
+msgid "No backend config with id %(sm_backend_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4103
+#, python-format
+msgid "No sm_flavor called %(sm_flavor)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4147
+#, python-format
+msgid "No sm_volume with id %(volume_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:66
+msgid "python-migrate is not installed. Exiting."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:78
+msgid "version should be an integer"
+msgstr ""
+
+#: cinder/db/sqlalchemy/session.py:137
+#, python-format
+msgid "SQL connection failed. %s attempts left."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:48
+msgid "interface column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:80
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:54
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:48
+#, python-format
+msgid "Table |%s| not created!"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:87
+msgid "VIF column not added to fixed_ips table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:97
+#, python-format
+msgid "join list for moving mac_addresses |%s|"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:39
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:60
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:99
+msgid "foreign key constraint couldn't be added"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:58
+msgid "foreign key constraint couldn't be dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py:34
+msgid "priority column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:41
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:42
+#: cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py:56
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:68
+msgid "foreign key constraint couldn't be removed"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py:34
+msgid "progress column not added to instances table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py:97
+#, python-format
+msgid ""
+"Could not cast flavorid to integer: %s. Set flavorid to an integer-like "
+"string to downgrade."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:69
+msgid "instance_info_caches tables not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py:41
+msgid "progress column not added to compute_nodes table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:76
+msgid "dns_domains table not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:60
+msgid "quota_classes table not dropped"
+msgstr ""
+
+#: cinder/image/glance.py:147
+msgid "Connection error contacting glance server, retrying"
+msgstr ""
+
+#: cinder/image/glance.py:153 cinder/network/quantum/melange_connection.py:104
+msgid "Maximum attempts reached"
+msgstr ""
+
+#: cinder/image/glance.py:278
+#, python-format
+msgid "Creating image in Glance. Metadata passed in %s"
+msgstr ""
+
+#: cinder/image/glance.py:281
+#, python-format
+msgid "Metadata after formatting for Glance %s"
+msgstr ""
+
+#: cinder/image/glance.py:289
+#, python-format
+msgid "Metadata returned from Glance formatted for Base %s"
+msgstr ""
+
+#: cinder/image/glance.py:331 cinder/image/glance.py:335
+msgid "Not the image owner"
+msgstr ""
+
+#: cinder/image/glance.py:410
+#, python-format
+msgid "%(timestamp)s does not follow any of the signatures: %(iso_formats)s"
+msgstr ""
+
+#: cinder/image/s3.py:309
+#, python-format
+msgid "Failed to download %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:328
+#, python-format
+msgid "Failed to decrypt %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:340
+#, python-format
+msgid "Failed to untar %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:353
+#, python-format
+msgid "Failed to upload %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:379
+#, python-format
+msgid "Failed to decrypt private key: %s"
+msgstr ""
+
+#: cinder/image/s3.py:387
+#, python-format
+msgid "Failed to decrypt initialization vector: %s"
+msgstr ""
+
+#: cinder/image/s3.py:398
+#, python-format
+msgid "Failed to decrypt image file %(image_file)s: %(err)s"
+msgstr ""
+
+#: cinder/image/s3.py:410
+msgid "Unsafe filenames in image"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:38 cinder/ipv6/rfc2462.py:34
+#, python-format
+msgid "Bad mac for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:40 cinder/ipv6/rfc2462.py:36
+#, python-format
+msgid "Bad prefix for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:42
+#, python-format
+msgid "Bad project_id for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/network/ldapdns.py:321
+msgid "This driver only supports type 'a' entries."
+msgstr ""
+
+#: cinder/network/linux_net.py:166
+#, python-format
+msgid "Attempted to remove chain %s which does not exist"
+msgstr ""
+
+#: cinder/network/linux_net.py:192
+#, python-format
+msgid "Unknown chain: %r"
+msgstr ""
+
+#: cinder/network/linux_net.py:215
+#, python-format
+msgid ""
+"Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r "
+"%(top)r"
+msgstr ""
+
+#: cinder/network/linux_net.py:335
+msgid "IPTablesManager.apply completed with success"
+msgstr ""
+
+#: cinder/network/linux_net.py:694
+#, python-format
+msgid "Hupping dnsmasq threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:696
+#, python-format
+msgid "Pid %d is stale, relaunching dnsmasq"
+msgstr ""
+
+#: cinder/network/linux_net.py:756
+#, python-format
+msgid "killing radvd threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:758
+#, python-format
+msgid "Pid %d is stale, relaunching radvd"
+msgstr ""
+
+#: cinder/network/linux_net.py:967
+#, python-format
+msgid "Starting VLAN inteface %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:999
+#, python-format
+msgid "Starting Bridge interface for %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1142
+#, python-format
+msgid "Starting bridge %s "
+msgstr ""
+
+#: cinder/network/linux_net.py:1149
+#, python-format
+msgid "Done starting bridge %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1167
+#, python-format
+msgid "Failed unplugging gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/linux_net.py:1170
+#, python-format
+msgid "Unplugged gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/manager.py:291
+#, python-format
+msgid "Fixed ip %(fixed_ip_id)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:300 cinder/network/manager.py:496
+#, python-format
+msgid "Interface %(interface)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:315
+#, python-format
+msgid "floating IP allocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:353
+#, python-format
+msgid "floating IP deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:386
+#, python-format
+msgid "Address |%(address)s| is not allocated"
+msgstr ""
+
+#: cinder/network/manager.py:390
+#, python-format
+msgid "Address |%(address)s| is not allocated to your project |%(project)s|"
+msgstr ""
+
+#: cinder/network/manager.py:402
+#, python-format
+msgid "Quota exceeded for %s, tried to allocate address"
+msgstr ""
+
+#: cinder/network/manager.py:614
+#, python-format
+msgid ""
+"Database inconsistency: DNS domain |%s| is registered in the Cinder db but "
+"not visible to either the floating or instance DNS driver. It will be "
+"ignored."
+msgstr ""
+
+#: cinder/network/manager.py:660
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing zone to |%(av_zone)s|."
+msgstr ""
+
+#: cinder/network/manager.py:670
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing project to |%(project)s|."
+msgstr ""
+
+#: cinder/network/manager.py:778
+#, python-format
+msgid "Disassociated %s stale fixed ip(s)"
+msgstr ""
+
+#: cinder/network/manager.py:782
+msgid "setting network host"
+msgstr ""
+
+#: cinder/network/manager.py:896
+#, python-format
+msgid "network allocations for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:901
+#, python-format
+msgid "networks retrieved for instance |%(instance_id)s|: |%(networks)s|"
+msgstr ""
+
+#: cinder/network/manager.py:930
+#, python-format
+msgid "network deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:1152
+#, python-format
+msgid ""
+"instance-dns-zone is |%(domain)s|, which is in availability zone "
+"|%(zone)s|. Instance |%(instance)s| is in zone |%(zone2)s|. No DNS record"
+" will be created."
+msgstr ""
+
+#: cinder/network/manager.py:1227
+#, python-format
+msgid "Unable to release %s because vif doesn't exist."
+msgstr ""
+
+#: cinder/network/manager.py:1244
+#, python-format
+msgid "Leased IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1248
+#, python-format
+msgid "IP %s leased that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1256
+#, python-format
+msgid "IP |%s| leased that isn't allocated"
+msgstr ""
+
+#: cinder/network/manager.py:1261
+#, python-format
+msgid "Released IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1265
+#, python-format
+msgid "IP %s released that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1268
+#, python-format
+msgid "IP %s released that was not leased"
+msgstr ""
+
+#: cinder/network/manager.py:1331
+msgid "cidr already in use"
+msgstr ""
+
+#: cinder/network/manager.py:1334
+#, python-format
+msgid "requested cidr (%(cidr)s) conflicts with existing supernet (%(super)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1345
+#, python-format
+msgid ""
+"requested cidr (%(cidr)s) conflicts with existing smaller cidr "
+"(%(smaller)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1404
+msgid "Network already exists!"
+msgstr ""
+
+#: cinder/network/manager.py:1423
+#, python-format
+msgid "Network must be disassociated from project %s before delete"
+msgstr ""
+
+#: cinder/network/manager.py:1832
+msgid ""
+"The sum between the number of networks and the vlan start cannot be "
+"greater than 4094"
+msgstr ""
+
+#: cinder/network/manager.py:1839
+#, python-format
+msgid ""
+"The network range is not big enough to fit %(num_networks)s. Network size"
+" is %(network_size)s"
+msgstr ""
+
+#: cinder/network/minidns.py:65
+msgid "This driver only supports type 'a'"
+msgstr ""
+
+#: cinder/network/quantum/client.py:154
+msgid "Tenant ID not set"
+msgstr ""
+
+#: cinder/network/quantum/client.py:180
+#, python-format
+msgid "Quantum Client Request: %(method)s %(action)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:196
+#, python-format
+msgid "Quantum entity not found: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:206
+#, python-format
+msgid "Server %(status_code)s error: %(data)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:210
+#, python-format
+msgid "Unable to connect to server. Got error: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:228
+#, python-format
+msgid "unable to deserialize object of type = '%s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:162
+msgid "QuantumManager does not use 'multi_host' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:166
+msgid "QuantumManager requires that only one network is created per call"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:176
+msgid "QuantumManager does not use 'vlan_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:182
+msgid "QuantumManager does not use 'vpn_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:186
+msgid "QuantumManager does not use 'bridge' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:190
+msgid "QuantumManager does not use 'bridge_interface' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:195
+msgid "QuantumManager requires a valid (.1) gateway address."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:204
+#, python-format
+msgid ""
+"Unable to find existing quantum network for tenant '%(q_tenant_id)s' with"
+" net-id '%(quantum_net_id)s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:301
+#, python-format
+msgid "network allocations for instance %s"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:588
+#, python-format
+msgid ""
+"port deallocation failed for instance: |%(instance_id)s|, port_id: "
+"|%(port_id)s|"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:606
+#, python-format
+msgid ""
+"ipam deallocation failed for instance: |%(instance_id)s|, vif_uuid: "
+"|%(vif_uuid)s|"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:96
+#, python-format
+msgid "Server returned error: %s"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:98
+msgid "Connection error contacting melange service, retrying"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:108
+#, python-format
+msgid ""
+"allocate IP on network |%(network_id)s| belonging to "
+"|%(network_tenant_id)s| to this vif |%(vif_id)s| with mac "
+"|%(mac_address)s| belonging to |%(project_id)s| "
+msgstr ""
+
+#: cinder/network/quantum/melange_ipam_lib.py:133
+msgid "get_project_and_global_net_ids must be called with a non-null project_id"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:75
+msgid "Error creating network entry"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:90
+#, python-format
+msgid "No network with net_id = %s"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:221
+#, python-format
+msgid "No fixed IPs to deallocate for vif %s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:99
+#, python-format
+msgid "Connecting interface %(interface_id)s to net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:113
+#, python-format
+msgid "Deleting port %(port_id)s on net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/notifier/api.py:115
+#, python-format
+msgid "%s not in valid priorities"
+msgstr ""
+
+#: cinder/notifier/api.py:130
+#, python-format
+msgid ""
+"Problem '%(e)s' attempting to send to notification system. "
+"Payload=%(payload)s"
+msgstr ""
+
+#: cinder/notifier/list_notifier.py:65
+#, python-format
+msgid "Problem '%(e)s' attempting to send to notification driver %(driver)s."
+msgstr ""
+
+#: cinder/notifier/rabbit_notifier.py:46
+#, python-format
+msgid "Could not send notification to %(topic)s. Payload=%(message)s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:146
+#, python-format
+msgid "Returning exception %s to caller"
+msgstr ""
+
+#: cinder/rpc/amqp.py:188
+#, python-format
+msgid "unpacked context: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:231
+#, python-format
+msgid "received %s"
+msgstr "natanggap %s"
+
+#: cinder/rpc/amqp.py:236
+#, python-format
+msgid "no method for message: %s"
+msgstr "walang paraan para sa mensahe: %s"
+
+#: cinder/rpc/amqp.py:237
+#, python-format
+msgid "No method for message: %s"
+msgstr "Walang paraan para sa mensahe: %s"
+
+#: cinder/rpc/amqp.py:321
+#, python-format
+msgid "Making asynchronous call on %s ..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:324
+#, python-format
+msgid "MSG_ID is %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:346
+#, python-format
+msgid "Making asynchronous cast on %s..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:354
+msgid "Making asynchronous fanout cast..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:379
+#, python-format
+msgid "Sending notification on %s..."
+msgstr ""
+
+#: cinder/rpc/common.py:54
+#, python-format
+msgid ""
+"Remote error: %(exc_type)s %(value)s\n"
+"%(traceback)s."
+msgstr ""
+
+#: cinder/rpc/common.py:71
+msgid "Timeout while waiting on RPC response."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:111
+msgid "Failed to process message... skipping it."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:407
+#, python-format
+msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:430
+#, python-format
+msgid "Connected to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:466
+#, python-format
+msgid ""
+"Unable to connect to AMQP server on %(hostname)s:%(port)d after "
+"%(max_retries)d tries: %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:482
+#, python-format
+msgid ""
+"AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying "
+"again in %(sleep_time)d seconds."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:533 cinder/rpc/impl_qpid.py:385
+#, python-format
+msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:551 cinder/rpc/impl_qpid.py:400
+#, python-format
+msgid "Timed out waiting for RPC response: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:555 cinder/rpc/impl_qpid.py:404
+#, python-format
+msgid "Failed to consume message from queue: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:589 cinder/rpc/impl_qpid.py:434
+#, python-format
+msgid "Failed to publish message to topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:341
+#, python-format
+msgid "Unable to connect to AMQP server: %s "
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:346
+#, python-format
+msgid "Connected to AMQP server on %s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:354
+msgid "Re-established AMQP queues"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:412
+msgid "Error processing message.  Skipping it."
+msgstr ""
+
+#: cinder/scheduler/chance.py:47 cinder/scheduler/simple.py:91
+#: cinder/scheduler/simple.py:143
+msgid "Is the appropriate service running?"
+msgstr ""
+
+#: cinder/scheduler/chance.py:52
+msgid "Could not find another compute"
+msgstr ""
+
+#: cinder/scheduler/driver.py:63
+#, python-format
+msgid "Casted '%(method)s' to volume '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:80
+#, python-format
+msgid "Casted '%(method)s' to compute '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:89
+#, python-format
+msgid "Casted '%(method)s' to network '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:107
+#, python-format
+msgid "Casted '%(method)s' to %(topic)s '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:181
+msgid "Must implement a fallback schedule"
+msgstr ""
+
+#: cinder/scheduler/driver.py:185
+msgid "Driver must implement schedule_prep_resize"
+msgstr ""
+
+#: cinder/scheduler/driver.py:190
+msgid "Driver must implement schedule_run_instance"
+msgstr ""
+
+#: cinder/scheduler/driver.py:325
+msgid "Block migration can not be used with shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:330
+msgid "Live migration can not be used without shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:367 cinder/scheduler/driver.py:457
+#, python-format
+msgid "host %(dest)s is not compatible with original host %(src)s."
+msgstr ""
+
+#: cinder/scheduler/driver.py:416
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"memory(host:%(avail)s <= instance:%(mem_inst)s)"
+msgstr ""
+
+#: cinder/scheduler/driver.py:472
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"disk(host:%(available)s <= instance:%(necessary)s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:51
+#, python-format
+msgid "No host selection for %s defined."
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:64
+#, python-format
+msgid "Attempting to build %(num_instances)d instance(s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:157
+msgid "Scheduler only understands Compute nodes (for now)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:199
+#, python-format
+msgid "Filtered %(hosts)s"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:209
+#, python-format
+msgid "Weighted %(weighted_host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:144
+#, python-format
+msgid "Host filter fails for ignored host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:151
+#, python-format
+msgid "Host filter fails for non-forced host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:157
+#, python-format
+msgid "Host filter function %(func)s failed for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:163
+#, python-format
+msgid "Host filter passes for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:272
+#, python-format
+msgid "Received %(service_name)s service update from %(host)s."
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:313
+msgid "host_manager only implemented for 'compute'"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:323
+#, python-format
+msgid "No service for compute ID %s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:85
+#, python-format
+msgid ""
+"Driver Method %(driver_method_name)s missing: %(e)s. Reverting to "
+"schedule()"
+msgstr ""
+
+#: cinder/scheduler/manager.py:150
+#, python-format
+msgid "Failed to schedule_%(method)s: %(ex)s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:159
+#, python-format
+msgid "Setting instance %(instance_uuid)s to %(state)s state."
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:66
+#, python-format
+msgid "Could not stat scheduler options file %(filename)s: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:75
+#, python-format
+msgid "Could not decode scheduler options: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/simple.py:87
+msgid "Not enough allocatable CPU cores remaining"
+msgstr ""
+
+#: cinder/scheduler/simple.py:137
+msgid "Not enough allocatable volume gigabytes remaining"
+msgstr ""
+
+#: cinder/scheduler/filters/core_filter.py:45
+msgid "VCPUs not set; assuming CPU collection broken"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:72
+#, python-format
+msgid "Faking execution of cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:80
+#, python-format
+msgid "Faked command matched %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:96
+#, python-format
+msgid "Faked command raised an exception %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:101
+#, python-format
+msgid "Reply to faked command is stdout='%(stdout)s' stderr='%(stderr)s'"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:784
+msgid "Please extend mock libvirt module to support flags"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:790
+msgid "Please extend fake libvirt module to support this auth method"
+msgstr ""
+
+#: cinder/tests/test_compute.py:365 cinder/tests/test_compute.py:1419
+#, python-format
+msgid "Running instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:371
+#, python-format
+msgid "After terminating instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:589
+msgid "Internal error"
+msgstr ""
+
+#: cinder/tests/test_compute.py:1430
+#, python-format
+msgid "After force-killing instances: %s"
+msgstr ""
+
+#: cinder/tests/test_misc.py:92
+#, python-format
+msgid ""
+"The following migrations are missing a downgrade:\n"
+"\t%s"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:169
+msgid "id"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:170
+msgid "IPv4"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:171
+msgid "IPv6"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:172
+msgid "start address"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:173
+msgid "DNS1"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:174
+msgid "DNS2"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:175
+msgid "VlanID"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:176
+msgid "project"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:177
+msgid "uuid"
+msgstr ""
+
+#: cinder/tests/test_volume.py:216
+#, python-format
+msgid "Target %s allocated"
+msgstr ""
+
+#: cinder/tests/test_volume.py:468
+#, python-format
+msgid "Cannot confirm exported volume id:%s."
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:58
+#, python-format
+msgid "Given data: %s"
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:59
+#, python-format
+msgid "Result data: %s"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:626
+#, python-format
+msgid "Creating files in %s to simulate guest agent"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:637
+#, python-format
+msgid "Removing simulated guest agent files in %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/test_servers.py:2144
+#, python-format
+msgid "Quota exceeded: code=%(code)s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:57
+#, python-format
+msgid "_create: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:66
+#, python-format
+msgid "_delete: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:75
+#, python-format
+msgid "_get: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:85
+#, python-format
+msgid "_get_all: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:125
+#, python-format
+msgid "test_snapshot_create: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:134
+#, python-format
+msgid "test_snapshot_create: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:156
+#, python-format
+msgid "test_snapshot_create_force: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:165
+#, python-format
+msgid "test_snapshot_create_force: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:205
+#, python-format
+msgid "test_snapshot_show: resp=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:231
+#, python-format
+msgid "test_snapshot_detail: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/integrated/test_login.py:31
+#, python-format
+msgid "flavor: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:38
+#, python-format
+msgid ""
+"%(message)s\n"
+"Status Code: %(_status)s\n"
+"Body: %(_body)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:47
+msgid "Authentication error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:55
+msgid "Authorization error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:63
+msgid "Item not found"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:105
+#, python-format
+msgid "Doing %(method)s on %(relative_url)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:107
+#, python-format
+msgid "Body: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:125
+#, python-format
+msgid "%(auth_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:151
+#, python-format
+msgid "%(relative_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:161
+msgid "Unexpected status code"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:168
+#, python-format
+msgid "Decoding JSON: %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:133
+#, python-format
+msgid "Nested received %(queue)s, %(value)s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:142
+#, python-format
+msgid "Nested return %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:160
+msgid "RPC backend does not support timeouts"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:227 cinder/tests/rpc/common.py:233
+#, python-format
+msgid "Received %s"
+msgstr ""
+
+#: cinder/virt/connection.py:85
+msgid "Failed to open connection to the hypervisor"
+msgstr ""
+
+#: cinder/virt/fake.py:270 cinder/virt/xenapi_conn.py:396
+#: cinder/virt/baremetal/proxy.py:716 cinder/virt/libvirt/connection.py:2045
+#, python-format
+msgid "Compute_service record created for %s "
+msgstr ""
+
+#: cinder/virt/fake.py:273 cinder/virt/xenapi_conn.py:399
+#: cinder/virt/baremetal/proxy.py:720 cinder/virt/libvirt/connection.py:2048
+#, python-format
+msgid "Compute_service record updated for %s "
+msgstr ""
+
+#: cinder/virt/firewall.py:130
+#, python-format
+msgid "Attempted to unfilter instance %s which is not filtered"
+msgstr ""
+
+#: cinder/virt/firewall.py:137
+#, python-format
+msgid "Filters added to instance %s"
+msgstr ""
+
+#: cinder/virt/firewall.py:139
+msgid "Provider Firewall Rules refreshed"
+msgstr ""
+
+#: cinder/virt/firewall.py:291
+#, python-format
+msgid "Adding security group rule: %r"
+msgstr ""
+
+#: cinder/virt/firewall.py:403 cinder/virt/xenapi/firewall.py:87
+#, python-format
+msgid "Adding provider rule: %s"
+msgstr ""
+
+#: cinder/virt/images.py:86
+msgid "'qemu-img info' parsing failed."
+msgstr ""
+
+#: cinder/virt/images.py:92
+#, python-format
+msgid "fmt=%(fmt)s backed by: %(backing_file)s"
+msgstr ""
+
+#: cinder/virt/images.py:104
+#, python-format
+msgid "Converted to raw, but format is now %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:105
+msgid ""
+"Must specify vmwareapi_host_ip,vmwareapi_host_username and "
+"vmwareapi_host_password to useconnection_type=vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:276
+#, python-format
+msgid "In vmwareapi:_create_session, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:359
+#, python-format
+msgid "In vmwareapi:_call_method, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:398
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: success"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:404
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: error %(error_info)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:409
+#, python-format
+msgid "In vmwareapi:_poll_task, Got this error %s"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:140
+msgid ""
+"Must specify xenapi_connection_url, xenapi_connection_username "
+"(optionally), and xenapi_connection_password to use "
+"connection_type=xenapi"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:329 cinder/virt/libvirt/connection.py:472
+msgid "Could not determine iscsi initiator name"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:460
+msgid "Host startup on XenServer is not supported."
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:489
+msgid "Unable to log in to XenAPI (is the Dom0 disk full?)"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:527
+msgid "Host is member of a pool, but DB says otherwise"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:599 cinder/virt/xenapi_conn.py:612
+#, python-format
+msgid "Got exception: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:93
+msgid "No domains exist."
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:95
+#, python-format
+msgid "============= initial domains =========== : %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:99
+msgid "Building domain: to be removed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:103
+msgid "Not running domain: remove"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:111
+msgid "domain running on an unknown node: discarded"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:127
+#, python-format
+msgid "No such domain (%s)"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:134
+#, python-format
+msgid "Failed power down Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:143
+msgid "deactivate -> activate fails"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:153
+msgid "destroy_domain: no such domain"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:154
+#, python-format
+msgid "No such domain %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:161
+#, python-format
+msgid "Domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:163
+#, python-format
+msgid "Nodes: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:166
+#, python-format
+msgid "After storing domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:169
+msgid "deactivation/removing domain failed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:176
+msgid "===== Domain is being created ====="
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:179
+msgid "Same domain name already exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:181
+msgid "create_domain: before get_idle_node"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:198
+#, python-format
+msgid "Created new domain: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:213
+#, python-format
+msgid "Failed to boot Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:222
+msgid "No such domain exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:226
+#, python-format
+msgid "change_domain_state: to new state %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:233
+#, python-format
+msgid "Stored fake domains to the file: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:244
+msgid "domain does not exist"
+msgstr ""
+
+#: cinder/virt/baremetal/nodes.py:42
+#, python-format
+msgid "Unknown baremetal driver %(d)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:148
+#, python-format
+msgid "Error encountered when destroying instance '%(name)s': %(ex)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:162
+#, python-format
+msgid "instance %(instance_name)s: deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:189
+#, python-format
+msgid "instance %s: rebooted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:192
+msgid "_wait_for_reboot failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:222
+#, python-format
+msgid "instance %s: rescued"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:225
+msgid "_wait_for_rescue failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:242
+msgid "<============= spawn of baremetal =============>"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:255
+#, python-format
+msgid "instance %s: is building"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:260
+msgid "Key is injected but instance is not running yet"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:265
+#, python-format
+msgid "instance %s: booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:268
+#, python-format
+msgid "~~~~~~ current state = %s ~~~~~~"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:269
+#, python-format
+msgid "instance %s spawned successfully"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:272
+#, python-format
+msgid "instance %s:not booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:274
+msgid "Bremetal assignment is overcommitted."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:354
+#, python-format
+msgid "instance %s: Creating image"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:473
+#, python-format
+msgid "instance %(inst_name)s: injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:484
+#, python-format
+msgid ""
+"instance %(inst_name)s: ignoring error injecting data into image "
+"%(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:529
+#, python-format
+msgid "instance %s: starting toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:531
+#, python-format
+msgid "instance %s: finished toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:574 cinder/virt/libvirt/connection.py:1815
+msgid ""
+"Cannot get the number of cpu, because this function is not implemented "
+"for this platform. This error can be safely ignored for now."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:714
+#, python-format
+msgid "#### RLK: cpu_arch = %s "
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:746
+msgid "Updating!"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:773 cinder/virt/libvirt/connection.py:2609
+#: cinder/virt/xenapi/host.py:129
+msgid "Updating host stats"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:185
+msgid "free_node...."
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:216
+#, python-format
+msgid "deactivate_node is called for node_id = %(id)s node_ip = %(ip)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:221
+msgid "status of node is set to 0"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:232
+msgid "rootfs is already removed"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:264
+msgid "Before ping to the bare-metal node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:275
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is ready"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:279
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is not ready, out_msg=%(out_msg)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:292
+msgid "Noting to do for tilera nodes: vmlinux is in CF"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:316
+msgid "activate_node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:330
+msgid "Node is unknown error state."
+msgstr ""
+
+#: cinder/virt/disk/api.py:165
+msgid "no capable image handler configured"
+msgstr ""
+
+#: cinder/virt/disk/api.py:178
+#, python-format
+msgid "unknown disk image handler: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:189
+msgid "image already mounted"
+msgstr ""
+
+#: cinder/virt/disk/api.py:276 cinder/virt/disk/guestfs.py:64
+#: cinder/virt/disk/guestfs.py:78 cinder/virt/disk/mount.py:100
+#, python-format
+msgid "Failed to mount filesystem: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:291
+#, python-format
+msgid "Failed to remove container: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:441
+#, python-format
+msgid "User %(username)s not found in password file."
+msgstr ""
+
+#: cinder/virt/disk/api.py:457
+#, python-format
+msgid "User %(username)s not found in shadow file."
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:39
+#, python-format
+msgid "unsupported partition: %s"
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:77
+msgid "unknown guestmount error"
+msgstr ""
+
+#: cinder/virt/disk/loop.py:30
+#, python-format
+msgid "Could not attach image to loopback: %s"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:76
+msgid "no partitions found"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:77
+#, python-format
+msgid "Failed to map partitions: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:58
+msgid "nbd unavailable: module not loaded"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:63
+msgid "No free nbd devices"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:81
+#, python-format
+msgid "qemu-nbd error: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:93
+#, python-format
+msgid "nbd device %s did not show up"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:265
+#, python-format
+msgid "Connecting to libvirt: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:286
+msgid "Connection to libvirt broke"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:388
+#, python-format
+msgid "Error from libvirt during destroy. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:400
+#, python-format
+msgid ""
+"Error from libvirt during saved instance removal. Code=%(errcode)s "
+"Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:411
+#, python-format
+msgid "Error from libvirt during undefine. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:423
+msgid "Instance destroyed successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:435
+#, python-format
+msgid "Error from libvirt during unfilter. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:461
+#, python-format
+msgid "Deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:554
+msgid "attaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:567
+msgid "detaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:692
+msgid "Instance soft rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:696
+msgid "Failed to soft reboot instance."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:725
+msgid "Instance shutdown successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:761 cinder/virt/libvirt/connection.py:905
+msgid "During reboot, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:766
+msgid "Instance rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:867 cinder/virt/xenapi/vmops.py:1358
+#, python-format
+msgid ""
+"Found %(migration_count)d unconfirmed migrations older than "
+"%(confirm_window)d seconds"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:871
+#, python-format
+msgid "Automatically confirming migration %d"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:896
+msgid "Instance is running"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:910
+msgid "Instance spawned successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:926
+#, python-format
+msgid "data: %(data)r, fpath: %(fpath)r"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:978
+msgid "Guest does not have a console available"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1020
+#, python-format
+msgid "Path '%(path)s' supports direct I/O"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1024
+#, python-format
+msgid "Path '%(path)s' does not support direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1028 cinder/virt/libvirt/connection.py:1032
+#, python-format
+msgid "Error on '%(path)s' while checking direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1153
+msgid "Creating image"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1339
+#, python-format
+msgid "Injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1349
+#, python-format
+msgid "Ignoring error injecting data into image %(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1381
+#, python-format
+msgid "block_device_list %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1658
+msgid "Starting toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1662
+msgid "Finished toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1679
+#, python-format
+msgid ""
+"Error from libvirt while looking up %(instance_name)s: [Error Code "
+"%(error_code)s] %(ex)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1920
+msgid "libvirt version is too old (does not support getVersion)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1942
+#, python-format
+msgid "'<cpu>' must be 1, but %d\n"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1969
+#, python-format
+msgid "topology (%(topology)s) must have %(ks)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2067
+#, python-format
+msgid ""
+"Instance launched has CPU info:\n"
+"%s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2079
+#, python-format
+msgid ""
+"CPU doesn't have compatibility.\n"
+"\n"
+"%(ret)s\n"
+"\n"
+"Refer to %(u)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2136
+#, python-format
+msgid "Timeout migrating for %s. nwfilter not found."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2352
+#, python-format
+msgid "skipping %(path)s since it looks like volume"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2407
+#, python-format
+msgid "Getting disk size of %(i_name)s: %(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2458
+#, python-format
+msgid "Instance %s: Starting migrate_disk_and_power_off"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2513
+msgid "During wait running, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2518
+msgid "Instance running successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2525
+#, python-format
+msgid "Instance %s: Starting finish_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2565
+#, python-format
+msgid "Instance %s: Starting finish_revert_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:42
+msgid ""
+"Libvirt module could not be loaded. NWFilterFirewall will not work "
+"correctly."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:93
+msgid "Called setup_basic_filtering in nwfilter"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:101
+msgid "Ensuring static filters"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:171
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:217
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) for%(name)s is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:233
+msgid "iptables firewall: Setup Basic Filtering"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:252
+msgid "Attempted to unfilter instance which is not filtered"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:170
+#, python-format
+msgid "%s is a valid instance name"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:173
+#, python-format
+msgid "%s has a disk file"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:175
+#, python-format
+msgid "Instance %(instance)s is backed by %(backing)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:186
+#, python-format
+msgid ""
+"Instance %(instance)s is using a backing file %(backing)s which does not "
+"appear in the image service"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:237
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification failed"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:247
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification skipped, no hash stored"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:266
+#, python-format
+msgid "Cannot remove %(base_file)s, it does not exist"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:278
+#, python-format
+msgid "Base file too young to remove: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:281
+#, python-format
+msgid "Removing base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:288
+#, python-format
+msgid "Failed to remove %(base_file)s, error was %(error)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:299
+#, python-format
+msgid "%(id)s (%(base_file)s): checking"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:318
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): in use: on this node %(local)d local, %(remote)d "
+"on other nodes"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:330
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): warning -- an absent base file is in use! "
+"instances: %(instance_list)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:338
+#, python-format
+msgid "%(id)s (%(base_file)s): in use on (%(remote)d on other nodes)"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:348
+#, python-format
+msgid "%(id)s (%(base_file)s): image is not in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:354
+#, python-format
+msgid "%(id)s (%(base_file)s): image is in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:377
+#, python-format
+msgid "Skipping verification, no base directory at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:381
+msgid "Verify base images"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:388
+#, python-format
+msgid "Image id %(id)s yields fingerprint %(fingerprint)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:406
+#, python-format
+msgid "Unknown base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:411
+#, python-format
+msgid "Active base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:414
+#, python-format
+msgid "Corrupt base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:418
+#, python-format
+msgid "Removable base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:426
+msgid "Verification complete"
+msgstr ""
+
+#: cinder/virt/libvirt/utils.py:264
+msgid "Unable to find an open port"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:90
+#, python-format
+msgid "Ensuring vlan %(vlan)s and bridge %(bridge)s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:99
+#, python-format
+msgid "Ensuring bridge %s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:165 cinder/virt/libvirt/vif.py:220
+#, python-format
+msgid "Failed while unplugging vif of instance '%s'"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:163
+#, python-format
+msgid "iSCSI device not found at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:166
+#, python-format
+msgid ""
+"ISCSI volume not yet found at: %(mount_device)s. Will rescan & retry.  "
+"Try number: %(tries)s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:178
+#, python-format
+msgid "Found iSCSI node %(mount_device)s (after %(tries)s rescans)"
+msgstr ""
+
+#: cinder/virt/vmwareapi/error_util.py:93
+#, python-format
+msgid "Error(s) %s occurred in the call to RetrieveProperties"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:44 cinder/virt/xenapi/fake.py:77
+#, python-format
+msgid "%(text)s: _db_content => %(content)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:131
+#, python-format
+msgid "Property %(attr)s not set for the managed object %(objName)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:437
+msgid "There is no VM registered"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:439 cinder/virt/vmwareapi/fake.py:609
+#, python-format
+msgid "Virtual Machine with ref %s is not there"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:502
+#, python-format
+msgid "Logging out a session that is invalid or already logged out: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:517
+msgid "Session is faulty"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:520
+msgid "Session Invalid"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:606
+msgid " No Virtual Machine has been registered yet"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:99
+#, python-format
+msgid "Glance image %s is in killed state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:107
+#, python-format
+msgid "Glance image %(image_id)s is in unknown state - %(state)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:128
+msgid ""
+"ESX SOAP server returned an empty port group for the host system in its "
+"response"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:155
+#, python-format
+msgid "Creating Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:169
+#, python-format
+msgid "Created Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/read_write_util.py:150
+#, python-format
+msgid "Exception during HTTP connection close in VMWareHTTpWrite. Exception is %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:84
+msgid "Unable to import suds."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:90
+msgid "Must specify vmwareapi_wsdl_loc"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:145
+#, python-format
+msgid "No such SOAP method '%s' provided by VI SDK"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:150
+#, python-format
+msgid "httplib error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:157
+#, python-format
+msgid "Socket error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:162
+#, python-format
+msgid "Type error in  %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:166
+#, python-format
+msgid "Exception in %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:66
+msgid "Getting list of instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:82
+#, python-format
+msgid "Got total of %s instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:126
+msgid "Couldn't get a local Datastore reference"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:196
+#, python-format
+msgid "Creating VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:205
+#, python-format
+msgid "Created VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:234
+#, python-format
+msgid ""
+"Creating Virtual Disk of size  %(vmdk_file_size_in_kb)s KB and adapter "
+"type  %(adapter_type)s on the ESX host local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:251
+#, python-format
+msgid ""
+"Created Virtual Disk of size %(vmdk_file_size_in_kb)s KB on the ESX host "
+"local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:260
+#, python-format
+msgid ""
+"Deleting the file %(flat_uploaded_vmdk_path)s on the ESX host localstore "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:272
+#, python-format
+msgid ""
+"Deleted the file %(flat_uploaded_vmdk_path)s on the ESX host local store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:283
+#, python-format
+msgid ""
+"Downloading image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:298
+#, python-format
+msgid ""
+"Downloaded image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:315
+#, python-format
+msgid "Reconfiguring VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:322
+#, python-format
+msgid "Reconfigured VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:329
+#, python-format
+msgid "Powering on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:335
+#, python-format
+msgid "Powered on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:381
+#, python-format
+msgid "Creating Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:391
+#, python-format
+msgid "Created Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:434
+#, python-format
+msgid "Copying disk data before snapshot of the VM  instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:447
+#, python-format
+msgid "Copied disk data before snapshot of the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:456
+#, python-format
+msgid "Uploading image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:469
+#, python-format
+msgid "Uploaded image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:479
+#, python-format
+msgid "Deleting temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:488
+#, python-format
+msgid "Deleted temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:520
+msgid "instance is not powered on"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:527
+#, python-format
+msgid "Rebooting guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:530
+#, python-format
+msgid "Rebooted guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:532
+#, python-format
+msgid "Doing hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:536
+#, python-format
+msgid "Did hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:548
+#, python-format
+msgid "instance - %s not present"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:567
+#, python-format
+msgid "Powering off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:572
+#, python-format
+msgid "Powered off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:576
+#, python-format
+msgid "Unregistering the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:579
+#, python-format
+msgid "Unregistered the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:581
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while un-registering the "
+"VM: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:592
+#, python-format
+msgid "Deleting contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:602
+#, python-format
+msgid "Deleted contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:607
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while deleting the VM "
+"contents from the disk: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:615
+msgid "pause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:619
+msgid "unpause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:633
+#, python-format
+msgid "Suspending the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:637
+#, python-format
+msgid "Suspended the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:640
+msgid "instance is powered off and can not be suspended."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:643
+#, python-format
+msgid "VM %s was already in suspended state. So returning without doing anything"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:656
+#, python-format
+msgid "Resuming the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:661
+#, python-format
+msgid "Resumed the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:663
+msgid "instance is not in a suspended state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:699
+msgid "get_diagnostics not implemented for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:757
+#, python-format
+msgid ""
+"Reconfiguring VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:765
+#, python-format
+msgid ""
+"Reconfigured VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:802
+#, python-format
+msgid "Creating directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:806
+#, python-format
+msgid "Created directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:89
+#, python-format
+msgid "Downloading image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:103
+#, python-format
+msgid "Downloaded image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:108
+#, python-format
+msgid "Uploading image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:129
+#, python-format
+msgid "Uploaded image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:139
+#, python-format
+msgid "Getting image size for the image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:143
+#, python-format
+msgid "Got image size of %(size)s for the image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:553 cinder/virt/xenapi/fake.py:652
+#: cinder/virt/xenapi/fake.py:670 cinder/virt/xenapi/fake.py:732
+msgid "Raising NotImplemented"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:555
+#, python-format
+msgid "xenapi.fake does not have an implementation for %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:589
+#, python-format
+msgid "Calling %(localname)s %(impl)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:594
+#, python-format
+msgid "Calling getter %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:654
+#, python-format
+msgid ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:67
+#, python-format
+msgid ""
+"Instance %(name)s running on %(host)s could not be found in the database:"
+" assuming it is a worker VM and skipping migration to a new host"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:137
+#, python-format
+msgid "Unable to get SR for this host: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:169
+msgid "Unable to get updated status"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:172
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:37
+#, python-format
+msgid "Found non-unique network for name_label %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:55
+#, python-format
+msgid "Found non-unique network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:58
+#, python-format
+msgid "Found no network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:111
+#, python-format
+msgid "Unable to eject %(host)s from the pool; pool not empty"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:126
+#, python-format
+msgid "Unable to eject %(host)s from the pool; No master found"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:143
+#, python-format
+msgid "Pool-Join failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:146
+#, python-format
+msgid "Unable to join %(host)s in the pool"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:162
+#, python-format
+msgid "Pool-eject failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:174
+#, python-format
+msgid "Unable to set up pool: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:185
+#, python-format
+msgid "Pool-set_name_label failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:103
+#, python-format
+msgid "Found no PIF for device %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:122
+#, python-format
+msgid ""
+"PIF %(pif_rec['uuid'])s for network %(bridge)s has VLAN id %(pif_vlan)d. "
+"Expected %(vlan_num)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:218
+msgid "Created VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:245
+#, python-format
+msgid "VBD not found in instance %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:262
+#, python-format
+msgid "VBD %s already detached"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:265
+#, python-format
+msgid "VBD %(vbd_ref)s detach rejected, attempt %(num_attempt)d/%(max_attempts)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:270
+#, python-format
+msgid "Unable to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:275
+#, python-format
+msgid "Reached maximum number of retries trying to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:286
+#, python-format
+msgid "Unable to destroy VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:305
+#, python-format
+msgid "Creating %(vbd_type)s-type VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:308
+#, python-format
+msgid "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:319
+#, python-format
+msgid "Unable to destroy VDI %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:336
+#, python-format
+msgid ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:345
+#, python-format
+msgid "Copied VDI %(vdi_ref)s from VDI %(vdi_to_copy_ref)s on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:353
+#, python-format
+msgid "Cloned VDI %(vdi_ref)s from VDI %(vdi_to_clone_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:372
+#, python-format
+msgid "No primary VDI found for %(vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:379
+#, python-format
+msgid "Snapshotting with label '%(label)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:392
+#, python-format
+msgid "Created snapshot %(template_vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:431
+#, python-format
+msgid "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:583
+#, python-format
+msgid "Creating blank HD of size %(req_size)d gigs"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:634
+#, python-format
+msgid ""
+"Fast cloning is only supported on default local SR of type ext. SR on "
+"this system was found to be of type %(sr_type)s. Ignoring the cow flag."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:724
+#, python-format
+msgid ""
+"download_vhd %(image)s attempt %(attempt_num)d/%(max_attempts)d from "
+"%(glance_host)s:%(glance_port)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:734
+#, python-format
+msgid "download_vhd failed: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:750
+#, python-format
+msgid "Asking xapi to fetch vhd image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:760
+#, python-format
+msgid ""
+"xapi 'download_vhd' returned VDI of type '%(vdi_type)s' with UUID "
+"'%(vdi_uuid)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:789
+#, python-format
+msgid "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:805
+#, python-format
+msgid "image_size_bytes=%(size_bytes)d, allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:809
+#, python-format
+msgid ""
+"Image size %(size_bytes)d exceeded instance_type allowed size "
+"%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:831
+#, python-format
+msgid "Fetching image %(image)s, type %(image_type_str)"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:844
+#, python-format
+msgid "Size for image %(image)s: %(virtual_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:853
+#, python-format
+msgid ""
+"Kernel/Ramdisk image is too large: %(vdi_size)d bytes, max %(max_size)d "
+"bytes"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:870
+#, python-format
+msgid "Copying VDI %s to /boot/guest on dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:884
+#, python-format
+msgid "Kernel/Ramdisk VDI %s destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:895
+msgid "Failed to fetch glance image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:934
+#, python-format
+msgid "Detected %(image_type_str)s format for image %(image_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:955
+#, python-format
+msgid "Looking up vdi %s for PV kernel"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:973
+#, python-format
+msgid "Unknown image format %(disk_image_type)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1016
+#, python-format
+msgid "VDI %s is still available"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1059
+#, python-format
+msgid "(VM_UTILS) xenserver vm state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1061
+#, python-format
+msgid "(VM_UTILS) xenapi power_state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1088
+#, python-format
+msgid "Unable to parse rrd of %(vm_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1108
+#, python-format
+msgid "Re-scanning SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1136
+#, python-format
+msgid "Flag sr_matching_filter '%s' does not respect formatting convention"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1154
+msgid ""
+"XenAPI is unable to find a Storage Repository to install guest instances "
+"on. Please check your configuration and/or configure the flag "
+"'sr_matching_filter'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1167
+msgid "Cannot find SR of content-type ISO"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1175
+#, python-format
+msgid "ISO: looking at SR %(sr_rec)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1177
+msgid "ISO: not iso content"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1180
+msgid "ISO: iso content_type, no 'i18n-key' key"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1183
+msgid "ISO: iso content_type, i18n-key value not 'local-storage-iso'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1187
+msgid "ISO: SR MATCHing our criteria"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1189
+msgid "ISO: ISO, looking to see if it is host local"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1192
+#, python-format
+msgid "ISO: PBD %(pbd_ref)s disappeared"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1195
+#, python-format
+msgid "ISO: PBD matching, want %(pbd_rec)s, have %(host)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1198
+msgid "ISO: SR with local PBD"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1220
+#, python-format
+msgid ""
+"Unable to obtain RRD XML for VM %(vm_uuid)s with server details: "
+"%(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1236
+#, python-format
+msgid "Unable to obtain RRD XML updates with server details: %(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1290
+#, python-format
+msgid "Invalid statistics data from Xenserver: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1343
+#, python-format
+msgid "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1417
+#, python-format
+msgid ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1427
+#, python-format
+msgid "VHD coalesce attempts exceeded (%(max_attempts)d), giving up..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1462
+#, python-format
+msgid "Timeout waiting for device %s to be created"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1473
+#, python-format
+msgid "Plugging VBD %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1476
+#, python-format
+msgid "Plugging VBD %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1478
+#, python-format
+msgid "VBD %(vbd_ref)s plugged as %(orig_dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1481
+#, python-format
+msgid "VBD %(vbd_ref)s plugged into wrong dev, remapping to %(dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1490
+#, python-format
+msgid "Destroying VBD for VDI %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1498
+#, python-format
+msgid "Destroying VBD for VDI %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1511
+#, python-format
+msgid "Running pygrub against %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1518
+#, python-format
+msgid "Found Xen kernel %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1520
+msgid "No Xen kernel found.  Booting HVM."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1533
+msgid "Partitions:"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1539
+#, python-format
+msgid "  %(num)s: %(ptype)s %(size)d sectors"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1565
+#, python-format
+msgid ""
+"Writing partition table %(primary_first)d %(primary_last)d to "
+"%(dev_path)s..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1578
+#, python-format
+msgid "Writing partition table %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1632
+#, python-format
+msgid ""
+"Starting sparse_copy src=%(src_path)s dst=%(dst_path)s "
+"virtual_size=%(virtual_size)d block_size=%(block_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1664
+#, python-format
+msgid ""
+"Finished sparse_copy in %(duration).2f secs, %(compression_pct).2f%% "
+"reduction in size"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1714
+msgid ""
+"XenServer tools installed in this image are capable of network injection."
+"  Networking files will not bemanipulated"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1722
+msgid ""
+"XenServer tools are present in this image but are not capable of network "
+"injection"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1726
+msgid "XenServer tools are not installed in this image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1742
+msgid "Manipulating interface files directly"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1751
+#, python-format
+msgid "Failed to mount filesystem (expected for non-linux instances): %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:131 cinder/virt/xenapi/vmops.py:722
+#, python-format
+msgid "Updating progress to %(progress)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:231
+#, python-format
+msgid "Attempted to power on non-existent instance bad instance id %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:233
+msgid "Starting instance"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:303
+msgid "Removing kernel/ramdisk files from dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:358
+msgid "Failed to spawn, rolling back"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:443
+msgid "Detected ISO image type, creating blank VM for install"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:462
+msgid "Auto configuring disk, attempting to resize partition..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:515
+#, python-format
+msgid "Invalid value for injected_files: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:520
+#, python-format
+msgid "Injecting file path: '%s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:527
+msgid "Setting admin password"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:531
+msgid "Resetting network"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:538
+msgid "Setting VCPU weight"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:544
+msgid "Starting VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:551
+#, python-format
+msgid ""
+"Latest agent build for %(hypervisor)s/%(os)s/%(architecture)s is "
+"%(version)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:554
+#, python-format
+msgid "No agent build found for %(hypervisor)s/%(os)s/%(architecture)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:561
+msgid "Waiting for instance state to become running"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:573
+msgid "Querying agent version"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:576
+#, python-format
+msgid "Instance agent version: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:581
+#, python-format
+msgid "Updating Agent to %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:616
+#, python-format
+msgid "No opaque_ref could be determined for '%s'."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:670
+msgid "Finished snapshot and upload for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:677
+msgid "Starting snapshot for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:686
+#, python-format
+msgid "Unable to Snapshot instance: %(exc)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:702
+msgid "Failed to transfer vhd to new host"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:770
+#, python-format
+msgid "Resizing down VDI %(cow_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:893
+#, python-format
+msgid "Resizing up VDI %(vdi_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:901
+msgid "Resize complete"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:928
+#, python-format
+msgid "Failed to query agent version: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:949
+#, python-format
+msgid "domid changed from %(domid)s to %(newdomid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:962
+#, python-format
+msgid "Failed to update agent: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:983
+#, python-format
+msgid "Failed to exchange keys: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:998
+#, python-format
+msgid "Failed to update password: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1023
+#, python-format
+msgid "Failed to inject file: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1032
+msgid "VM already halted, skipping shutdown..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1036
+msgid "Shutting down VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1054
+msgid "Unable to find VBD for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1097
+msgid "Using RAW or VHD, skipping kernel and ramdisk deletion"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1104
+msgid "instance has a kernel or ramdisk but not both"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1111
+msgid "kernel/ramdisk files removed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1121
+msgid "VM destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1147
+msgid "Destroying VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1169
+msgid "VM is not present, skipping destroy..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1222
+#, python-format
+msgid "Instance is already in Rescue Mode: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1296
+#, python-format
+msgid "Found %(instance_count)d hung reboots older than %(timeout)d seconds"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1300
+msgid "Automatically hard rebooting"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1363
+#, python-format
+msgid "Setting migration %(migration_id)s to error: %(reason)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1374
+#, python-format
+msgid ""
+"Automatically confirming migration %(migration_id)s for instance "
+"%(instance_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1379
+#, python-format
+msgid "Instance %(instance_uuid)s not found"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1383
+msgid "In ERROR state"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1389
+#, python-format
+msgid "In %(task_state)s task_state, not RESIZE_VERIFY"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1396
+#, python-format
+msgid "Error auto-confirming resize: %(e)s. Will retry later."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1418
+msgid "Could not get bandwidth info."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1469
+msgid "Injecting network info to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1483
+msgid "Creating vifs"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1492
+#, python-format
+msgid "Creating VIF for network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1495
+#, python-format
+msgid "Created VIF %(vif_ref)s, network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1520
+msgid "Injecting hostname to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1545
+#, python-format
+msgid ""
+"The agent call to %(method)s returned an invalid response: %(ret)r. "
+"path=%(path)s; args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1566
+#, python-format
+msgid "TIMEOUT: The call to %(method)s timed out. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1570
+#, python-format
+msgid ""
+"NOT IMPLEMENTED: The call to %(method)s is not supported by the agent. "
+"args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1575
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1661
+#, python-format
+msgid "OpenSSL error: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:52
+msgid "creating sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:55 cinder/virt/xenapi/volume_utils.py:83
+#, python-format
+msgid "type is = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:58 cinder/virt/xenapi/volume_utils.py:86
+#, python-format
+msgid "name = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:71
+#, python-format
+msgid "Created %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:76 cinder/virt/xenapi/volume_utils.py:174
+msgid "Unable to create Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:80
+msgid "introducing sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:103 cinder/virt/xenapi/volume_utils.py:170
+#: cinder/virt/xenapi/volumeops.py:156
+#, python-format
+msgid "Introduced %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:106
+msgid "Creating pbd for SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:108
+msgid "Plugging SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:116 cinder/virt/xenapi/volumeops.py:160
+msgid "Unable to introduce Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:127 cinder/virt/xenapi/volumeops.py:50
+msgid "Unable to get SR using uuid"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:129
+#, python-format
+msgid "Forgetting SR %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:137
+msgid "Unable to forget Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:157
+#, python-format
+msgid "Introducing %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:186
+#, python-format
+msgid "Unable to find SR from VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:204
+#, python-format
+msgid "Ignoring exception %(exc)s when getting PBDs for %(sr_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:210
+#, python-format
+msgid "Ignoring exception %(exc)s when unplugging PBD %(pbd)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:234
+#, python-format
+msgid "Unable to introduce VDI on SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:242
+#, python-format
+msgid "Unable to get record of VDI %s on"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:264
+#, python-format
+msgid "Unable to introduce VDI for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:274
+#, python-format
+msgid "Error finding vdis in SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:281
+#, python-format
+msgid "Unable to find vbd for vdi %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:315
+#, python-format
+msgid "Unable to obtain target information %(data)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:341
+#, python-format
+msgid "Mountpoint cannot be translated: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:64
+msgid "Could not find VDI ref"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:69
+#, python-format
+msgid "Creating SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:73
+msgid "Could not create SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:76
+msgid "Could not retrieve SR record"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:81
+#, python-format
+msgid "Introducing SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:85
+msgid "SR found in xapi database. No need to introduce"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:90
+msgid "Could not introduce SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:94
+#, python-format
+msgid "Checking for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:106
+#, python-format
+msgid "SR %s not found in the xapi database"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:112
+msgid "Could not forget SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:121
+#, python-format
+msgid "Attach_volume: %(connection_info)s, %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:178
+#, python-format
+msgid "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:189
+#, python-format
+msgid "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:197
+#, python-format
+msgid "Unable to attach volume to instance %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:200
+#, python-format
+msgid "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:210
+#, python-format
+msgid "Detach_volume: %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:219
+#, python-format
+msgid "Unable to locate volume %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:227
+#, python-format
+msgid "Unable to detach volume %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:232
+#, python-format
+msgid "Unable to destroy vbd %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:239
+#, python-format
+msgid "Error purging SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:241
+#, python-format
+msgid "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:98 cinder/vnc/xvp_proxy.py:103
+#, python-format
+msgid "Error in handshake: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:119
+#, python-format
+msgid "Invalid request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:139
+#, python-format
+msgid "Request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:142
+#, python-format
+msgid "Request made with missing token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:153
+#, python-format
+msgid "Request made with invalid token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:160
+#, python-format
+msgid "Unexpected error: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:180
+#, python-format
+msgid "Starting cinder-xvpvncproxy node (version %s)"
+msgstr ""
+
+#: cinder/volume/api.py:74 cinder/volume/api.py:220
+msgid "status must be available"
+msgstr ""
+
+#: cinder/volume/api.py:85
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to create %(size)sG volume"
+msgstr ""
+
+#: cinder/volume/api.py:137
+msgid "Volume status must be available or error"
+msgstr ""
+
+#: cinder/volume/api.py:142
+#, python-format
+msgid "Volume still has %d dependent snapshots"
+msgstr ""
+
+#: cinder/volume/api.py:223
+msgid "already attached"
+msgstr ""
+
+#: cinder/volume/api.py:230
+msgid "already detached"
+msgstr ""
+
+#: cinder/volume/api.py:292
+msgid "must be available"
+msgstr ""
+
+#: cinder/volume/api.py:325
+msgid "Volume Snapshot status must be available or error"
+msgstr ""
+
+#: cinder/volume/driver.py:96
+#, python-format
+msgid "Recovering from a failed execute.  Try number %s"
+msgstr ""
+
+#: cinder/volume/driver.py:106
+#, python-format
+msgid "volume group %s doesn't exist"
+msgstr ""
+
+#: cinder/volume/driver.py:270
+#, python-format
+msgid "Skipping ensure_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:318
+#, python-format
+msgid "Skipping remove_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:327
+#, python-format
+msgid ""
+"Skipping remove_export. No iscsi_target is presently exported for volume:"
+" %d"
+msgstr ""
+
+#: cinder/volume/driver.py:337
+msgid "ISCSI provider_location not stored, using discovery"
+msgstr ""
+
+#: cinder/volume/driver.py:384
+#, python-format
+msgid "Could not find iSCSI export  for volume %s"
+msgstr ""
+
+#: cinder/volume/driver.py:388
+#, python-format
+msgid "ISCSI Discovery: Found %s"
+msgstr ""
+
+#: cinder/volume/driver.py:466
+#, python-format
+msgid "Cannot confirm exported volume id:%(volume_id)s."
+msgstr ""
+
+#: cinder/volume/driver.py:493
+#, python-format
+msgid "FAKE ISCSI: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:505
+#, python-format
+msgid "rbd has no pool %s"
+msgstr ""
+
+#: cinder/volume/driver.py:579
+#, python-format
+msgid "Sheepdog is not working: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:581
+msgid "Sheepdog is not working"
+msgstr ""
+
+#: cinder/volume/driver.py:680 cinder/volume/driver.py:685
+#, python-format
+msgid "LoggingVolumeDriver: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:96
+#, python-format
+msgid "Re-exporting %s volumes"
+msgstr ""
+
+#: cinder/volume/manager.py:101
+#, python-format
+msgid "volume %s: skipping export"
+msgstr ""
+
+#: cinder/volume/manager.py:107
+#, python-format
+msgid "volume %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:119
+#, python-format
+msgid "volume %(vol_name)s: creating lv of size %(vol_size)sG"
+msgstr ""
+
+#: cinder/volume/manager.py:131
+#, python-format
+msgid "volume %s: creating export"
+msgstr ""
+
+#: cinder/volume/manager.py:144
+#, python-format
+msgid "volume %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:153
+msgid "Volume is still attached"
+msgstr ""
+
+#: cinder/volume/manager.py:155
+msgid "Volume is not local to this node"
+msgstr ""
+
+#: cinder/volume/manager.py:159
+#, python-format
+msgid "volume %s: removing export"
+msgstr ""
+
+#: cinder/volume/manager.py:161
+#, python-format
+msgid "volume %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:164
+#, python-format
+msgid "volume %s: volume is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:176
+#, python-format
+msgid "volume %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:183
+#, python-format
+msgid "snapshot %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:187
+#, python-format
+msgid "snapshot %(snap_name)s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:202
+#, python-format
+msgid "snapshot %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:211
+#, python-format
+msgid "snapshot %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:214
+#, python-format
+msgid "snapshot %s: snapshot is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:226
+#, python-format
+msgid "snapshot %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:310
+msgid "Checking volume capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:314
+#, python-format
+msgid "New capabilities found: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:325
+msgid "Clear capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:329
+#, python-format
+msgid "Notification {%s} received"
+msgstr ""
+
+#: cinder/volume/netapp.py:79
+#, python-format
+msgid "API %(name)sfailed: %(reason)s"
+msgstr ""
+
+#: cinder/volume/netapp.py:109
+#, python-format
+msgid "%s is not set"
+msgstr ""
+
+#: cinder/volume/netapp.py:128
+#, fuzzy
+msgid "Connected to DFM server"
+msgstr "Muling kumonekta sa queue"
+
+#: cinder/volume/netapp.py:159
+#, python-format
+msgid "Job failed: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:240
+msgid "Failed to provision dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:252
+msgid "No LUN was created by the provision job"
+msgstr ""
+
+#: cinder/volume/netapp.py:261 cinder/volume/netapp.py:433
+#, python-format
+msgid "Failed to find LUN ID for volume %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:280
+msgid "Failed to remove and delete dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:603 cinder/volume/netapp.py:657
+#, python-format
+msgid "No LUN ID for volume %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:607 cinder/volume/netapp.py:661
+#, python-format
+msgid "Failed to get LUN details for LUN ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:614
+#, python-format
+msgid "Failed to get host details for host ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:620
+#, python-format
+msgid "Failed to get target portal for filer: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:625
+#, python-format
+msgid "Failed to get target IQN for filer: %s"
+msgstr ""
+
+#: cinder/volume/san.py:113 cinder/volume/san.py:151
+msgid "Specify san_password or san_private_key"
+msgstr ""
+
+#: cinder/volume/san.py:156
+msgid "san_ip must be set"
+msgstr ""
+
+#: cinder/volume/san.py:320
+#, python-format
+msgid "LUID not found for %(zfs_poolname)s. Output=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:452
+#, python-format
+msgid "CLIQ command returned %s"
+msgstr ""
+
+#: cinder/volume/san.py:458
+#, python-format
+msgid "Malformed response to CLIQ command %(verb)s %(cliq_args)s. Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:466
+#, python-format
+msgid "Error running CLIQ command %(verb)s %(cliq_args)s.  Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:496
+#, python-format
+msgid ""
+"Unexpected number of virtual ips for cluster  %(cluster_name)s. "
+"Result=%(_xml)s"
+msgstr ""
+
+#: cinder/volume/san.py:549
+#, python-format
+msgid "Volume info: %(volume_name)s => %(volume_attributes)s"
+msgstr ""
+
+#: cinder/volume/san.py:594
+msgid "local_path not supported"
+msgstr ""
+
+#: cinder/volume/san.py:626
+#, python-format
+msgid "Could not determine project for volume %s, can't export"
+msgstr ""
+
+#: cinder/volume/san.py:696
+#, python-format
+msgid "Payload for SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:713
+#, python-format
+msgid "Call to json.loads() raised an exception: %s"
+msgstr ""
+
+#: cinder/volume/san.py:718
+#, python-format
+msgid "Results of SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:732
+#, python-format
+msgid "Found solidfire account: %s"
+msgstr ""
+
+#: cinder/volume/san.py:746
+#, python-format
+msgid "solidfire account: %s does not exist, create it..."
+msgstr ""
+
+#: cinder/volume/san.py:804
+msgid "Enter SolidFire create_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:846
+msgid "Leaving SolidFire create_volume"
+msgstr ""
+
+#: cinder/volume/san.py:861
+msgid "Enter SolidFire delete_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:880
+#, python-format
+msgid "Deleting volumeID: %s "
+msgstr ""
+
+#: cinder/volume/san.py:888
+msgid "Leaving SolidFire delete_volume"
+msgstr ""
+
+#: cinder/volume/san.py:891
+msgid "Executing SolidFire ensure_export..."
+msgstr ""
+
+#: cinder/volume/san.py:895
+msgid "Executing SolidFire create_export..."
+msgstr ""
+
+#: cinder/volume/volume_types.py:49 cinder/volume/volume_types.py:108
+msgid "name cannot be None"
+msgstr ""
+
+#: cinder/volume/volume_types.py:96
+msgid "id cannot be None"
+msgstr ""
+
+#: cinder/volume/xensm.py:55
+#, python-format
+msgid "SR name = %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:56
+#, python-format
+msgid "Params: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:60
+#, python-format
+msgid "Failed to create sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:62
+msgid "Create failed"
+msgstr ""
+
+#: cinder/volume/xensm.py:64
+#, python-format
+msgid "SR UUID of new SR is: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:71
+msgid "Failed to update db"
+msgstr ""
+
+#: cinder/volume/xensm.py:80
+#, python-format
+msgid "Failed to introduce sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:91
+#, python-format
+msgid "Failed to reach backend %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:100
+msgid "XenSMDriver requires xenapi connection"
+msgstr ""
+
+#: cinder/volume/xensm.py:110
+msgid "Failed to initiate session"
+msgstr ""
+
+#: cinder/volume/xensm.py:142
+#, python-format
+msgid "Volume will be created in backend - %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:154
+msgid "Failed to update volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:157
+msgid "Unable to create volume"
+msgstr ""
+
+#: cinder/volume/xensm.py:171
+msgid "Failed to delete vdi"
+msgstr ""
+
+#: cinder/volume/xensm.py:177
+msgid "Failed to delete volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:210
+msgid "Failed to find volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:221
+msgid "Failed to find backend in db"
+msgstr ""
+
+#: cinder/volume/nexenta/__init__.py:27
+msgid "Nexenta SA returned the error"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:64
+#, python-format
+msgid "Sending JSON data: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:69
+#, python-format
+msgid "Auto switching to HTTPS connection to %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:75
+msgid "No headers in server response"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:76
+msgid "Bad response from server"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:79
+#, python-format
+msgid "Got response: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:96
+#, python-format
+msgid "Volume %s does not exist in Nexenta SA"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:180
+msgid ""
+"Call to local_path should not happen. Verify that use_local_volumes flag "
+"is turned off."
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:202
+#, python-format
+msgid "Ignored target creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:210
+#, python-format
+msgid "Ignored target group creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:219
+#, python-format
+msgid "Ignored target group member addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:227
+#, python-format
+msgid "Ignored LU creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:237
+#, python-format
+msgid "Ignored LUN mapping entry addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:273
+#, python-format
+msgid ""
+"Got error trying to destroy target group %(target_group)s, assuming it is"
+" already gone: %(exc)s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:280
+#, python-format
+msgid ""
+"Got error trying to delete target %(target)s, assuming it is already "
+"gone: %(exc)s"
+msgstr ""
+
+#~ msgid "Unable to locate account %(account_name) on Solidfire device"
+#~ msgstr ""
+
+#~ msgid "Zone %(zone_id)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Cinder access parameters were not specified."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(id)d could not be found."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(name)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Detected more than one volume with name %(vol_name)"
+#~ msgstr ""
+
+#~ msgid "Detected existing vlan with id %(vlan)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab semaphore \"%(lock)s\" "
+#~ "for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab file lock "
+#~ "\"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Parent group id and group id cannot be same"
+#~ msgstr ""
+
+#~ msgid "No body provided"
+#~ msgstr ""
+
+#~ msgid "Create VSA %(display_name)s of type %(vc_type)s"
+#~ msgstr ""
+
+#~ msgid "Delete VSA with id: %s"
+#~ msgstr ""
+
+#~ msgid "Associate address %(ip)s to VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "Disassociate address from VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "%(obj)s with ID %(id)s not found"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(obj)s with ID %(id)s belongs to "
+#~ "VSA %(own_vsa_id)s and not to VSA "
+#~ "%(vsa_id)s."
+#~ msgstr ""
+
+#~ msgid "Index. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Detail. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Create. vsa_id=%(vsa_id)s, body=%(body)s"
+#~ msgstr ""
+
+#~ msgid "Create volume of %(size)s GB from VSA ID %(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Update %(obj)s with id: %(id)s, changes: %(changes)s"
+#~ msgstr ""
+
+#~ msgid "Delete. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Show. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Index instances for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You cannot run"
+#~ " any more instances of this type."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You can only"
+#~ " run %s more instances of this "
+#~ "type."
+#~ msgstr ""
+
+#~ msgid "Going to try to soft delete %s"
+#~ msgstr ""
+
+#~ msgid "No host for instance %s, deleting immediately"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to stop %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to start %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Going to force the deletion of the"
+#~ " vm %(instance_uuid)s, even if it is"
+#~ " deleted"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s did not exist "
+#~ "in the DB, but I will shut "
+#~ "it down anyway using a special "
+#~ "context"
+#~ msgstr ""
+
+#~ msgid "exception terminating the instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "trying to destroy already destroyed instance: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(name)s found in database but"
+#~ " not known by hypervisor. Setting "
+#~ "power state to NOSTATE"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Detected instance  with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Destroying instance with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid "SQL connection failed (%(connstring)s). %(attempts)d attempts left."
+#~ msgstr ""
+
+#~ msgid "Can't downgrade without losing data"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_id)s not found"
+#~ msgstr ""
+
+#~ msgid "Network %s has active ports, cannot delete"
+#~ msgstr ""
+
+#~ msgid "No fixed IPs to deallocate for vif %sid"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "AMQP server on %(fl_host)s:%(fl_port)d is "
+#~ "unreachable: %(e)s. Trying again in "
+#~ "%(fl_intv)d seconds."
+#~ msgstr ""
+
+#~ msgid "Unable to connect to AMQP server after %(tries)d tries. Shutting down."
+#~ msgstr ""
+
+#~ msgid "Failed to fetch message from queue: %s"
+#~ msgstr ""
+
+#~ msgid "Initing the Adapter Consumer for %s"
+#~ msgstr ""
+
+#~ msgid "Created \"%(exchange)s\" fanout exchange with \"%(key)s\" routing key"
+#~ msgstr ""
+
+#~ msgid "Exception while processing consumer"
+#~ msgstr ""
+
+#~ msgid "Creating \"%(exchange)s\" fanout exchange"
+#~ msgstr ""
+
+#~ msgid "response %s"
+#~ msgstr ""
+
+#~ msgid "topic is %s"
+#~ msgstr ""
+
+#~ msgid "message %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Cannot confirm tmpfile at %(ipath)s is"
+#~ " on same shared storage between "
+#~ "%(src)s and %(dest)s."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of memory(host:%(avail)s <= "
+#~ "instance:%(mem_inst)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of disk(host:%(available)s <="
+#~ " instance:%(necessary)s)"
+#~ msgstr ""
+
+#~ msgid "Driver Method %(driver_method)s missing: %(e)s.Reverting to schedule()"
+#~ msgstr ""
+
+#~ msgid "Setting instance %(instance_uuid)s to ERROR state."
+#~ msgstr ""
+
+#~ msgid "_filter_hosts: %(request_spec)s"
+#~ msgstr ""
+
+#~ msgid "Filter hosts for drive type %s"
+#~ msgstr ""
+
+#~ msgid "Host %s has no free capacity. Skip"
+#~ msgstr ""
+
+#~ msgid "Filter hosts: %s"
+#~ msgstr ""
+
+#~ msgid "Must implement host selection mechanism"
+#~ msgstr ""
+
+#~ msgid "Maximum number of hosts selected (%d)"
+#~ msgstr ""
+
+#~ msgid "Selected excessive host %(host)s"
+#~ msgstr ""
+
+#~ msgid "Provision volume %(name)s of size %(size)s GB on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "volume_params %(volume_params)s"
+#~ msgstr ""
+
+#~ msgid "%(i)d: Volume %(name)s"
+#~ msgstr ""
+
+#~ msgid "Attempting to spawn %(num_volumes)d volume(s)"
+#~ msgstr ""
+
+#~ msgid "Error creating volumes"
+#~ msgstr ""
+
+#~ msgid "Non-VSA volume %d"
+#~ msgstr ""
+
+#~ msgid "Spawning volume %(volume_id)s with drive type %(drive_type)s"
+#~ msgstr ""
+
+#~ msgid "Error creating volume"
+#~ msgstr ""
+
+#~ msgid "No capability selected for volume of size %(size)s"
+#~ msgstr ""
+
+#~ msgid "Host %s:"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\tDrive %(qosgrp)-25s: total %(total)2s, "
+#~ "used %(used)2s, free %(free)2s. Available "
+#~ "capacity %(avail)-5s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t LeastUsedHost: Best host: %(best_host)s."
+#~ " (used capacity %(min_used)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t MostAvailCap: Best host: %(best_host)s. "
+#~ "(available %(max_avail)s %(type_str)s)"
+#~ msgstr ""
+
+#~ msgid "(%(nm)s) publish (key: %(routing_key)s) %(message)s"
+#~ msgstr ""
+
+#~ msgid "Publishing to route %s"
+#~ msgstr ""
+
+#~ msgid "Declaring queue %s"
+#~ msgstr ""
+
+#~ msgid "Declaring exchange %s"
+#~ msgstr ""
+
+#~ msgid "Binding %(queue)s to %(exchange)s with key %(routing_key)s"
+#~ msgstr ""
+
+#~ msgid "Getting from %(queue)s: %(message)s"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate wrong VSA name. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate DB error. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: user_data = %s"
+#~ msgstr ""
+
+#~ msgid "_create: param=%s"
+#~ msgstr ""
+
+#~ msgid "Host %s"
+#~ msgstr ""
+
+#~ msgid "Test: provision vol %(name)s on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "\t vol=%(vol)s"
+#~ msgstr ""
+
+#~ msgid "Test: VSA update request: vsa_id=%(vsa_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume create: %s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get request: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume update request: id=%(volume_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: success    %(result)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: %(status)s    %(error_info)s"
+#~ msgstr ""
+
+#~ msgid "Unable to get updated status: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "deactivate_node is called for                "
+#~ "node_id = %(id)s node_ip = %(ip)s"
+#~ msgstr ""
+
+#~ msgid "virsh said: %r"
+#~ msgstr ""
+
+#~ msgid "cool, it's a device"
+#~ msgstr ""
+
+#~ msgid "Unable to read LXC console"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "to xml...\n"
+#~ ":%s "
+#~ msgstr ""
+
+#~ msgid "During wait running, %s disappeared."
+#~ msgstr ""
+
+#~ msgid "Instance %s running successfully."
+#~ msgstr ""
+
+#~ msgid "The nwfilter(%(instance_secgroup_filter_name)s) is not found."
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image verification failed"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): image "
+#~ "verification skipped, no hash stored"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): checking"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in use:"
+#~ " on this node %(local)d local, "
+#~ "%(remote)d on other nodes"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): warning "
+#~ "-- an absent base file is in "
+#~ "use! instances: %(instance_list)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in: on"
+#~ " other nodes (%(remote)d on other "
+#~ "nodes)"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is not in use"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is in use"
+#~ msgstr ""
+
+#~ msgid "Created VM %s..."
+#~ msgstr ""
+
+#~ msgid "Created VM %(instance_name)s as %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Creating a CDROM-specific VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Created a CDROM-specific VBD %(vbd_ref)s"
+#~ "  for VM %(vm_ref)s, VDI %(vdi_ref)s."
+#~ msgstr ""
+
+#~ msgid "No primary VDI found for%(vm_ref)s"
+#~ msgstr ""
+
+#~ msgid "Snapshotting VM %(vm_ref)s with label '%(label)s'..."
+#~ msgstr ""
+
+#~ msgid "Created snapshot %(template_vm_ref)s from VM %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Fetching image %(image)s"
+#~ msgstr ""
+
+#~ msgid "Image Type: %s"
+#~ msgstr ""
+
+#~ msgid "ISO: Found sr possibly containing the ISO image"
+#~ msgstr ""
+
+#~ msgid "Size for image %(image)s:%(virtual_size)d"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to fetch glance image"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s ... "
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s done."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful first time."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug rejected: retrying..."
+#~ msgstr ""
+
+#~ msgid "Not sleeping anymore!"
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful eventually."
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure in VBD.unplug: %s"
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure %s"
+#~ msgstr ""
+
+#~ msgid "Starting instance %s"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn"
+#~ msgstr ""
+
+#~ msgid "Instance %s failed to spawn - performing clean-up"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn - Unable to create VM"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Auto configuring disk for instance "
+#~ "%(instance_uuid)s, attempting to resize "
+#~ "partition..."
+#~ msgstr ""
+
+#~ msgid "Invalid value for injected_files: '%s'"
+#~ msgstr ""
+
+#~ msgid "Starting VM %s..."
+#~ msgstr ""
+
+#~ msgid "Spawning VM %(instance_uuid)s created %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Instance %s: waiting for running"
+#~ msgstr ""
+
+#~ msgid "Instance %s: running"
+#~ msgstr ""
+
+#~ msgid "Resources to remove:%s"
+#~ msgstr ""
+
+#~ msgid "Removing VDI %(vdi_ref)s(uuid:%(vdi_to_remove)s)"
+#~ msgstr ""
+
+#~ msgid "Skipping VDI destroy for %s"
+#~ msgstr ""
+
+#~ msgid "Finished snapshot and upload for VM %s"
+#~ msgstr ""
+
+#~ msgid "Starting snapshot for VM %s"
+#~ msgstr ""
+
+#~ msgid "Unable to Snapshot instance %(instance_uuid)s: %(exc)s"
+#~ msgstr ""
+
+#~ msgid "Updating instance '%(instance_uuid)s' progress to %(progress)d"
+#~ msgstr ""
+
+#~ msgid "Resize instance %s complete"
+#~ msgstr ""
+
+#~ msgid "domid changed from %(olddomid)s to %(newdomid)s"
+#~ msgstr ""
+
+#~ msgid "VM %(instance_uuid)s already halted,skipping shutdown..."
+#~ msgstr ""
+
+#~ msgid "Shutting down VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Destroying VDIs for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s using RAW or "
+#~ "VHD, skipping kernel and ramdisk "
+#~ "deletion"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_uuid)s VM destroyed"
+#~ msgstr ""
+
+#~ msgid "Destroying VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Automatically hard rebooting %d"
+#~ msgstr ""
+
+#~ msgid "Instance for migration %d not found, skipping"
+#~ msgstr ""
+
+#~ msgid "injecting network info to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "creating vif(s) for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "Creating VIF for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr ""
+
+#~ msgid "Created VIF %(vif_ref)s for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr ""
+
+#~ msgid "injecting hostname to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The agent call to %(method)s returned"
+#~ " an invalid response: %(ret)r. VM "
+#~ "id=%(instance_uuid)s; path=%(path)s; args=%(addl_args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "TIMEOUT: The call to %(method)s timed"
+#~ " out. VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "NOT IMPLEMENTED: The call to %(method)s"
+#~ " is not supported by the agent. "
+#~ "VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The call to %(method)s returned an "
+#~ "error: %(e)s. VM id=%(instance_uuid)s; "
+#~ "args=%(args)r"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid "Error destroying VDI"
+#~ msgstr ""
+
+#~ msgid "Volume status must be available"
+#~ msgstr ""
+
+#~ msgid "\tVolume %s is NOT VSA volume"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s creation - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s succeeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s deletion - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s suceeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s local path call - call discover"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s ensure export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s create export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s remove export - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE remove_export for %s failed"
+#~ msgstr ""
+
+#~ msgid "Failed to retrieve QoS info"
+#~ msgstr ""
+
+#~ msgid "invalid drive data"
+#~ msgstr ""
+
+#~ msgid "drive_name not defined"
+#~ msgstr ""
+
+#~ msgid "invalid drive type name %s"
+#~ msgstr ""
+
+#~ msgid "*** Experimental VSA code ***"
+#~ msgstr ""
+
+#~ msgid "Requested number of VCs (%d) is too high. Setting to default"
+#~ msgstr ""
+
+#~ msgid "Creating VSA: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d %(vsa_name)s: Create "
+#~ "volume %(vol_name)s, %(vol_size)d GB, type "
+#~ "%(vol_type_id)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA status to %(status)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA call"
+#~ msgstr ""
+
+#~ msgid "Adding %(add_cnt)s VCs to VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "Deleting %(del_cnt)s VCs from VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Deleting %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Unable to delete volume %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Forced delete. %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate VSA ID %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Delete instance %(name)s"
+#~ msgstr ""
+
+#~ msgid "Create call received for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Failed to find VSA %(vsa_id)d"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Drive %(vol_id)s created. Status %(status)s"
+#~ msgstr ""
+
+#~ msgid "Drive %(vol_name)s (%(vol_disp_name)s) still in creating phase - wait"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Not all volumes "
+#~ "are created (%(cvol_real)d of %(cvol_exp)d)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Drive %(vol_name)s "
+#~ "(%(vol_disp_name)s) is in %(status)s state"
+#~ msgstr ""
+
+#~ msgid "Failed to update attach status for volume %(vol_name)s. %(ex)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Delete all BE volumes"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Start %(vc_count)d instances"
+#~ msgstr ""
+
diff --git a/cinder/locale/tr/LC_MESSAGES/nova.po b/cinder/locale/tr/LC_MESSAGES/nova.po
new file mode 100644
index 000000000..e2212c4ce
--- /dev/null
+++ b/cinder/locale/tr/LC_MESSAGES/nova.po
@@ -0,0 +1,8202 @@
+# Turkish translation for cinder
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the cinder package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version:  cinder\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-04-08 23:04+0000\n"
+"PO-Revision-Date: 2011-12-14 18:10+0000\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: Turkish <tr@li.org>\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: cinder/context.py:59
+#, python-format
+msgid "Arguments dropped when creating context: %s"
+msgstr ""
+
+#: cinder/context.py:90
+#, python-format
+msgid "read_deleted can only be one of 'no', 'yes' or 'only', not %r"
+msgstr ""
+
+#: cinder/crypto.py:48
+msgid "Filename of root CA"
+msgstr ""
+
+#: cinder/crypto.py:51
+msgid "Filename of private key"
+msgstr ""
+
+#: cinder/crypto.py:54
+msgid "Filename of root Certificate Revocation List"
+msgstr ""
+
+#: cinder/crypto.py:57
+msgid "Where we keep our keys"
+msgstr ""
+
+#: cinder/crypto.py:60
+msgid "Where we keep our root CA"
+msgstr ""
+
+#: cinder/crypto.py:63
+msgid "Should we use a CA for each project?"
+msgstr ""
+
+#: cinder/crypto.py:67
+#, python-format
+msgid "Subject for certificate for users, %s for project, user, timestamp"
+msgstr ""
+
+#: cinder/crypto.py:72
+#, python-format
+msgid "Subject for certificate for projects, %s for project, timestamp"
+msgstr ""
+
+#: cinder/crypto.py:292
+#, python-format
+msgid "Flags path: %s"
+msgstr ""
+
+#: cinder/exception.py:56
+msgid "Unexpected error while running command."
+msgstr ""
+
+#: cinder/exception.py:59
+#, python-format
+msgid ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+msgstr ""
+
+#: cinder/exception.py:94
+msgid "DB exception wrapped."
+msgstr ""
+
+#: cinder/exception.py:155
+msgid "An unknown exception occurred."
+msgstr ""
+
+#: cinder/exception.py:178
+msgid "Failed to decrypt text"
+msgstr ""
+
+#: cinder/exception.py:182
+msgid "Failed to paginate through images from image service"
+msgstr ""
+
+#: cinder/exception.py:186
+msgid "Virtual Interface creation failed"
+msgstr ""
+
+#: cinder/exception.py:190
+msgid "5 attempts to create virtual interfacewith unique mac address failed"
+msgstr ""
+
+#: cinder/exception.py:195
+msgid "Connection to glance failed"
+msgstr ""
+
+#: cinder/exception.py:199
+msgid "Connection to melange failed"
+msgstr ""
+
+#: cinder/exception.py:203
+msgid "Not authorized."
+msgstr ""
+
+#: cinder/exception.py:208
+msgid "User does not have admin privileges"
+msgstr ""
+
+#: cinder/exception.py:212
+#, python-format
+msgid "Policy doesn't allow %(action)s to be performed."
+msgstr ""
+
+#: cinder/exception.py:216
+#, python-format
+msgid "Not authorized for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:220
+msgid "Unacceptable parameters."
+msgstr ""
+
+#: cinder/exception.py:225
+msgid "Invalid snapshot"
+msgstr ""
+
+#: cinder/exception.py:229
+#, python-format
+msgid "Volume %(volume_id)s is not attached to anything"
+msgstr ""
+
+#: cinder/exception.py:233 cinder/api/openstack/compute/contrib/keypairs.py:113
+msgid "Keypair data is invalid"
+msgstr ""
+
+#: cinder/exception.py:237
+msgid "Failed to load data into json format"
+msgstr ""
+
+#: cinder/exception.py:241
+msgid "The request is invalid."
+msgstr ""
+
+#: cinder/exception.py:245
+#, python-format
+msgid "Invalid signature %(signature)s for user %(user)s."
+msgstr ""
+
+#: cinder/exception.py:249
+msgid "Invalid input received"
+msgstr ""
+
+#: cinder/exception.py:253
+#, python-format
+msgid "Invalid instance type %(instance_type)s."
+msgstr ""
+
+#: cinder/exception.py:257
+msgid "Invalid volume type"
+msgstr ""
+
+#: cinder/exception.py:261
+msgid "Invalid volume"
+msgstr ""
+
+#: cinder/exception.py:265
+#, python-format
+msgid "Invalid port range %(from_port)s:%(to_port)s. %(msg)s"
+msgstr ""
+
+#: cinder/exception.py:269
+#, python-format
+msgid "Invalid IP protocol %(protocol)s."
+msgstr ""
+
+#: cinder/exception.py:273
+#, python-format
+msgid "Invalid content type %(content_type)s."
+msgstr ""
+
+#: cinder/exception.py:277
+#, python-format
+msgid "Invalid cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:281
+msgid "Invalid reuse of an RPC connection."
+msgstr ""
+
+#: cinder/exception.py:285
+msgid "Invalid Parameter: Unicode is not supported by the current database."
+msgstr ""
+
+#: cinder/exception.py:292
+#, python-format
+msgid "%(err)s"
+msgstr ""
+
+#: cinder/exception.py:296
+#, python-format
+msgid ""
+"Cannot perform action '%(action)s' on aggregate %(aggregate_id)s. Reason:"
+" %(reason)s."
+msgstr ""
+
+#: cinder/exception.py:301
+#, python-format
+msgid "Group not valid. Reason: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:305
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot %(method)s while"
+" the instance is in this state."
+msgstr ""
+
+#: cinder/exception.py:310
+#, python-format
+msgid "Instance %(instance_id)s is not running."
+msgstr ""
+
+#: cinder/exception.py:314
+#, python-format
+msgid "Instance %(instance_id)s is not suspended."
+msgstr ""
+
+#: cinder/exception.py:318
+#, python-format
+msgid "Instance %(instance_id)s is not in rescue mode"
+msgstr ""
+
+#: cinder/exception.py:322
+msgid "Failed to suspend instance"
+msgstr ""
+
+#: cinder/exception.py:326
+msgid "Failed to resume server"
+msgstr ""
+
+#: cinder/exception.py:330
+msgid "Failed to reboot instance"
+msgstr ""
+
+#: cinder/exception.py:334
+msgid "Failed to terminate instance"
+msgstr ""
+
+#: cinder/exception.py:338
+msgid "Service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:342
+msgid "Volume service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:346
+msgid "Compute service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:350
+#, python-format
+msgid "Unable to migrate instance (%(instance_id)s) to current host (%(host)s)."
+msgstr ""
+
+#: cinder/exception.py:355
+msgid "Destination compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:359
+msgid "Original compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:363
+msgid "The supplied hypervisor type of is invalid."
+msgstr ""
+
+#: cinder/exception.py:367
+msgid "The instance requires a newer hypervisor version than has been provided."
+msgstr ""
+
+#: cinder/exception.py:372
+#, python-format
+msgid ""
+"The supplied disk path (%(path)s) already exists, it is expected not to "
+"exist."
+msgstr ""
+
+#: cinder/exception.py:377
+#, python-format
+msgid "The supplied device path (%(path)s) is invalid."
+msgstr ""
+
+#: cinder/exception.py:381
+#, python-format
+msgid "The supplied device (%(device)s) is busy."
+msgstr ""
+
+#: cinder/exception.py:385
+msgid "Unacceptable CPU info"
+msgstr ""
+
+#: cinder/exception.py:389
+#, python-format
+msgid "%(address)s is not a valid IP v4/6 address."
+msgstr ""
+
+#: cinder/exception.py:393
+#, python-format
+msgid ""
+"VLAN tag is not appropriate for the port group %(bridge)s. Expected VLAN "
+"tag is %(tag)s, but the one associated with the port group is %(pgroup)s."
+msgstr ""
+
+#: cinder/exception.py:399
+#, python-format
+msgid ""
+"vSwitch which contains the port group %(bridge)s is not associated with "
+"the desired physical adapter. Expected vSwitch is %(expected)s, but the "
+"one associated is %(actual)s."
+msgstr ""
+
+#: cinder/exception.py:406
+#, python-format
+msgid "Disk format %(disk_format)s is not acceptable"
+msgstr ""
+
+#: cinder/exception.py:410
+#, python-format
+msgid "Image %(image_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:414
+#, python-format
+msgid "Instance %(instance_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:418
+#, python-format
+msgid "Ec2 id %(ec2_id)s is unacceptable."
+msgstr ""
+
+#: cinder/exception.py:422
+msgid "Resource could not be found."
+msgstr ""
+
+#: cinder/exception.py:427
+#, python-format
+msgid "Required flag %(flag)s not set."
+msgstr ""
+
+#: cinder/exception.py:431
+#, python-format
+msgid "Volume %(volume_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:435
+#, python-format
+msgid "Unable to locate account %(account_name)s on Solidfire device"
+msgstr ""
+
+#: cinder/exception.py:440
+#, python-format
+msgid "Volume not found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:444
+#, python-format
+msgid "Volume %(volume_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:449
+msgid "Zero volume types found."
+msgstr ""
+
+#: cinder/exception.py:453
+#, python-format
+msgid "Volume type %(volume_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:457
+#, python-format
+msgid "Volume type with name %(volume_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:462
+#, python-format
+msgid ""
+"Volume Type %(volume_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:467
+#, python-format
+msgid "Snapshot %(snapshot_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:471
+#, python-format
+msgid "deleting volume %(volume_name)s that has snapshot"
+msgstr ""
+
+#: cinder/exception.py:475
+#, python-format
+msgid "deleting snapshot %(snapshot_name)s that has dependent volumes"
+msgstr ""
+
+#: cinder/exception.py:480
+#, python-format
+msgid "No target id found for volume %(volume_id)s."
+msgstr ""
+
+#: cinder/exception.py:484
+#, python-format
+msgid "No disk at %(location)s"
+msgstr ""
+
+#: cinder/exception.py:488
+#, python-format
+msgid "Could not find a handler for %(driver_type)s volume."
+msgstr ""
+
+#: cinder/exception.py:492
+#, python-format
+msgid "Invalid image href %(image_href)s."
+msgstr ""
+
+#: cinder/exception.py:496
+msgid ""
+"Some images have been stored via hrefs. This version of the api does not "
+"support displaying image hrefs."
+msgstr ""
+
+#: cinder/exception.py:501
+#, python-format
+msgid "Image %(image_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:505
+#, python-format
+msgid "Kernel not found for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:509
+#, python-format
+msgid "User %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:513
+#, python-format
+msgid "Project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:517
+#, python-format
+msgid "User %(user_id)s is not a member of project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:521
+#, python-format
+msgid "Role %(role_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:525
+msgid "Cannot find SR to read/write VDI."
+msgstr ""
+
+#: cinder/exception.py:529
+#, python-format
+msgid "%(req)s is required to create a network."
+msgstr ""
+
+#: cinder/exception.py:533
+#, python-format
+msgid "Network %(network_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:537
+#, python-format
+msgid "Network could not be found for bridge %(bridge)s"
+msgstr ""
+
+#: cinder/exception.py:541
+#, python-format
+msgid "Network could not be found for uuid %(uuid)s"
+msgstr ""
+
+#: cinder/exception.py:545
+#, python-format
+msgid "Network could not be found with cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:549
+#, python-format
+msgid "Network could not be found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:553
+msgid "No networks defined."
+msgstr ""
+
+#: cinder/exception.py:557
+#, python-format
+msgid ""
+"Either Network uuid %(network_uuid)s is not present or is not assigned to"
+" the project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:562
+#, python-format
+msgid "Host is not set to the network (%(network_id)s)."
+msgstr ""
+
+#: cinder/exception.py:566
+#, python-format
+msgid "Network %(network)s has active ports, cannot delete."
+msgstr ""
+
+#: cinder/exception.py:570
+msgid "Could not find the datastore reference(s) which the VM uses."
+msgstr ""
+
+#: cinder/exception.py:574
+#, python-format
+msgid "No fixed IP associated with id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:578
+#, python-format
+msgid "Fixed ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:582
+#, python-format
+msgid "Instance %(instance_id)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:586
+#, python-format
+msgid "Network host %(host)s has zero fixed ips in network %(network_id)s."
+msgstr ""
+
+#: cinder/exception.py:591
+#, python-format
+msgid "Instance %(instance_id)s doesn't have fixed ip '%(ip)s'."
+msgstr ""
+
+#: cinder/exception.py:595
+#, python-format
+msgid "Host %(host)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:599
+#, python-format
+msgid ""
+"Fixed IP address (%(address)s) does not exist in network "
+"(%(network_uuid)s)."
+msgstr ""
+
+#: cinder/exception.py:604
+#, python-format
+msgid "Fixed IP address %(address)s is already in use."
+msgstr ""
+
+#: cinder/exception.py:608
+#, python-format
+msgid "Fixed IP address %(address)s is invalid."
+msgstr ""
+
+#: cinder/exception.py:612
+msgid "Zero fixed ips available."
+msgstr ""
+
+#: cinder/exception.py:616
+msgid "Zero fixed ips could be found."
+msgstr ""
+
+#: cinder/exception.py:620
+#, python-format
+msgid "Floating ip not found for id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:624
+#, python-format
+msgid "The DNS entry %(name)s already exists in domain %(domain)s."
+msgstr ""
+
+#: cinder/exception.py:628
+#, python-format
+msgid "Floating ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:632
+#, python-format
+msgid "Floating ip not found for host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:636
+msgid "Zero floating ips available."
+msgstr ""
+
+#: cinder/exception.py:640
+#, python-format
+msgid "Floating ip %(address)s is associated."
+msgstr ""
+
+#: cinder/exception.py:644
+#, python-format
+msgid "Floating ip %(address)s is not associated."
+msgstr ""
+
+#: cinder/exception.py:648
+msgid "Zero floating ips exist."
+msgstr ""
+
+#: cinder/exception.py:652
+#, python-format
+msgid "Interface %(interface)s not found."
+msgstr ""
+
+#: cinder/exception.py:656
+#, python-format
+msgid "Keypair %(name)s not found for user %(user_id)s"
+msgstr ""
+
+#: cinder/exception.py:660
+#, python-format
+msgid "Certificate %(certificate_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:664
+#, python-format
+msgid "Service %(service_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:668
+#, python-format
+msgid "Host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:672
+#, python-format
+msgid "Compute host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:676
+#, python-format
+msgid "Could not find binary %(binary)s on host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:680
+#, python-format
+msgid "Auth token %(token)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:684
+#, python-format
+msgid "Access Key %(access_key)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:688
+msgid "Quota could not be found"
+msgstr ""
+
+#: cinder/exception.py:692
+#, python-format
+msgid "Quota for project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:696
+#, python-format
+msgid "Quota class %(class_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:700
+#, python-format
+msgid "Security group %(security_group_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:704
+#, python-format
+msgid "Security group %(security_group_id)s not found for project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:709
+#, python-format
+msgid "Security group with rule %(rule_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:713
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is already associated with the "
+"instance %(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:718
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is not associated with the instance "
+"%(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:723
+#, python-format
+msgid "Migration %(migration_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:727
+#, python-format
+msgid "Migration not found for instance %(instance_id)s with status %(status)s."
+msgstr ""
+
+#: cinder/exception.py:732
+#, python-format
+msgid "Console pool %(pool_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:736
+#, python-format
+msgid ""
+"Console pool of type %(console_type)s for compute host %(compute_host)s "
+"on proxy host %(host)s not found."
+msgstr ""
+
+#: cinder/exception.py:742
+#, python-format
+msgid "Console %(console_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:746
+#, python-format
+msgid "Console for instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:750
+#, python-format
+msgid ""
+"Console for instance %(instance_id)s in pool %(pool_id)s could not be "
+"found."
+msgstr ""
+
+#: cinder/exception.py:755
+#, python-format
+msgid "Invalid console type %(console_type)s "
+msgstr ""
+
+#: cinder/exception.py:759
+msgid "Zero instance types found."
+msgstr ""
+
+#: cinder/exception.py:763
+#, python-format
+msgid "Instance type %(instance_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:767
+#, python-format
+msgid "Instance type with name %(instance_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:772
+#, python-format
+msgid "Flavor %(flavor_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:776
+#, python-format
+msgid "Cell %(cell_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:780
+#, python-format
+msgid "Scheduler Host Filter %(filter_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:784
+#, python-format
+msgid "Scheduler cost function %(cost_fn_str)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:789
+#, python-format
+msgid "Scheduler weight flag not found: %(flag_name)s"
+msgstr ""
+
+#: cinder/exception.py:793
+#, python-format
+msgid "Instance %(instance_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:798
+#, python-format
+msgid ""
+"Instance Type %(instance_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:803
+msgid "LDAP object could not be found"
+msgstr ""
+
+#: cinder/exception.py:807
+#, python-format
+msgid "LDAP user %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:811
+#, python-format
+msgid "LDAP group %(group_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:815
+#, python-format
+msgid "LDAP user %(user_id)s is not a member of group %(group_id)s."
+msgstr ""
+
+#: cinder/exception.py:819
+#, python-format
+msgid "File %(file_path)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:823
+msgid "Zero files could be found."
+msgstr ""
+
+#: cinder/exception.py:827
+#, python-format
+msgid "Virtual switch associated with the network adapter %(adapter)s not found."
+msgstr ""
+
+#: cinder/exception.py:832
+#, python-format
+msgid "Network adapter %(adapter)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:836
+#, python-format
+msgid "Class %(class_name)s could not be found: %(exception)s"
+msgstr ""
+
+#: cinder/exception.py:840
+msgid "Action not allowed."
+msgstr ""
+
+#: cinder/exception.py:844
+#, python-format
+msgid "Unable to use global role %(role_id)s"
+msgstr ""
+
+#: cinder/exception.py:848
+msgid "Rotation is not allowed for snapshots"
+msgstr ""
+
+#: cinder/exception.py:852
+msgid "Rotation param is required for backup image_type"
+msgstr ""
+
+#: cinder/exception.py:861
+#, python-format
+msgid "Key pair %(key_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:865
+#, python-format
+msgid "User %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:869
+#, python-format
+msgid "LDAP user %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:873
+#, python-format
+msgid "LDAP group %(group)s already exists."
+msgstr ""
+
+#: cinder/exception.py:877
+#, python-format
+msgid "User %(uid)s is already a member of the group %(group_dn)s"
+msgstr ""
+
+#: cinder/exception.py:882
+#, python-format
+msgid "Project %(project)s already exists."
+msgstr ""
+
+#: cinder/exception.py:886
+#, python-format
+msgid "Instance %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:890
+#, python-format
+msgid "Instance Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:894
+#, python-format
+msgid "Volume Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:898
+#, python-format
+msgid "%(path)s is on shared storage: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:902
+msgid "Migration error"
+msgstr ""
+
+#: cinder/exception.py:906
+#, python-format
+msgid "Malformed message body: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:910
+#, python-format
+msgid "Could not find config at %(path)s"
+msgstr ""
+
+#: cinder/exception.py:914
+#, python-format
+msgid "Could not load paste app '%(name)s' from %(path)s"
+msgstr ""
+
+#: cinder/exception.py:918
+msgid "When resizing, instances must change size!"
+msgstr ""
+
+#: cinder/exception.py:922
+msgid "Image is larger than instance type allows"
+msgstr ""
+
+#: cinder/exception.py:926
+msgid "1 or more Zones could not complete the request"
+msgstr ""
+
+#: cinder/exception.py:930
+msgid "Instance type's memory is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:934
+msgid "Instance type's disk is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:938
+#, python-format
+msgid "Insufficient free memory on compute node to start %(uuid)s."
+msgstr ""
+
+#: cinder/exception.py:942
+msgid "Could not fetch bandwidth/cpu/disk metrics for this host."
+msgstr ""
+
+#: cinder/exception.py:946
+#, python-format
+msgid "No valid host was found. %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:950
+#, python-format
+msgid "Host %(host)s is not up or doesn't exist."
+msgstr ""
+
+#: cinder/exception.py:954
+msgid "Quota exceeded"
+msgstr ""
+
+#: cinder/exception.py:958
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: action '%(action)s' caused an error: "
+"%(reason)s."
+msgstr ""
+
+#: cinder/exception.py:963
+#, python-format
+msgid "Aggregate %(aggregate_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:967
+#, python-format
+msgid "Aggregate %(aggregate_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:971
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:975
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:980
+#, python-format
+msgid "Host %(host)s already member of another aggregate."
+msgstr ""
+
+#: cinder/exception.py:984
+#, python-format
+msgid "Aggregate %(aggregate_id)s already has host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:988
+#, python-format
+msgid "Detected more than one volume with name %(vol_name)s"
+msgstr ""
+
+#: cinder/exception.py:992
+#, python-format
+msgid "Cannot create volume_type with name %(name)s and specs %(extra_specs)s"
+msgstr ""
+
+#: cinder/exception.py:997
+msgid "Unable to create instance type"
+msgstr ""
+
+#: cinder/exception.py:1001
+msgid "Bad response from SolidFire API"
+msgstr ""
+
+#: cinder/exception.py:1005
+#, python-format
+msgid "Error in SolidFire API response: status=%(status)s"
+msgstr ""
+
+#: cinder/exception.py:1009
+#, python-format
+msgid "Error in SolidFire API response: data=%(data)s"
+msgstr ""
+
+#: cinder/exception.py:1013
+#, python-format
+msgid "Detected existing vlan with id %(vlan)d"
+msgstr ""
+
+#: cinder/exception.py:1017
+#, python-format
+msgid "Instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:1021
+#, python-format
+msgid "Invalid id: %(val)s (expecting \"i-...\")."
+msgstr ""
+
+#: cinder/exception.py:1025
+#, python-format
+msgid "Could not fetch image %(image)s"
+msgstr ""
+
+#: cinder/log.py:315
+#, python-format
+msgid "syslog facility must be one of: %s"
+msgstr ""
+
+#: cinder/manager.py:146
+#, python-format
+msgid "Skipping %(full_task_name)s, %(ticks_to_skip)s ticks left until next run"
+msgstr ""
+
+#: cinder/manager.py:152
+#, python-format
+msgid "Running periodic task %(full_task_name)s"
+msgstr ""
+
+#: cinder/manager.py:159
+#, python-format
+msgid "Error during %(full_task_name)s: %(e)s"
+msgstr ""
+
+#: cinder/manager.py:203
+msgid "Notifying Schedulers of capabilities ..."
+msgstr ""
+
+#: cinder/policy.py:30
+msgid "JSON file representing policy"
+msgstr ""
+
+#: cinder/policy.py:33
+msgid "Rule checked when requested rule is not found"
+msgstr ""
+
+#: cinder/service.py:137
+msgid "SIGTERM received"
+msgstr ""
+
+#: cinder/service.py:177
+#, python-format
+msgid "Starting %(topic)s node (version %(vcs_string)s)"
+msgstr ""
+
+#: cinder/service.py:195
+#, python-format
+msgid "Creating Consumer connection for Service %s"
+msgstr ""
+
+#: cinder/service.py:282
+msgid "Service killed that has no database entry"
+msgstr ""
+
+#: cinder/service.py:319
+msgid "The service database object disappeared, Recreating it."
+msgstr ""
+
+#: cinder/service.py:334
+msgid "Recovered model server connection!"
+msgstr ""
+
+#: cinder/service.py:340
+msgid "model server went away"
+msgstr ""
+
+#: cinder/service.py:433
+msgid "Full set of FLAGS:"
+msgstr ""
+
+#: cinder/service.py:440
+#, python-format
+msgid "%(flag)s : FLAG SET "
+msgstr ""
+
+#: cinder/utils.py:79
+#, python-format
+msgid "Inner Exception: %s"
+msgstr ""
+
+#: cinder/utils.py:165
+#, python-format
+msgid "Fetching %s"
+msgstr ""
+
+#: cinder/utils.py:210
+#, python-format
+msgid "Got unknown keyword args to utils.execute: %r"
+msgstr ""
+
+#: cinder/utils.py:220
+#, python-format
+msgid "Running cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/utils.py:236 cinder/utils.py:315
+#, python-format
+msgid "Result was %s"
+msgstr ""
+
+#: cinder/utils.py:249
+#, python-format
+msgid "%r failed. Retrying."
+msgstr ""
+
+#: cinder/utils.py:291
+#, python-format
+msgid "Running cmd (SSH): %s"
+msgstr ""
+
+#: cinder/utils.py:293
+msgid "Environment not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:297
+msgid "process_input not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:352
+#, python-format
+msgid "debug in callback: %s"
+msgstr ""
+
+#: cinder/utils.py:534
+#, python-format
+msgid "Link Local address is not found.:%s"
+msgstr ""
+
+#: cinder/utils.py:537
+#, python-format
+msgid "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+msgstr ""
+
+#: cinder/utils.py:648
+#, python-format
+msgid "Invalid backend: %s"
+msgstr ""
+
+#: cinder/utils.py:659
+#, python-format
+msgid "backend %s"
+msgstr ""
+
+#: cinder/utils.py:709
+msgid "in looping call"
+msgstr ""
+
+#: cinder/utils.py:927
+#, python-format
+msgid "Attempting to grab semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:931
+#, python-format
+msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:935
+#, python-format
+msgid "Attempting to grab file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:942
+#, python-format
+msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:1001
+#, python-format
+msgid "Found sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1008
+#, python-format
+msgid "Cleaned sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1023
+#, python-format
+msgid "Found lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1028
+#, python-format
+msgid "Cleaned lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1138
+#, python-format
+msgid "Expected object of type: %s"
+msgstr ""
+
+#: cinder/utils.py:1169
+#, python-format
+msgid "Invalid server_string: %s"
+msgstr ""
+
+#: cinder/utils.py:1298
+#, python-format
+msgid "timefunc: '%(name)s' took %(total_time).2f secs"
+msgstr ""
+
+#: cinder/utils.py:1330
+msgid "Original exception being dropped"
+msgstr ""
+
+#: cinder/utils.py:1461
+#, python-format
+msgid "Class %(fullname)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1463
+#, python-format
+msgid "Class %(fullname)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1495
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1497
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1681
+#, python-format
+msgid "Could not remove tmpdir: %s"
+msgstr ""
+
+#: cinder/wsgi.py:97
+#, python-format
+msgid "Started %(name)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:108
+msgid "Stopping WSGI server."
+msgstr ""
+
+#: cinder/wsgi.py:111
+msgid "Stopping raw TCP server."
+msgstr ""
+
+#: cinder/wsgi.py:117
+#, python-format
+msgid "Starting TCP server %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:133
+msgid "WSGI server has stopped."
+msgstr ""
+
+#: cinder/wsgi.py:211
+msgid "You must implement __call__"
+msgstr ""
+
+#: cinder/api/direct.py:218
+msgid "not available"
+msgstr ""
+
+#: cinder/api/direct.py:299
+#, python-format
+msgid "Returned non-serializeable type: %s"
+msgstr ""
+
+#: cinder/api/sizelimit.py:51
+msgid "Request is too large."
+msgstr ""
+
+#: cinder/api/validator.py:142
+#, python-format
+msgid "%(key)s with value %(value)s failed validator  %(validator)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:73
+#, python-format
+msgid "%(code)s: %(message)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:95
+#, python-format
+msgid "FaultWrapper: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:170
+msgid "Too many failed authentications."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:180
+#, python-format
+msgid ""
+"Access key %(access_key)s has had %(failures)d failed authentications and"
+" will be locked out for %(lock_mins)d minutes."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:267
+msgid "Signature not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:271
+msgid "Access key not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:306 cinder/api/ec2/__init__.py:319
+msgid "Failure communicating with keystone"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:388
+#, python-format
+msgid "Authentication Failure: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:404
+#, python-format
+msgid "Authenticated Request For %(uname)s:%(pname)s)"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:435
+#, python-format
+msgid "action: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:437
+#, python-format
+msgid "arg: %(key)s\t\tval: %(value)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:512
+#, python-format
+msgid "Unauthorized request for controller=%(controller)s and action=%(action)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:584
+#, python-format
+msgid "InstanceNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:590
+#, python-format
+msgid "VolumeNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:596
+#, python-format
+msgid "SnapshotNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:602
+#, python-format
+msgid "NotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:605
+#, python-format
+msgid "EC2APIError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:613
+#, python-format
+msgid "KeyPairExists raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:617
+#, python-format
+msgid "InvalidParameterValue raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:621
+#, python-format
+msgid "InvalidPortRange raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:625
+#, python-format
+msgid "NotAuthorized raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:629
+#, python-format
+msgid "InvalidRequest raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:633
+#, python-format
+msgid "QuotaError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:637
+#, python-format
+msgid "Invalid id: bogus (expecting \"i-...\"): %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:646
+#, python-format
+msgid "Unexpected error raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:647
+#, python-format
+msgid "Environment: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:649 cinder/api/metadata/handler.py:248
+msgid "An unknown error has occurred. Please try your request again."
+msgstr ""
+
+#: cinder/api/ec2/apirequest.py:64
+#, python-format
+msgid "Unsupported API request: controller = %(controller)s, action = %(action)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:336
+#, python-format
+msgid "Create snapshot of volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:372
+#, python-format
+msgid ""
+"Value (%s) for KeyName is invalid. Content limited to Alphanumeric "
+"character, spaces, dashes, and underscore."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:378
+#, python-format
+msgid "Value (%s) for Keyname is invalid. Length exceeds maximum of 255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:382
+#, python-format
+msgid "Create key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:391
+#, python-format
+msgid "Import key %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:409
+#, python-format
+msgid "Delete key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:551
+msgid "Invalid CIDR"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:639 cinder/api/ec2/cloud.py:693
+#: cinder/api/ec2/cloud.py:800
+msgid "Not enough parameters, need group_name or group_id"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:654
+#: cinder/api/openstack/compute/contrib/security_groups.py:517
+#, python-format
+msgid "Revoke security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:666 cinder/api/ec2/cloud.py:719
+#, python-format
+msgid "%s Not enough parameters to build a valid rule"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:684 cinder/api/ec2/cloud.py:744
+msgid "No rule for the specified parameters."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:708
+#: cinder/api/openstack/compute/contrib/security_groups.py:354
+#, python-format
+msgid "Authorize security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:725
+#, python-format
+msgid "%s - This rule already exists in group"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:769
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Content limited to "
+"Alphanumeric characters, spaces, dashes, and underscores."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:776
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Length exceeds maximum of "
+"255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:780
+#: cinder/api/openstack/compute/contrib/security_groups.py:292
+#, python-format
+msgid "Create Security Group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:783
+#, python-format
+msgid "group %s already exists"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:815
+#: cinder/api/openstack/compute/contrib/security_groups.py:245
+#, python-format
+msgid "Delete security group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:823 cinder/compute/manager.py:1630
+#, python-format
+msgid "Get console output for instance %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:894
+#, python-format
+msgid "Create volume from snapshot %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:898 cinder/api/openstack/compute/contrib/volumes.py:186
+#: cinder/api/openstack/volume/volumes.py:222
+#, python-format
+msgid "Create volume of %s GB"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:921
+msgid "Delete Failed"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:931
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(instance_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:939
+msgid "Attach Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:952 cinder/api/openstack/compute/contrib/volumes.py:366
+#, python-format
+msgid "Detach volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:959
+msgid "Detach Volume Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:984 cinder/api/ec2/cloud.py:1041
+#: cinder/api/ec2/cloud.py:1518 cinder/api/ec2/cloud.py:1533
+#, python-format
+msgid "attribute not supported: %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1107
+#, python-format
+msgid "vol = %s\n"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1255
+msgid "Allocate address"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1267
+#, python-format
+msgid "Release address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1272
+#, python-format
+msgid "Associate address %(public_ip)s to instance %(instance_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1282
+#, python-format
+msgid "Disassociate address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1308
+msgid "Image must be available"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1329
+msgid "Going to start terminating instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1343
+#, python-format
+msgid "Reboot instance %r"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1354
+msgid "Going to stop instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1365
+msgid "Going to start instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1455
+#, python-format
+msgid "De-registering image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1471
+msgid "imageLocation is required"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1490
+#, python-format
+msgid "Registered image %(image_location)s with id %(image_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1536
+msgid "user or group not specified"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1538
+msgid "only group \"all\" is supported"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1540
+msgid "operation_type must be add or remove"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1542
+#, python-format
+msgid "Updating image %s publicity"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1555
+#, python-format
+msgid "Not allowed to modify attributes for image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1603
+#, python-format
+msgid "Couldn't stop instance with in %d sec"
+msgstr ""
+
+#: cinder/api/metadata/handler.py:246 cinder/api/metadata/handler.py:253
+#, python-format
+msgid "Failed to get metadata for ip: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:43
+#, python-format
+msgid "Caught error: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:45 cinder/api/openstack/wsgi.py:886
+#, python-format
+msgid "%(url)s returned with HTTP %(status)d"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:94
+msgid "Must specify an ExtensionManager class"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:105
+#, python-format
+msgid "Extended resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:130
+#, python-format
+msgid ""
+"Extension %(ext_name)s: Cannot extend resource %(collection)s: No such "
+"resource"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:135
+#, python-format
+msgid "Extension %(ext_name)s extending resource: %(collection)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:90
+#, python-format
+msgid "%(user_id)s could not be found with token '%(token)s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:134
+#, python-format
+msgid "%(user_id)s must be an admin or a member of %(project_id)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:152
+msgid "Authentication requests must be made against a version root (e.g. /v2)."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:167
+#, python-format
+msgid "Could not find %s in request."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:191
+#, python-format
+msgid "Successfully authenticated '%s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:241
+msgid "User not found with provided API key."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:258
+#, python-format
+msgid "Provided API key is valid, but not for user '%(username)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:133 cinder/api/openstack/common.py:167
+msgid "limit param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:136 cinder/api/openstack/common.py:171
+msgid "limit param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:161
+msgid "offset param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:175
+msgid "offset param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:203
+#, python-format
+msgid "marker [%s] not found"
+msgstr ""
+
+#: cinder/api/openstack/common.py:243
+#, python-format
+msgid "href %s does not contain version"
+msgstr ""
+
+#: cinder/api/openstack/common.py:278
+msgid "Image metadata limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/common.py:295
+#, python-format
+msgid "Converting nw_info: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:305
+#, python-format
+msgid "Converted networks: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:338
+#, python-format
+msgid "Cannot '%(action)s' while instance is in %(attr)s %(state)s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:341
+#, python-format
+msgid "Instance is in an invalid state for '%(action)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:421
+msgid "Rejecting snapshot request, snapshots currently disabled"
+msgstr ""
+
+#: cinder/api/openstack/common.py:423
+msgid "Instance snapshots are not permitted at this time."
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:188
+#, python-format
+msgid "Loaded extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:225
+#, python-format
+msgid "Ext name: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:226
+#, python-format
+msgid "Ext alias: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:227
+#, python-format
+msgid "Ext description: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:229
+#, python-format
+msgid "Ext namespace: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:230
+#, python-format
+msgid "Ext updated: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:232
+#, python-format
+msgid "Exception loading extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:246
+#, python-format
+msgid "Loading extension %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:252
+#, python-format
+msgid "Calling extension factory %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:264
+#, python-format
+msgid "Failed to load extension %(ext_factory)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:344
+#, python-format
+msgid "Failed to load extension %(classpath)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:368
+#, python-format
+msgid "Failed to load extension %(ext_name)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:135 cinder/api/openstack/wsgi.py:538
+msgid "cannot understand JSON"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:159
+#: cinder/api/openstack/compute/contrib/hosts.py:86
+msgid "cannot understand XML"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:543
+msgid "too many body keys"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:582
+#, python-format
+msgid "Exception handling resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:586
+#, python-format
+msgid "Fault thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:589
+#, python-format
+msgid "HTTP exception thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:697
+msgid "Unrecognized Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:701
+msgid "No Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:705
+msgid "Empty body provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:816
+#, python-format
+msgid "There is no such action: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:819 cinder/api/openstack/wsgi.py:832
+#: cinder/api/openstack/compute/server_metadata.py:58
+#: cinder/api/openstack/compute/server_metadata.py:76
+#: cinder/api/openstack/compute/server_metadata.py:101
+#: cinder/api/openstack/compute/server_metadata.py:126
+#: cinder/api/openstack/compute/contrib/admin_actions.py:211
+#: cinder/api/openstack/compute/contrib/console_output.py:52
+msgid "Malformed request body"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:829
+msgid "Unsupported Content-Type"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:841
+msgid "Malformed request url"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:889
+#, python-format
+msgid "%(url)s returned a fault: %(e)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:265
+msgid "element is not a child"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:414
+msgid "root element selecting a list"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:739
+#, python-format
+msgid "Template tree mismatch; adding slave %(slavetag)s to master %(mastertag)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:858
+msgid "subclasses must implement construct()!"
+msgstr ""
+
+#: cinder/api/openstack/compute/extensions.py:29
+#: cinder/api/openstack/volume/extensions.py:29
+msgid "Initializing extension manager."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:40
+#: cinder/api/openstack/compute/images.py:146
+#: cinder/api/openstack/compute/images.py:161
+msgid "Image not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:79
+msgid "Incorrect request body format"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:83
+#: cinder/api/openstack/compute/server_metadata.py:80
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:79
+#: cinder/api/openstack/compute/contrib/volumetypes.py:188
+msgid "Request body and URI mismatch"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:86
+#: cinder/api/openstack/compute/server_metadata.py:84
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:82
+#: cinder/api/openstack/compute/contrib/volumetypes.py:191
+msgid "Request body contains too many items"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:111
+msgid "Invalid metadata key"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:74
+msgid "Instance does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:97
+msgid "Instance is not a member of specified network"
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:140
+#, python-format
+msgid ""
+"Only %(value)s %(verb)s request(s) can be made to %(uri)s every "
+"%(unit_string)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:266
+msgid "This request was rate-limited."
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:38
+#: cinder/api/openstack/compute/server_metadata.py:122
+#: cinder/api/openstack/compute/server_metadata.py:159
+msgid "Server does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:141
+#: cinder/api/openstack/compute/server_metadata.py:152
+msgid "Metadata item was not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:425
+#, python-format
+msgid "Invalid server status: %(status)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:433
+msgid "Invalid changes-since value"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:483
+msgid "Personality file limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:485
+msgid "Personality file path too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:487
+msgid "Personality file content too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:501
+msgid "Server name is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:505
+msgid "Server name is an empty string"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:509
+msgid "Server name must be less than 256 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:527
+#, python-format
+msgid "Bad personality format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:530
+msgid "Bad personality format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:535
+#, python-format
+msgid "Personality content for %s cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:550
+#, python-format
+msgid "Bad networks format: network uuid is not in proper format (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:559
+#, python-format
+msgid "Invalid fixed IP address (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:566
+#, python-format
+msgid "Duplicate networks (%s) are not allowed"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:572
+#, python-format
+msgid "Bad network format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:575
+msgid "Bad networks format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:587
+msgid "Userdata content cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:594
+msgid "accessIPv4 is not proper IPv4 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:601
+msgid "accessIPv6 is not proper IPv6 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:633
+msgid "Server name is not defined"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:675
+#: cinder/api/openstack/compute/servers.py:740
+msgid "Invalid flavorRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:737
+msgid "Can not find requested image"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:743
+msgid "Invalid key_name provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:829
+#: cinder/api/openstack/compute/servers.py:849
+msgid "Instance has not been resized."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:835
+#, python-format
+msgid "Error in confirm-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:855
+#, python-format
+msgid "Error in revert-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:868
+msgid "Argument 'type' for reboot is not HARD or SOFT"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:872
+msgid "Missing argument 'type' for reboot"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:885
+#, python-format
+msgid "Error in reboot %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:897
+msgid "Unable to locate requested flavor."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:900
+msgid "Resize requires a change in size."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:924
+msgid "Malformed server entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:931
+msgid "Missing imageRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:940
+msgid "Invalid imageRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:949
+msgid "Missing flavorRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:962
+msgid "No adminPass was specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:966
+#: cinder/api/openstack/compute/servers.py:1144
+msgid "Invalid adminPass"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:980
+msgid "Unable to parse metadata key/value pairs."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:993
+msgid "Resize request has invalid 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:996
+msgid "Resize requests require 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1014
+#: cinder/api/openstack/compute/contrib/aggregates.py:142
+#: cinder/api/openstack/compute/contrib/networks.py:65
+msgid "Invalid request body"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1019
+msgid "Could not parse imageRef from request."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1071
+msgid "Instance could not be found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1074
+msgid "Cannot find image for rebuild"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1103
+msgid "createImage entity requires name attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1112
+#: cinder/api/openstack/compute/contrib/admin_actions.py:238
+msgid "Invalid metadata"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1167
+#, python-format
+msgid "Removing options '%(unk_opt_str)s' from query"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:60
+#, python-format
+msgid "Compute.api::pause %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:77
+#, python-format
+msgid "Compute.api::unpause %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:94
+#, python-format
+msgid "compute.api::suspend %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:111
+#, python-format
+msgid "compute.api::resume %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:127
+#, python-format
+msgid "Error in migrate %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:141
+#, python-format
+msgid "Compute.api::reset_network %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:154
+#: cinder/api/openstack/compute/contrib/admin_actions.py:170
+#: cinder/api/openstack/compute/contrib/admin_actions.py:186
+#: cinder/api/openstack/compute/contrib/multinic.py:41
+#: cinder/api/openstack/compute/contrib/rescue.py:44
+msgid "Server not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:157
+#, python-format
+msgid "Compute.api::inject_network_info %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:173
+#, python-format
+msgid "Compute.api::lock %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:189
+#, python-format
+msgid "Compute.api::unlock %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:219
+#, python-format
+msgid "createBackup entity requires %s attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:223
+msgid "Malformed createBackup entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:229
+msgid "createBackup attribute 'rotation' must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:244
+#: cinder/api/openstack/compute/contrib/console_output.py:47
+#: cinder/api/openstack/compute/contrib/console_output.py:59
+#: cinder/api/openstack/compute/contrib/consoles.py:49
+#: cinder/api/openstack/compute/contrib/consoles.py:60
+#: cinder/api/openstack/compute/contrib/server_action_list.py:49
+#: cinder/api/openstack/compute/contrib/server_diagnostics.py:47
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:38
+msgid "Instance not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:272
+msgid "host and block_migration must be specified."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:284
+#, python-format
+msgid "Live migration of instance %(id)s to host %(host)s failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:76
+#, python-format
+msgid ""
+"Cannot create aggregate with name %(name)s and availability zone "
+"%(avail_zone)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:88
+#, python-format
+msgid "Cannot show aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:114
+#, python-format
+msgid "Cannot update aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:126
+#, python-format
+msgid "Cannot delete aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:139
+#, python-format
+msgid "Aggregates does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:152
+#: cinder/api/openstack/compute/contrib/aggregates.py:158
+#, python-format
+msgid "Cannot add host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:171
+#: cinder/api/openstack/compute/contrib/aggregates.py:175
+#, python-format
+msgid "Cannot remove host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:195
+#, python-format
+msgid "Cannot set metadata %(metadata)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/certificates.py:75
+msgid "Only root certificate can be retrieved."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/cloudpipe.py:146
+msgid ""
+"Unable to claim IP for VPN instances, ensure it isn't running, and try "
+"again in a few minutes"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:44
+msgid "Missing type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:56
+msgid "Invalid type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/disk_config.py:44
+#, python-format
+msgid "%s must be either 'MANUAL' or 'AUTO'."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/extended_server_attributes.py:77
+#: cinder/api/openstack/compute/contrib/extended_status.py:61
+msgid "Server not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:61
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:91
+msgid "Flavor not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:49
+#: cinder/api/openstack/compute/contrib/volumetypes.py:158
+msgid "No Request Body"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:159
+#, python-format
+msgid "No more floating ips in pool %s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:161
+msgid "No more floating ips available."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:201
+#: cinder/api/openstack/compute/contrib/floating_ips.py:230
+#: cinder/api/openstack/compute/contrib/security_groups.py:571
+#: cinder/api/openstack/compute/contrib/security_groups.py:604
+msgid "Missing parameter dict"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:204
+#: cinder/api/openstack/compute/contrib/floating_ips.py:233
+msgid "Address not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:213
+msgid "No fixed ips associated to instance"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:216
+msgid "Associate floating ip failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:144
+#, python-format
+msgid "Invalid status: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:148
+#, python-format
+msgid "Invalid mode: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:152
+#, python-format
+msgid "Invalid update setting: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:170
+#, python-format
+msgid "Putting host %(host)s in maintenance mode %(mode)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:181
+#, python-format
+msgid "Setting host %(host)s to %(state)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:230
+msgid "Describe-resource is admin only functionality"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:238
+msgid "Host not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:70
+msgid "Keypair name contains unsafe characters"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:95
+msgid "Keypair name must be between 1 and 255 characters long"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:100
+#, python-format
+msgid "Key pair '%s' already exists."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:52
+msgid "Missing 'networkId' argument for addFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:68
+msgid "Missing 'address' argument for removeFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:77
+#, python-format
+msgid "Unable to find address %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:62
+#, python-format
+msgid "Network does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:70
+#, python-format
+msgid "Disassociating network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:74
+#: cinder/api/openstack/compute/contrib/networks.py:91
+#: cinder/api/openstack/compute/contrib/networks.py:101
+msgid "Network not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:87
+#, python-format
+msgid "Showing network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:97
+#, python-format
+msgid "Deleting network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/scheduler_hints.py:41
+msgid "Malformed scheduler_hints attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:222
+msgid "Security group id should be integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:243
+msgid "Security group is still in use"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:295
+#, python-format
+msgid "Security group %s already exists"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:315
+#, python-format
+msgid "Security group %s is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:318
+#, python-format
+msgid "Security group %s cannot be empty."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:321
+#, python-format
+msgid "Security group %s should not be greater than 255 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:348
+msgid "Parent group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:351
+#, python-format
+msgid "Security group (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:369
+msgid "Not enough parameters to build a valid rule."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:376
+#, python-format
+msgid "This rule already exists in group %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:414
+msgid "Parent or group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:507
+msgid "Rule id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:510
+#, python-format
+msgid "Rule (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:574
+#: cinder/api/openstack/compute/contrib/security_groups.py:607
+msgid "Security group not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:578
+#: cinder/api/openstack/compute/contrib/security_groups.py:611
+msgid "Security group name cannot be empty"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:45
+#, python-format
+msgid "start instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:54
+#, python-format
+msgid "stop instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:73
+#: cinder/api/openstack/volume/volumes.py:106
+#, python-format
+msgid "vol=%s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:146
+#: cinder/api/openstack/volume/volumes.py:184
+#, python-format
+msgid "Delete volume with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:329
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(server_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:481
+#: cinder/api/openstack/volume/snapshots.py:110
+#, python-format
+msgid "Delete snapshot with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:524
+#: cinder/api/openstack/volume/snapshots.py:150
+#, python-format
+msgid "Create snapshot from volume %s"
+msgstr ""
+
+#: cinder/auth/fakeldap.py:33
+msgid "Attempted to instantiate singleton"
+msgstr ""
+
+#: cinder/auth/ldapdriver.py:650
+#, python-format
+msgid ""
+"Attempted to remove the last member of a group. Deleting the group at %s "
+"instead."
+msgstr ""
+
+#: cinder/auth/manager.py:298
+#, python-format
+msgid "Looking up user: %r"
+msgstr ""
+
+#: cinder/auth/manager.py:302
+#, python-format
+msgid "Failed authorization for access key %s"
+msgstr ""
+
+#: cinder/auth/manager.py:308
+#, python-format
+msgid "Using project name = user name (%s)"
+msgstr ""
+
+#: cinder/auth/manager.py:315
+#, python-format
+msgid "failed authorization: no project named %(pjid)s (user=%(uname)s)"
+msgstr ""
+
+#: cinder/auth/manager.py:324
+#, python-format
+msgid ""
+"Failed authorization: user %(uname)s not admin and not member of project "
+"%(pjname)s"
+msgstr ""
+
+#: cinder/auth/manager.py:331 cinder/auth/manager.py:343
+#, python-format
+msgid "user.secret: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:332 cinder/auth/manager.py:344
+#, python-format
+msgid "expected_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:333 cinder/auth/manager.py:345
+#, python-format
+msgid "signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:335 cinder/auth/manager.py:357
+#, python-format
+msgid "Invalid signature for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:353
+#, python-format
+msgid "host_only_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:449
+msgid "Must specify project"
+msgstr ""
+
+#: cinder/auth/manager.py:490
+#, python-format
+msgid "Adding role %(role)s to user %(uid)s in project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:493
+#, python-format
+msgid "Adding sitewide role %(role)s to user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:519
+#, python-format
+msgid "Removing role %(role)s from user %(uid)s on project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:522
+#, python-format
+msgid "Removing sitewide role %(role)s from user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:595
+#, python-format
+msgid "Created project %(name)s with manager %(manager_user)s"
+msgstr ""
+
+#: cinder/auth/manager.py:613
+#, python-format
+msgid "modifying project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:625
+#, python-format
+msgid "Adding user %(uid)s to project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:646
+#, python-format
+msgid "Remove user %(uid)s from project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:676
+#, python-format
+msgid "Deleting project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:734
+#, python-format
+msgid "Created user %(rvname)s (admin: %(rvadmin)r)"
+msgstr ""
+
+#: cinder/auth/manager.py:743
+#, python-format
+msgid "Deleting user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:753
+#, python-format
+msgid "Access Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:755
+#, python-format
+msgid "Secret Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:757
+#, python-format
+msgid "Admin status set to %(admin)r for user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:802
+#, python-format
+msgid "No vpn data for project %s"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:46
+msgid "Instance type for vpn instances"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:49
+msgid "Template for cloudpipe instance boot script"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:52
+msgid "Network to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:55
+msgid "Netmask to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:107
+#, python-format
+msgid "Launching VPN for %s"
+msgstr ""
+
+#: cinder/compute/api.py:141
+msgid "No compute host specified"
+msgstr ""
+
+#: cinder/compute/api.py:144
+#, python-format
+msgid "Unable to find host for Instance %s"
+msgstr ""
+
+#: cinder/compute/api.py:192
+#, python-format
+msgid ""
+"Quota exceeded for %(pid)s, tried to set %(num_metadata)s metadata "
+"properties"
+msgstr ""
+
+#: cinder/compute/api.py:203
+#, python-format
+msgid "Quota exceeded for %(pid)s, metadata property key or value too long"
+msgstr ""
+
+#: cinder/compute/api.py:257
+msgid "Cannot run any more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:259
+#, python-format
+msgid "Can only run %s more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:261
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances. "
+msgstr ""
+
+#: cinder/compute/api.py:310
+msgid "Creating a raw instance"
+msgstr ""
+
+#: cinder/compute/api.py:312
+#, python-format
+msgid "Using Kernel=%(kernel_id)s, Ramdisk=%(ramdisk_id)s"
+msgstr ""
+
+#: cinder/compute/api.py:383
+#, python-format
+msgid "Going to run %s instances..."
+msgstr ""
+
+#: cinder/compute/api.py:447
+#, python-format
+msgid "bdm %s"
+msgstr ""
+
+#: cinder/compute/api.py:474
+#, python-format
+msgid "block_device_mapping %s"
+msgstr ""
+
+#: cinder/compute/api.py:591
+#, python-format
+msgid "Sending create to scheduler for %(pid)s/%(uid)s's"
+msgstr ""
+
+#: cinder/compute/api.py:871
+msgid "Going to try to soft delete instance"
+msgstr ""
+
+#: cinder/compute/api.py:891
+msgid "No host for instance, deleting immediately"
+msgstr ""
+
+#: cinder/compute/api.py:939
+msgid "Going to try to terminate instance"
+msgstr ""
+
+#: cinder/compute/api.py:977
+msgid "Going to try to stop instance"
+msgstr ""
+
+#: cinder/compute/api.py:996
+msgid "Going to try to start instance"
+msgstr ""
+
+#: cinder/compute/api.py:1000
+#, python-format
+msgid "Instance %(instance_uuid)s is not stopped. (%(vm_state)s"
+msgstr ""
+
+#: cinder/compute/api.py:1071 cinder/volume/api.py:173
+#: cinder/volume/volume_types.py:64
+#, python-format
+msgid "Searching by: %s"
+msgstr ""
+
+#: cinder/compute/api.py:1201
+#, python-format
+msgid "Image type not recognized %s"
+msgstr ""
+
+#: cinder/compute/api.py:1369
+msgid "flavor_id is None. Assuming migration."
+msgstr ""
+
+#: cinder/compute/api.py:1377
+#, python-format
+msgid ""
+"Old instance type %(current_instance_type_name)s,  new instance type "
+"%(new_instance_type_name)s"
+msgstr ""
+
+#: cinder/compute/api.py:1644
+#, python-format
+msgid "multiple fixedips exist, using the first: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:57 cinder/compute/instance_types.py:65
+msgid "create arguments must be positive integers"
+msgstr ""
+
+#: cinder/compute/instance_types.py:76 cinder/volume/volume_types.py:41
+#, python-format
+msgid "DB error: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:86
+#, python-format
+msgid "Instance type %s not found for deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:138
+#, python-format
+msgid "check_instance_lock: decorating: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:140
+#, python-format
+msgid ""
+"check_instance_lock: arguments: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+msgstr ""
+
+#: cinder/compute/manager.py:144
+#, python-format
+msgid "check_instance_lock: locked: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:146
+#, python-format
+msgid "check_instance_lock: admin: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:151
+#, python-format
+msgid "check_instance_lock: executing: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:155
+#, python-format
+msgid "check_instance_lock: not executing |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:201
+#, python-format
+msgid "Unable to load the virtualization driver: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:223
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s has been destroyed from under us while trying "
+"to set it to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:240
+#, python-format
+msgid "Current state is %(drv_state)s, state in DB is %(db_state)s."
+msgstr ""
+
+#: cinder/compute/manager.py:245
+msgid "Rebooting instance after cinder-compute restart."
+msgstr ""
+
+#: cinder/compute/manager.py:255
+msgid "Hypervisor driver does not support firewall rules"
+msgstr ""
+
+#: cinder/compute/manager.py:260
+msgid "Checking state"
+msgstr ""
+
+#: cinder/compute/manager.py:329
+#, python-format
+msgid "Setting up bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:400
+#, python-format
+msgid "Instance %s already deleted from database. Attempting forceful vm deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:406
+#, python-format
+msgid "Exception encountered while terminating the instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:444
+#, python-format
+msgid "Instance %s not found."
+msgstr ""
+
+#: cinder/compute/manager.py:480
+msgid "Instance has already been created"
+msgstr ""
+
+#: cinder/compute/manager.py:523
+#, python-format
+msgid ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:528
+#, python-format
+msgid ""
+"Image '%(image_id)s' size %(size_bytes)d exceeded instance_type allowed "
+"size %(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:538
+msgid "Starting instance..."
+msgstr ""
+
+#: cinder/compute/manager.py:548
+msgid "Skipping network allocation for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:561
+msgid "Instance failed network setup"
+msgstr ""
+
+#: cinder/compute/manager.py:565
+#, python-format
+msgid "Instance network_info: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:578
+msgid "Instance failed block device setup"
+msgstr ""
+
+#: cinder/compute/manager.py:594
+msgid "Instance failed to spawn"
+msgstr ""
+
+#: cinder/compute/manager.py:615
+msgid "Deallocating network for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:672
+#, python-format
+msgid "%(action_str)s instance"
+msgstr ""
+
+#: cinder/compute/manager.py:699
+#, python-format
+msgid "Ignoring DiskNotFound: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:708
+#, python-format
+msgid "terminating bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:742 cinder/compute/manager.py:1328
+#: cinder/compute/manager.py:1416 cinder/compute/manager.py:2501
+#, python-format
+msgid "%s. Setting instance vm_state to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:811
+#, python-format
+msgid ""
+"Cannot rebuild instance [%(instance_uuid)s], because the given image does"
+" not exist."
+msgstr ""
+
+#: cinder/compute/manager.py:816
+#, python-format
+msgid "Cannot rebuild instance [%(instance_uuid)s]: %(exc)s"
+msgstr ""
+
+#: cinder/compute/manager.py:823
+#, python-format
+msgid "Rebuilding instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:876
+#, python-format
+msgid "Rebooting instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:891
+#, python-format
+msgid ""
+"trying to reboot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:933
+#, python-format
+msgid "instance %s: snapshotting"
+msgstr ""
+
+#: cinder/compute/manager.py:939
+#, python-format
+msgid ""
+"trying to snapshot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:995
+#, python-format
+msgid "Found %(num_images)d images (rotation: %(rotation)d)"
+msgstr ""
+
+#: cinder/compute/manager.py:1001
+#, python-format
+msgid "Rotating out %d backups"
+msgstr ""
+
+#: cinder/compute/manager.py:1005
+#, python-format
+msgid "Deleting image %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1035
+#, python-format
+msgid "Failed to set admin password. Instance %s is not running"
+msgstr ""
+
+#: cinder/compute/manager.py:1041
+#, python-format
+msgid "Instance %s: Root password set"
+msgstr ""
+
+#: cinder/compute/manager.py:1050
+msgid "set_admin_password is not implemented by this driver."
+msgstr ""
+
+#: cinder/compute/manager.py:1064
+msgid "Error setting admin password"
+msgstr ""
+
+#: cinder/compute/manager.py:1079
+#, python-format
+msgid ""
+"trying to inject a file into a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1084
+#, python-format
+msgid "instance %(instance_uuid)s: injecting file to %(path)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1098
+#, python-format
+msgid ""
+"trying to update agent on a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1103
+#, python-format
+msgid "instance %(instance_uuid)s: updating agent to %(url)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1116
+#, python-format
+msgid "instance %s: rescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1141
+#, python-format
+msgid "instance %s: unrescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1270
+msgid "destination same as source!"
+msgstr ""
+
+#: cinder/compute/manager.py:1287
+#, python-format
+msgid "instance %s: migrating"
+msgstr ""
+
+#: cinder/compute/manager.py:1471
+#, python-format
+msgid "instance %s: pausing"
+msgstr ""
+
+#: cinder/compute/manager.py:1489
+#, python-format
+msgid "instance %s: unpausing"
+msgstr ""
+
+#: cinder/compute/manager.py:1525
+#, python-format
+msgid "instance %s: retrieving diagnostics"
+msgstr ""
+
+#: cinder/compute/manager.py:1534
+#, python-format
+msgid "instance %s: suspending"
+msgstr ""
+
+#: cinder/compute/manager.py:1556
+#, python-format
+msgid "instance %s: resuming"
+msgstr ""
+
+#: cinder/compute/manager.py:1579
+#, python-format
+msgid "instance %s: locking"
+msgstr ""
+
+#: cinder/compute/manager.py:1588
+#, python-format
+msgid "instance %s: unlocking"
+msgstr ""
+
+#: cinder/compute/manager.py:1596
+#, python-format
+msgid "instance %s: getting locked state"
+msgstr ""
+
+#: cinder/compute/manager.py:1606
+#, python-format
+msgid "instance %s: reset network"
+msgstr ""
+
+#: cinder/compute/manager.py:1614
+#, python-format
+msgid "instance %s: inject network info"
+msgstr ""
+
+#: cinder/compute/manager.py:1618
+#, python-format
+msgid "network_info to inject: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:1655
+#, python-format
+msgid "instance %s: getting vnc console"
+msgstr ""
+
+#: cinder/compute/manager.py:1685
+#, python-format
+msgid "Booting with volume %(volume_id)s at %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1703
+#, python-format
+msgid ""
+"instance %(instance_uuid)s: attaching volume %(volume_id)s to "
+"%(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1705
+#, python-format
+msgid "Attaching volume %(volume_id)s to %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1714
+#, python-format
+msgid "instance %(instance_uuid)s: attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1724
+#, python-format
+msgid "Attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1752
+#, python-format
+msgid "Detach volume %(volume_id)s from mountpoint %(mp)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1756
+#, python-format
+msgid "Detaching volume from unknown instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1822
+#, python-format
+msgid ""
+"Creating tmpfile %s to notify to other compute nodes that they should "
+"mount the same storage."
+msgstr ""
+
+#: cinder/compute/manager.py:1884
+msgid "Instance has no volume."
+msgstr ""
+
+#: cinder/compute/manager.py:1916
+#, python-format
+msgid "plug_vifs() failed %(cnt)d.Retry up to %(max_retry)d for %(hostname)s."
+msgstr ""
+
+#: cinder/compute/manager.py:1973
+#, python-format
+msgid "Pre live migration failed at  %(dest)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2000
+msgid "post_live_migration() is started.."
+msgstr ""
+
+#: cinder/compute/manager.py:2030
+msgid "No floating_ip found"
+msgstr ""
+
+#: cinder/compute/manager.py:2038
+msgid "No floating_ip found."
+msgstr ""
+
+#: cinder/compute/manager.py:2040
+#, python-format
+msgid ""
+"Live migration: Unexpected error: cannot inherit floating ip.\n"
+"%(e)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2073
+#, python-format
+msgid "Migrating instance to %(dest)s finished successfully."
+msgstr ""
+
+#: cinder/compute/manager.py:2075
+msgid ""
+"You may see the error \"libvirt: QEMU error: Domain not found: no domain "
+"with matching name.\" This error can be safely ignored."
+msgstr ""
+
+#: cinder/compute/manager.py:2090
+msgid "Post operation of migraton started"
+msgstr ""
+
+#: cinder/compute/manager.py:2226
+#, python-format
+msgid "Updated the info_cache for instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:2255
+msgid "Updating bandwidth usage cache"
+msgstr ""
+
+#: cinder/compute/manager.py:2277
+msgid "Updating host status"
+msgstr ""
+
+#: cinder/compute/manager.py:2305
+#, python-format
+msgid ""
+"Found %(num_db_instances)s in the database and %(num_vm_instances)s on "
+"the hypervisor."
+msgstr ""
+
+#: cinder/compute/manager.py:2331
+#, python-format
+msgid ""
+"During the sync_power process the instance %(uuid)s has moved from host "
+"%(src)s to host %(dst)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2344
+#, python-format
+msgid ""
+"Instance %s is in the process of migrating to this host. Wait next "
+"sync_power cycle before setting power state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2350
+msgid ""
+"Instance found in database but not known by hypervisor. Setting power "
+"state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2380
+msgid "FLAGS.reclaim_instance_interval <= 0, skipping..."
+msgstr ""
+
+#: cinder/compute/manager.py:2392
+msgid "Reclaiming deleted instance"
+msgstr ""
+
+#: cinder/compute/manager.py:2458
+#, python-format
+msgid ""
+"Detected instance with name label '%(name)s' which is marked as DELETED "
+"but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2465
+#, python-format
+msgid ""
+"Destroying instance with name label '%(name)s' which is marked as DELETED"
+" but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2472
+#, python-format
+msgid "Unrecognized value '%(action)s' for FLAGS.running_deleted_instance_action"
+msgstr ""
+
+#: cinder/compute/manager.py:2542
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: unrecoverable state during operation on "
+"%(host)s"
+msgstr ""
+
+#: cinder/compute/utils.py:142
+msgid "v4 subnets are required for legacy nw_info"
+msgstr ""
+
+#: cinder/console/manager.py:77 cinder/console/vmrc_manager.py:70
+msgid "Adding console"
+msgstr ""
+
+#: cinder/console/manager.py:97
+#, python-format
+msgid "Tried to remove non-existant console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:122
+#, python-format
+msgid "Tried to remove non-existent console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:125
+#, python-format
+msgid "Removing console %(console_id)s."
+msgstr ""
+
+#: cinder/console/xvp.py:98
+msgid "Rebuilding xvp conf"
+msgstr ""
+
+#: cinder/console/xvp.py:116
+#, python-format
+msgid "Re-wrote %s"
+msgstr ""
+
+#: cinder/console/xvp.py:121
+msgid "Stopping xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:134
+msgid "Starting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:141
+#, python-format
+msgid "Error starting xvp: %s"
+msgstr ""
+
+#: cinder/console/xvp.py:144
+msgid "Restarting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:146
+msgid "xvp not running..."
+msgstr ""
+
+#: cinder/consoleauth/manager.py:63
+#, python-format
+msgid "Deleting Expired Token: (%s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:75
+#, python-format
+msgid "Received Token: %(token)s, %(token_dict)s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:79
+#, python-format
+msgid "Checking Token: %(token)s, %(token_valid)s)"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:57
+msgid "Use of empty request context is deprecated"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:198
+#, python-format
+msgid "Unrecognized read_deleted value '%s'"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:516 cinder/db/sqlalchemy/api.py:551
+#, python-format
+msgid "No ComputeNode for %(host)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4019 cinder/db/sqlalchemy/api.py:4045
+#, python-format
+msgid "No backend config with id %(sm_backend_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4103
+#, python-format
+msgid "No sm_flavor called %(sm_flavor)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4147
+#, python-format
+msgid "No sm_volume with id %(volume_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:66
+msgid "python-migrate is not installed. Exiting."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:78
+msgid "version should be an integer"
+msgstr ""
+
+#: cinder/db/sqlalchemy/session.py:137
+#, python-format
+msgid "SQL connection failed. %s attempts left."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:48
+msgid "interface column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:80
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:54
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:48
+#, python-format
+msgid "Table |%s| not created!"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:87
+msgid "VIF column not added to fixed_ips table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:97
+#, python-format
+msgid "join list for moving mac_addresses |%s|"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:39
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:60
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:99
+msgid "foreign key constraint couldn't be added"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:58
+msgid "foreign key constraint couldn't be dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py:34
+msgid "priority column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:41
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:42
+#: cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py:56
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:68
+msgid "foreign key constraint couldn't be removed"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py:34
+msgid "progress column not added to instances table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py:97
+#, python-format
+msgid ""
+"Could not cast flavorid to integer: %s. Set flavorid to an integer-like "
+"string to downgrade."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:69
+msgid "instance_info_caches tables not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py:41
+msgid "progress column not added to compute_nodes table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:76
+msgid "dns_domains table not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:60
+msgid "quota_classes table not dropped"
+msgstr ""
+
+#: cinder/image/glance.py:147
+msgid "Connection error contacting glance server, retrying"
+msgstr ""
+
+#: cinder/image/glance.py:153 cinder/network/quantum/melange_connection.py:104
+msgid "Maximum attempts reached"
+msgstr ""
+
+#: cinder/image/glance.py:278
+#, python-format
+msgid "Creating image in Glance. Metadata passed in %s"
+msgstr ""
+
+#: cinder/image/glance.py:281
+#, python-format
+msgid "Metadata after formatting for Glance %s"
+msgstr ""
+
+#: cinder/image/glance.py:289
+#, python-format
+msgid "Metadata returned from Glance formatted for Base %s"
+msgstr ""
+
+#: cinder/image/glance.py:331 cinder/image/glance.py:335
+msgid "Not the image owner"
+msgstr ""
+
+#: cinder/image/glance.py:410
+#, python-format
+msgid "%(timestamp)s does not follow any of the signatures: %(iso_formats)s"
+msgstr ""
+
+#: cinder/image/s3.py:309
+#, python-format
+msgid "Failed to download %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:328
+#, python-format
+msgid "Failed to decrypt %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:340
+#, python-format
+msgid "Failed to untar %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:353
+#, python-format
+msgid "Failed to upload %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:379
+#, python-format
+msgid "Failed to decrypt private key: %s"
+msgstr ""
+
+#: cinder/image/s3.py:387
+#, python-format
+msgid "Failed to decrypt initialization vector: %s"
+msgstr ""
+
+#: cinder/image/s3.py:398
+#, python-format
+msgid "Failed to decrypt image file %(image_file)s: %(err)s"
+msgstr ""
+
+#: cinder/image/s3.py:410
+msgid "Unsafe filenames in image"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:38 cinder/ipv6/rfc2462.py:34
+#, python-format
+msgid "Bad mac for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:40 cinder/ipv6/rfc2462.py:36
+#, python-format
+msgid "Bad prefix for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:42
+#, python-format
+msgid "Bad project_id for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/network/ldapdns.py:321
+msgid "This driver only supports type 'a' entries."
+msgstr ""
+
+#: cinder/network/linux_net.py:166
+#, python-format
+msgid "Attempted to remove chain %s which does not exist"
+msgstr ""
+
+#: cinder/network/linux_net.py:192
+#, python-format
+msgid "Unknown chain: %r"
+msgstr ""
+
+#: cinder/network/linux_net.py:215
+#, python-format
+msgid ""
+"Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r "
+"%(top)r"
+msgstr ""
+
+#: cinder/network/linux_net.py:335
+msgid "IPTablesManager.apply completed with success"
+msgstr ""
+
+#: cinder/network/linux_net.py:694
+#, python-format
+msgid "Hupping dnsmasq threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:696
+#, python-format
+msgid "Pid %d is stale, relaunching dnsmasq"
+msgstr ""
+
+#: cinder/network/linux_net.py:756
+#, python-format
+msgid "killing radvd threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:758
+#, python-format
+msgid "Pid %d is stale, relaunching radvd"
+msgstr ""
+
+#: cinder/network/linux_net.py:967
+#, python-format
+msgid "Starting VLAN inteface %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:999
+#, python-format
+msgid "Starting Bridge interface for %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1142
+#, python-format
+msgid "Starting bridge %s "
+msgstr ""
+
+#: cinder/network/linux_net.py:1149
+#, python-format
+msgid "Done starting bridge %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1167
+#, python-format
+msgid "Failed unplugging gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/linux_net.py:1170
+#, python-format
+msgid "Unplugged gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/manager.py:291
+#, python-format
+msgid "Fixed ip %(fixed_ip_id)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:300 cinder/network/manager.py:496
+#, python-format
+msgid "Interface %(interface)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:315
+#, python-format
+msgid "floating IP allocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:353
+#, python-format
+msgid "floating IP deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:386
+#, python-format
+msgid "Address |%(address)s| is not allocated"
+msgstr ""
+
+#: cinder/network/manager.py:390
+#, python-format
+msgid "Address |%(address)s| is not allocated to your project |%(project)s|"
+msgstr ""
+
+#: cinder/network/manager.py:402
+#, python-format
+msgid "Quota exceeded for %s, tried to allocate address"
+msgstr ""
+
+#: cinder/network/manager.py:614
+#, python-format
+msgid ""
+"Database inconsistency: DNS domain |%s| is registered in the Cinder db but "
+"not visible to either the floating or instance DNS driver. It will be "
+"ignored."
+msgstr ""
+
+#: cinder/network/manager.py:660
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing zone to |%(av_zone)s|."
+msgstr ""
+
+#: cinder/network/manager.py:670
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing project to |%(project)s|."
+msgstr ""
+
+#: cinder/network/manager.py:778
+#, python-format
+msgid "Disassociated %s stale fixed ip(s)"
+msgstr ""
+
+#: cinder/network/manager.py:782
+msgid "setting network host"
+msgstr ""
+
+#: cinder/network/manager.py:896
+#, python-format
+msgid "network allocations for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:901
+#, python-format
+msgid "networks retrieved for instance |%(instance_id)s|: |%(networks)s|"
+msgstr ""
+
+#: cinder/network/manager.py:930
+#, python-format
+msgid "network deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:1152
+#, python-format
+msgid ""
+"instance-dns-zone is |%(domain)s|, which is in availability zone "
+"|%(zone)s|. Instance |%(instance)s| is in zone |%(zone2)s|. No DNS record"
+" will be created."
+msgstr ""
+
+#: cinder/network/manager.py:1227
+#, python-format
+msgid "Unable to release %s because vif doesn't exist."
+msgstr ""
+
+#: cinder/network/manager.py:1244
+#, python-format
+msgid "Leased IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1248
+#, python-format
+msgid "IP %s leased that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1256
+#, python-format
+msgid "IP |%s| leased that isn't allocated"
+msgstr ""
+
+#: cinder/network/manager.py:1261
+#, python-format
+msgid "Released IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1265
+#, python-format
+msgid "IP %s released that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1268
+#, python-format
+msgid "IP %s released that was not leased"
+msgstr ""
+
+#: cinder/network/manager.py:1331
+msgid "cidr already in use"
+msgstr ""
+
+#: cinder/network/manager.py:1334
+#, python-format
+msgid "requested cidr (%(cidr)s) conflicts with existing supernet (%(super)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1345
+#, python-format
+msgid ""
+"requested cidr (%(cidr)s) conflicts with existing smaller cidr "
+"(%(smaller)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1404
+msgid "Network already exists!"
+msgstr ""
+
+#: cinder/network/manager.py:1423
+#, python-format
+msgid "Network must be disassociated from project %s before delete"
+msgstr ""
+
+#: cinder/network/manager.py:1832
+msgid ""
+"The sum between the number of networks and the vlan start cannot be "
+"greater than 4094"
+msgstr ""
+
+#: cinder/network/manager.py:1839
+#, python-format
+msgid ""
+"The network range is not big enough to fit %(num_networks)s. Network size"
+" is %(network_size)s"
+msgstr ""
+
+#: cinder/network/minidns.py:65
+msgid "This driver only supports type 'a'"
+msgstr ""
+
+#: cinder/network/quantum/client.py:154
+msgid "Tenant ID not set"
+msgstr ""
+
+#: cinder/network/quantum/client.py:180
+#, python-format
+msgid "Quantum Client Request: %(method)s %(action)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:196
+#, python-format
+msgid "Quantum entity not found: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:206
+#, python-format
+msgid "Server %(status_code)s error: %(data)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:210
+#, python-format
+msgid "Unable to connect to server. Got error: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:228
+#, python-format
+msgid "unable to deserialize object of type = '%s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:162
+msgid "QuantumManager does not use 'multi_host' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:166
+msgid "QuantumManager requires that only one network is created per call"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:176
+msgid "QuantumManager does not use 'vlan_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:182
+msgid "QuantumManager does not use 'vpn_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:186
+msgid "QuantumManager does not use 'bridge' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:190
+msgid "QuantumManager does not use 'bridge_interface' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:195
+msgid "QuantumManager requires a valid (.1) gateway address."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:204
+#, python-format
+msgid ""
+"Unable to find existing quantum network for tenant '%(q_tenant_id)s' with"
+" net-id '%(quantum_net_id)s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:301
+#, python-format
+msgid "network allocations for instance %s"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:588
+#, python-format
+msgid ""
+"port deallocation failed for instance: |%(instance_id)s|, port_id: "
+"|%(port_id)s|"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:606
+#, python-format
+msgid ""
+"ipam deallocation failed for instance: |%(instance_id)s|, vif_uuid: "
+"|%(vif_uuid)s|"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:96
+#, python-format
+msgid "Server returned error: %s"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:98
+msgid "Connection error contacting melange service, retrying"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:108
+#, python-format
+msgid ""
+"allocate IP on network |%(network_id)s| belonging to "
+"|%(network_tenant_id)s| to this vif |%(vif_id)s| with mac "
+"|%(mac_address)s| belonging to |%(project_id)s| "
+msgstr ""
+
+#: cinder/network/quantum/melange_ipam_lib.py:133
+msgid "get_project_and_global_net_ids must be called with a non-null project_id"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:75
+msgid "Error creating network entry"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:90
+#, python-format
+msgid "No network with net_id = %s"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:221
+#, python-format
+msgid "No fixed IPs to deallocate for vif %s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:99
+#, python-format
+msgid "Connecting interface %(interface_id)s to net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:113
+#, python-format
+msgid "Deleting port %(port_id)s on net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/notifier/api.py:115
+#, python-format
+msgid "%s not in valid priorities"
+msgstr ""
+
+#: cinder/notifier/api.py:130
+#, python-format
+msgid ""
+"Problem '%(e)s' attempting to send to notification system. "
+"Payload=%(payload)s"
+msgstr ""
+
+#: cinder/notifier/list_notifier.py:65
+#, python-format
+msgid "Problem '%(e)s' attempting to send to notification driver %(driver)s."
+msgstr ""
+
+#: cinder/notifier/rabbit_notifier.py:46
+#, python-format
+msgid "Could not send notification to %(topic)s. Payload=%(message)s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:146
+#, python-format
+msgid "Returning exception %s to caller"
+msgstr ""
+
+#: cinder/rpc/amqp.py:188
+#, python-format
+msgid "unpacked context: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:231
+#, python-format
+msgid "received %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:236
+#, python-format
+msgid "no method for message: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:237
+#, python-format
+msgid "No method for message: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:321
+#, python-format
+msgid "Making asynchronous call on %s ..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:324
+#, python-format
+msgid "MSG_ID is %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:346
+#, python-format
+msgid "Making asynchronous cast on %s..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:354
+msgid "Making asynchronous fanout cast..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:379
+#, python-format
+msgid "Sending notification on %s..."
+msgstr ""
+
+#: cinder/rpc/common.py:54
+#, python-format
+msgid ""
+"Remote error: %(exc_type)s %(value)s\n"
+"%(traceback)s."
+msgstr ""
+
+#: cinder/rpc/common.py:71
+msgid "Timeout while waiting on RPC response."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:111
+msgid "Failed to process message... skipping it."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:407
+#, python-format
+msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:430
+#, python-format
+msgid "Connected to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:466
+#, python-format
+msgid ""
+"Unable to connect to AMQP server on %(hostname)s:%(port)d after "
+"%(max_retries)d tries: %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:482
+#, python-format
+msgid ""
+"AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying "
+"again in %(sleep_time)d seconds."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:533 cinder/rpc/impl_qpid.py:385
+#, python-format
+msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:551 cinder/rpc/impl_qpid.py:400
+#, python-format
+msgid "Timed out waiting for RPC response: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:555 cinder/rpc/impl_qpid.py:404
+#, python-format
+msgid "Failed to consume message from queue: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:589 cinder/rpc/impl_qpid.py:434
+#, python-format
+msgid "Failed to publish message to topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:341
+#, python-format
+msgid "Unable to connect to AMQP server: %s "
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:346
+#, python-format
+msgid "Connected to AMQP server on %s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:354
+msgid "Re-established AMQP queues"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:412
+msgid "Error processing message.  Skipping it."
+msgstr ""
+
+#: cinder/scheduler/chance.py:47 cinder/scheduler/simple.py:91
+#: cinder/scheduler/simple.py:143
+msgid "Is the appropriate service running?"
+msgstr ""
+
+#: cinder/scheduler/chance.py:52
+msgid "Could not find another compute"
+msgstr ""
+
+#: cinder/scheduler/driver.py:63
+#, python-format
+msgid "Casted '%(method)s' to volume '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:80
+#, python-format
+msgid "Casted '%(method)s' to compute '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:89
+#, python-format
+msgid "Casted '%(method)s' to network '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:107
+#, python-format
+msgid "Casted '%(method)s' to %(topic)s '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:181
+msgid "Must implement a fallback schedule"
+msgstr ""
+
+#: cinder/scheduler/driver.py:185
+msgid "Driver must implement schedule_prep_resize"
+msgstr ""
+
+#: cinder/scheduler/driver.py:190
+msgid "Driver must implement schedule_run_instance"
+msgstr ""
+
+#: cinder/scheduler/driver.py:325
+msgid "Block migration can not be used with shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:330
+msgid "Live migration can not be used without shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:367 cinder/scheduler/driver.py:457
+#, python-format
+msgid "host %(dest)s is not compatible with original host %(src)s."
+msgstr ""
+
+#: cinder/scheduler/driver.py:416
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"memory(host:%(avail)s <= instance:%(mem_inst)s)"
+msgstr ""
+
+#: cinder/scheduler/driver.py:472
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"disk(host:%(available)s <= instance:%(necessary)s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:51
+#, python-format
+msgid "No host selection for %s defined."
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:64
+#, python-format
+msgid "Attempting to build %(num_instances)d instance(s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:157
+msgid "Scheduler only understands Compute nodes (for now)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:199
+#, python-format
+msgid "Filtered %(hosts)s"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:209
+#, python-format
+msgid "Weighted %(weighted_host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:144
+#, python-format
+msgid "Host filter fails for ignored host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:151
+#, python-format
+msgid "Host filter fails for non-forced host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:157
+#, python-format
+msgid "Host filter function %(func)s failed for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:163
+#, python-format
+msgid "Host filter passes for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:272
+#, python-format
+msgid "Received %(service_name)s service update from %(host)s."
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:313
+msgid "host_manager only implemented for 'compute'"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:323
+#, python-format
+msgid "No service for compute ID %s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:85
+#, python-format
+msgid ""
+"Driver Method %(driver_method_name)s missing: %(e)s. Reverting to "
+"schedule()"
+msgstr ""
+
+#: cinder/scheduler/manager.py:150
+#, python-format
+msgid "Failed to schedule_%(method)s: %(ex)s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:159
+#, python-format
+msgid "Setting instance %(instance_uuid)s to %(state)s state."
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:66
+#, python-format
+msgid "Could not stat scheduler options file %(filename)s: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:75
+#, python-format
+msgid "Could not decode scheduler options: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/simple.py:87
+msgid "Not enough allocatable CPU cores remaining"
+msgstr ""
+
+#: cinder/scheduler/simple.py:137
+msgid "Not enough allocatable volume gigabytes remaining"
+msgstr ""
+
+#: cinder/scheduler/filters/core_filter.py:45
+msgid "VCPUs not set; assuming CPU collection broken"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:72
+#, python-format
+msgid "Faking execution of cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:80
+#, python-format
+msgid "Faked command matched %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:96
+#, python-format
+msgid "Faked command raised an exception %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:101
+#, python-format
+msgid "Reply to faked command is stdout='%(stdout)s' stderr='%(stderr)s'"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:784
+msgid "Please extend mock libvirt module to support flags"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:790
+msgid "Please extend fake libvirt module to support this auth method"
+msgstr ""
+
+#: cinder/tests/test_compute.py:365 cinder/tests/test_compute.py:1419
+#, python-format
+msgid "Running instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:371
+#, python-format
+msgid "After terminating instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:589
+msgid "Internal error"
+msgstr ""
+
+#: cinder/tests/test_compute.py:1430
+#, python-format
+msgid "After force-killing instances: %s"
+msgstr ""
+
+#: cinder/tests/test_misc.py:92
+#, python-format
+msgid ""
+"The following migrations are missing a downgrade:\n"
+"\t%s"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:169
+msgid "id"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:170
+msgid "IPv4"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:171
+msgid "IPv6"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:172
+msgid "start address"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:173
+msgid "DNS1"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:174
+msgid "DNS2"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:175
+msgid "VlanID"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:176
+msgid "project"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:177
+msgid "uuid"
+msgstr ""
+
+#: cinder/tests/test_volume.py:216
+#, python-format
+msgid "Target %s allocated"
+msgstr ""
+
+#: cinder/tests/test_volume.py:468
+#, python-format
+msgid "Cannot confirm exported volume id:%s."
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:58
+#, python-format
+msgid "Given data: %s"
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:59
+#, python-format
+msgid "Result data: %s"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:626
+#, python-format
+msgid "Creating files in %s to simulate guest agent"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:637
+#, python-format
+msgid "Removing simulated guest agent files in %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/test_servers.py:2144
+#, python-format
+msgid "Quota exceeded: code=%(code)s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:57
+#, python-format
+msgid "_create: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:66
+#, python-format
+msgid "_delete: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:75
+#, python-format
+msgid "_get: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:85
+#, python-format
+msgid "_get_all: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:125
+#, python-format
+msgid "test_snapshot_create: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:134
+#, python-format
+msgid "test_snapshot_create: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:156
+#, python-format
+msgid "test_snapshot_create_force: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:165
+#, python-format
+msgid "test_snapshot_create_force: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:205
+#, python-format
+msgid "test_snapshot_show: resp=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:231
+#, python-format
+msgid "test_snapshot_detail: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/integrated/test_login.py:31
+#, python-format
+msgid "flavor: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:38
+#, python-format
+msgid ""
+"%(message)s\n"
+"Status Code: %(_status)s\n"
+"Body: %(_body)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:47
+msgid "Authentication error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:55
+msgid "Authorization error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:63
+msgid "Item not found"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:105
+#, python-format
+msgid "Doing %(method)s on %(relative_url)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:107
+#, python-format
+msgid "Body: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:125
+#, python-format
+msgid "%(auth_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:151
+#, python-format
+msgid "%(relative_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:161
+msgid "Unexpected status code"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:168
+#, python-format
+msgid "Decoding JSON: %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:133
+#, python-format
+msgid "Nested received %(queue)s, %(value)s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:142
+#, python-format
+msgid "Nested return %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:160
+msgid "RPC backend does not support timeouts"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:227 cinder/tests/rpc/common.py:233
+#, python-format
+msgid "Received %s"
+msgstr ""
+
+#: cinder/virt/connection.py:85
+msgid "Failed to open connection to the hypervisor"
+msgstr ""
+
+#: cinder/virt/fake.py:270 cinder/virt/xenapi_conn.py:396
+#: cinder/virt/baremetal/proxy.py:716 cinder/virt/libvirt/connection.py:2045
+#, python-format
+msgid "Compute_service record created for %s "
+msgstr ""
+
+#: cinder/virt/fake.py:273 cinder/virt/xenapi_conn.py:399
+#: cinder/virt/baremetal/proxy.py:720 cinder/virt/libvirt/connection.py:2048
+#, python-format
+msgid "Compute_service record updated for %s "
+msgstr ""
+
+#: cinder/virt/firewall.py:130
+#, python-format
+msgid "Attempted to unfilter instance %s which is not filtered"
+msgstr ""
+
+#: cinder/virt/firewall.py:137
+#, python-format
+msgid "Filters added to instance %s"
+msgstr ""
+
+#: cinder/virt/firewall.py:139
+msgid "Provider Firewall Rules refreshed"
+msgstr ""
+
+#: cinder/virt/firewall.py:291
+#, python-format
+msgid "Adding security group rule: %r"
+msgstr ""
+
+#: cinder/virt/firewall.py:403 cinder/virt/xenapi/firewall.py:87
+#, python-format
+msgid "Adding provider rule: %s"
+msgstr ""
+
+#: cinder/virt/images.py:86
+msgid "'qemu-img info' parsing failed."
+msgstr ""
+
+#: cinder/virt/images.py:92
+#, python-format
+msgid "fmt=%(fmt)s backed by: %(backing_file)s"
+msgstr ""
+
+#: cinder/virt/images.py:104
+#, python-format
+msgid "Converted to raw, but format is now %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:105
+msgid ""
+"Must specify vmwareapi_host_ip,vmwareapi_host_username and "
+"vmwareapi_host_password to useconnection_type=vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:276
+#, python-format
+msgid "In vmwareapi:_create_session, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:359
+#, python-format
+msgid "In vmwareapi:_call_method, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:398
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: success"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:404
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: error %(error_info)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:409
+#, python-format
+msgid "In vmwareapi:_poll_task, Got this error %s"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:140
+msgid ""
+"Must specify xenapi_connection_url, xenapi_connection_username "
+"(optionally), and xenapi_connection_password to use "
+"connection_type=xenapi"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:329 cinder/virt/libvirt/connection.py:472
+msgid "Could not determine iscsi initiator name"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:460
+msgid "Host startup on XenServer is not supported."
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:489
+msgid "Unable to log in to XenAPI (is the Dom0 disk full?)"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:527
+msgid "Host is member of a pool, but DB says otherwise"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:599 cinder/virt/xenapi_conn.py:612
+#, python-format
+msgid "Got exception: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:93
+msgid "No domains exist."
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:95
+#, python-format
+msgid "============= initial domains =========== : %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:99
+msgid "Building domain: to be removed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:103
+msgid "Not running domain: remove"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:111
+msgid "domain running on an unknown node: discarded"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:127
+#, python-format
+msgid "No such domain (%s)"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:134
+#, python-format
+msgid "Failed power down Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:143
+msgid "deactivate -> activate fails"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:153
+msgid "destroy_domain: no such domain"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:154
+#, python-format
+msgid "No such domain %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:161
+#, python-format
+msgid "Domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:163
+#, python-format
+msgid "Nodes: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:166
+#, python-format
+msgid "After storing domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:169
+msgid "deactivation/removing domain failed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:176
+msgid "===== Domain is being created ====="
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:179
+msgid "Same domain name already exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:181
+msgid "create_domain: before get_idle_node"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:198
+#, python-format
+msgid "Created new domain: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:213
+#, python-format
+msgid "Failed to boot Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:222
+msgid "No such domain exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:226
+#, python-format
+msgid "change_domain_state: to new state %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:233
+#, python-format
+msgid "Stored fake domains to the file: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:244
+msgid "domain does not exist"
+msgstr ""
+
+#: cinder/virt/baremetal/nodes.py:42
+#, python-format
+msgid "Unknown baremetal driver %(d)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:148
+#, python-format
+msgid "Error encountered when destroying instance '%(name)s': %(ex)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:162
+#, python-format
+msgid "instance %(instance_name)s: deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:189
+#, python-format
+msgid "instance %s: rebooted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:192
+msgid "_wait_for_reboot failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:222
+#, python-format
+msgid "instance %s: rescued"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:225
+msgid "_wait_for_rescue failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:242
+msgid "<============= spawn of baremetal =============>"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:255
+#, python-format
+msgid "instance %s: is building"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:260
+msgid "Key is injected but instance is not running yet"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:265
+#, python-format
+msgid "instance %s: booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:268
+#, python-format
+msgid "~~~~~~ current state = %s ~~~~~~"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:269
+#, python-format
+msgid "instance %s spawned successfully"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:272
+#, python-format
+msgid "instance %s:not booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:274
+msgid "Bremetal assignment is overcommitted."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:354
+#, python-format
+msgid "instance %s: Creating image"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:473
+#, python-format
+msgid "instance %(inst_name)s: injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:484
+#, python-format
+msgid ""
+"instance %(inst_name)s: ignoring error injecting data into image "
+"%(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:529
+#, python-format
+msgid "instance %s: starting toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:531
+#, python-format
+msgid "instance %s: finished toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:574 cinder/virt/libvirt/connection.py:1815
+msgid ""
+"Cannot get the number of cpu, because this function is not implemented "
+"for this platform. This error can be safely ignored for now."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:714
+#, python-format
+msgid "#### RLK: cpu_arch = %s "
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:746
+msgid "Updating!"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:773 cinder/virt/libvirt/connection.py:2609
+#: cinder/virt/xenapi/host.py:129
+msgid "Updating host stats"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:185
+msgid "free_node...."
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:216
+#, python-format
+msgid "deactivate_node is called for node_id = %(id)s node_ip = %(ip)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:221
+msgid "status of node is set to 0"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:232
+msgid "rootfs is already removed"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:264
+msgid "Before ping to the bare-metal node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:275
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is ready"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:279
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is not ready, out_msg=%(out_msg)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:292
+msgid "Noting to do for tilera nodes: vmlinux is in CF"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:316
+msgid "activate_node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:330
+msgid "Node is unknown error state."
+msgstr ""
+
+#: cinder/virt/disk/api.py:165
+msgid "no capable image handler configured"
+msgstr ""
+
+#: cinder/virt/disk/api.py:178
+#, python-format
+msgid "unknown disk image handler: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:189
+msgid "image already mounted"
+msgstr ""
+
+#: cinder/virt/disk/api.py:276 cinder/virt/disk/guestfs.py:64
+#: cinder/virt/disk/guestfs.py:78 cinder/virt/disk/mount.py:100
+#, python-format
+msgid "Failed to mount filesystem: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:291
+#, python-format
+msgid "Failed to remove container: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:441
+#, python-format
+msgid "User %(username)s not found in password file."
+msgstr ""
+
+#: cinder/virt/disk/api.py:457
+#, python-format
+msgid "User %(username)s not found in shadow file."
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:39
+#, python-format
+msgid "unsupported partition: %s"
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:77
+msgid "unknown guestmount error"
+msgstr ""
+
+#: cinder/virt/disk/loop.py:30
+#, python-format
+msgid "Could not attach image to loopback: %s"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:76
+msgid "no partitions found"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:77
+#, python-format
+msgid "Failed to map partitions: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:58
+msgid "nbd unavailable: module not loaded"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:63
+msgid "No free nbd devices"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:81
+#, python-format
+msgid "qemu-nbd error: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:93
+#, python-format
+msgid "nbd device %s did not show up"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:265
+#, python-format
+msgid "Connecting to libvirt: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:286
+msgid "Connection to libvirt broke"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:388
+#, python-format
+msgid "Error from libvirt during destroy. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:400
+#, python-format
+msgid ""
+"Error from libvirt during saved instance removal. Code=%(errcode)s "
+"Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:411
+#, python-format
+msgid "Error from libvirt during undefine. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:423
+msgid "Instance destroyed successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:435
+#, python-format
+msgid "Error from libvirt during unfilter. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:461
+#, python-format
+msgid "Deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:554
+msgid "attaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:567
+msgid "detaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:692
+msgid "Instance soft rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:696
+msgid "Failed to soft reboot instance."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:725
+msgid "Instance shutdown successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:761 cinder/virt/libvirt/connection.py:905
+msgid "During reboot, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:766
+msgid "Instance rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:867 cinder/virt/xenapi/vmops.py:1358
+#, python-format
+msgid ""
+"Found %(migration_count)d unconfirmed migrations older than "
+"%(confirm_window)d seconds"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:871
+#, python-format
+msgid "Automatically confirming migration %d"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:896
+msgid "Instance is running"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:910
+msgid "Instance spawned successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:926
+#, python-format
+msgid "data: %(data)r, fpath: %(fpath)r"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:978
+msgid "Guest does not have a console available"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1020
+#, python-format
+msgid "Path '%(path)s' supports direct I/O"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1024
+#, python-format
+msgid "Path '%(path)s' does not support direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1028 cinder/virt/libvirt/connection.py:1032
+#, python-format
+msgid "Error on '%(path)s' while checking direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1153
+msgid "Creating image"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1339
+#, python-format
+msgid "Injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1349
+#, python-format
+msgid "Ignoring error injecting data into image %(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1381
+#, python-format
+msgid "block_device_list %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1658
+msgid "Starting toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1662
+msgid "Finished toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1679
+#, python-format
+msgid ""
+"Error from libvirt while looking up %(instance_name)s: [Error Code "
+"%(error_code)s] %(ex)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1920
+msgid "libvirt version is too old (does not support getVersion)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1942
+#, python-format
+msgid "'<cpu>' must be 1, but %d\n"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1969
+#, python-format
+msgid "topology (%(topology)s) must have %(ks)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2067
+#, python-format
+msgid ""
+"Instance launched has CPU info:\n"
+"%s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2079
+#, python-format
+msgid ""
+"CPU doesn't have compatibility.\n"
+"\n"
+"%(ret)s\n"
+"\n"
+"Refer to %(u)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2136
+#, python-format
+msgid "Timeout migrating for %s. nwfilter not found."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2352
+#, python-format
+msgid "skipping %(path)s since it looks like volume"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2407
+#, python-format
+msgid "Getting disk size of %(i_name)s: %(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2458
+#, python-format
+msgid "Instance %s: Starting migrate_disk_and_power_off"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2513
+msgid "During wait running, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2518
+msgid "Instance running successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2525
+#, python-format
+msgid "Instance %s: Starting finish_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2565
+#, python-format
+msgid "Instance %s: Starting finish_revert_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:42
+msgid ""
+"Libvirt module could not be loaded. NWFilterFirewall will not work "
+"correctly."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:93
+msgid "Called setup_basic_filtering in nwfilter"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:101
+msgid "Ensuring static filters"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:171
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:217
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) for%(name)s is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:233
+msgid "iptables firewall: Setup Basic Filtering"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:252
+msgid "Attempted to unfilter instance which is not filtered"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:170
+#, python-format
+msgid "%s is a valid instance name"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:173
+#, python-format
+msgid "%s has a disk file"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:175
+#, python-format
+msgid "Instance %(instance)s is backed by %(backing)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:186
+#, python-format
+msgid ""
+"Instance %(instance)s is using a backing file %(backing)s which does not "
+"appear in the image service"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:237
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification failed"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:247
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification skipped, no hash stored"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:266
+#, python-format
+msgid "Cannot remove %(base_file)s, it does not exist"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:278
+#, python-format
+msgid "Base file too young to remove: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:281
+#, python-format
+msgid "Removing base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:288
+#, python-format
+msgid "Failed to remove %(base_file)s, error was %(error)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:299
+#, python-format
+msgid "%(id)s (%(base_file)s): checking"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:318
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): in use: on this node %(local)d local, %(remote)d "
+"on other nodes"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:330
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): warning -- an absent base file is in use! "
+"instances: %(instance_list)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:338
+#, python-format
+msgid "%(id)s (%(base_file)s): in use on (%(remote)d on other nodes)"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:348
+#, python-format
+msgid "%(id)s (%(base_file)s): image is not in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:354
+#, python-format
+msgid "%(id)s (%(base_file)s): image is in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:377
+#, python-format
+msgid "Skipping verification, no base directory at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:381
+msgid "Verify base images"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:388
+#, python-format
+msgid "Image id %(id)s yields fingerprint %(fingerprint)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:406
+#, python-format
+msgid "Unknown base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:411
+#, python-format
+msgid "Active base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:414
+#, python-format
+msgid "Corrupt base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:418
+#, python-format
+msgid "Removable base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:426
+msgid "Verification complete"
+msgstr ""
+
+#: cinder/virt/libvirt/utils.py:264
+msgid "Unable to find an open port"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:90
+#, python-format
+msgid "Ensuring vlan %(vlan)s and bridge %(bridge)s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:99
+#, python-format
+msgid "Ensuring bridge %s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:165 cinder/virt/libvirt/vif.py:220
+#, python-format
+msgid "Failed while unplugging vif of instance '%s'"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:163
+#, python-format
+msgid "iSCSI device not found at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:166
+#, python-format
+msgid ""
+"ISCSI volume not yet found at: %(mount_device)s. Will rescan & retry.  "
+"Try number: %(tries)s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:178
+#, python-format
+msgid "Found iSCSI node %(mount_device)s (after %(tries)s rescans)"
+msgstr ""
+
+#: cinder/virt/vmwareapi/error_util.py:93
+#, python-format
+msgid "Error(s) %s occurred in the call to RetrieveProperties"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:44 cinder/virt/xenapi/fake.py:77
+#, python-format
+msgid "%(text)s: _db_content => %(content)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:131
+#, python-format
+msgid "Property %(attr)s not set for the managed object %(objName)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:437
+msgid "There is no VM registered"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:439 cinder/virt/vmwareapi/fake.py:609
+#, python-format
+msgid "Virtual Machine with ref %s is not there"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:502
+#, python-format
+msgid "Logging out a session that is invalid or already logged out: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:517
+msgid "Session is faulty"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:520
+msgid "Session Invalid"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:606
+msgid " No Virtual Machine has been registered yet"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:99
+#, python-format
+msgid "Glance image %s is in killed state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:107
+#, python-format
+msgid "Glance image %(image_id)s is in unknown state - %(state)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:128
+msgid ""
+"ESX SOAP server returned an empty port group for the host system in its "
+"response"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:155
+#, python-format
+msgid "Creating Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:169
+#, python-format
+msgid "Created Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/read_write_util.py:150
+#, python-format
+msgid "Exception during HTTP connection close in VMWareHTTpWrite. Exception is %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:84
+msgid "Unable to import suds."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:90
+msgid "Must specify vmwareapi_wsdl_loc"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:145
+#, python-format
+msgid "No such SOAP method '%s' provided by VI SDK"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:150
+#, python-format
+msgid "httplib error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:157
+#, python-format
+msgid "Socket error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:162
+#, python-format
+msgid "Type error in  %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:166
+#, python-format
+msgid "Exception in %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:66
+msgid "Getting list of instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:82
+#, python-format
+msgid "Got total of %s instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:126
+msgid "Couldn't get a local Datastore reference"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:196
+#, python-format
+msgid "Creating VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:205
+#, python-format
+msgid "Created VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:234
+#, python-format
+msgid ""
+"Creating Virtual Disk of size  %(vmdk_file_size_in_kb)s KB and adapter "
+"type  %(adapter_type)s on the ESX host local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:251
+#, python-format
+msgid ""
+"Created Virtual Disk of size %(vmdk_file_size_in_kb)s KB on the ESX host "
+"local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:260
+#, python-format
+msgid ""
+"Deleting the file %(flat_uploaded_vmdk_path)s on the ESX host localstore "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:272
+#, python-format
+msgid ""
+"Deleted the file %(flat_uploaded_vmdk_path)s on the ESX host local store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:283
+#, python-format
+msgid ""
+"Downloading image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:298
+#, python-format
+msgid ""
+"Downloaded image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:315
+#, python-format
+msgid "Reconfiguring VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:322
+#, python-format
+msgid "Reconfigured VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:329
+#, python-format
+msgid "Powering on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:335
+#, python-format
+msgid "Powered on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:381
+#, python-format
+msgid "Creating Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:391
+#, python-format
+msgid "Created Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:434
+#, python-format
+msgid "Copying disk data before snapshot of the VM  instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:447
+#, python-format
+msgid "Copied disk data before snapshot of the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:456
+#, python-format
+msgid "Uploading image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:469
+#, python-format
+msgid "Uploaded image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:479
+#, python-format
+msgid "Deleting temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:488
+#, python-format
+msgid "Deleted temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:520
+msgid "instance is not powered on"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:527
+#, python-format
+msgid "Rebooting guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:530
+#, python-format
+msgid "Rebooted guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:532
+#, python-format
+msgid "Doing hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:536
+#, python-format
+msgid "Did hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:548
+#, python-format
+msgid "instance - %s not present"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:567
+#, python-format
+msgid "Powering off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:572
+#, python-format
+msgid "Powered off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:576
+#, python-format
+msgid "Unregistering the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:579
+#, python-format
+msgid "Unregistered the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:581
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while un-registering the "
+"VM: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:592
+#, python-format
+msgid "Deleting contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:602
+#, python-format
+msgid "Deleted contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:607
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while deleting the VM "
+"contents from the disk: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:615
+msgid "pause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:619
+msgid "unpause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:633
+#, python-format
+msgid "Suspending the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:637
+#, python-format
+msgid "Suspended the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:640
+msgid "instance is powered off and can not be suspended."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:643
+#, python-format
+msgid "VM %s was already in suspended state. So returning without doing anything"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:656
+#, python-format
+msgid "Resuming the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:661
+#, python-format
+msgid "Resumed the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:663
+msgid "instance is not in a suspended state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:699
+msgid "get_diagnostics not implemented for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:757
+#, python-format
+msgid ""
+"Reconfiguring VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:765
+#, python-format
+msgid ""
+"Reconfigured VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:802
+#, python-format
+msgid "Creating directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:806
+#, python-format
+msgid "Created directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:89
+#, python-format
+msgid "Downloading image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:103
+#, python-format
+msgid "Downloaded image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:108
+#, python-format
+msgid "Uploading image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:129
+#, python-format
+msgid "Uploaded image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:139
+#, python-format
+msgid "Getting image size for the image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:143
+#, python-format
+msgid "Got image size of %(size)s for the image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:553 cinder/virt/xenapi/fake.py:652
+#: cinder/virt/xenapi/fake.py:670 cinder/virt/xenapi/fake.py:732
+msgid "Raising NotImplemented"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:555
+#, python-format
+msgid "xenapi.fake does not have an implementation for %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:589
+#, python-format
+msgid "Calling %(localname)s %(impl)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:594
+#, python-format
+msgid "Calling getter %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:654
+#, python-format
+msgid ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:67
+#, python-format
+msgid ""
+"Instance %(name)s running on %(host)s could not be found in the database:"
+" assuming it is a worker VM and skipping migration to a new host"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:137
+#, python-format
+msgid "Unable to get SR for this host: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:169
+msgid "Unable to get updated status"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:172
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:37
+#, python-format
+msgid "Found non-unique network for name_label %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:55
+#, python-format
+msgid "Found non-unique network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:58
+#, python-format
+msgid "Found no network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:111
+#, python-format
+msgid "Unable to eject %(host)s from the pool; pool not empty"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:126
+#, python-format
+msgid "Unable to eject %(host)s from the pool; No master found"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:143
+#, python-format
+msgid "Pool-Join failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:146
+#, python-format
+msgid "Unable to join %(host)s in the pool"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:162
+#, python-format
+msgid "Pool-eject failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:174
+#, python-format
+msgid "Unable to set up pool: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:185
+#, python-format
+msgid "Pool-set_name_label failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:103
+#, python-format
+msgid "Found no PIF for device %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:122
+#, python-format
+msgid ""
+"PIF %(pif_rec['uuid'])s for network %(bridge)s has VLAN id %(pif_vlan)d. "
+"Expected %(vlan_num)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:218
+msgid "Created VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:245
+#, python-format
+msgid "VBD not found in instance %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:262
+#, python-format
+msgid "VBD %s already detached"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:265
+#, python-format
+msgid "VBD %(vbd_ref)s detach rejected, attempt %(num_attempt)d/%(max_attempts)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:270
+#, python-format
+msgid "Unable to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:275
+#, python-format
+msgid "Reached maximum number of retries trying to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:286
+#, python-format
+msgid "Unable to destroy VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:305
+#, python-format
+msgid "Creating %(vbd_type)s-type VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:308
+#, python-format
+msgid "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:319
+#, python-format
+msgid "Unable to destroy VDI %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:336
+#, python-format
+msgid ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:345
+#, python-format
+msgid "Copied VDI %(vdi_ref)s from VDI %(vdi_to_copy_ref)s on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:353
+#, python-format
+msgid "Cloned VDI %(vdi_ref)s from VDI %(vdi_to_clone_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:372
+#, python-format
+msgid "No primary VDI found for %(vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:379
+#, python-format
+msgid "Snapshotting with label '%(label)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:392
+#, python-format
+msgid "Created snapshot %(template_vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:431
+#, python-format
+msgid "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:583
+#, python-format
+msgid "Creating blank HD of size %(req_size)d gigs"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:634
+#, python-format
+msgid ""
+"Fast cloning is only supported on default local SR of type ext. SR on "
+"this system was found to be of type %(sr_type)s. Ignoring the cow flag."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:724
+#, python-format
+msgid ""
+"download_vhd %(image)s attempt %(attempt_num)d/%(max_attempts)d from "
+"%(glance_host)s:%(glance_port)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:734
+#, python-format
+msgid "download_vhd failed: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:750
+#, python-format
+msgid "Asking xapi to fetch vhd image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:760
+#, python-format
+msgid ""
+"xapi 'download_vhd' returned VDI of type '%(vdi_type)s' with UUID "
+"'%(vdi_uuid)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:789
+#, python-format
+msgid "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:805
+#, python-format
+msgid "image_size_bytes=%(size_bytes)d, allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:809
+#, python-format
+msgid ""
+"Image size %(size_bytes)d exceeded instance_type allowed size "
+"%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:831
+#, python-format
+msgid "Fetching image %(image)s, type %(image_type_str)"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:844
+#, python-format
+msgid "Size for image %(image)s: %(virtual_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:853
+#, python-format
+msgid ""
+"Kernel/Ramdisk image is too large: %(vdi_size)d bytes, max %(max_size)d "
+"bytes"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:870
+#, python-format
+msgid "Copying VDI %s to /boot/guest on dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:884
+#, python-format
+msgid "Kernel/Ramdisk VDI %s destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:895
+msgid "Failed to fetch glance image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:934
+#, python-format
+msgid "Detected %(image_type_str)s format for image %(image_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:955
+#, python-format
+msgid "Looking up vdi %s for PV kernel"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:973
+#, python-format
+msgid "Unknown image format %(disk_image_type)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1016
+#, python-format
+msgid "VDI %s is still available"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1059
+#, python-format
+msgid "(VM_UTILS) xenserver vm state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1061
+#, python-format
+msgid "(VM_UTILS) xenapi power_state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1088
+#, python-format
+msgid "Unable to parse rrd of %(vm_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1108
+#, python-format
+msgid "Re-scanning SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1136
+#, python-format
+msgid "Flag sr_matching_filter '%s' does not respect formatting convention"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1154
+msgid ""
+"XenAPI is unable to find a Storage Repository to install guest instances "
+"on. Please check your configuration and/or configure the flag "
+"'sr_matching_filter'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1167
+msgid "Cannot find SR of content-type ISO"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1175
+#, python-format
+msgid "ISO: looking at SR %(sr_rec)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1177
+msgid "ISO: not iso content"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1180
+msgid "ISO: iso content_type, no 'i18n-key' key"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1183
+msgid "ISO: iso content_type, i18n-key value not 'local-storage-iso'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1187
+msgid "ISO: SR MATCHing our criteria"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1189
+msgid "ISO: ISO, looking to see if it is host local"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1192
+#, python-format
+msgid "ISO: PBD %(pbd_ref)s disappeared"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1195
+#, python-format
+msgid "ISO: PBD matching, want %(pbd_rec)s, have %(host)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1198
+msgid "ISO: SR with local PBD"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1220
+#, python-format
+msgid ""
+"Unable to obtain RRD XML for VM %(vm_uuid)s with server details: "
+"%(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1236
+#, python-format
+msgid "Unable to obtain RRD XML updates with server details: %(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1290
+#, python-format
+msgid "Invalid statistics data from Xenserver: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1343
+#, python-format
+msgid "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1417
+#, python-format
+msgid ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1427
+#, python-format
+msgid "VHD coalesce attempts exceeded (%(max_attempts)d), giving up..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1462
+#, python-format
+msgid "Timeout waiting for device %s to be created"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1473
+#, python-format
+msgid "Plugging VBD %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1476
+#, python-format
+msgid "Plugging VBD %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1478
+#, python-format
+msgid "VBD %(vbd_ref)s plugged as %(orig_dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1481
+#, python-format
+msgid "VBD %(vbd_ref)s plugged into wrong dev, remapping to %(dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1490
+#, python-format
+msgid "Destroying VBD for VDI %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1498
+#, python-format
+msgid "Destroying VBD for VDI %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1511
+#, python-format
+msgid "Running pygrub against %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1518
+#, python-format
+msgid "Found Xen kernel %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1520
+msgid "No Xen kernel found.  Booting HVM."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1533
+msgid "Partitions:"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1539
+#, python-format
+msgid "  %(num)s: %(ptype)s %(size)d sectors"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1565
+#, python-format
+msgid ""
+"Writing partition table %(primary_first)d %(primary_last)d to "
+"%(dev_path)s..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1578
+#, python-format
+msgid "Writing partition table %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1632
+#, python-format
+msgid ""
+"Starting sparse_copy src=%(src_path)s dst=%(dst_path)s "
+"virtual_size=%(virtual_size)d block_size=%(block_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1664
+#, python-format
+msgid ""
+"Finished sparse_copy in %(duration).2f secs, %(compression_pct).2f%% "
+"reduction in size"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1714
+msgid ""
+"XenServer tools installed in this image are capable of network injection."
+"  Networking files will not bemanipulated"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1722
+msgid ""
+"XenServer tools are present in this image but are not capable of network "
+"injection"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1726
+msgid "XenServer tools are not installed in this image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1742
+msgid "Manipulating interface files directly"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1751
+#, python-format
+msgid "Failed to mount filesystem (expected for non-linux instances): %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:131 cinder/virt/xenapi/vmops.py:722
+#, python-format
+msgid "Updating progress to %(progress)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:231
+#, python-format
+msgid "Attempted to power on non-existent instance bad instance id %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:233
+msgid "Starting instance"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:303
+msgid "Removing kernel/ramdisk files from dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:358
+msgid "Failed to spawn, rolling back"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:443
+msgid "Detected ISO image type, creating blank VM for install"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:462
+msgid "Auto configuring disk, attempting to resize partition..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:515
+#, python-format
+msgid "Invalid value for injected_files: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:520
+#, python-format
+msgid "Injecting file path: '%s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:527
+msgid "Setting admin password"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:531
+msgid "Resetting network"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:538
+msgid "Setting VCPU weight"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:544
+msgid "Starting VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:551
+#, python-format
+msgid ""
+"Latest agent build for %(hypervisor)s/%(os)s/%(architecture)s is "
+"%(version)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:554
+#, python-format
+msgid "No agent build found for %(hypervisor)s/%(os)s/%(architecture)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:561
+msgid "Waiting for instance state to become running"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:573
+msgid "Querying agent version"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:576
+#, python-format
+msgid "Instance agent version: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:581
+#, python-format
+msgid "Updating Agent to %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:616
+#, python-format
+msgid "No opaque_ref could be determined for '%s'."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:670
+msgid "Finished snapshot and upload for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:677
+msgid "Starting snapshot for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:686
+#, python-format
+msgid "Unable to Snapshot instance: %(exc)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:702
+msgid "Failed to transfer vhd to new host"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:770
+#, python-format
+msgid "Resizing down VDI %(cow_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:893
+#, python-format
+msgid "Resizing up VDI %(vdi_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:901
+msgid "Resize complete"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:928
+#, python-format
+msgid "Failed to query agent version: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:949
+#, python-format
+msgid "domid changed from %(domid)s to %(newdomid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:962
+#, python-format
+msgid "Failed to update agent: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:983
+#, python-format
+msgid "Failed to exchange keys: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:998
+#, python-format
+msgid "Failed to update password: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1023
+#, python-format
+msgid "Failed to inject file: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1032
+msgid "VM already halted, skipping shutdown..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1036
+msgid "Shutting down VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1054
+msgid "Unable to find VBD for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1097
+msgid "Using RAW or VHD, skipping kernel and ramdisk deletion"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1104
+msgid "instance has a kernel or ramdisk but not both"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1111
+msgid "kernel/ramdisk files removed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1121
+msgid "VM destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1147
+msgid "Destroying VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1169
+msgid "VM is not present, skipping destroy..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1222
+#, python-format
+msgid "Instance is already in Rescue Mode: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1296
+#, python-format
+msgid "Found %(instance_count)d hung reboots older than %(timeout)d seconds"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1300
+msgid "Automatically hard rebooting"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1363
+#, python-format
+msgid "Setting migration %(migration_id)s to error: %(reason)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1374
+#, python-format
+msgid ""
+"Automatically confirming migration %(migration_id)s for instance "
+"%(instance_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1379
+#, python-format
+msgid "Instance %(instance_uuid)s not found"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1383
+msgid "In ERROR state"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1389
+#, python-format
+msgid "In %(task_state)s task_state, not RESIZE_VERIFY"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1396
+#, python-format
+msgid "Error auto-confirming resize: %(e)s. Will retry later."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1418
+msgid "Could not get bandwidth info."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1469
+msgid "Injecting network info to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1483
+msgid "Creating vifs"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1492
+#, python-format
+msgid "Creating VIF for network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1495
+#, python-format
+msgid "Created VIF %(vif_ref)s, network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1520
+msgid "Injecting hostname to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1545
+#, python-format
+msgid ""
+"The agent call to %(method)s returned an invalid response: %(ret)r. "
+"path=%(path)s; args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1566
+#, python-format
+msgid "TIMEOUT: The call to %(method)s timed out. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1570
+#, python-format
+msgid ""
+"NOT IMPLEMENTED: The call to %(method)s is not supported by the agent. "
+"args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1575
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1661
+#, python-format
+msgid "OpenSSL error: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:52
+msgid "creating sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:55 cinder/virt/xenapi/volume_utils.py:83
+#, python-format
+msgid "type is = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:58 cinder/virt/xenapi/volume_utils.py:86
+#, python-format
+msgid "name = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:71
+#, python-format
+msgid "Created %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:76 cinder/virt/xenapi/volume_utils.py:174
+msgid "Unable to create Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:80
+msgid "introducing sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:103 cinder/virt/xenapi/volume_utils.py:170
+#: cinder/virt/xenapi/volumeops.py:156
+#, python-format
+msgid "Introduced %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:106
+msgid "Creating pbd for SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:108
+msgid "Plugging SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:116 cinder/virt/xenapi/volumeops.py:160
+msgid "Unable to introduce Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:127 cinder/virt/xenapi/volumeops.py:50
+msgid "Unable to get SR using uuid"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:129
+#, python-format
+msgid "Forgetting SR %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:137
+msgid "Unable to forget Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:157
+#, python-format
+msgid "Introducing %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:186
+#, python-format
+msgid "Unable to find SR from VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:204
+#, python-format
+msgid "Ignoring exception %(exc)s when getting PBDs for %(sr_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:210
+#, python-format
+msgid "Ignoring exception %(exc)s when unplugging PBD %(pbd)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:234
+#, python-format
+msgid "Unable to introduce VDI on SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:242
+#, python-format
+msgid "Unable to get record of VDI %s on"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:264
+#, python-format
+msgid "Unable to introduce VDI for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:274
+#, python-format
+msgid "Error finding vdis in SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:281
+#, python-format
+msgid "Unable to find vbd for vdi %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:315
+#, python-format
+msgid "Unable to obtain target information %(data)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:341
+#, python-format
+msgid "Mountpoint cannot be translated: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:64
+msgid "Could not find VDI ref"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:69
+#, python-format
+msgid "Creating SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:73
+msgid "Could not create SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:76
+msgid "Could not retrieve SR record"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:81
+#, python-format
+msgid "Introducing SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:85
+msgid "SR found in xapi database. No need to introduce"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:90
+msgid "Could not introduce SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:94
+#, python-format
+msgid "Checking for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:106
+#, python-format
+msgid "SR %s not found in the xapi database"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:112
+msgid "Could not forget SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:121
+#, python-format
+msgid "Attach_volume: %(connection_info)s, %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:178
+#, python-format
+msgid "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:189
+#, python-format
+msgid "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:197
+#, python-format
+msgid "Unable to attach volume to instance %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:200
+#, python-format
+msgid "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:210
+#, python-format
+msgid "Detach_volume: %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:219
+#, python-format
+msgid "Unable to locate volume %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:227
+#, python-format
+msgid "Unable to detach volume %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:232
+#, python-format
+msgid "Unable to destroy vbd %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:239
+#, python-format
+msgid "Error purging SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:241
+#, python-format
+msgid "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:98 cinder/vnc/xvp_proxy.py:103
+#, python-format
+msgid "Error in handshake: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:119
+#, python-format
+msgid "Invalid request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:139
+#, python-format
+msgid "Request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:142
+#, python-format
+msgid "Request made with missing token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:153
+#, python-format
+msgid "Request made with invalid token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:160
+#, python-format
+msgid "Unexpected error: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:180
+#, python-format
+msgid "Starting cinder-xvpvncproxy node (version %s)"
+msgstr ""
+
+#: cinder/volume/api.py:74 cinder/volume/api.py:220
+msgid "status must be available"
+msgstr ""
+
+#: cinder/volume/api.py:85
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to create %(size)sG volume"
+msgstr ""
+
+#: cinder/volume/api.py:137
+msgid "Volume status must be available or error"
+msgstr ""
+
+#: cinder/volume/api.py:142
+#, python-format
+msgid "Volume still has %d dependent snapshots"
+msgstr ""
+
+#: cinder/volume/api.py:223
+msgid "already attached"
+msgstr ""
+
+#: cinder/volume/api.py:230
+msgid "already detached"
+msgstr ""
+
+#: cinder/volume/api.py:292
+msgid "must be available"
+msgstr ""
+
+#: cinder/volume/api.py:325
+msgid "Volume Snapshot status must be available or error"
+msgstr ""
+
+#: cinder/volume/driver.py:96
+#, python-format
+msgid "Recovering from a failed execute.  Try number %s"
+msgstr ""
+
+#: cinder/volume/driver.py:106
+#, python-format
+msgid "volume group %s doesn't exist"
+msgstr ""
+
+#: cinder/volume/driver.py:270
+#, python-format
+msgid "Skipping ensure_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:318
+#, python-format
+msgid "Skipping remove_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:327
+#, python-format
+msgid ""
+"Skipping remove_export. No iscsi_target is presently exported for volume:"
+" %d"
+msgstr ""
+
+#: cinder/volume/driver.py:337
+msgid "ISCSI provider_location not stored, using discovery"
+msgstr ""
+
+#: cinder/volume/driver.py:384
+#, python-format
+msgid "Could not find iSCSI export  for volume %s"
+msgstr ""
+
+#: cinder/volume/driver.py:388
+#, python-format
+msgid "ISCSI Discovery: Found %s"
+msgstr ""
+
+#: cinder/volume/driver.py:466
+#, python-format
+msgid "Cannot confirm exported volume id:%(volume_id)s."
+msgstr ""
+
+#: cinder/volume/driver.py:493
+#, python-format
+msgid "FAKE ISCSI: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:505
+#, python-format
+msgid "rbd has no pool %s"
+msgstr ""
+
+#: cinder/volume/driver.py:579
+#, python-format
+msgid "Sheepdog is not working: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:581
+msgid "Sheepdog is not working"
+msgstr ""
+
+#: cinder/volume/driver.py:680 cinder/volume/driver.py:685
+#, python-format
+msgid "LoggingVolumeDriver: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:96
+#, python-format
+msgid "Re-exporting %s volumes"
+msgstr ""
+
+#: cinder/volume/manager.py:101
+#, python-format
+msgid "volume %s: skipping export"
+msgstr ""
+
+#: cinder/volume/manager.py:107
+#, python-format
+msgid "volume %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:119
+#, python-format
+msgid "volume %(vol_name)s: creating lv of size %(vol_size)sG"
+msgstr ""
+
+#: cinder/volume/manager.py:131
+#, python-format
+msgid "volume %s: creating export"
+msgstr ""
+
+#: cinder/volume/manager.py:144
+#, python-format
+msgid "volume %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:153
+msgid "Volume is still attached"
+msgstr ""
+
+#: cinder/volume/manager.py:155
+msgid "Volume is not local to this node"
+msgstr ""
+
+#: cinder/volume/manager.py:159
+#, python-format
+msgid "volume %s: removing export"
+msgstr ""
+
+#: cinder/volume/manager.py:161
+#, python-format
+msgid "volume %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:164
+#, python-format
+msgid "volume %s: volume is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:176
+#, python-format
+msgid "volume %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:183
+#, python-format
+msgid "snapshot %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:187
+#, python-format
+msgid "snapshot %(snap_name)s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:202
+#, python-format
+msgid "snapshot %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:211
+#, python-format
+msgid "snapshot %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:214
+#, python-format
+msgid "snapshot %s: snapshot is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:226
+#, python-format
+msgid "snapshot %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:310
+msgid "Checking volume capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:314
+#, python-format
+msgid "New capabilities found: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:325
+msgid "Clear capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:329
+#, python-format
+msgid "Notification {%s} received"
+msgstr ""
+
+#: cinder/volume/netapp.py:79
+#, python-format
+msgid "API %(name)sfailed: %(reason)s"
+msgstr ""
+
+#: cinder/volume/netapp.py:109
+#, python-format
+msgid "%s is not set"
+msgstr ""
+
+#: cinder/volume/netapp.py:128
+msgid "Connected to DFM server"
+msgstr ""
+
+#: cinder/volume/netapp.py:159
+#, python-format
+msgid "Job failed: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:240
+msgid "Failed to provision dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:252
+msgid "No LUN was created by the provision job"
+msgstr ""
+
+#: cinder/volume/netapp.py:261 cinder/volume/netapp.py:433
+#, python-format
+msgid "Failed to find LUN ID for volume %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:280
+msgid "Failed to remove and delete dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:603 cinder/volume/netapp.py:657
+#, python-format
+msgid "No LUN ID for volume %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:607 cinder/volume/netapp.py:661
+#, python-format
+msgid "Failed to get LUN details for LUN ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:614
+#, python-format
+msgid "Failed to get host details for host ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:620
+#, python-format
+msgid "Failed to get target portal for filer: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:625
+#, python-format
+msgid "Failed to get target IQN for filer: %s"
+msgstr ""
+
+#: cinder/volume/san.py:113 cinder/volume/san.py:151
+msgid "Specify san_password or san_private_key"
+msgstr ""
+
+#: cinder/volume/san.py:156
+msgid "san_ip must be set"
+msgstr ""
+
+#: cinder/volume/san.py:320
+#, python-format
+msgid "LUID not found for %(zfs_poolname)s. Output=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:452
+#, python-format
+msgid "CLIQ command returned %s"
+msgstr ""
+
+#: cinder/volume/san.py:458
+#, python-format
+msgid "Malformed response to CLIQ command %(verb)s %(cliq_args)s. Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:466
+#, python-format
+msgid "Error running CLIQ command %(verb)s %(cliq_args)s.  Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:496
+#, python-format
+msgid ""
+"Unexpected number of virtual ips for cluster  %(cluster_name)s. "
+"Result=%(_xml)s"
+msgstr ""
+
+#: cinder/volume/san.py:549
+#, python-format
+msgid "Volume info: %(volume_name)s => %(volume_attributes)s"
+msgstr ""
+
+#: cinder/volume/san.py:594
+msgid "local_path not supported"
+msgstr ""
+
+#: cinder/volume/san.py:626
+#, python-format
+msgid "Could not determine project for volume %s, can't export"
+msgstr ""
+
+#: cinder/volume/san.py:696
+#, python-format
+msgid "Payload for SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:713
+#, python-format
+msgid "Call to json.loads() raised an exception: %s"
+msgstr ""
+
+#: cinder/volume/san.py:718
+#, python-format
+msgid "Results of SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:732
+#, python-format
+msgid "Found solidfire account: %s"
+msgstr ""
+
+#: cinder/volume/san.py:746
+#, python-format
+msgid "solidfire account: %s does not exist, create it..."
+msgstr ""
+
+#: cinder/volume/san.py:804
+msgid "Enter SolidFire create_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:846
+msgid "Leaving SolidFire create_volume"
+msgstr ""
+
+#: cinder/volume/san.py:861
+msgid "Enter SolidFire delete_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:880
+#, python-format
+msgid "Deleting volumeID: %s "
+msgstr ""
+
+#: cinder/volume/san.py:888
+msgid "Leaving SolidFire delete_volume"
+msgstr ""
+
+#: cinder/volume/san.py:891
+msgid "Executing SolidFire ensure_export..."
+msgstr ""
+
+#: cinder/volume/san.py:895
+msgid "Executing SolidFire create_export..."
+msgstr ""
+
+#: cinder/volume/volume_types.py:49 cinder/volume/volume_types.py:108
+msgid "name cannot be None"
+msgstr ""
+
+#: cinder/volume/volume_types.py:96
+msgid "id cannot be None"
+msgstr ""
+
+#: cinder/volume/xensm.py:55
+#, python-format
+msgid "SR name = %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:56
+#, python-format
+msgid "Params: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:60
+#, python-format
+msgid "Failed to create sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:62
+msgid "Create failed"
+msgstr ""
+
+#: cinder/volume/xensm.py:64
+#, python-format
+msgid "SR UUID of new SR is: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:71
+msgid "Failed to update db"
+msgstr ""
+
+#: cinder/volume/xensm.py:80
+#, python-format
+msgid "Failed to introduce sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:91
+#, python-format
+msgid "Failed to reach backend %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:100
+msgid "XenSMDriver requires xenapi connection"
+msgstr ""
+
+#: cinder/volume/xensm.py:110
+msgid "Failed to initiate session"
+msgstr ""
+
+#: cinder/volume/xensm.py:142
+#, python-format
+msgid "Volume will be created in backend - %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:154
+msgid "Failed to update volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:157
+msgid "Unable to create volume"
+msgstr ""
+
+#: cinder/volume/xensm.py:171
+msgid "Failed to delete vdi"
+msgstr ""
+
+#: cinder/volume/xensm.py:177
+msgid "Failed to delete volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:210
+msgid "Failed to find volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:221
+msgid "Failed to find backend in db"
+msgstr ""
+
+#: cinder/volume/nexenta/__init__.py:27
+msgid "Nexenta SA returned the error"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:64
+#, python-format
+msgid "Sending JSON data: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:69
+#, python-format
+msgid "Auto switching to HTTPS connection to %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:75
+msgid "No headers in server response"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:76
+msgid "Bad response from server"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:79
+#, python-format
+msgid "Got response: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:96
+#, python-format
+msgid "Volume %s does not exist in Nexenta SA"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:180
+msgid ""
+"Call to local_path should not happen. Verify that use_local_volumes flag "
+"is turned off."
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:202
+#, python-format
+msgid "Ignored target creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:210
+#, python-format
+msgid "Ignored target group creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:219
+#, python-format
+msgid "Ignored target group member addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:227
+#, python-format
+msgid "Ignored LU creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:237
+#, python-format
+msgid "Ignored LUN mapping entry addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:273
+#, python-format
+msgid ""
+"Got error trying to destroy target group %(target_group)s, assuming it is"
+" already gone: %(exc)s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:280
+#, python-format
+msgid ""
+"Got error trying to delete target %(target)s, assuming it is already "
+"gone: %(exc)s"
+msgstr ""
+
+#~ msgid "Unable to locate account %(account_name) on Solidfire device"
+#~ msgstr ""
+
+#~ msgid "Zone %(zone_id)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Cinder access parameters were not specified."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(id)d could not be found."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(name)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Detected more than one volume with name %(vol_name)"
+#~ msgstr ""
+
+#~ msgid "Detected existing vlan with id %(vlan)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab semaphore \"%(lock)s\" "
+#~ "for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab file lock "
+#~ "\"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Parent group id and group id cannot be same"
+#~ msgstr ""
+
+#~ msgid "No body provided"
+#~ msgstr ""
+
+#~ msgid "Create VSA %(display_name)s of type %(vc_type)s"
+#~ msgstr ""
+
+#~ msgid "Delete VSA with id: %s"
+#~ msgstr ""
+
+#~ msgid "Associate address %(ip)s to VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "Disassociate address from VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "%(obj)s with ID %(id)s not found"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(obj)s with ID %(id)s belongs to "
+#~ "VSA %(own_vsa_id)s and not to VSA "
+#~ "%(vsa_id)s."
+#~ msgstr ""
+
+#~ msgid "Index. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Detail. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Create. vsa_id=%(vsa_id)s, body=%(body)s"
+#~ msgstr ""
+
+#~ msgid "Create volume of %(size)s GB from VSA ID %(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Update %(obj)s with id: %(id)s, changes: %(changes)s"
+#~ msgstr ""
+
+#~ msgid "Delete. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Show. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Index instances for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You cannot run"
+#~ " any more instances of this type."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You can only"
+#~ " run %s more instances of this "
+#~ "type."
+#~ msgstr ""
+
+#~ msgid "Going to try to soft delete %s"
+#~ msgstr ""
+
+#~ msgid "No host for instance %s, deleting immediately"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to stop %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to start %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Going to force the deletion of the"
+#~ " vm %(instance_uuid)s, even if it is"
+#~ " deleted"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s did not exist "
+#~ "in the DB, but I will shut "
+#~ "it down anyway using a special "
+#~ "context"
+#~ msgstr ""
+
+#~ msgid "exception terminating the instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "trying to destroy already destroyed instance: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(name)s found in database but"
+#~ " not known by hypervisor. Setting "
+#~ "power state to NOSTATE"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Detected instance  with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Destroying instance with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid "SQL connection failed (%(connstring)s). %(attempts)d attempts left."
+#~ msgstr ""
+
+#~ msgid "Can't downgrade without losing data"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_id)s not found"
+#~ msgstr ""
+
+#~ msgid "Network %s has active ports, cannot delete"
+#~ msgstr ""
+
+#~ msgid "No fixed IPs to deallocate for vif %sid"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "AMQP server on %(fl_host)s:%(fl_port)d is "
+#~ "unreachable: %(e)s. Trying again in "
+#~ "%(fl_intv)d seconds."
+#~ msgstr ""
+
+#~ msgid "Unable to connect to AMQP server after %(tries)d tries. Shutting down."
+#~ msgstr ""
+
+#~ msgid "Reconnected to queue"
+#~ msgstr ""
+
+#~ msgid "Failed to fetch message from queue: %s"
+#~ msgstr ""
+
+#~ msgid "Initing the Adapter Consumer for %s"
+#~ msgstr ""
+
+#~ msgid "Created \"%(exchange)s\" fanout exchange with \"%(key)s\" routing key"
+#~ msgstr ""
+
+#~ msgid "Exception while processing consumer"
+#~ msgstr ""
+
+#~ msgid "Creating \"%(exchange)s\" fanout exchange"
+#~ msgstr ""
+
+#~ msgid "response %s"
+#~ msgstr ""
+
+#~ msgid "topic is %s"
+#~ msgstr ""
+
+#~ msgid "message %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Cannot confirm tmpfile at %(ipath)s is"
+#~ " on same shared storage between "
+#~ "%(src)s and %(dest)s."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of memory(host:%(avail)s <= "
+#~ "instance:%(mem_inst)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of disk(host:%(available)s <="
+#~ " instance:%(necessary)s)"
+#~ msgstr ""
+
+#~ msgid "Driver Method %(driver_method)s missing: %(e)s.Reverting to schedule()"
+#~ msgstr ""
+
+#~ msgid "Setting instance %(instance_uuid)s to ERROR state."
+#~ msgstr ""
+
+#~ msgid "_filter_hosts: %(request_spec)s"
+#~ msgstr ""
+
+#~ msgid "Filter hosts for drive type %s"
+#~ msgstr ""
+
+#~ msgid "Host %s has no free capacity. Skip"
+#~ msgstr ""
+
+#~ msgid "Filter hosts: %s"
+#~ msgstr ""
+
+#~ msgid "Must implement host selection mechanism"
+#~ msgstr ""
+
+#~ msgid "Maximum number of hosts selected (%d)"
+#~ msgstr ""
+
+#~ msgid "Selected excessive host %(host)s"
+#~ msgstr ""
+
+#~ msgid "Provision volume %(name)s of size %(size)s GB on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "volume_params %(volume_params)s"
+#~ msgstr ""
+
+#~ msgid "%(i)d: Volume %(name)s"
+#~ msgstr ""
+
+#~ msgid "Attempting to spawn %(num_volumes)d volume(s)"
+#~ msgstr ""
+
+#~ msgid "Error creating volumes"
+#~ msgstr ""
+
+#~ msgid "Non-VSA volume %d"
+#~ msgstr ""
+
+#~ msgid "Spawning volume %(volume_id)s with drive type %(drive_type)s"
+#~ msgstr ""
+
+#~ msgid "Error creating volume"
+#~ msgstr ""
+
+#~ msgid "No capability selected for volume of size %(size)s"
+#~ msgstr ""
+
+#~ msgid "Host %s:"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\tDrive %(qosgrp)-25s: total %(total)2s, "
+#~ "used %(used)2s, free %(free)2s. Available "
+#~ "capacity %(avail)-5s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t LeastUsedHost: Best host: %(best_host)s."
+#~ " (used capacity %(min_used)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t MostAvailCap: Best host: %(best_host)s. "
+#~ "(available %(max_avail)s %(type_str)s)"
+#~ msgstr ""
+
+#~ msgid "(%(nm)s) publish (key: %(routing_key)s) %(message)s"
+#~ msgstr ""
+
+#~ msgid "Publishing to route %s"
+#~ msgstr ""
+
+#~ msgid "Declaring queue %s"
+#~ msgstr ""
+
+#~ msgid "Declaring exchange %s"
+#~ msgstr ""
+
+#~ msgid "Binding %(queue)s to %(exchange)s with key %(routing_key)s"
+#~ msgstr ""
+
+#~ msgid "Getting from %(queue)s: %(message)s"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate wrong VSA name. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate DB error. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: user_data = %s"
+#~ msgstr ""
+
+#~ msgid "_create: param=%s"
+#~ msgstr ""
+
+#~ msgid "Host %s"
+#~ msgstr ""
+
+#~ msgid "Test: provision vol %(name)s on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "\t vol=%(vol)s"
+#~ msgstr ""
+
+#~ msgid "Test: VSA update request: vsa_id=%(vsa_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume create: %s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get request: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume update request: id=%(volume_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: success    %(result)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: %(status)s    %(error_info)s"
+#~ msgstr ""
+
+#~ msgid "Unable to get updated status: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "deactivate_node is called for                "
+#~ "node_id = %(id)s node_ip = %(ip)s"
+#~ msgstr ""
+
+#~ msgid "virsh said: %r"
+#~ msgstr ""
+
+#~ msgid "cool, it's a device"
+#~ msgstr ""
+
+#~ msgid "Unable to read LXC console"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "to xml...\n"
+#~ ":%s "
+#~ msgstr ""
+
+#~ msgid "During wait running, %s disappeared."
+#~ msgstr ""
+
+#~ msgid "Instance %s running successfully."
+#~ msgstr ""
+
+#~ msgid "The nwfilter(%(instance_secgroup_filter_name)s) is not found."
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image verification failed"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): image "
+#~ "verification skipped, no hash stored"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): checking"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in use:"
+#~ " on this node %(local)d local, "
+#~ "%(remote)d on other nodes"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): warning "
+#~ "-- an absent base file is in "
+#~ "use! instances: %(instance_list)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in: on"
+#~ " other nodes (%(remote)d on other "
+#~ "nodes)"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is not in use"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is in use"
+#~ msgstr ""
+
+#~ msgid "Created VM %s..."
+#~ msgstr ""
+
+#~ msgid "Created VM %(instance_name)s as %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Creating a CDROM-specific VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Created a CDROM-specific VBD %(vbd_ref)s"
+#~ "  for VM %(vm_ref)s, VDI %(vdi_ref)s."
+#~ msgstr ""
+
+#~ msgid "No primary VDI found for%(vm_ref)s"
+#~ msgstr ""
+
+#~ msgid "Snapshotting VM %(vm_ref)s with label '%(label)s'..."
+#~ msgstr ""
+
+#~ msgid "Created snapshot %(template_vm_ref)s from VM %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Fetching image %(image)s"
+#~ msgstr ""
+
+#~ msgid "Image Type: %s"
+#~ msgstr ""
+
+#~ msgid "ISO: Found sr possibly containing the ISO image"
+#~ msgstr ""
+
+#~ msgid "Size for image %(image)s:%(virtual_size)d"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to fetch glance image"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s ... "
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s done."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful first time."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug rejected: retrying..."
+#~ msgstr ""
+
+#~ msgid "Not sleeping anymore!"
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful eventually."
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure in VBD.unplug: %s"
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure %s"
+#~ msgstr ""
+
+#~ msgid "Starting instance %s"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn"
+#~ msgstr ""
+
+#~ msgid "Instance %s failed to spawn - performing clean-up"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn - Unable to create VM"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Auto configuring disk for instance "
+#~ "%(instance_uuid)s, attempting to resize "
+#~ "partition..."
+#~ msgstr ""
+
+#~ msgid "Invalid value for injected_files: '%s'"
+#~ msgstr ""
+
+#~ msgid "Starting VM %s..."
+#~ msgstr ""
+
+#~ msgid "Spawning VM %(instance_uuid)s created %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Instance %s: waiting for running"
+#~ msgstr ""
+
+#~ msgid "Instance %s: running"
+#~ msgstr ""
+
+#~ msgid "Resources to remove:%s"
+#~ msgstr ""
+
+#~ msgid "Removing VDI %(vdi_ref)s(uuid:%(vdi_to_remove)s)"
+#~ msgstr ""
+
+#~ msgid "Skipping VDI destroy for %s"
+#~ msgstr ""
+
+#~ msgid "Finished snapshot and upload for VM %s"
+#~ msgstr ""
+
+#~ msgid "Starting snapshot for VM %s"
+#~ msgstr ""
+
+#~ msgid "Unable to Snapshot instance %(instance_uuid)s: %(exc)s"
+#~ msgstr ""
+
+#~ msgid "Updating instance '%(instance_uuid)s' progress to %(progress)d"
+#~ msgstr ""
+
+#~ msgid "Resize instance %s complete"
+#~ msgstr ""
+
+#~ msgid "domid changed from %(olddomid)s to %(newdomid)s"
+#~ msgstr ""
+
+#~ msgid "VM %(instance_uuid)s already halted,skipping shutdown..."
+#~ msgstr ""
+
+#~ msgid "Shutting down VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Destroying VDIs for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s using RAW or "
+#~ "VHD, skipping kernel and ramdisk "
+#~ "deletion"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_uuid)s VM destroyed"
+#~ msgstr ""
+
+#~ msgid "Destroying VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Automatically hard rebooting %d"
+#~ msgstr ""
+
+#~ msgid "Instance for migration %d not found, skipping"
+#~ msgstr ""
+
+#~ msgid "injecting network info to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "creating vif(s) for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "Creating VIF for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr ""
+
+#~ msgid "Created VIF %(vif_ref)s for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr ""
+
+#~ msgid "injecting hostname to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The agent call to %(method)s returned"
+#~ " an invalid response: %(ret)r. VM "
+#~ "id=%(instance_uuid)s; path=%(path)s; args=%(addl_args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "TIMEOUT: The call to %(method)s timed"
+#~ " out. VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "NOT IMPLEMENTED: The call to %(method)s"
+#~ " is not supported by the agent. "
+#~ "VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The call to %(method)s returned an "
+#~ "error: %(e)s. VM id=%(instance_uuid)s; "
+#~ "args=%(args)r"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid "Error destroying VDI"
+#~ msgstr ""
+
+#~ msgid "Volume status must be available"
+#~ msgstr ""
+
+#~ msgid "\tVolume %s is NOT VSA volume"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s creation - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s succeeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s deletion - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s suceeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s local path call - call discover"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s ensure export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s create export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s remove export - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE remove_export for %s failed"
+#~ msgstr ""
+
+#~ msgid "Failed to retrieve QoS info"
+#~ msgstr ""
+
+#~ msgid "invalid drive data"
+#~ msgstr ""
+
+#~ msgid "drive_name not defined"
+#~ msgstr ""
+
+#~ msgid "invalid drive type name %s"
+#~ msgstr ""
+
+#~ msgid "*** Experimental VSA code ***"
+#~ msgstr ""
+
+#~ msgid "Requested number of VCs (%d) is too high. Setting to default"
+#~ msgstr ""
+
+#~ msgid "Creating VSA: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d %(vsa_name)s: Create "
+#~ "volume %(vol_name)s, %(vol_size)d GB, type "
+#~ "%(vol_type_id)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA status to %(status)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA call"
+#~ msgstr ""
+
+#~ msgid "Adding %(add_cnt)s VCs to VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "Deleting %(del_cnt)s VCs from VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Deleting %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Unable to delete volume %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Forced delete. %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate VSA ID %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Delete instance %(name)s"
+#~ msgstr ""
+
+#~ msgid "Create call received for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Failed to find VSA %(vsa_id)d"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Drive %(vol_id)s created. Status %(status)s"
+#~ msgstr ""
+
+#~ msgid "Drive %(vol_name)s (%(vol_disp_name)s) still in creating phase - wait"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Not all volumes "
+#~ "are created (%(cvol_real)d of %(cvol_exp)d)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Drive %(vol_name)s "
+#~ "(%(vol_disp_name)s) is in %(status)s state"
+#~ msgstr ""
+
+#~ msgid "Failed to update attach status for volume %(vol_name)s. %(ex)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Delete all BE volumes"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Start %(vc_count)d instances"
+#~ msgstr ""
+
diff --git a/cinder/locale/uk/LC_MESSAGES/nova.po b/cinder/locale/uk/LC_MESSAGES/nova.po
new file mode 100644
index 000000000..1af157a1c
--- /dev/null
+++ b/cinder/locale/uk/LC_MESSAGES/nova.po
@@ -0,0 +1,8199 @@
+# Ukrainian translation for cinder
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the cinder package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version:  cinder\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-04-08 23:04+0000\n"
+"PO-Revision-Date: 2011-08-23 11:21+0000\n"
+"Last-Translator: Thierry Carrez <thierry.carrez+lp@gmail.com>\n"
+"Language-Team: Ukrainian <uk@li.org>\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: cinder/context.py:59
+#, python-format
+msgid "Arguments dropped when creating context: %s"
+msgstr ""
+
+#: cinder/context.py:90
+#, python-format
+msgid "read_deleted can only be one of 'no', 'yes' or 'only', not %r"
+msgstr ""
+
+#: cinder/crypto.py:48
+msgid "Filename of root CA"
+msgstr ""
+
+#: cinder/crypto.py:51
+msgid "Filename of private key"
+msgstr "Ім'я файлу секретного ключа"
+
+#: cinder/crypto.py:54
+msgid "Filename of root Certificate Revocation List"
+msgstr ""
+
+#: cinder/crypto.py:57
+msgid "Where we keep our keys"
+msgstr "Шлях до збережених ключів"
+
+#: cinder/crypto.py:60
+msgid "Where we keep our root CA"
+msgstr ""
+
+#: cinder/crypto.py:63
+msgid "Should we use a CA for each project?"
+msgstr ""
+
+#: cinder/crypto.py:67
+#, python-format
+msgid "Subject for certificate for users, %s for project, user, timestamp"
+msgstr ""
+
+#: cinder/crypto.py:72
+#, python-format
+msgid "Subject for certificate for projects, %s for project, timestamp"
+msgstr ""
+
+#: cinder/crypto.py:292
+#, python-format
+msgid "Flags path: %s"
+msgstr ""
+
+#: cinder/exception.py:56
+msgid "Unexpected error while running command."
+msgstr "Неочікувана помилка при виконанні команди."
+
+#: cinder/exception.py:59
+#, python-format
+msgid ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+msgstr ""
+
+#: cinder/exception.py:94
+msgid "DB exception wrapped."
+msgstr ""
+
+#: cinder/exception.py:155
+msgid "An unknown exception occurred."
+msgstr ""
+
+#: cinder/exception.py:178
+msgid "Failed to decrypt text"
+msgstr ""
+
+#: cinder/exception.py:182
+msgid "Failed to paginate through images from image service"
+msgstr ""
+
+#: cinder/exception.py:186
+msgid "Virtual Interface creation failed"
+msgstr ""
+
+#: cinder/exception.py:190
+msgid "5 attempts to create virtual interfacewith unique mac address failed"
+msgstr ""
+
+#: cinder/exception.py:195
+msgid "Connection to glance failed"
+msgstr ""
+
+#: cinder/exception.py:199
+msgid "Connection to melange failed"
+msgstr ""
+
+#: cinder/exception.py:203
+msgid "Not authorized."
+msgstr ""
+
+#: cinder/exception.py:208
+msgid "User does not have admin privileges"
+msgstr ""
+
+#: cinder/exception.py:212
+#, python-format
+msgid "Policy doesn't allow %(action)s to be performed."
+msgstr ""
+
+#: cinder/exception.py:216
+#, fuzzy, python-format
+msgid "Not authorized for image %(image_id)s."
+msgstr "без порядку для повідомлень: %s"
+
+#: cinder/exception.py:220
+msgid "Unacceptable parameters."
+msgstr ""
+
+#: cinder/exception.py:225
+msgid "Invalid snapshot"
+msgstr ""
+
+#: cinder/exception.py:229
+#, python-format
+msgid "Volume %(volume_id)s is not attached to anything"
+msgstr ""
+
+#: cinder/exception.py:233 cinder/api/openstack/compute/contrib/keypairs.py:113
+msgid "Keypair data is invalid"
+msgstr ""
+
+#: cinder/exception.py:237
+msgid "Failed to load data into json format"
+msgstr ""
+
+#: cinder/exception.py:241
+msgid "The request is invalid."
+msgstr ""
+
+#: cinder/exception.py:245
+#, python-format
+msgid "Invalid signature %(signature)s for user %(user)s."
+msgstr ""
+
+#: cinder/exception.py:249
+msgid "Invalid input received"
+msgstr ""
+
+#: cinder/exception.py:253
+#, python-format
+msgid "Invalid instance type %(instance_type)s."
+msgstr ""
+
+#: cinder/exception.py:257
+msgid "Invalid volume type"
+msgstr ""
+
+#: cinder/exception.py:261
+msgid "Invalid volume"
+msgstr ""
+
+#: cinder/exception.py:265
+#, python-format
+msgid "Invalid port range %(from_port)s:%(to_port)s. %(msg)s"
+msgstr ""
+
+#: cinder/exception.py:269
+#, python-format
+msgid "Invalid IP protocol %(protocol)s."
+msgstr ""
+
+#: cinder/exception.py:273
+#, python-format
+msgid "Invalid content type %(content_type)s."
+msgstr ""
+
+#: cinder/exception.py:277
+#, python-format
+msgid "Invalid cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:281
+msgid "Invalid reuse of an RPC connection."
+msgstr ""
+
+#: cinder/exception.py:285
+msgid "Invalid Parameter: Unicode is not supported by the current database."
+msgstr ""
+
+#: cinder/exception.py:292
+#, python-format
+msgid "%(err)s"
+msgstr ""
+
+#: cinder/exception.py:296
+#, python-format
+msgid ""
+"Cannot perform action '%(action)s' on aggregate %(aggregate_id)s. Reason:"
+" %(reason)s."
+msgstr ""
+
+#: cinder/exception.py:301
+#, python-format
+msgid "Group not valid. Reason: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:305
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot %(method)s while"
+" the instance is in this state."
+msgstr ""
+
+#: cinder/exception.py:310
+#, python-format
+msgid "Instance %(instance_id)s is not running."
+msgstr ""
+
+#: cinder/exception.py:314
+#, python-format
+msgid "Instance %(instance_id)s is not suspended."
+msgstr ""
+
+#: cinder/exception.py:318
+#, python-format
+msgid "Instance %(instance_id)s is not in rescue mode"
+msgstr ""
+
+#: cinder/exception.py:322
+msgid "Failed to suspend instance"
+msgstr ""
+
+#: cinder/exception.py:326
+msgid "Failed to resume server"
+msgstr ""
+
+#: cinder/exception.py:330
+msgid "Failed to reboot instance"
+msgstr ""
+
+#: cinder/exception.py:334
+msgid "Failed to terminate instance"
+msgstr ""
+
+#: cinder/exception.py:338
+msgid "Service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:342
+msgid "Volume service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:346
+msgid "Compute service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:350
+#, python-format
+msgid "Unable to migrate instance (%(instance_id)s) to current host (%(host)s)."
+msgstr ""
+
+#: cinder/exception.py:355
+msgid "Destination compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:359
+msgid "Original compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:363
+msgid "The supplied hypervisor type of is invalid."
+msgstr ""
+
+#: cinder/exception.py:367
+msgid "The instance requires a newer hypervisor version than has been provided."
+msgstr ""
+
+#: cinder/exception.py:372
+#, python-format
+msgid ""
+"The supplied disk path (%(path)s) already exists, it is expected not to "
+"exist."
+msgstr ""
+
+#: cinder/exception.py:377
+#, python-format
+msgid "The supplied device path (%(path)s) is invalid."
+msgstr ""
+
+#: cinder/exception.py:381
+#, python-format
+msgid "The supplied device (%(device)s) is busy."
+msgstr ""
+
+#: cinder/exception.py:385
+msgid "Unacceptable CPU info"
+msgstr ""
+
+#: cinder/exception.py:389
+#, python-format
+msgid "%(address)s is not a valid IP v4/6 address."
+msgstr ""
+
+#: cinder/exception.py:393
+#, python-format
+msgid ""
+"VLAN tag is not appropriate for the port group %(bridge)s. Expected VLAN "
+"tag is %(tag)s, but the one associated with the port group is %(pgroup)s."
+msgstr ""
+
+#: cinder/exception.py:399
+#, python-format
+msgid ""
+"vSwitch which contains the port group %(bridge)s is not associated with "
+"the desired physical adapter. Expected vSwitch is %(expected)s, but the "
+"one associated is %(actual)s."
+msgstr ""
+
+#: cinder/exception.py:406
+#, python-format
+msgid "Disk format %(disk_format)s is not acceptable"
+msgstr ""
+
+#: cinder/exception.py:410
+#, python-format
+msgid "Image %(image_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:414
+#, python-format
+msgid "Instance %(instance_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:418
+#, python-format
+msgid "Ec2 id %(ec2_id)s is unacceptable."
+msgstr ""
+
+#: cinder/exception.py:422
+msgid "Resource could not be found."
+msgstr ""
+
+#: cinder/exception.py:427
+#, python-format
+msgid "Required flag %(flag)s not set."
+msgstr ""
+
+#: cinder/exception.py:431
+#, python-format
+msgid "Volume %(volume_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:435
+#, python-format
+msgid "Unable to locate account %(account_name)s on Solidfire device"
+msgstr ""
+
+#: cinder/exception.py:440
+#, python-format
+msgid "Volume not found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:444
+#, python-format
+msgid "Volume %(volume_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:449
+msgid "Zero volume types found."
+msgstr ""
+
+#: cinder/exception.py:453
+#, python-format
+msgid "Volume type %(volume_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:457
+#, python-format
+msgid "Volume type with name %(volume_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:462
+#, python-format
+msgid ""
+"Volume Type %(volume_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:467
+#, python-format
+msgid "Snapshot %(snapshot_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:471
+#, python-format
+msgid "deleting volume %(volume_name)s that has snapshot"
+msgstr ""
+
+#: cinder/exception.py:475
+#, python-format
+msgid "deleting snapshot %(snapshot_name)s that has dependent volumes"
+msgstr ""
+
+#: cinder/exception.py:480
+#, python-format
+msgid "No target id found for volume %(volume_id)s."
+msgstr ""
+
+#: cinder/exception.py:484
+#, python-format
+msgid "No disk at %(location)s"
+msgstr ""
+
+#: cinder/exception.py:488
+#, python-format
+msgid "Could not find a handler for %(driver_type)s volume."
+msgstr ""
+
+#: cinder/exception.py:492
+#, python-format
+msgid "Invalid image href %(image_href)s."
+msgstr ""
+
+#: cinder/exception.py:496
+msgid ""
+"Some images have been stored via hrefs. This version of the api does not "
+"support displaying image hrefs."
+msgstr ""
+
+#: cinder/exception.py:501
+#, python-format
+msgid "Image %(image_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:505
+#, python-format
+msgid "Kernel not found for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:509
+#, python-format
+msgid "User %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:513
+#, python-format
+msgid "Project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:517
+#, python-format
+msgid "User %(user_id)s is not a member of project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:521
+#, python-format
+msgid "Role %(role_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:525
+msgid "Cannot find SR to read/write VDI."
+msgstr ""
+
+#: cinder/exception.py:529
+#, python-format
+msgid "%(req)s is required to create a network."
+msgstr ""
+
+#: cinder/exception.py:533
+#, python-format
+msgid "Network %(network_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:537
+#, python-format
+msgid "Network could not be found for bridge %(bridge)s"
+msgstr ""
+
+#: cinder/exception.py:541
+#, python-format
+msgid "Network could not be found for uuid %(uuid)s"
+msgstr ""
+
+#: cinder/exception.py:545
+#, python-format
+msgid "Network could not be found with cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:549
+#, python-format
+msgid "Network could not be found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:553
+msgid "No networks defined."
+msgstr ""
+
+#: cinder/exception.py:557
+#, python-format
+msgid ""
+"Either Network uuid %(network_uuid)s is not present or is not assigned to"
+" the project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:562
+#, python-format
+msgid "Host is not set to the network (%(network_id)s)."
+msgstr ""
+
+#: cinder/exception.py:566
+#, python-format
+msgid "Network %(network)s has active ports, cannot delete."
+msgstr ""
+
+#: cinder/exception.py:570
+msgid "Could not find the datastore reference(s) which the VM uses."
+msgstr ""
+
+#: cinder/exception.py:574
+#, python-format
+msgid "No fixed IP associated with id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:578
+#, python-format
+msgid "Fixed ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:582
+#, python-format
+msgid "Instance %(instance_id)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:586
+#, python-format
+msgid "Network host %(host)s has zero fixed ips in network %(network_id)s."
+msgstr ""
+
+#: cinder/exception.py:591
+#, python-format
+msgid "Instance %(instance_id)s doesn't have fixed ip '%(ip)s'."
+msgstr ""
+
+#: cinder/exception.py:595
+#, python-format
+msgid "Host %(host)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:599
+#, python-format
+msgid ""
+"Fixed IP address (%(address)s) does not exist in network "
+"(%(network_uuid)s)."
+msgstr ""
+
+#: cinder/exception.py:604
+#, python-format
+msgid "Fixed IP address %(address)s is already in use."
+msgstr ""
+
+#: cinder/exception.py:608
+#, python-format
+msgid "Fixed IP address %(address)s is invalid."
+msgstr ""
+
+#: cinder/exception.py:612
+msgid "Zero fixed ips available."
+msgstr ""
+
+#: cinder/exception.py:616
+msgid "Zero fixed ips could be found."
+msgstr ""
+
+#: cinder/exception.py:620
+#, python-format
+msgid "Floating ip not found for id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:624
+#, python-format
+msgid "The DNS entry %(name)s already exists in domain %(domain)s."
+msgstr ""
+
+#: cinder/exception.py:628
+#, python-format
+msgid "Floating ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:632
+#, python-format
+msgid "Floating ip not found for host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:636
+msgid "Zero floating ips available."
+msgstr ""
+
+#: cinder/exception.py:640
+#, python-format
+msgid "Floating ip %(address)s is associated."
+msgstr ""
+
+#: cinder/exception.py:644
+#, python-format
+msgid "Floating ip %(address)s is not associated."
+msgstr ""
+
+#: cinder/exception.py:648
+msgid "Zero floating ips exist."
+msgstr ""
+
+#: cinder/exception.py:652
+#, python-format
+msgid "Interface %(interface)s not found."
+msgstr ""
+
+#: cinder/exception.py:656
+#, python-format
+msgid "Keypair %(name)s not found for user %(user_id)s"
+msgstr ""
+
+#: cinder/exception.py:660
+#, python-format
+msgid "Certificate %(certificate_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:664
+#, python-format
+msgid "Service %(service_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:668
+#, python-format
+msgid "Host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:672
+#, python-format
+msgid "Compute host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:676
+#, python-format
+msgid "Could not find binary %(binary)s on host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:680
+#, python-format
+msgid "Auth token %(token)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:684
+#, python-format
+msgid "Access Key %(access_key)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:688
+msgid "Quota could not be found"
+msgstr ""
+
+#: cinder/exception.py:692
+#, python-format
+msgid "Quota for project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:696
+#, python-format
+msgid "Quota class %(class_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:700
+#, python-format
+msgid "Security group %(security_group_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:704
+#, python-format
+msgid "Security group %(security_group_id)s not found for project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:709
+#, python-format
+msgid "Security group with rule %(rule_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:713
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is already associated with the "
+"instance %(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:718
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is not associated with the instance "
+"%(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:723
+#, python-format
+msgid "Migration %(migration_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:727
+#, python-format
+msgid "Migration not found for instance %(instance_id)s with status %(status)s."
+msgstr ""
+
+#: cinder/exception.py:732
+#, python-format
+msgid "Console pool %(pool_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:736
+#, python-format
+msgid ""
+"Console pool of type %(console_type)s for compute host %(compute_host)s "
+"on proxy host %(host)s not found."
+msgstr ""
+
+#: cinder/exception.py:742
+#, python-format
+msgid "Console %(console_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:746
+#, python-format
+msgid "Console for instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:750
+#, python-format
+msgid ""
+"Console for instance %(instance_id)s in pool %(pool_id)s could not be "
+"found."
+msgstr ""
+
+#: cinder/exception.py:755
+#, python-format
+msgid "Invalid console type %(console_type)s "
+msgstr ""
+
+#: cinder/exception.py:759
+msgid "Zero instance types found."
+msgstr ""
+
+#: cinder/exception.py:763
+#, python-format
+msgid "Instance type %(instance_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:767
+#, python-format
+msgid "Instance type with name %(instance_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:772
+#, python-format
+msgid "Flavor %(flavor_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:776
+#, python-format
+msgid "Cell %(cell_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:780
+#, python-format
+msgid "Scheduler Host Filter %(filter_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:784
+#, python-format
+msgid "Scheduler cost function %(cost_fn_str)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:789
+#, python-format
+msgid "Scheduler weight flag not found: %(flag_name)s"
+msgstr ""
+
+#: cinder/exception.py:793
+#, python-format
+msgid "Instance %(instance_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:798
+#, python-format
+msgid ""
+"Instance Type %(instance_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:803
+msgid "LDAP object could not be found"
+msgstr ""
+
+#: cinder/exception.py:807
+#, python-format
+msgid "LDAP user %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:811
+#, python-format
+msgid "LDAP group %(group_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:815
+#, python-format
+msgid "LDAP user %(user_id)s is not a member of group %(group_id)s."
+msgstr ""
+
+#: cinder/exception.py:819
+#, python-format
+msgid "File %(file_path)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:823
+msgid "Zero files could be found."
+msgstr ""
+
+#: cinder/exception.py:827
+#, python-format
+msgid "Virtual switch associated with the network adapter %(adapter)s not found."
+msgstr ""
+
+#: cinder/exception.py:832
+#, python-format
+msgid "Network adapter %(adapter)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:836
+#, python-format
+msgid "Class %(class_name)s could not be found: %(exception)s"
+msgstr ""
+
+#: cinder/exception.py:840
+msgid "Action not allowed."
+msgstr ""
+
+#: cinder/exception.py:844
+#, python-format
+msgid "Unable to use global role %(role_id)s"
+msgstr ""
+
+#: cinder/exception.py:848
+msgid "Rotation is not allowed for snapshots"
+msgstr ""
+
+#: cinder/exception.py:852
+msgid "Rotation param is required for backup image_type"
+msgstr ""
+
+#: cinder/exception.py:861
+#, python-format
+msgid "Key pair %(key_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:865
+#, python-format
+msgid "User %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:869
+#, python-format
+msgid "LDAP user %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:873
+#, python-format
+msgid "LDAP group %(group)s already exists."
+msgstr ""
+
+#: cinder/exception.py:877
+#, python-format
+msgid "User %(uid)s is already a member of the group %(group_dn)s"
+msgstr ""
+
+#: cinder/exception.py:882
+#, python-format
+msgid "Project %(project)s already exists."
+msgstr ""
+
+#: cinder/exception.py:886
+#, python-format
+msgid "Instance %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:890
+#, python-format
+msgid "Instance Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:894
+#, python-format
+msgid "Volume Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:898
+#, python-format
+msgid "%(path)s is on shared storage: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:902
+msgid "Migration error"
+msgstr ""
+
+#: cinder/exception.py:906
+#, python-format
+msgid "Malformed message body: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:910
+#, python-format
+msgid "Could not find config at %(path)s"
+msgstr ""
+
+#: cinder/exception.py:914
+#, python-format
+msgid "Could not load paste app '%(name)s' from %(path)s"
+msgstr ""
+
+#: cinder/exception.py:918
+msgid "When resizing, instances must change size!"
+msgstr ""
+
+#: cinder/exception.py:922
+msgid "Image is larger than instance type allows"
+msgstr ""
+
+#: cinder/exception.py:926
+msgid "1 or more Zones could not complete the request"
+msgstr ""
+
+#: cinder/exception.py:930
+msgid "Instance type's memory is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:934
+msgid "Instance type's disk is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:938
+#, python-format
+msgid "Insufficient free memory on compute node to start %(uuid)s."
+msgstr ""
+
+#: cinder/exception.py:942
+msgid "Could not fetch bandwidth/cpu/disk metrics for this host."
+msgstr ""
+
+#: cinder/exception.py:946
+#, python-format
+msgid "No valid host was found. %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:950
+#, python-format
+msgid "Host %(host)s is not up or doesn't exist."
+msgstr ""
+
+#: cinder/exception.py:954
+msgid "Quota exceeded"
+msgstr ""
+
+#: cinder/exception.py:958
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: action '%(action)s' caused an error: "
+"%(reason)s."
+msgstr ""
+
+#: cinder/exception.py:963
+#, python-format
+msgid "Aggregate %(aggregate_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:967
+#, python-format
+msgid "Aggregate %(aggregate_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:971
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:975
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:980
+#, python-format
+msgid "Host %(host)s already member of another aggregate."
+msgstr ""
+
+#: cinder/exception.py:984
+#, python-format
+msgid "Aggregate %(aggregate_id)s already has host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:988
+#, python-format
+msgid "Detected more than one volume with name %(vol_name)s"
+msgstr ""
+
+#: cinder/exception.py:992
+#, python-format
+msgid "Cannot create volume_type with name %(name)s and specs %(extra_specs)s"
+msgstr ""
+
+#: cinder/exception.py:997
+msgid "Unable to create instance type"
+msgstr ""
+
+#: cinder/exception.py:1001
+msgid "Bad response from SolidFire API"
+msgstr ""
+
+#: cinder/exception.py:1005
+#, python-format
+msgid "Error in SolidFire API response: status=%(status)s"
+msgstr ""
+
+#: cinder/exception.py:1009
+#, python-format
+msgid "Error in SolidFire API response: data=%(data)s"
+msgstr ""
+
+#: cinder/exception.py:1013
+#, python-format
+msgid "Detected existing vlan with id %(vlan)d"
+msgstr ""
+
+#: cinder/exception.py:1017
+#, python-format
+msgid "Instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:1021
+#, python-format
+msgid "Invalid id: %(val)s (expecting \"i-...\")."
+msgstr ""
+
+#: cinder/exception.py:1025
+#, python-format
+msgid "Could not fetch image %(image)s"
+msgstr ""
+
+#: cinder/log.py:315
+#, python-format
+msgid "syslog facility must be one of: %s"
+msgstr ""
+
+#: cinder/manager.py:146
+#, python-format
+msgid "Skipping %(full_task_name)s, %(ticks_to_skip)s ticks left until next run"
+msgstr ""
+
+#: cinder/manager.py:152
+#, python-format
+msgid "Running periodic task %(full_task_name)s"
+msgstr ""
+
+#: cinder/manager.py:159
+#, python-format
+msgid "Error during %(full_task_name)s: %(e)s"
+msgstr ""
+
+#: cinder/manager.py:203
+msgid "Notifying Schedulers of capabilities ..."
+msgstr ""
+
+#: cinder/policy.py:30
+msgid "JSON file representing policy"
+msgstr ""
+
+#: cinder/policy.py:33
+msgid "Rule checked when requested rule is not found"
+msgstr ""
+
+#: cinder/service.py:137
+msgid "SIGTERM received"
+msgstr ""
+
+#: cinder/service.py:177
+#, python-format
+msgid "Starting %(topic)s node (version %(vcs_string)s)"
+msgstr ""
+
+#: cinder/service.py:195
+#, python-format
+msgid "Creating Consumer connection for Service %s"
+msgstr ""
+
+#: cinder/service.py:282
+msgid "Service killed that has no database entry"
+msgstr ""
+
+#: cinder/service.py:319
+msgid "The service database object disappeared, Recreating it."
+msgstr ""
+
+#: cinder/service.py:334
+msgid "Recovered model server connection!"
+msgstr ""
+
+#: cinder/service.py:340
+msgid "model server went away"
+msgstr ""
+
+#: cinder/service.py:433
+msgid "Full set of FLAGS:"
+msgstr ""
+
+#: cinder/service.py:440
+#, python-format
+msgid "%(flag)s : FLAG SET "
+msgstr ""
+
+#: cinder/utils.py:79
+#, python-format
+msgid "Inner Exception: %s"
+msgstr ""
+
+#: cinder/utils.py:165
+#, python-format
+msgid "Fetching %s"
+msgstr ""
+
+#: cinder/utils.py:210
+#, python-format
+msgid "Got unknown keyword args to utils.execute: %r"
+msgstr ""
+
+#: cinder/utils.py:220
+#, python-format
+msgid "Running cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/utils.py:236 cinder/utils.py:315
+#, python-format
+msgid "Result was %s"
+msgstr ""
+
+#: cinder/utils.py:249
+#, python-format
+msgid "%r failed. Retrying."
+msgstr ""
+
+#: cinder/utils.py:291
+#, python-format
+msgid "Running cmd (SSH): %s"
+msgstr ""
+
+#: cinder/utils.py:293
+msgid "Environment not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:297
+msgid "process_input not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:352
+#, python-format
+msgid "debug in callback: %s"
+msgstr ""
+
+#: cinder/utils.py:534
+#, python-format
+msgid "Link Local address is not found.:%s"
+msgstr ""
+
+#: cinder/utils.py:537
+#, python-format
+msgid "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+msgstr ""
+
+#: cinder/utils.py:648
+#, python-format
+msgid "Invalid backend: %s"
+msgstr ""
+
+#: cinder/utils.py:659
+#, python-format
+msgid "backend %s"
+msgstr ""
+
+#: cinder/utils.py:709
+msgid "in looping call"
+msgstr ""
+
+#: cinder/utils.py:927
+#, python-format
+msgid "Attempting to grab semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:931
+#, python-format
+msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:935
+#, python-format
+msgid "Attempting to grab file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:942
+#, python-format
+msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:1001
+#, python-format
+msgid "Found sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1008
+#, python-format
+msgid "Cleaned sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1023
+#, python-format
+msgid "Found lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1028
+#, python-format
+msgid "Cleaned lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1138
+#, python-format
+msgid "Expected object of type: %s"
+msgstr ""
+
+#: cinder/utils.py:1169
+#, python-format
+msgid "Invalid server_string: %s"
+msgstr ""
+
+#: cinder/utils.py:1298
+#, python-format
+msgid "timefunc: '%(name)s' took %(total_time).2f secs"
+msgstr ""
+
+#: cinder/utils.py:1330
+msgid "Original exception being dropped"
+msgstr ""
+
+#: cinder/utils.py:1461
+#, python-format
+msgid "Class %(fullname)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1463
+#, python-format
+msgid "Class %(fullname)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1495
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1497
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1681
+#, python-format
+msgid "Could not remove tmpdir: %s"
+msgstr ""
+
+#: cinder/wsgi.py:97
+#, python-format
+msgid "Started %(name)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:108
+msgid "Stopping WSGI server."
+msgstr ""
+
+#: cinder/wsgi.py:111
+msgid "Stopping raw TCP server."
+msgstr ""
+
+#: cinder/wsgi.py:117
+#, python-format
+msgid "Starting TCP server %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:133
+msgid "WSGI server has stopped."
+msgstr ""
+
+#: cinder/wsgi.py:211
+msgid "You must implement __call__"
+msgstr ""
+
+#: cinder/api/direct.py:218
+msgid "not available"
+msgstr ""
+
+#: cinder/api/direct.py:299
+#, python-format
+msgid "Returned non-serializeable type: %s"
+msgstr ""
+
+#: cinder/api/sizelimit.py:51
+msgid "Request is too large."
+msgstr ""
+
+#: cinder/api/validator.py:142
+#, python-format
+msgid "%(key)s with value %(value)s failed validator  %(validator)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:73
+#, python-format
+msgid "%(code)s: %(message)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:95
+#, python-format
+msgid "FaultWrapper: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:170
+msgid "Too many failed authentications."
+msgstr "Занадто багато невдалих аутентифікацій."
+
+#: cinder/api/ec2/__init__.py:180
+#, python-format
+msgid ""
+"Access key %(access_key)s has had %(failures)d failed authentications and"
+" will be locked out for %(lock_mins)d minutes."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:267
+msgid "Signature not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:271
+msgid "Access key not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:306 cinder/api/ec2/__init__.py:319
+msgid "Failure communicating with keystone"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:388
+#, python-format
+msgid "Authentication Failure: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:404
+#, python-format
+msgid "Authenticated Request For %(uname)s:%(pname)s)"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:435
+#, python-format
+msgid "action: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:437
+#, python-format
+msgid "arg: %(key)s\t\tval: %(value)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:512
+#, python-format
+msgid "Unauthorized request for controller=%(controller)s and action=%(action)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:584
+#, python-format
+msgid "InstanceNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:590
+#, python-format
+msgid "VolumeNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:596
+#, python-format
+msgid "SnapshotNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:602
+#, python-format
+msgid "NotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:605
+#, python-format
+msgid "EC2APIError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:613
+#, python-format
+msgid "KeyPairExists raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:617
+#, python-format
+msgid "InvalidParameterValue raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:621
+#, python-format
+msgid "InvalidPortRange raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:625
+#, python-format
+msgid "NotAuthorized raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:629
+#, python-format
+msgid "InvalidRequest raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:633
+#, python-format
+msgid "QuotaError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:637
+#, python-format
+msgid "Invalid id: bogus (expecting \"i-...\"): %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:646
+#, python-format
+msgid "Unexpected error raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:647
+#, python-format
+msgid "Environment: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:649 cinder/api/metadata/handler.py:248
+msgid "An unknown error has occurred. Please try your request again."
+msgstr ""
+
+#: cinder/api/ec2/apirequest.py:64
+#, python-format
+msgid "Unsupported API request: controller = %(controller)s, action = %(action)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:336
+#, python-format
+msgid "Create snapshot of volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:372
+#, python-format
+msgid ""
+"Value (%s) for KeyName is invalid. Content limited to Alphanumeric "
+"character, spaces, dashes, and underscore."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:378
+#, python-format
+msgid "Value (%s) for Keyname is invalid. Length exceeds maximum of 255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:382
+#, python-format
+msgid "Create key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:391
+#, python-format
+msgid "Import key %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:409
+#, python-format
+msgid "Delete key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:551
+msgid "Invalid CIDR"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:639 cinder/api/ec2/cloud.py:693
+#: cinder/api/ec2/cloud.py:800
+msgid "Not enough parameters, need group_name or group_id"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:654
+#: cinder/api/openstack/compute/contrib/security_groups.py:517
+#, python-format
+msgid "Revoke security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:666 cinder/api/ec2/cloud.py:719
+#, python-format
+msgid "%s Not enough parameters to build a valid rule"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:684 cinder/api/ec2/cloud.py:744
+msgid "No rule for the specified parameters."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:708
+#: cinder/api/openstack/compute/contrib/security_groups.py:354
+#, python-format
+msgid "Authorize security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:725
+#, fuzzy, python-format
+msgid "%s - This rule already exists in group"
+msgstr "Це правило вже існує в групі %s"
+
+#: cinder/api/ec2/cloud.py:769
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Content limited to "
+"Alphanumeric characters, spaces, dashes, and underscores."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:776
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Length exceeds maximum of "
+"255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:780
+#: cinder/api/openstack/compute/contrib/security_groups.py:292
+#, python-format
+msgid "Create Security Group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:783
+#, python-format
+msgid "group %s already exists"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:815
+#: cinder/api/openstack/compute/contrib/security_groups.py:245
+#, python-format
+msgid "Delete security group %s"
+msgstr "Вилучити групу безпеки %s"
+
+#: cinder/api/ec2/cloud.py:823 cinder/compute/manager.py:1630
+#, python-format
+msgid "Get console output for instance %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:894
+#, python-format
+msgid "Create volume from snapshot %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:898 cinder/api/openstack/compute/contrib/volumes.py:186
+#: cinder/api/openstack/volume/volumes.py:222
+#, python-format
+msgid "Create volume of %s GB"
+msgstr "Створити розділ на %s ГБ"
+
+#: cinder/api/ec2/cloud.py:921
+msgid "Delete Failed"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:931
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(instance_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:939
+msgid "Attach Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:952 cinder/api/openstack/compute/contrib/volumes.py:366
+#, python-format
+msgid "Detach volume %s"
+msgstr "Від'єднати том %s"
+
+#: cinder/api/ec2/cloud.py:959
+#, fuzzy, python-format
+msgid "Detach Volume Failed."
+msgstr "Від'єднати том %s"
+
+#: cinder/api/ec2/cloud.py:984 cinder/api/ec2/cloud.py:1041
+#: cinder/api/ec2/cloud.py:1518 cinder/api/ec2/cloud.py:1533
+#, python-format
+msgid "attribute not supported: %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1107
+#, python-format
+msgid "vol = %s\n"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1255
+msgid "Allocate address"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1267
+#, python-format
+msgid "Release address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1272
+#, python-format
+msgid "Associate address %(public_ip)s to instance %(instance_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1282
+#, python-format
+msgid "Disassociate address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1308
+msgid "Image must be available"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1329
+msgid "Going to start terminating instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1343
+#, python-format
+msgid "Reboot instance %r"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1354
+msgid "Going to stop instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1365
+msgid "Going to start instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1455
+#, python-format
+msgid "De-registering image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1471
+msgid "imageLocation is required"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1490
+#, python-format
+msgid "Registered image %(image_location)s with id %(image_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1536
+msgid "user or group not specified"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1538
+msgid "only group \"all\" is supported"
+msgstr "лише група \"всі\" підтримується"
+
+#: cinder/api/ec2/cloud.py:1540
+msgid "operation_type must be add or remove"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1542
+#, python-format
+msgid "Updating image %s publicity"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1555
+#, python-format
+msgid "Not allowed to modify attributes for image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1603
+#, python-format
+msgid "Couldn't stop instance with in %d sec"
+msgstr ""
+
+#: cinder/api/metadata/handler.py:246 cinder/api/metadata/handler.py:253
+#, python-format
+msgid "Failed to get metadata for ip: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:43
+#, python-format
+msgid "Caught error: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:45 cinder/api/openstack/wsgi.py:886
+#, python-format
+msgid "%(url)s returned with HTTP %(status)d"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:94
+msgid "Must specify an ExtensionManager class"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:105
+#, python-format
+msgid "Extended resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:130
+#, python-format
+msgid ""
+"Extension %(ext_name)s: Cannot extend resource %(collection)s: No such "
+"resource"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:135
+#, python-format
+msgid "Extension %(ext_name)s extending resource: %(collection)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:90
+#, python-format
+msgid "%(user_id)s could not be found with token '%(token)s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:134
+#, python-format
+msgid "%(user_id)s must be an admin or a member of %(project_id)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:152
+msgid "Authentication requests must be made against a version root (e.g. /v2)."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:167
+#, python-format
+msgid "Could not find %s in request."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:191
+#, python-format
+msgid "Successfully authenticated '%s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:241
+msgid "User not found with provided API key."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:258
+#, python-format
+msgid "Provided API key is valid, but not for user '%(username)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:133 cinder/api/openstack/common.py:167
+msgid "limit param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:136 cinder/api/openstack/common.py:171
+msgid "limit param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:161
+msgid "offset param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:175
+msgid "offset param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:203
+#, python-format
+msgid "marker [%s] not found"
+msgstr ""
+
+#: cinder/api/openstack/common.py:243
+#, python-format
+msgid "href %s does not contain version"
+msgstr ""
+
+#: cinder/api/openstack/common.py:278
+msgid "Image metadata limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/common.py:295
+#, python-format
+msgid "Converting nw_info: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:305
+#, python-format
+msgid "Converted networks: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:338
+#, python-format
+msgid "Cannot '%(action)s' while instance is in %(attr)s %(state)s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:341
+#, python-format
+msgid "Instance is in an invalid state for '%(action)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:421
+msgid "Rejecting snapshot request, snapshots currently disabled"
+msgstr ""
+
+#: cinder/api/openstack/common.py:423
+msgid "Instance snapshots are not permitted at this time."
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:188
+#, python-format
+msgid "Loaded extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:225
+#, python-format
+msgid "Ext name: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:226
+#, python-format
+msgid "Ext alias: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:227
+#, python-format
+msgid "Ext description: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:229
+#, python-format
+msgid "Ext namespace: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:230
+#, python-format
+msgid "Ext updated: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:232
+#, python-format
+msgid "Exception loading extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:246
+#, python-format
+msgid "Loading extension %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:252
+#, python-format
+msgid "Calling extension factory %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:264
+#, python-format
+msgid "Failed to load extension %(ext_factory)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:344
+#, python-format
+msgid "Failed to load extension %(classpath)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:368
+#, python-format
+msgid "Failed to load extension %(ext_name)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:135 cinder/api/openstack/wsgi.py:538
+msgid "cannot understand JSON"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:159
+#: cinder/api/openstack/compute/contrib/hosts.py:86
+msgid "cannot understand XML"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:543
+msgid "too many body keys"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:582
+#, python-format
+msgid "Exception handling resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:586
+#, python-format
+msgid "Fault thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:589
+#, python-format
+msgid "HTTP exception thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:697
+msgid "Unrecognized Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:701
+msgid "No Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:705
+msgid "Empty body provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:816
+#, python-format
+msgid "There is no such action: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:819 cinder/api/openstack/wsgi.py:832
+#: cinder/api/openstack/compute/server_metadata.py:58
+#: cinder/api/openstack/compute/server_metadata.py:76
+#: cinder/api/openstack/compute/server_metadata.py:101
+#: cinder/api/openstack/compute/server_metadata.py:126
+#: cinder/api/openstack/compute/contrib/admin_actions.py:211
+#: cinder/api/openstack/compute/contrib/console_output.py:52
+msgid "Malformed request body"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:829
+msgid "Unsupported Content-Type"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:841
+msgid "Malformed request url"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:889
+#, python-format
+msgid "%(url)s returned a fault: %(e)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:265
+msgid "element is not a child"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:414
+msgid "root element selecting a list"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:739
+#, python-format
+msgid "Template tree mismatch; adding slave %(slavetag)s to master %(mastertag)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:858
+msgid "subclasses must implement construct()!"
+msgstr ""
+
+#: cinder/api/openstack/compute/extensions.py:29
+#: cinder/api/openstack/volume/extensions.py:29
+msgid "Initializing extension manager."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:40
+#: cinder/api/openstack/compute/images.py:146
+#: cinder/api/openstack/compute/images.py:161
+msgid "Image not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:79
+msgid "Incorrect request body format"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:83
+#: cinder/api/openstack/compute/server_metadata.py:80
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:79
+#: cinder/api/openstack/compute/contrib/volumetypes.py:188
+msgid "Request body and URI mismatch"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:86
+#: cinder/api/openstack/compute/server_metadata.py:84
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:82
+#: cinder/api/openstack/compute/contrib/volumetypes.py:191
+msgid "Request body contains too many items"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:111
+msgid "Invalid metadata key"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:74
+msgid "Instance does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:97
+msgid "Instance is not a member of specified network"
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:140
+#, python-format
+msgid ""
+"Only %(value)s %(verb)s request(s) can be made to %(uri)s every "
+"%(unit_string)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:266
+msgid "This request was rate-limited."
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:38
+#: cinder/api/openstack/compute/server_metadata.py:122
+#: cinder/api/openstack/compute/server_metadata.py:159
+msgid "Server does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:141
+#: cinder/api/openstack/compute/server_metadata.py:152
+msgid "Metadata item was not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:425
+#, python-format
+msgid "Invalid server status: %(status)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:433
+msgid "Invalid changes-since value"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:483
+msgid "Personality file limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:485
+msgid "Personality file path too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:487
+msgid "Personality file content too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:501
+msgid "Server name is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:505
+msgid "Server name is an empty string"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:509
+msgid "Server name must be less than 256 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:527
+#, python-format
+msgid "Bad personality format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:530
+msgid "Bad personality format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:535
+#, python-format
+msgid "Personality content for %s cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:550
+#, python-format
+msgid "Bad networks format: network uuid is not in proper format (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:559
+#, python-format
+msgid "Invalid fixed IP address (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:566
+#, python-format
+msgid "Duplicate networks (%s) are not allowed"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:572
+#, python-format
+msgid "Bad network format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:575
+msgid "Bad networks format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:587
+msgid "Userdata content cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:594
+msgid "accessIPv4 is not proper IPv4 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:601
+msgid "accessIPv6 is not proper IPv6 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:633
+msgid "Server name is not defined"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:675
+#: cinder/api/openstack/compute/servers.py:740
+msgid "Invalid flavorRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:737
+msgid "Can not find requested image"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:743
+msgid "Invalid key_name provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:829
+#: cinder/api/openstack/compute/servers.py:849
+msgid "Instance has not been resized."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:835
+#, python-format
+msgid "Error in confirm-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:855
+#, python-format
+msgid "Error in revert-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:868
+msgid "Argument 'type' for reboot is not HARD or SOFT"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:872
+msgid "Missing argument 'type' for reboot"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:885
+#, python-format
+msgid "Error in reboot %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:897
+msgid "Unable to locate requested flavor."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:900
+msgid "Resize requires a change in size."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:924
+msgid "Malformed server entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:931
+msgid "Missing imageRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:940
+msgid "Invalid imageRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:949
+msgid "Missing flavorRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:962
+msgid "No adminPass was specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:966
+#: cinder/api/openstack/compute/servers.py:1144
+msgid "Invalid adminPass"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:980
+msgid "Unable to parse metadata key/value pairs."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:993
+msgid "Resize request has invalid 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:996
+msgid "Resize requests require 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1014
+#: cinder/api/openstack/compute/contrib/aggregates.py:142
+#: cinder/api/openstack/compute/contrib/networks.py:65
+msgid "Invalid request body"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1019
+msgid "Could not parse imageRef from request."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1071
+msgid "Instance could not be found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1074
+msgid "Cannot find image for rebuild"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1103
+msgid "createImage entity requires name attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1112
+#: cinder/api/openstack/compute/contrib/admin_actions.py:238
+msgid "Invalid metadata"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1167
+#, python-format
+msgid "Removing options '%(unk_opt_str)s' from query"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:60
+#, python-format
+msgid "Compute.api::pause %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:77
+#, python-format
+msgid "Compute.api::unpause %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:94
+#, python-format
+msgid "compute.api::suspend %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:111
+#, python-format
+msgid "compute.api::resume %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:127
+#, python-format
+msgid "Error in migrate %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:141
+#, python-format
+msgid "Compute.api::reset_network %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:154
+#: cinder/api/openstack/compute/contrib/admin_actions.py:170
+#: cinder/api/openstack/compute/contrib/admin_actions.py:186
+#: cinder/api/openstack/compute/contrib/multinic.py:41
+#: cinder/api/openstack/compute/contrib/rescue.py:44
+msgid "Server not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:157
+#, python-format
+msgid "Compute.api::inject_network_info %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:173
+#, python-format
+msgid "Compute.api::lock %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:189
+#, python-format
+msgid "Compute.api::unlock %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:219
+#, python-format
+msgid "createBackup entity requires %s attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:223
+msgid "Malformed createBackup entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:229
+msgid "createBackup attribute 'rotation' must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:244
+#: cinder/api/openstack/compute/contrib/console_output.py:47
+#: cinder/api/openstack/compute/contrib/console_output.py:59
+#: cinder/api/openstack/compute/contrib/consoles.py:49
+#: cinder/api/openstack/compute/contrib/consoles.py:60
+#: cinder/api/openstack/compute/contrib/server_action_list.py:49
+#: cinder/api/openstack/compute/contrib/server_diagnostics.py:47
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:38
+msgid "Instance not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:272
+msgid "host and block_migration must be specified."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:284
+#, python-format
+msgid "Live migration of instance %(id)s to host %(host)s failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:76
+#, python-format
+msgid ""
+"Cannot create aggregate with name %(name)s and availability zone "
+"%(avail_zone)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:88
+#, python-format
+msgid "Cannot show aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:114
+#, python-format
+msgid "Cannot update aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:126
+#, python-format
+msgid "Cannot delete aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:139
+#, python-format
+msgid "Aggregates does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:152
+#: cinder/api/openstack/compute/contrib/aggregates.py:158
+#, python-format
+msgid "Cannot add host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:171
+#: cinder/api/openstack/compute/contrib/aggregates.py:175
+#, python-format
+msgid "Cannot remove host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:195
+#, python-format
+msgid "Cannot set metadata %(metadata)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/certificates.py:75
+msgid "Only root certificate can be retrieved."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/cloudpipe.py:146
+msgid ""
+"Unable to claim IP for VPN instances, ensure it isn't running, and try "
+"again in a few minutes"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:44
+msgid "Missing type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:56
+msgid "Invalid type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/disk_config.py:44
+#, python-format
+msgid "%s must be either 'MANUAL' or 'AUTO'."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/extended_server_attributes.py:77
+#: cinder/api/openstack/compute/contrib/extended_status.py:61
+msgid "Server not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:61
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:91
+msgid "Flavor not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:49
+#: cinder/api/openstack/compute/contrib/volumetypes.py:158
+msgid "No Request Body"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:159
+#, python-format
+msgid "No more floating ips in pool %s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:161
+msgid "No more floating ips available."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:201
+#: cinder/api/openstack/compute/contrib/floating_ips.py:230
+#: cinder/api/openstack/compute/contrib/security_groups.py:571
+#: cinder/api/openstack/compute/contrib/security_groups.py:604
+msgid "Missing parameter dict"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:204
+#: cinder/api/openstack/compute/contrib/floating_ips.py:233
+msgid "Address not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:213
+msgid "No fixed ips associated to instance"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:216
+msgid "Associate floating ip failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:144
+#, python-format
+msgid "Invalid status: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:148
+#, python-format
+msgid "Invalid mode: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:152
+#, python-format
+msgid "Invalid update setting: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:170
+#, python-format
+msgid "Putting host %(host)s in maintenance mode %(mode)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:181
+#, python-format
+msgid "Setting host %(host)s to %(state)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:230
+msgid "Describe-resource is admin only functionality"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:238
+msgid "Host not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:70
+msgid "Keypair name contains unsafe characters"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:95
+msgid "Keypair name must be between 1 and 255 characters long"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:100
+#, python-format
+msgid "Key pair '%s' already exists."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:52
+msgid "Missing 'networkId' argument for addFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:68
+msgid "Missing 'address' argument for removeFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:77
+#, python-format
+msgid "Unable to find address %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:62
+#, python-format
+msgid "Network does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:70
+#, python-format
+msgid "Disassociating network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:74
+#: cinder/api/openstack/compute/contrib/networks.py:91
+#: cinder/api/openstack/compute/contrib/networks.py:101
+msgid "Network not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:87
+#, python-format
+msgid "Showing network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:97
+#, python-format
+msgid "Deleting network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/scheduler_hints.py:41
+msgid "Malformed scheduler_hints attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:222
+msgid "Security group id should be integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:243
+msgid "Security group is still in use"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:295
+#, python-format
+msgid "Security group %s already exists"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:315
+#, python-format
+msgid "Security group %s is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:318
+#, python-format
+msgid "Security group %s cannot be empty."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:321
+#, python-format
+msgid "Security group %s should not be greater than 255 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:348
+msgid "Parent group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:351
+#, python-format
+msgid "Security group (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:369
+msgid "Not enough parameters to build a valid rule."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:376
+#, python-format
+msgid "This rule already exists in group %s"
+msgstr "Це правило вже існує в групі %s"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:414
+msgid "Parent or group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:507
+msgid "Rule id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:510
+#, python-format
+msgid "Rule (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:574
+#: cinder/api/openstack/compute/contrib/security_groups.py:607
+msgid "Security group not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:578
+#: cinder/api/openstack/compute/contrib/security_groups.py:611
+msgid "Security group name cannot be empty"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:45
+#, python-format
+msgid "start instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:54
+#, python-format
+msgid "stop instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:73
+#: cinder/api/openstack/volume/volumes.py:106
+#, python-format
+msgid "vol=%s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:146
+#: cinder/api/openstack/volume/volumes.py:184
+#, python-format
+msgid "Delete volume with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:329
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(server_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:481
+#: cinder/api/openstack/volume/snapshots.py:110
+#, python-format
+msgid "Delete snapshot with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:524
+#: cinder/api/openstack/volume/snapshots.py:150
+#, python-format
+msgid "Create snapshot from volume %s"
+msgstr ""
+
+#: cinder/auth/fakeldap.py:33
+msgid "Attempted to instantiate singleton"
+msgstr ""
+
+#: cinder/auth/ldapdriver.py:650
+#, python-format
+msgid ""
+"Attempted to remove the last member of a group. Deleting the group at %s "
+"instead."
+msgstr ""
+
+#: cinder/auth/manager.py:298
+#, python-format
+msgid "Looking up user: %r"
+msgstr ""
+
+#: cinder/auth/manager.py:302
+#, python-format
+msgid "Failed authorization for access key %s"
+msgstr ""
+
+#: cinder/auth/manager.py:308
+#, python-format
+msgid "Using project name = user name (%s)"
+msgstr ""
+
+#: cinder/auth/manager.py:315
+#, python-format
+msgid "failed authorization: no project named %(pjid)s (user=%(uname)s)"
+msgstr ""
+
+#: cinder/auth/manager.py:324
+#, python-format
+msgid ""
+"Failed authorization: user %(uname)s not admin and not member of project "
+"%(pjname)s"
+msgstr ""
+
+#: cinder/auth/manager.py:331 cinder/auth/manager.py:343
+#, python-format
+msgid "user.secret: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:332 cinder/auth/manager.py:344
+#, python-format
+msgid "expected_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:333 cinder/auth/manager.py:345
+#, python-format
+msgid "signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:335 cinder/auth/manager.py:357
+#, python-format
+msgid "Invalid signature for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:353
+#, python-format
+msgid "host_only_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:449
+msgid "Must specify project"
+msgstr ""
+
+#: cinder/auth/manager.py:490
+#, python-format
+msgid "Adding role %(role)s to user %(uid)s in project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:493
+#, python-format
+msgid "Adding sitewide role %(role)s to user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:519
+#, python-format
+msgid "Removing role %(role)s from user %(uid)s on project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:522
+#, python-format
+msgid "Removing sitewide role %(role)s from user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:595
+#, python-format
+msgid "Created project %(name)s with manager %(manager_user)s"
+msgstr ""
+
+#: cinder/auth/manager.py:613
+#, python-format
+msgid "modifying project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:625
+#, python-format
+msgid "Adding user %(uid)s to project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:646
+#, python-format
+msgid "Remove user %(uid)s from project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:676
+#, python-format
+msgid "Deleting project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:734
+#, python-format
+msgid "Created user %(rvname)s (admin: %(rvadmin)r)"
+msgstr ""
+
+#: cinder/auth/manager.py:743
+#, python-format
+msgid "Deleting user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:753
+#, python-format
+msgid "Access Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:755
+#, python-format
+msgid "Secret Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:757
+#, python-format
+msgid "Admin status set to %(admin)r for user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:802
+#, python-format
+msgid "No vpn data for project %s"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:46
+msgid "Instance type for vpn instances"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:49
+msgid "Template for cloudpipe instance boot script"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:52
+msgid "Network to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:55
+msgid "Netmask to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:107
+#, python-format
+msgid "Launching VPN for %s"
+msgstr ""
+
+#: cinder/compute/api.py:141
+msgid "No compute host specified"
+msgstr ""
+
+#: cinder/compute/api.py:144
+#, python-format
+msgid "Unable to find host for Instance %s"
+msgstr ""
+
+#: cinder/compute/api.py:192
+#, python-format
+msgid ""
+"Quota exceeded for %(pid)s, tried to set %(num_metadata)s metadata "
+"properties"
+msgstr ""
+
+#: cinder/compute/api.py:203
+#, python-format
+msgid "Quota exceeded for %(pid)s, metadata property key or value too long"
+msgstr ""
+
+#: cinder/compute/api.py:257
+msgid "Cannot run any more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:259
+#, python-format
+msgid "Can only run %s more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:261
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances. "
+msgstr ""
+
+#: cinder/compute/api.py:310
+msgid "Creating a raw instance"
+msgstr ""
+
+#: cinder/compute/api.py:312
+#, python-format
+msgid "Using Kernel=%(kernel_id)s, Ramdisk=%(ramdisk_id)s"
+msgstr ""
+
+#: cinder/compute/api.py:383
+#, python-format
+msgid "Going to run %s instances..."
+msgstr ""
+
+#: cinder/compute/api.py:447
+#, python-format
+msgid "bdm %s"
+msgstr ""
+
+#: cinder/compute/api.py:474
+#, python-format
+msgid "block_device_mapping %s"
+msgstr ""
+
+#: cinder/compute/api.py:591
+#, python-format
+msgid "Sending create to scheduler for %(pid)s/%(uid)s's"
+msgstr ""
+
+#: cinder/compute/api.py:871
+msgid "Going to try to soft delete instance"
+msgstr ""
+
+#: cinder/compute/api.py:891
+msgid "No host for instance, deleting immediately"
+msgstr ""
+
+#: cinder/compute/api.py:939
+msgid "Going to try to terminate instance"
+msgstr ""
+
+#: cinder/compute/api.py:977
+msgid "Going to try to stop instance"
+msgstr ""
+
+#: cinder/compute/api.py:996
+msgid "Going to try to start instance"
+msgstr ""
+
+#: cinder/compute/api.py:1000
+#, python-format
+msgid "Instance %(instance_uuid)s is not stopped. (%(vm_state)s"
+msgstr ""
+
+#: cinder/compute/api.py:1071 cinder/volume/api.py:173
+#: cinder/volume/volume_types.py:64
+#, python-format
+msgid "Searching by: %s"
+msgstr ""
+
+#: cinder/compute/api.py:1201
+#, python-format
+msgid "Image type not recognized %s"
+msgstr ""
+
+#: cinder/compute/api.py:1369
+msgid "flavor_id is None. Assuming migration."
+msgstr ""
+
+#: cinder/compute/api.py:1377
+#, python-format
+msgid ""
+"Old instance type %(current_instance_type_name)s,  new instance type "
+"%(new_instance_type_name)s"
+msgstr ""
+
+#: cinder/compute/api.py:1644
+#, python-format
+msgid "multiple fixedips exist, using the first: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:57 cinder/compute/instance_types.py:65
+msgid "create arguments must be positive integers"
+msgstr ""
+
+#: cinder/compute/instance_types.py:76 cinder/volume/volume_types.py:41
+#, python-format
+msgid "DB error: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:86
+#, python-format
+msgid "Instance type %s not found for deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:138
+#, python-format
+msgid "check_instance_lock: decorating: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:140
+#, python-format
+msgid ""
+"check_instance_lock: arguments: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+msgstr ""
+
+#: cinder/compute/manager.py:144
+#, python-format
+msgid "check_instance_lock: locked: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:146
+#, python-format
+msgid "check_instance_lock: admin: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:151
+#, python-format
+msgid "check_instance_lock: executing: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:155
+#, python-format
+msgid "check_instance_lock: not executing |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:201
+#, python-format
+msgid "Unable to load the virtualization driver: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:223
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s has been destroyed from under us while trying "
+"to set it to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:240
+#, python-format
+msgid "Current state is %(drv_state)s, state in DB is %(db_state)s."
+msgstr ""
+
+#: cinder/compute/manager.py:245
+msgid "Rebooting instance after cinder-compute restart."
+msgstr ""
+
+#: cinder/compute/manager.py:255
+msgid "Hypervisor driver does not support firewall rules"
+msgstr ""
+
+#: cinder/compute/manager.py:260
+msgid "Checking state"
+msgstr ""
+
+#: cinder/compute/manager.py:329
+#, python-format
+msgid "Setting up bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:400
+#, python-format
+msgid "Instance %s already deleted from database. Attempting forceful vm deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:406
+#, python-format
+msgid "Exception encountered while terminating the instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:444
+#, python-format
+msgid "Instance %s not found."
+msgstr ""
+
+#: cinder/compute/manager.py:480
+msgid "Instance has already been created"
+msgstr ""
+
+#: cinder/compute/manager.py:523
+#, python-format
+msgid ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:528
+#, python-format
+msgid ""
+"Image '%(image_id)s' size %(size_bytes)d exceeded instance_type allowed "
+"size %(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:538
+msgid "Starting instance..."
+msgstr ""
+
+#: cinder/compute/manager.py:548
+msgid "Skipping network allocation for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:561
+msgid "Instance failed network setup"
+msgstr ""
+
+#: cinder/compute/manager.py:565
+#, python-format
+msgid "Instance network_info: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:578
+msgid "Instance failed block device setup"
+msgstr ""
+
+#: cinder/compute/manager.py:594
+msgid "Instance failed to spawn"
+msgstr ""
+
+#: cinder/compute/manager.py:615
+msgid "Deallocating network for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:672
+#, python-format
+msgid "%(action_str)s instance"
+msgstr ""
+
+#: cinder/compute/manager.py:699
+#, python-format
+msgid "Ignoring DiskNotFound: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:708
+#, python-format
+msgid "terminating bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:742 cinder/compute/manager.py:1328
+#: cinder/compute/manager.py:1416 cinder/compute/manager.py:2501
+#, python-format
+msgid "%s. Setting instance vm_state to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:811
+#, python-format
+msgid ""
+"Cannot rebuild instance [%(instance_uuid)s], because the given image does"
+" not exist."
+msgstr ""
+
+#: cinder/compute/manager.py:816
+#, python-format
+msgid "Cannot rebuild instance [%(instance_uuid)s]: %(exc)s"
+msgstr ""
+
+#: cinder/compute/manager.py:823
+#, python-format
+msgid "Rebuilding instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:876
+#, python-format
+msgid "Rebooting instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:891
+#, python-format
+msgid ""
+"trying to reboot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:933
+#, python-format
+msgid "instance %s: snapshotting"
+msgstr ""
+
+#: cinder/compute/manager.py:939
+#, python-format
+msgid ""
+"trying to snapshot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:995
+#, python-format
+msgid "Found %(num_images)d images (rotation: %(rotation)d)"
+msgstr ""
+
+#: cinder/compute/manager.py:1001
+#, python-format
+msgid "Rotating out %d backups"
+msgstr ""
+
+#: cinder/compute/manager.py:1005
+#, python-format
+msgid "Deleting image %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1035
+#, python-format
+msgid "Failed to set admin password. Instance %s is not running"
+msgstr ""
+
+#: cinder/compute/manager.py:1041
+#, python-format
+msgid "Instance %s: Root password set"
+msgstr ""
+
+#: cinder/compute/manager.py:1050
+msgid "set_admin_password is not implemented by this driver."
+msgstr ""
+
+#: cinder/compute/manager.py:1064
+msgid "Error setting admin password"
+msgstr ""
+
+#: cinder/compute/manager.py:1079
+#, python-format
+msgid ""
+"trying to inject a file into a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1084
+#, python-format
+msgid "instance %(instance_uuid)s: injecting file to %(path)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1098
+#, python-format
+msgid ""
+"trying to update agent on a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1103
+#, python-format
+msgid "instance %(instance_uuid)s: updating agent to %(url)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1116
+#, python-format
+msgid "instance %s: rescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1141
+#, python-format
+msgid "instance %s: unrescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1270
+msgid "destination same as source!"
+msgstr ""
+
+#: cinder/compute/manager.py:1287
+#, python-format
+msgid "instance %s: migrating"
+msgstr ""
+
+#: cinder/compute/manager.py:1471
+#, python-format
+msgid "instance %s: pausing"
+msgstr ""
+
+#: cinder/compute/manager.py:1489
+#, python-format
+msgid "instance %s: unpausing"
+msgstr ""
+
+#: cinder/compute/manager.py:1525
+#, python-format
+msgid "instance %s: retrieving diagnostics"
+msgstr ""
+
+#: cinder/compute/manager.py:1534
+#, python-format
+msgid "instance %s: suspending"
+msgstr ""
+
+#: cinder/compute/manager.py:1556
+#, python-format
+msgid "instance %s: resuming"
+msgstr ""
+
+#: cinder/compute/manager.py:1579
+#, python-format
+msgid "instance %s: locking"
+msgstr ""
+
+#: cinder/compute/manager.py:1588
+#, python-format
+msgid "instance %s: unlocking"
+msgstr ""
+
+#: cinder/compute/manager.py:1596
+#, python-format
+msgid "instance %s: getting locked state"
+msgstr ""
+
+#: cinder/compute/manager.py:1606
+#, python-format
+msgid "instance %s: reset network"
+msgstr ""
+
+#: cinder/compute/manager.py:1614
+#, python-format
+msgid "instance %s: inject network info"
+msgstr ""
+
+#: cinder/compute/manager.py:1618
+#, python-format
+msgid "network_info to inject: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:1655
+#, python-format
+msgid "instance %s: getting vnc console"
+msgstr ""
+
+#: cinder/compute/manager.py:1685
+#, python-format
+msgid "Booting with volume %(volume_id)s at %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1703
+#, python-format
+msgid ""
+"instance %(instance_uuid)s: attaching volume %(volume_id)s to "
+"%(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1705
+#, python-format
+msgid "Attaching volume %(volume_id)s to %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1714
+#, python-format
+msgid "instance %(instance_uuid)s: attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1724
+#, python-format
+msgid "Attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1752
+#, python-format
+msgid "Detach volume %(volume_id)s from mountpoint %(mp)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1756
+#, python-format
+msgid "Detaching volume from unknown instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1822
+#, python-format
+msgid ""
+"Creating tmpfile %s to notify to other compute nodes that they should "
+"mount the same storage."
+msgstr ""
+
+#: cinder/compute/manager.py:1884
+msgid "Instance has no volume."
+msgstr ""
+
+#: cinder/compute/manager.py:1916
+#, python-format
+msgid "plug_vifs() failed %(cnt)d.Retry up to %(max_retry)d for %(hostname)s."
+msgstr ""
+
+#: cinder/compute/manager.py:1973
+#, python-format
+msgid "Pre live migration failed at  %(dest)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2000
+msgid "post_live_migration() is started.."
+msgstr ""
+
+#: cinder/compute/manager.py:2030
+msgid "No floating_ip found"
+msgstr ""
+
+#: cinder/compute/manager.py:2038
+msgid "No floating_ip found."
+msgstr ""
+
+#: cinder/compute/manager.py:2040
+#, python-format
+msgid ""
+"Live migration: Unexpected error: cannot inherit floating ip.\n"
+"%(e)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2073
+#, python-format
+msgid "Migrating instance to %(dest)s finished successfully."
+msgstr ""
+
+#: cinder/compute/manager.py:2075
+msgid ""
+"You may see the error \"libvirt: QEMU error: Domain not found: no domain "
+"with matching name.\" This error can be safely ignored."
+msgstr ""
+
+#: cinder/compute/manager.py:2090
+msgid "Post operation of migraton started"
+msgstr ""
+
+#: cinder/compute/manager.py:2226
+#, python-format
+msgid "Updated the info_cache for instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:2255
+msgid "Updating bandwidth usage cache"
+msgstr ""
+
+#: cinder/compute/manager.py:2277
+msgid "Updating host status"
+msgstr ""
+
+#: cinder/compute/manager.py:2305
+#, python-format
+msgid ""
+"Found %(num_db_instances)s in the database and %(num_vm_instances)s on "
+"the hypervisor."
+msgstr ""
+
+#: cinder/compute/manager.py:2331
+#, python-format
+msgid ""
+"During the sync_power process the instance %(uuid)s has moved from host "
+"%(src)s to host %(dst)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2344
+#, python-format
+msgid ""
+"Instance %s is in the process of migrating to this host. Wait next "
+"sync_power cycle before setting power state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2350
+msgid ""
+"Instance found in database but not known by hypervisor. Setting power "
+"state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2380
+msgid "FLAGS.reclaim_instance_interval <= 0, skipping..."
+msgstr ""
+
+#: cinder/compute/manager.py:2392
+msgid "Reclaiming deleted instance"
+msgstr ""
+
+#: cinder/compute/manager.py:2458
+#, python-format
+msgid ""
+"Detected instance with name label '%(name)s' which is marked as DELETED "
+"but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2465
+#, python-format
+msgid ""
+"Destroying instance with name label '%(name)s' which is marked as DELETED"
+" but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2472
+#, python-format
+msgid "Unrecognized value '%(action)s' for FLAGS.running_deleted_instance_action"
+msgstr ""
+
+#: cinder/compute/manager.py:2542
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: unrecoverable state during operation on "
+"%(host)s"
+msgstr ""
+
+#: cinder/compute/utils.py:142
+msgid "v4 subnets are required for legacy nw_info"
+msgstr ""
+
+#: cinder/console/manager.py:77 cinder/console/vmrc_manager.py:70
+msgid "Adding console"
+msgstr ""
+
+#: cinder/console/manager.py:97
+#, python-format
+msgid "Tried to remove non-existant console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:122
+#, python-format
+msgid "Tried to remove non-existent console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:125
+#, python-format
+msgid "Removing console %(console_id)s."
+msgstr ""
+
+#: cinder/console/xvp.py:98
+msgid "Rebuilding xvp conf"
+msgstr ""
+
+#: cinder/console/xvp.py:116
+#, python-format
+msgid "Re-wrote %s"
+msgstr ""
+
+#: cinder/console/xvp.py:121
+msgid "Stopping xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:134
+msgid "Starting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:141
+#, python-format
+msgid "Error starting xvp: %s"
+msgstr ""
+
+#: cinder/console/xvp.py:144
+msgid "Restarting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:146
+msgid "xvp not running..."
+msgstr ""
+
+#: cinder/consoleauth/manager.py:63
+#, python-format
+msgid "Deleting Expired Token: (%s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:75
+#, python-format
+msgid "Received Token: %(token)s, %(token_dict)s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:79
+#, python-format
+msgid "Checking Token: %(token)s, %(token_valid)s)"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:57
+msgid "Use of empty request context is deprecated"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:198
+#, python-format
+msgid "Unrecognized read_deleted value '%s'"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:516 cinder/db/sqlalchemy/api.py:551
+#, python-format
+msgid "No ComputeNode for %(host)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4019 cinder/db/sqlalchemy/api.py:4045
+#, python-format
+msgid "No backend config with id %(sm_backend_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4103
+#, python-format
+msgid "No sm_flavor called %(sm_flavor)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4147
+#, python-format
+msgid "No sm_volume with id %(volume_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:66
+msgid "python-migrate is not installed. Exiting."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:78
+msgid "version should be an integer"
+msgstr ""
+
+#: cinder/db/sqlalchemy/session.py:137
+#, python-format
+msgid "SQL connection failed. %s attempts left."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:48
+msgid "interface column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:80
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:54
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:48
+#, python-format
+msgid "Table |%s| not created!"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:87
+msgid "VIF column not added to fixed_ips table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:97
+#, python-format
+msgid "join list for moving mac_addresses |%s|"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:39
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:60
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:99
+msgid "foreign key constraint couldn't be added"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:58
+msgid "foreign key constraint couldn't be dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py:34
+msgid "priority column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:41
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:42
+#: cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py:56
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:68
+msgid "foreign key constraint couldn't be removed"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py:34
+msgid "progress column not added to instances table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py:97
+#, python-format
+msgid ""
+"Could not cast flavorid to integer: %s. Set flavorid to an integer-like "
+"string to downgrade."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:69
+msgid "instance_info_caches tables not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py:41
+msgid "progress column not added to compute_nodes table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:76
+msgid "dns_domains table not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:60
+msgid "quota_classes table not dropped"
+msgstr ""
+
+#: cinder/image/glance.py:147
+msgid "Connection error contacting glance server, retrying"
+msgstr ""
+
+#: cinder/image/glance.py:153 cinder/network/quantum/melange_connection.py:104
+msgid "Maximum attempts reached"
+msgstr ""
+
+#: cinder/image/glance.py:278
+#, python-format
+msgid "Creating image in Glance. Metadata passed in %s"
+msgstr ""
+
+#: cinder/image/glance.py:281
+#, python-format
+msgid "Metadata after formatting for Glance %s"
+msgstr ""
+
+#: cinder/image/glance.py:289
+#, python-format
+msgid "Metadata returned from Glance formatted for Base %s"
+msgstr ""
+
+#: cinder/image/glance.py:331 cinder/image/glance.py:335
+msgid "Not the image owner"
+msgstr ""
+
+#: cinder/image/glance.py:410
+#, python-format
+msgid "%(timestamp)s does not follow any of the signatures: %(iso_formats)s"
+msgstr ""
+
+#: cinder/image/s3.py:309
+#, python-format
+msgid "Failed to download %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:328
+#, python-format
+msgid "Failed to decrypt %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:340
+#, python-format
+msgid "Failed to untar %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:353
+#, python-format
+msgid "Failed to upload %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:379
+#, python-format
+msgid "Failed to decrypt private key: %s"
+msgstr ""
+
+#: cinder/image/s3.py:387
+#, python-format
+msgid "Failed to decrypt initialization vector: %s"
+msgstr ""
+
+#: cinder/image/s3.py:398
+#, python-format
+msgid "Failed to decrypt image file %(image_file)s: %(err)s"
+msgstr ""
+
+#: cinder/image/s3.py:410
+msgid "Unsafe filenames in image"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:38 cinder/ipv6/rfc2462.py:34
+#, python-format
+msgid "Bad mac for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:40 cinder/ipv6/rfc2462.py:36
+#, python-format
+msgid "Bad prefix for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:42
+#, python-format
+msgid "Bad project_id for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/network/ldapdns.py:321
+msgid "This driver only supports type 'a' entries."
+msgstr ""
+
+#: cinder/network/linux_net.py:166
+#, python-format
+msgid "Attempted to remove chain %s which does not exist"
+msgstr ""
+
+#: cinder/network/linux_net.py:192
+#, python-format
+msgid "Unknown chain: %r"
+msgstr ""
+
+#: cinder/network/linux_net.py:215
+#, python-format
+msgid ""
+"Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r "
+"%(top)r"
+msgstr ""
+
+#: cinder/network/linux_net.py:335
+msgid "IPTablesManager.apply completed with success"
+msgstr ""
+
+#: cinder/network/linux_net.py:694
+#, python-format
+msgid "Hupping dnsmasq threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:696
+#, python-format
+msgid "Pid %d is stale, relaunching dnsmasq"
+msgstr ""
+
+#: cinder/network/linux_net.py:756
+#, python-format
+msgid "killing radvd threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:758
+#, python-format
+msgid "Pid %d is stale, relaunching radvd"
+msgstr ""
+
+#: cinder/network/linux_net.py:967
+#, python-format
+msgid "Starting VLAN inteface %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:999
+#, python-format
+msgid "Starting Bridge interface for %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1142
+#, python-format
+msgid "Starting bridge %s "
+msgstr ""
+
+#: cinder/network/linux_net.py:1149
+#, python-format
+msgid "Done starting bridge %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1167
+#, python-format
+msgid "Failed unplugging gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/linux_net.py:1170
+#, python-format
+msgid "Unplugged gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/manager.py:291
+#, python-format
+msgid "Fixed ip %(fixed_ip_id)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:300 cinder/network/manager.py:496
+#, python-format
+msgid "Interface %(interface)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:315
+#, python-format
+msgid "floating IP allocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:353
+#, python-format
+msgid "floating IP deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:386
+#, python-format
+msgid "Address |%(address)s| is not allocated"
+msgstr ""
+
+#: cinder/network/manager.py:390
+#, python-format
+msgid "Address |%(address)s| is not allocated to your project |%(project)s|"
+msgstr ""
+
+#: cinder/network/manager.py:402
+#, python-format
+msgid "Quota exceeded for %s, tried to allocate address"
+msgstr ""
+
+#: cinder/network/manager.py:614
+#, python-format
+msgid ""
+"Database inconsistency: DNS domain |%s| is registered in the Cinder db but "
+"not visible to either the floating or instance DNS driver. It will be "
+"ignored."
+msgstr ""
+
+#: cinder/network/manager.py:660
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing zone to |%(av_zone)s|."
+msgstr ""
+
+#: cinder/network/manager.py:670
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing project to |%(project)s|."
+msgstr ""
+
+#: cinder/network/manager.py:778
+#, python-format
+msgid "Disassociated %s stale fixed ip(s)"
+msgstr ""
+
+#: cinder/network/manager.py:782
+msgid "setting network host"
+msgstr ""
+
+#: cinder/network/manager.py:896
+#, python-format
+msgid "network allocations for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:901
+#, python-format
+msgid "networks retrieved for instance |%(instance_id)s|: |%(networks)s|"
+msgstr ""
+
+#: cinder/network/manager.py:930
+#, python-format
+msgid "network deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:1152
+#, python-format
+msgid ""
+"instance-dns-zone is |%(domain)s|, which is in availability zone "
+"|%(zone)s|. Instance |%(instance)s| is in zone |%(zone2)s|. No DNS record"
+" will be created."
+msgstr ""
+
+#: cinder/network/manager.py:1227
+#, python-format
+msgid "Unable to release %s because vif doesn't exist."
+msgstr ""
+
+#: cinder/network/manager.py:1244
+#, python-format
+msgid "Leased IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1248
+#, python-format
+msgid "IP %s leased that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1256
+#, python-format
+msgid "IP |%s| leased that isn't allocated"
+msgstr ""
+
+#: cinder/network/manager.py:1261
+#, python-format
+msgid "Released IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1265
+#, python-format
+msgid "IP %s released that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1268
+#, python-format
+msgid "IP %s released that was not leased"
+msgstr ""
+
+#: cinder/network/manager.py:1331
+msgid "cidr already in use"
+msgstr ""
+
+#: cinder/network/manager.py:1334
+#, python-format
+msgid "requested cidr (%(cidr)s) conflicts with existing supernet (%(super)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1345
+#, python-format
+msgid ""
+"requested cidr (%(cidr)s) conflicts with existing smaller cidr "
+"(%(smaller)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1404
+msgid "Network already exists!"
+msgstr ""
+
+#: cinder/network/manager.py:1423
+#, python-format
+msgid "Network must be disassociated from project %s before delete"
+msgstr ""
+
+#: cinder/network/manager.py:1832
+msgid ""
+"The sum between the number of networks and the vlan start cannot be "
+"greater than 4094"
+msgstr ""
+
+#: cinder/network/manager.py:1839
+#, python-format
+msgid ""
+"The network range is not big enough to fit %(num_networks)s. Network size"
+" is %(network_size)s"
+msgstr ""
+
+#: cinder/network/minidns.py:65
+msgid "This driver only supports type 'a'"
+msgstr ""
+
+#: cinder/network/quantum/client.py:154
+msgid "Tenant ID not set"
+msgstr ""
+
+#: cinder/network/quantum/client.py:180
+#, python-format
+msgid "Quantum Client Request: %(method)s %(action)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:196
+#, python-format
+msgid "Quantum entity not found: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:206
+#, python-format
+msgid "Server %(status_code)s error: %(data)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:210
+#, python-format
+msgid "Unable to connect to server. Got error: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:228
+#, python-format
+msgid "unable to deserialize object of type = '%s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:162
+msgid "QuantumManager does not use 'multi_host' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:166
+msgid "QuantumManager requires that only one network is created per call"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:176
+msgid "QuantumManager does not use 'vlan_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:182
+msgid "QuantumManager does not use 'vpn_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:186
+msgid "QuantumManager does not use 'bridge' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:190
+msgid "QuantumManager does not use 'bridge_interface' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:195
+msgid "QuantumManager requires a valid (.1) gateway address."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:204
+#, python-format
+msgid ""
+"Unable to find existing quantum network for tenant '%(q_tenant_id)s' with"
+" net-id '%(quantum_net_id)s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:301
+#, python-format
+msgid "network allocations for instance %s"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:588
+#, python-format
+msgid ""
+"port deallocation failed for instance: |%(instance_id)s|, port_id: "
+"|%(port_id)s|"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:606
+#, python-format
+msgid ""
+"ipam deallocation failed for instance: |%(instance_id)s|, vif_uuid: "
+"|%(vif_uuid)s|"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:96
+#, python-format
+msgid "Server returned error: %s"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:98
+msgid "Connection error contacting melange service, retrying"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:108
+#, python-format
+msgid ""
+"allocate IP on network |%(network_id)s| belonging to "
+"|%(network_tenant_id)s| to this vif |%(vif_id)s| with mac "
+"|%(mac_address)s| belonging to |%(project_id)s| "
+msgstr ""
+
+#: cinder/network/quantum/melange_ipam_lib.py:133
+msgid "get_project_and_global_net_ids must be called with a non-null project_id"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:75
+msgid "Error creating network entry"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:90
+#, python-format
+msgid "No network with net_id = %s"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:221
+#, python-format
+msgid "No fixed IPs to deallocate for vif %s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:99
+#, python-format
+msgid "Connecting interface %(interface_id)s to net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:113
+#, python-format
+msgid "Deleting port %(port_id)s on net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/notifier/api.py:115
+#, python-format
+msgid "%s not in valid priorities"
+msgstr ""
+
+#: cinder/notifier/api.py:130
+#, python-format
+msgid ""
+"Problem '%(e)s' attempting to send to notification system. "
+"Payload=%(payload)s"
+msgstr ""
+
+#: cinder/notifier/list_notifier.py:65
+#, python-format
+msgid "Problem '%(e)s' attempting to send to notification driver %(driver)s."
+msgstr ""
+
+#: cinder/notifier/rabbit_notifier.py:46
+#, python-format
+msgid "Could not send notification to %(topic)s. Payload=%(message)s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:146
+#, python-format
+msgid "Returning exception %s to caller"
+msgstr ""
+
+#: cinder/rpc/amqp.py:188
+#, python-format
+msgid "unpacked context: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:231
+#, python-format
+msgid "received %s"
+msgstr "отримано %s"
+
+#: cinder/rpc/amqp.py:236
+#, python-format
+msgid "no method for message: %s"
+msgstr "без порядку для повідомлень: %s"
+
+#: cinder/rpc/amqp.py:237
+#, python-format
+msgid "No method for message: %s"
+msgstr "Без порядку для повідомлень: %s"
+
+#: cinder/rpc/amqp.py:321
+#, python-format
+msgid "Making asynchronous call on %s ..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:324
+#, python-format
+msgid "MSG_ID is %s"
+msgstr "MSG_ID %s"
+
+#: cinder/rpc/amqp.py:346
+#, python-format
+msgid "Making asynchronous cast on %s..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:354
+msgid "Making asynchronous fanout cast..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:379
+#, python-format
+msgid "Sending notification on %s..."
+msgstr ""
+
+#: cinder/rpc/common.py:54
+#, python-format
+msgid ""
+"Remote error: %(exc_type)s %(value)s\n"
+"%(traceback)s."
+msgstr ""
+
+#: cinder/rpc/common.py:71
+msgid "Timeout while waiting on RPC response."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:111
+msgid "Failed to process message... skipping it."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:407
+#, python-format
+msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:430
+#, python-format
+msgid "Connected to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:466
+#, python-format
+msgid ""
+"Unable to connect to AMQP server on %(hostname)s:%(port)d after "
+"%(max_retries)d tries: %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:482
+#, python-format
+msgid ""
+"AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying "
+"again in %(sleep_time)d seconds."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:533 cinder/rpc/impl_qpid.py:385
+#, python-format
+msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:551 cinder/rpc/impl_qpid.py:400
+#, python-format
+msgid "Timed out waiting for RPC response: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:555 cinder/rpc/impl_qpid.py:404
+#, python-format
+msgid "Failed to consume message from queue: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:589 cinder/rpc/impl_qpid.py:434
+#, python-format
+msgid "Failed to publish message to topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:341
+#, python-format
+msgid "Unable to connect to AMQP server: %s "
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:346
+#, python-format
+msgid "Connected to AMQP server on %s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:354
+msgid "Re-established AMQP queues"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:412
+msgid "Error processing message.  Skipping it."
+msgstr ""
+
+#: cinder/scheduler/chance.py:47 cinder/scheduler/simple.py:91
+#: cinder/scheduler/simple.py:143
+msgid "Is the appropriate service running?"
+msgstr ""
+
+#: cinder/scheduler/chance.py:52
+msgid "Could not find another compute"
+msgstr ""
+
+#: cinder/scheduler/driver.py:63
+#, python-format
+msgid "Casted '%(method)s' to volume '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:80
+#, python-format
+msgid "Casted '%(method)s' to compute '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:89
+#, python-format
+msgid "Casted '%(method)s' to network '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:107
+#, python-format
+msgid "Casted '%(method)s' to %(topic)s '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:181
+msgid "Must implement a fallback schedule"
+msgstr ""
+
+#: cinder/scheduler/driver.py:185
+msgid "Driver must implement schedule_prep_resize"
+msgstr ""
+
+#: cinder/scheduler/driver.py:190
+msgid "Driver must implement schedule_run_instance"
+msgstr ""
+
+#: cinder/scheduler/driver.py:325
+msgid "Block migration can not be used with shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:330
+msgid "Live migration can not be used without shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:367 cinder/scheduler/driver.py:457
+#, python-format
+msgid "host %(dest)s is not compatible with original host %(src)s."
+msgstr ""
+
+#: cinder/scheduler/driver.py:416
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"memory(host:%(avail)s <= instance:%(mem_inst)s)"
+msgstr ""
+
+#: cinder/scheduler/driver.py:472
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"disk(host:%(available)s <= instance:%(necessary)s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:51
+#, python-format
+msgid "No host selection for %s defined."
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:64
+#, python-format
+msgid "Attempting to build %(num_instances)d instance(s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:157
+msgid "Scheduler only understands Compute nodes (for now)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:199
+#, python-format
+msgid "Filtered %(hosts)s"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:209
+#, python-format
+msgid "Weighted %(weighted_host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:144
+#, python-format
+msgid "Host filter fails for ignored host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:151
+#, python-format
+msgid "Host filter fails for non-forced host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:157
+#, python-format
+msgid "Host filter function %(func)s failed for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:163
+#, python-format
+msgid "Host filter passes for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:272
+#, python-format
+msgid "Received %(service_name)s service update from %(host)s."
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:313
+msgid "host_manager only implemented for 'compute'"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:323
+#, python-format
+msgid "No service for compute ID %s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:85
+#, python-format
+msgid ""
+"Driver Method %(driver_method_name)s missing: %(e)s. Reverting to "
+"schedule()"
+msgstr ""
+
+#: cinder/scheduler/manager.py:150
+#, python-format
+msgid "Failed to schedule_%(method)s: %(ex)s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:159
+#, python-format
+msgid "Setting instance %(instance_uuid)s to %(state)s state."
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:66
+#, python-format
+msgid "Could not stat scheduler options file %(filename)s: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:75
+#, python-format
+msgid "Could not decode scheduler options: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/simple.py:87
+msgid "Not enough allocatable CPU cores remaining"
+msgstr ""
+
+#: cinder/scheduler/simple.py:137
+msgid "Not enough allocatable volume gigabytes remaining"
+msgstr ""
+
+#: cinder/scheduler/filters/core_filter.py:45
+msgid "VCPUs not set; assuming CPU collection broken"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:72
+#, python-format
+msgid "Faking execution of cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:80
+#, python-format
+msgid "Faked command matched %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:96
+#, python-format
+msgid "Faked command raised an exception %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:101
+#, python-format
+msgid "Reply to faked command is stdout='%(stdout)s' stderr='%(stderr)s'"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:784
+msgid "Please extend mock libvirt module to support flags"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:790
+msgid "Please extend fake libvirt module to support this auth method"
+msgstr ""
+
+#: cinder/tests/test_compute.py:365 cinder/tests/test_compute.py:1419
+#, python-format
+msgid "Running instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:371
+#, python-format
+msgid "After terminating instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:589
+msgid "Internal error"
+msgstr ""
+
+#: cinder/tests/test_compute.py:1430
+#, python-format
+msgid "After force-killing instances: %s"
+msgstr ""
+
+#: cinder/tests/test_misc.py:92
+#, python-format
+msgid ""
+"The following migrations are missing a downgrade:\n"
+"\t%s"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:169
+msgid "id"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:170
+msgid "IPv4"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:171
+msgid "IPv6"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:172
+msgid "start address"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:173
+msgid "DNS1"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:174
+msgid "DNS2"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:175
+msgid "VlanID"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:176
+msgid "project"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:177
+msgid "uuid"
+msgstr ""
+
+#: cinder/tests/test_volume.py:216
+#, python-format
+msgid "Target %s allocated"
+msgstr ""
+
+#: cinder/tests/test_volume.py:468
+#, python-format
+msgid "Cannot confirm exported volume id:%s."
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:58
+#, python-format
+msgid "Given data: %s"
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:59
+#, python-format
+msgid "Result data: %s"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:626
+#, python-format
+msgid "Creating files in %s to simulate guest agent"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:637
+#, python-format
+msgid "Removing simulated guest agent files in %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/test_servers.py:2144
+#, python-format
+msgid "Quota exceeded: code=%(code)s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:57
+#, python-format
+msgid "_create: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:66
+#, python-format
+msgid "_delete: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:75
+#, python-format
+msgid "_get: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:85
+#, python-format
+msgid "_get_all: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:125
+#, python-format
+msgid "test_snapshot_create: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:134
+#, python-format
+msgid "test_snapshot_create: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:156
+#, python-format
+msgid "test_snapshot_create_force: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:165
+#, python-format
+msgid "test_snapshot_create_force: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:205
+#, python-format
+msgid "test_snapshot_show: resp=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:231
+#, python-format
+msgid "test_snapshot_detail: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/integrated/test_login.py:31
+#, python-format
+msgid "flavor: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:38
+#, python-format
+msgid ""
+"%(message)s\n"
+"Status Code: %(_status)s\n"
+"Body: %(_body)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:47
+msgid "Authentication error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:55
+msgid "Authorization error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:63
+msgid "Item not found"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:105
+#, python-format
+msgid "Doing %(method)s on %(relative_url)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:107
+#, python-format
+msgid "Body: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:125
+#, python-format
+msgid "%(auth_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:151
+#, python-format
+msgid "%(relative_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:161
+msgid "Unexpected status code"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:168
+#, python-format
+msgid "Decoding JSON: %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:133
+#, python-format
+msgid "Nested received %(queue)s, %(value)s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:142
+#, python-format
+msgid "Nested return %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:160
+msgid "RPC backend does not support timeouts"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:227 cinder/tests/rpc/common.py:233
+#, python-format
+msgid "Received %s"
+msgstr ""
+
+#: cinder/virt/connection.py:85
+msgid "Failed to open connection to the hypervisor"
+msgstr ""
+
+#: cinder/virt/fake.py:270 cinder/virt/xenapi_conn.py:396
+#: cinder/virt/baremetal/proxy.py:716 cinder/virt/libvirt/connection.py:2045
+#, python-format
+msgid "Compute_service record created for %s "
+msgstr ""
+
+#: cinder/virt/fake.py:273 cinder/virt/xenapi_conn.py:399
+#: cinder/virt/baremetal/proxy.py:720 cinder/virt/libvirt/connection.py:2048
+#, python-format
+msgid "Compute_service record updated for %s "
+msgstr ""
+
+#: cinder/virt/firewall.py:130
+#, python-format
+msgid "Attempted to unfilter instance %s which is not filtered"
+msgstr ""
+
+#: cinder/virt/firewall.py:137
+#, python-format
+msgid "Filters added to instance %s"
+msgstr ""
+
+#: cinder/virt/firewall.py:139
+msgid "Provider Firewall Rules refreshed"
+msgstr ""
+
+#: cinder/virt/firewall.py:291
+#, python-format
+msgid "Adding security group rule: %r"
+msgstr ""
+
+#: cinder/virt/firewall.py:403 cinder/virt/xenapi/firewall.py:87
+#, python-format
+msgid "Adding provider rule: %s"
+msgstr ""
+
+#: cinder/virt/images.py:86
+msgid "'qemu-img info' parsing failed."
+msgstr ""
+
+#: cinder/virt/images.py:92
+#, python-format
+msgid "fmt=%(fmt)s backed by: %(backing_file)s"
+msgstr ""
+
+#: cinder/virt/images.py:104
+#, python-format
+msgid "Converted to raw, but format is now %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:105
+msgid ""
+"Must specify vmwareapi_host_ip,vmwareapi_host_username and "
+"vmwareapi_host_password to useconnection_type=vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:276
+#, python-format
+msgid "In vmwareapi:_create_session, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:359
+#, python-format
+msgid "In vmwareapi:_call_method, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:398
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: success"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:404
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: error %(error_info)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:409
+#, python-format
+msgid "In vmwareapi:_poll_task, Got this error %s"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:140
+msgid ""
+"Must specify xenapi_connection_url, xenapi_connection_username "
+"(optionally), and xenapi_connection_password to use "
+"connection_type=xenapi"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:329 cinder/virt/libvirt/connection.py:472
+msgid "Could not determine iscsi initiator name"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:460
+msgid "Host startup on XenServer is not supported."
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:489
+msgid "Unable to log in to XenAPI (is the Dom0 disk full?)"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:527
+msgid "Host is member of a pool, but DB says otherwise"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:599 cinder/virt/xenapi_conn.py:612
+#, python-format
+msgid "Got exception: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:93
+msgid "No domains exist."
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:95
+#, python-format
+msgid "============= initial domains =========== : %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:99
+msgid "Building domain: to be removed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:103
+msgid "Not running domain: remove"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:111
+msgid "domain running on an unknown node: discarded"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:127
+#, python-format
+msgid "No such domain (%s)"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:134
+#, python-format
+msgid "Failed power down Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:143
+msgid "deactivate -> activate fails"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:153
+msgid "destroy_domain: no such domain"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:154
+#, python-format
+msgid "No such domain %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:161
+#, python-format
+msgid "Domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:163
+#, python-format
+msgid "Nodes: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:166
+#, python-format
+msgid "After storing domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:169
+msgid "deactivation/removing domain failed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:176
+msgid "===== Domain is being created ====="
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:179
+msgid "Same domain name already exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:181
+msgid "create_domain: before get_idle_node"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:198
+#, python-format
+msgid "Created new domain: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:213
+#, python-format
+msgid "Failed to boot Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:222
+msgid "No such domain exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:226
+#, python-format
+msgid "change_domain_state: to new state %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:233
+#, python-format
+msgid "Stored fake domains to the file: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:244
+msgid "domain does not exist"
+msgstr ""
+
+#: cinder/virt/baremetal/nodes.py:42
+#, python-format
+msgid "Unknown baremetal driver %(d)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:148
+#, python-format
+msgid "Error encountered when destroying instance '%(name)s': %(ex)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:162
+#, python-format
+msgid "instance %(instance_name)s: deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:189
+#, python-format
+msgid "instance %s: rebooted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:192
+msgid "_wait_for_reboot failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:222
+#, python-format
+msgid "instance %s: rescued"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:225
+msgid "_wait_for_rescue failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:242
+msgid "<============= spawn of baremetal =============>"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:255
+#, python-format
+msgid "instance %s: is building"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:260
+msgid "Key is injected but instance is not running yet"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:265
+#, python-format
+msgid "instance %s: booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:268
+#, python-format
+msgid "~~~~~~ current state = %s ~~~~~~"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:269
+#, python-format
+msgid "instance %s spawned successfully"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:272
+#, python-format
+msgid "instance %s:not booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:274
+msgid "Bremetal assignment is overcommitted."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:354
+#, python-format
+msgid "instance %s: Creating image"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:473
+#, python-format
+msgid "instance %(inst_name)s: injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:484
+#, python-format
+msgid ""
+"instance %(inst_name)s: ignoring error injecting data into image "
+"%(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:529
+#, python-format
+msgid "instance %s: starting toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:531
+#, python-format
+msgid "instance %s: finished toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:574 cinder/virt/libvirt/connection.py:1815
+msgid ""
+"Cannot get the number of cpu, because this function is not implemented "
+"for this platform. This error can be safely ignored for now."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:714
+#, python-format
+msgid "#### RLK: cpu_arch = %s "
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:746
+msgid "Updating!"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:773 cinder/virt/libvirt/connection.py:2609
+#: cinder/virt/xenapi/host.py:129
+msgid "Updating host stats"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:185
+msgid "free_node...."
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:216
+#, python-format
+msgid "deactivate_node is called for node_id = %(id)s node_ip = %(ip)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:221
+msgid "status of node is set to 0"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:232
+msgid "rootfs is already removed"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:264
+msgid "Before ping to the bare-metal node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:275
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is ready"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:279
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is not ready, out_msg=%(out_msg)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:292
+msgid "Noting to do for tilera nodes: vmlinux is in CF"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:316
+msgid "activate_node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:330
+msgid "Node is unknown error state."
+msgstr ""
+
+#: cinder/virt/disk/api.py:165
+msgid "no capable image handler configured"
+msgstr ""
+
+#: cinder/virt/disk/api.py:178
+#, python-format
+msgid "unknown disk image handler: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:189
+msgid "image already mounted"
+msgstr ""
+
+#: cinder/virt/disk/api.py:276 cinder/virt/disk/guestfs.py:64
+#: cinder/virt/disk/guestfs.py:78 cinder/virt/disk/mount.py:100
+#, python-format
+msgid "Failed to mount filesystem: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:291
+#, python-format
+msgid "Failed to remove container: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:441
+#, python-format
+msgid "User %(username)s not found in password file."
+msgstr ""
+
+#: cinder/virt/disk/api.py:457
+#, python-format
+msgid "User %(username)s not found in shadow file."
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:39
+#, python-format
+msgid "unsupported partition: %s"
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:77
+msgid "unknown guestmount error"
+msgstr ""
+
+#: cinder/virt/disk/loop.py:30
+#, python-format
+msgid "Could not attach image to loopback: %s"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:76
+msgid "no partitions found"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:77
+#, python-format
+msgid "Failed to map partitions: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:58
+msgid "nbd unavailable: module not loaded"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:63
+msgid "No free nbd devices"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:81
+#, python-format
+msgid "qemu-nbd error: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:93
+#, python-format
+msgid "nbd device %s did not show up"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:265
+#, python-format
+msgid "Connecting to libvirt: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:286
+msgid "Connection to libvirt broke"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:388
+#, python-format
+msgid "Error from libvirt during destroy. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:400
+#, python-format
+msgid ""
+"Error from libvirt during saved instance removal. Code=%(errcode)s "
+"Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:411
+#, python-format
+msgid "Error from libvirt during undefine. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:423
+msgid "Instance destroyed successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:435
+#, python-format
+msgid "Error from libvirt during unfilter. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:461
+#, python-format
+msgid "Deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:554
+msgid "attaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:567
+msgid "detaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:692
+msgid "Instance soft rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:696
+msgid "Failed to soft reboot instance."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:725
+msgid "Instance shutdown successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:761 cinder/virt/libvirt/connection.py:905
+msgid "During reboot, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:766
+msgid "Instance rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:867 cinder/virt/xenapi/vmops.py:1358
+#, python-format
+msgid ""
+"Found %(migration_count)d unconfirmed migrations older than "
+"%(confirm_window)d seconds"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:871
+#, python-format
+msgid "Automatically confirming migration %d"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:896
+msgid "Instance is running"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:910
+msgid "Instance spawned successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:926
+#, python-format
+msgid "data: %(data)r, fpath: %(fpath)r"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:978
+msgid "Guest does not have a console available"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1020
+#, python-format
+msgid "Path '%(path)s' supports direct I/O"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1024
+#, python-format
+msgid "Path '%(path)s' does not support direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1028 cinder/virt/libvirt/connection.py:1032
+#, python-format
+msgid "Error on '%(path)s' while checking direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1153
+msgid "Creating image"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1339
+#, python-format
+msgid "Injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1349
+#, python-format
+msgid "Ignoring error injecting data into image %(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1381
+#, python-format
+msgid "block_device_list %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1658
+msgid "Starting toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1662
+msgid "Finished toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1679
+#, python-format
+msgid ""
+"Error from libvirt while looking up %(instance_name)s: [Error Code "
+"%(error_code)s] %(ex)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1920
+msgid "libvirt version is too old (does not support getVersion)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1942
+#, python-format
+msgid "'<cpu>' must be 1, but %d\n"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1969
+#, python-format
+msgid "topology (%(topology)s) must have %(ks)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2067
+#, python-format
+msgid ""
+"Instance launched has CPU info:\n"
+"%s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2079
+#, python-format
+msgid ""
+"CPU doesn't have compatibility.\n"
+"\n"
+"%(ret)s\n"
+"\n"
+"Refer to %(u)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2136
+#, python-format
+msgid "Timeout migrating for %s. nwfilter not found."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2352
+#, python-format
+msgid "skipping %(path)s since it looks like volume"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2407
+#, python-format
+msgid "Getting disk size of %(i_name)s: %(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2458
+#, python-format
+msgid "Instance %s: Starting migrate_disk_and_power_off"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2513
+msgid "During wait running, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2518
+msgid "Instance running successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2525
+#, python-format
+msgid "Instance %s: Starting finish_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2565
+#, python-format
+msgid "Instance %s: Starting finish_revert_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:42
+msgid ""
+"Libvirt module could not be loaded. NWFilterFirewall will not work "
+"correctly."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:93
+msgid "Called setup_basic_filtering in nwfilter"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:101
+msgid "Ensuring static filters"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:171
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:217
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) for%(name)s is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:233
+msgid "iptables firewall: Setup Basic Filtering"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:252
+msgid "Attempted to unfilter instance which is not filtered"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:170
+#, python-format
+msgid "%s is a valid instance name"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:173
+#, python-format
+msgid "%s has a disk file"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:175
+#, python-format
+msgid "Instance %(instance)s is backed by %(backing)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:186
+#, python-format
+msgid ""
+"Instance %(instance)s is using a backing file %(backing)s which does not "
+"appear in the image service"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:237
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification failed"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:247
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification skipped, no hash stored"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:266
+#, python-format
+msgid "Cannot remove %(base_file)s, it does not exist"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:278
+#, python-format
+msgid "Base file too young to remove: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:281
+#, python-format
+msgid "Removing base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:288
+#, python-format
+msgid "Failed to remove %(base_file)s, error was %(error)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:299
+#, python-format
+msgid "%(id)s (%(base_file)s): checking"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:318
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): in use: on this node %(local)d local, %(remote)d "
+"on other nodes"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:330
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): warning -- an absent base file is in use! "
+"instances: %(instance_list)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:338
+#, python-format
+msgid "%(id)s (%(base_file)s): in use on (%(remote)d on other nodes)"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:348
+#, python-format
+msgid "%(id)s (%(base_file)s): image is not in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:354
+#, python-format
+msgid "%(id)s (%(base_file)s): image is in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:377
+#, python-format
+msgid "Skipping verification, no base directory at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:381
+msgid "Verify base images"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:388
+#, python-format
+msgid "Image id %(id)s yields fingerprint %(fingerprint)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:406
+#, python-format
+msgid "Unknown base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:411
+#, python-format
+msgid "Active base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:414
+#, python-format
+msgid "Corrupt base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:418
+#, python-format
+msgid "Removable base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:426
+msgid "Verification complete"
+msgstr ""
+
+#: cinder/virt/libvirt/utils.py:264
+msgid "Unable to find an open port"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:90
+#, python-format
+msgid "Ensuring vlan %(vlan)s and bridge %(bridge)s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:99
+#, python-format
+msgid "Ensuring bridge %s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:165 cinder/virt/libvirt/vif.py:220
+#, python-format
+msgid "Failed while unplugging vif of instance '%s'"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:163
+#, python-format
+msgid "iSCSI device not found at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:166
+#, python-format
+msgid ""
+"ISCSI volume not yet found at: %(mount_device)s. Will rescan & retry.  "
+"Try number: %(tries)s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:178
+#, python-format
+msgid "Found iSCSI node %(mount_device)s (after %(tries)s rescans)"
+msgstr ""
+
+#: cinder/virt/vmwareapi/error_util.py:93
+#, python-format
+msgid "Error(s) %s occurred in the call to RetrieveProperties"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:44 cinder/virt/xenapi/fake.py:77
+#, python-format
+msgid "%(text)s: _db_content => %(content)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:131
+#, python-format
+msgid "Property %(attr)s not set for the managed object %(objName)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:437
+msgid "There is no VM registered"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:439 cinder/virt/vmwareapi/fake.py:609
+#, python-format
+msgid "Virtual Machine with ref %s is not there"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:502
+#, python-format
+msgid "Logging out a session that is invalid or already logged out: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:517
+msgid "Session is faulty"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:520
+msgid "Session Invalid"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:606
+msgid " No Virtual Machine has been registered yet"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:99
+#, python-format
+msgid "Glance image %s is in killed state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:107
+#, python-format
+msgid "Glance image %(image_id)s is in unknown state - %(state)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:128
+msgid ""
+"ESX SOAP server returned an empty port group for the host system in its "
+"response"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:155
+#, python-format
+msgid "Creating Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:169
+#, python-format
+msgid "Created Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/read_write_util.py:150
+#, python-format
+msgid "Exception during HTTP connection close in VMWareHTTpWrite. Exception is %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:84
+msgid "Unable to import suds."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:90
+msgid "Must specify vmwareapi_wsdl_loc"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:145
+#, python-format
+msgid "No such SOAP method '%s' provided by VI SDK"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:150
+#, python-format
+msgid "httplib error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:157
+#, python-format
+msgid "Socket error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:162
+#, python-format
+msgid "Type error in  %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:166
+#, python-format
+msgid "Exception in %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:66
+msgid "Getting list of instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:82
+#, python-format
+msgid "Got total of %s instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:126
+msgid "Couldn't get a local Datastore reference"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:196
+#, python-format
+msgid "Creating VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:205
+#, python-format
+msgid "Created VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:234
+#, python-format
+msgid ""
+"Creating Virtual Disk of size  %(vmdk_file_size_in_kb)s KB and adapter "
+"type  %(adapter_type)s on the ESX host local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:251
+#, python-format
+msgid ""
+"Created Virtual Disk of size %(vmdk_file_size_in_kb)s KB on the ESX host "
+"local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:260
+#, python-format
+msgid ""
+"Deleting the file %(flat_uploaded_vmdk_path)s on the ESX host localstore "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:272
+#, python-format
+msgid ""
+"Deleted the file %(flat_uploaded_vmdk_path)s on the ESX host local store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:283
+#, python-format
+msgid ""
+"Downloading image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:298
+#, python-format
+msgid ""
+"Downloaded image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:315
+#, python-format
+msgid "Reconfiguring VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:322
+#, python-format
+msgid "Reconfigured VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:329
+#, python-format
+msgid "Powering on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:335
+#, python-format
+msgid "Powered on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:381
+#, python-format
+msgid "Creating Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:391
+#, python-format
+msgid "Created Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:434
+#, python-format
+msgid "Copying disk data before snapshot of the VM  instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:447
+#, python-format
+msgid "Copied disk data before snapshot of the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:456
+#, python-format
+msgid "Uploading image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:469
+#, python-format
+msgid "Uploaded image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:479
+#, python-format
+msgid "Deleting temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:488
+#, python-format
+msgid "Deleted temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:520
+msgid "instance is not powered on"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:527
+#, python-format
+msgid "Rebooting guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:530
+#, python-format
+msgid "Rebooted guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:532
+#, python-format
+msgid "Doing hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:536
+#, python-format
+msgid "Did hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:548
+#, python-format
+msgid "instance - %s not present"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:567
+#, python-format
+msgid "Powering off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:572
+#, python-format
+msgid "Powered off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:576
+#, python-format
+msgid "Unregistering the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:579
+#, python-format
+msgid "Unregistered the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:581
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while un-registering the "
+"VM: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:592
+#, python-format
+msgid "Deleting contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:602
+#, python-format
+msgid "Deleted contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:607
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while deleting the VM "
+"contents from the disk: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:615
+msgid "pause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:619
+msgid "unpause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:633
+#, python-format
+msgid "Suspending the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:637
+#, python-format
+msgid "Suspended the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:640
+msgid "instance is powered off and can not be suspended."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:643
+#, python-format
+msgid "VM %s was already in suspended state. So returning without doing anything"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:656
+#, python-format
+msgid "Resuming the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:661
+#, python-format
+msgid "Resumed the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:663
+msgid "instance is not in a suspended state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:699
+msgid "get_diagnostics not implemented for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:757
+#, python-format
+msgid ""
+"Reconfiguring VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:765
+#, python-format
+msgid ""
+"Reconfigured VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:802
+#, python-format
+msgid "Creating directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:806
+#, python-format
+msgid "Created directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:89
+#, python-format
+msgid "Downloading image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:103
+#, python-format
+msgid "Downloaded image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:108
+#, python-format
+msgid "Uploading image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:129
+#, python-format
+msgid "Uploaded image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:139
+#, python-format
+msgid "Getting image size for the image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:143
+#, python-format
+msgid "Got image size of %(size)s for the image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:553 cinder/virt/xenapi/fake.py:652
+#: cinder/virt/xenapi/fake.py:670 cinder/virt/xenapi/fake.py:732
+msgid "Raising NotImplemented"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:555
+#, python-format
+msgid "xenapi.fake does not have an implementation for %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:589
+#, python-format
+msgid "Calling %(localname)s %(impl)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:594
+#, python-format
+msgid "Calling getter %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:654
+#, python-format
+msgid ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:67
+#, python-format
+msgid ""
+"Instance %(name)s running on %(host)s could not be found in the database:"
+" assuming it is a worker VM and skipping migration to a new host"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:137
+#, python-format
+msgid "Unable to get SR for this host: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:169
+msgid "Unable to get updated status"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:172
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:37
+#, python-format
+msgid "Found non-unique network for name_label %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:55
+#, python-format
+msgid "Found non-unique network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:58
+#, python-format
+msgid "Found no network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:111
+#, python-format
+msgid "Unable to eject %(host)s from the pool; pool not empty"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:126
+#, python-format
+msgid "Unable to eject %(host)s from the pool; No master found"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:143
+#, python-format
+msgid "Pool-Join failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:146
+#, python-format
+msgid "Unable to join %(host)s in the pool"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:162
+#, python-format
+msgid "Pool-eject failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:174
+#, python-format
+msgid "Unable to set up pool: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:185
+#, python-format
+msgid "Pool-set_name_label failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:103
+#, python-format
+msgid "Found no PIF for device %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:122
+#, python-format
+msgid ""
+"PIF %(pif_rec['uuid'])s for network %(bridge)s has VLAN id %(pif_vlan)d. "
+"Expected %(vlan_num)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:218
+msgid "Created VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:245
+#, python-format
+msgid "VBD not found in instance %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:262
+#, python-format
+msgid "VBD %s already detached"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:265
+#, python-format
+msgid "VBD %(vbd_ref)s detach rejected, attempt %(num_attempt)d/%(max_attempts)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:270
+#, python-format
+msgid "Unable to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:275
+#, python-format
+msgid "Reached maximum number of retries trying to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:286
+#, python-format
+msgid "Unable to destroy VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:305
+#, python-format
+msgid "Creating %(vbd_type)s-type VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:308
+#, python-format
+msgid "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:319
+#, python-format
+msgid "Unable to destroy VDI %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:336
+#, python-format
+msgid ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:345
+#, python-format
+msgid "Copied VDI %(vdi_ref)s from VDI %(vdi_to_copy_ref)s on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:353
+#, python-format
+msgid "Cloned VDI %(vdi_ref)s from VDI %(vdi_to_clone_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:372
+#, python-format
+msgid "No primary VDI found for %(vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:379
+#, python-format
+msgid "Snapshotting with label '%(label)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:392
+#, python-format
+msgid "Created snapshot %(template_vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:431
+#, python-format
+msgid "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:583
+#, python-format
+msgid "Creating blank HD of size %(req_size)d gigs"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:634
+#, python-format
+msgid ""
+"Fast cloning is only supported on default local SR of type ext. SR on "
+"this system was found to be of type %(sr_type)s. Ignoring the cow flag."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:724
+#, python-format
+msgid ""
+"download_vhd %(image)s attempt %(attempt_num)d/%(max_attempts)d from "
+"%(glance_host)s:%(glance_port)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:734
+#, python-format
+msgid "download_vhd failed: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:750
+#, python-format
+msgid "Asking xapi to fetch vhd image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:760
+#, python-format
+msgid ""
+"xapi 'download_vhd' returned VDI of type '%(vdi_type)s' with UUID "
+"'%(vdi_uuid)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:789
+#, python-format
+msgid "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:805
+#, python-format
+msgid "image_size_bytes=%(size_bytes)d, allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:809
+#, python-format
+msgid ""
+"Image size %(size_bytes)d exceeded instance_type allowed size "
+"%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:831
+#, python-format
+msgid "Fetching image %(image)s, type %(image_type_str)"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:844
+#, python-format
+msgid "Size for image %(image)s: %(virtual_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:853
+#, python-format
+msgid ""
+"Kernel/Ramdisk image is too large: %(vdi_size)d bytes, max %(max_size)d "
+"bytes"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:870
+#, python-format
+msgid "Copying VDI %s to /boot/guest on dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:884
+#, python-format
+msgid "Kernel/Ramdisk VDI %s destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:895
+msgid "Failed to fetch glance image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:934
+#, python-format
+msgid "Detected %(image_type_str)s format for image %(image_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:955
+#, python-format
+msgid "Looking up vdi %s for PV kernel"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:973
+#, python-format
+msgid "Unknown image format %(disk_image_type)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1016
+#, python-format
+msgid "VDI %s is still available"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1059
+#, python-format
+msgid "(VM_UTILS) xenserver vm state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1061
+#, python-format
+msgid "(VM_UTILS) xenapi power_state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1088
+#, python-format
+msgid "Unable to parse rrd of %(vm_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1108
+#, python-format
+msgid "Re-scanning SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1136
+#, python-format
+msgid "Flag sr_matching_filter '%s' does not respect formatting convention"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1154
+msgid ""
+"XenAPI is unable to find a Storage Repository to install guest instances "
+"on. Please check your configuration and/or configure the flag "
+"'sr_matching_filter'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1167
+msgid "Cannot find SR of content-type ISO"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1175
+#, python-format
+msgid "ISO: looking at SR %(sr_rec)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1177
+msgid "ISO: not iso content"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1180
+msgid "ISO: iso content_type, no 'i18n-key' key"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1183
+msgid "ISO: iso content_type, i18n-key value not 'local-storage-iso'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1187
+msgid "ISO: SR MATCHing our criteria"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1189
+msgid "ISO: ISO, looking to see if it is host local"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1192
+#, python-format
+msgid "ISO: PBD %(pbd_ref)s disappeared"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1195
+#, python-format
+msgid "ISO: PBD matching, want %(pbd_rec)s, have %(host)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1198
+msgid "ISO: SR with local PBD"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1220
+#, python-format
+msgid ""
+"Unable to obtain RRD XML for VM %(vm_uuid)s with server details: "
+"%(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1236
+#, python-format
+msgid "Unable to obtain RRD XML updates with server details: %(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1290
+#, python-format
+msgid "Invalid statistics data from Xenserver: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1343
+#, python-format
+msgid "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1417
+#, python-format
+msgid ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1427
+#, python-format
+msgid "VHD coalesce attempts exceeded (%(max_attempts)d), giving up..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1462
+#, python-format
+msgid "Timeout waiting for device %s to be created"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1473
+#, python-format
+msgid "Plugging VBD %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1476
+#, python-format
+msgid "Plugging VBD %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1478
+#, python-format
+msgid "VBD %(vbd_ref)s plugged as %(orig_dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1481
+#, python-format
+msgid "VBD %(vbd_ref)s plugged into wrong dev, remapping to %(dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1490
+#, python-format
+msgid "Destroying VBD for VDI %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1498
+#, python-format
+msgid "Destroying VBD for VDI %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1511
+#, python-format
+msgid "Running pygrub against %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1518
+#, python-format
+msgid "Found Xen kernel %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1520
+msgid "No Xen kernel found.  Booting HVM."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1533
+msgid "Partitions:"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1539
+#, python-format
+msgid "  %(num)s: %(ptype)s %(size)d sectors"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1565
+#, python-format
+msgid ""
+"Writing partition table %(primary_first)d %(primary_last)d to "
+"%(dev_path)s..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1578
+#, python-format
+msgid "Writing partition table %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1632
+#, python-format
+msgid ""
+"Starting sparse_copy src=%(src_path)s dst=%(dst_path)s "
+"virtual_size=%(virtual_size)d block_size=%(block_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1664
+#, python-format
+msgid ""
+"Finished sparse_copy in %(duration).2f secs, %(compression_pct).2f%% "
+"reduction in size"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1714
+msgid ""
+"XenServer tools installed in this image are capable of network injection."
+"  Networking files will not bemanipulated"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1722
+msgid ""
+"XenServer tools are present in this image but are not capable of network "
+"injection"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1726
+msgid "XenServer tools are not installed in this image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1742
+msgid "Manipulating interface files directly"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1751
+#, python-format
+msgid "Failed to mount filesystem (expected for non-linux instances): %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:131 cinder/virt/xenapi/vmops.py:722
+#, python-format
+msgid "Updating progress to %(progress)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:231
+#, python-format
+msgid "Attempted to power on non-existent instance bad instance id %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:233
+msgid "Starting instance"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:303
+msgid "Removing kernel/ramdisk files from dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:358
+msgid "Failed to spawn, rolling back"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:443
+msgid "Detected ISO image type, creating blank VM for install"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:462
+msgid "Auto configuring disk, attempting to resize partition..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:515
+#, python-format
+msgid "Invalid value for injected_files: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:520
+#, python-format
+msgid "Injecting file path: '%s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:527
+msgid "Setting admin password"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:531
+msgid "Resetting network"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:538
+msgid "Setting VCPU weight"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:544
+msgid "Starting VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:551
+#, python-format
+msgid ""
+"Latest agent build for %(hypervisor)s/%(os)s/%(architecture)s is "
+"%(version)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:554
+#, python-format
+msgid "No agent build found for %(hypervisor)s/%(os)s/%(architecture)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:561
+msgid "Waiting for instance state to become running"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:573
+msgid "Querying agent version"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:576
+#, python-format
+msgid "Instance agent version: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:581
+#, python-format
+msgid "Updating Agent to %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:616
+#, python-format
+msgid "No opaque_ref could be determined for '%s'."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:670
+msgid "Finished snapshot and upload for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:677
+msgid "Starting snapshot for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:686
+#, python-format
+msgid "Unable to Snapshot instance: %(exc)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:702
+msgid "Failed to transfer vhd to new host"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:770
+#, python-format
+msgid "Resizing down VDI %(cow_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:893
+#, python-format
+msgid "Resizing up VDI %(vdi_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:901
+msgid "Resize complete"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:928
+#, python-format
+msgid "Failed to query agent version: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:949
+#, python-format
+msgid "domid changed from %(domid)s to %(newdomid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:962
+#, python-format
+msgid "Failed to update agent: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:983
+#, python-format
+msgid "Failed to exchange keys: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:998
+#, python-format
+msgid "Failed to update password: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1023
+#, python-format
+msgid "Failed to inject file: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1032
+msgid "VM already halted, skipping shutdown..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1036
+msgid "Shutting down VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1054
+msgid "Unable to find VBD for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1097
+msgid "Using RAW or VHD, skipping kernel and ramdisk deletion"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1104
+msgid "instance has a kernel or ramdisk but not both"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1111
+msgid "kernel/ramdisk files removed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1121
+msgid "VM destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1147
+msgid "Destroying VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1169
+msgid "VM is not present, skipping destroy..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1222
+#, python-format
+msgid "Instance is already in Rescue Mode: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1296
+#, python-format
+msgid "Found %(instance_count)d hung reboots older than %(timeout)d seconds"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1300
+msgid "Automatically hard rebooting"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1363
+#, python-format
+msgid "Setting migration %(migration_id)s to error: %(reason)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1374
+#, python-format
+msgid ""
+"Automatically confirming migration %(migration_id)s for instance "
+"%(instance_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1379
+#, python-format
+msgid "Instance %(instance_uuid)s not found"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1383
+msgid "In ERROR state"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1389
+#, python-format
+msgid "In %(task_state)s task_state, not RESIZE_VERIFY"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1396
+#, python-format
+msgid "Error auto-confirming resize: %(e)s. Will retry later."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1418
+msgid "Could not get bandwidth info."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1469
+msgid "Injecting network info to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1483
+msgid "Creating vifs"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1492
+#, python-format
+msgid "Creating VIF for network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1495
+#, python-format
+msgid "Created VIF %(vif_ref)s, network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1520
+msgid "Injecting hostname to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1545
+#, python-format
+msgid ""
+"The agent call to %(method)s returned an invalid response: %(ret)r. "
+"path=%(path)s; args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1566
+#, python-format
+msgid "TIMEOUT: The call to %(method)s timed out. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1570
+#, python-format
+msgid ""
+"NOT IMPLEMENTED: The call to %(method)s is not supported by the agent. "
+"args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1575
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1661
+#, python-format
+msgid "OpenSSL error: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:52
+msgid "creating sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:55 cinder/virt/xenapi/volume_utils.py:83
+#, python-format
+msgid "type is = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:58 cinder/virt/xenapi/volume_utils.py:86
+#, python-format
+msgid "name = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:71
+#, python-format
+msgid "Created %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:76 cinder/virt/xenapi/volume_utils.py:174
+msgid "Unable to create Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:80
+msgid "introducing sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:103 cinder/virt/xenapi/volume_utils.py:170
+#: cinder/virt/xenapi/volumeops.py:156
+#, python-format
+msgid "Introduced %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:106
+msgid "Creating pbd for SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:108
+msgid "Plugging SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:116 cinder/virt/xenapi/volumeops.py:160
+msgid "Unable to introduce Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:127 cinder/virt/xenapi/volumeops.py:50
+msgid "Unable to get SR using uuid"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:129
+#, python-format
+msgid "Forgetting SR %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:137
+msgid "Unable to forget Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:157
+#, python-format
+msgid "Introducing %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:186
+#, python-format
+msgid "Unable to find SR from VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:204
+#, python-format
+msgid "Ignoring exception %(exc)s when getting PBDs for %(sr_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:210
+#, python-format
+msgid "Ignoring exception %(exc)s when unplugging PBD %(pbd)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:234
+#, python-format
+msgid "Unable to introduce VDI on SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:242
+#, python-format
+msgid "Unable to get record of VDI %s on"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:264
+#, python-format
+msgid "Unable to introduce VDI for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:274
+#, python-format
+msgid "Error finding vdis in SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:281
+#, python-format
+msgid "Unable to find vbd for vdi %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:315
+#, python-format
+msgid "Unable to obtain target information %(data)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:341
+#, python-format
+msgid "Mountpoint cannot be translated: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:64
+msgid "Could not find VDI ref"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:69
+#, python-format
+msgid "Creating SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:73
+msgid "Could not create SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:76
+msgid "Could not retrieve SR record"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:81
+#, python-format
+msgid "Introducing SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:85
+msgid "SR found in xapi database. No need to introduce"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:90
+msgid "Could not introduce SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:94
+#, python-format
+msgid "Checking for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:106
+#, python-format
+msgid "SR %s not found in the xapi database"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:112
+msgid "Could not forget SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:121
+#, python-format
+msgid "Attach_volume: %(connection_info)s, %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:178
+#, python-format
+msgid "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:189
+#, python-format
+msgid "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:197
+#, python-format
+msgid "Unable to attach volume to instance %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:200
+#, python-format
+msgid "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:210
+#, python-format
+msgid "Detach_volume: %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:219
+#, python-format
+msgid "Unable to locate volume %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:227
+#, python-format
+msgid "Unable to detach volume %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:232
+#, python-format
+msgid "Unable to destroy vbd %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:239
+#, python-format
+msgid "Error purging SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:241
+#, python-format
+msgid "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:98 cinder/vnc/xvp_proxy.py:103
+#, python-format
+msgid "Error in handshake: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:119
+#, python-format
+msgid "Invalid request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:139
+#, python-format
+msgid "Request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:142
+#, python-format
+msgid "Request made with missing token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:153
+#, python-format
+msgid "Request made with invalid token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:160
+#, python-format
+msgid "Unexpected error: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:180
+#, python-format
+msgid "Starting cinder-xvpvncproxy node (version %s)"
+msgstr ""
+
+#: cinder/volume/api.py:74 cinder/volume/api.py:220
+msgid "status must be available"
+msgstr ""
+
+#: cinder/volume/api.py:85
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to create %(size)sG volume"
+msgstr ""
+
+#: cinder/volume/api.py:137
+msgid "Volume status must be available or error"
+msgstr ""
+
+#: cinder/volume/api.py:142
+#, python-format
+msgid "Volume still has %d dependent snapshots"
+msgstr ""
+
+#: cinder/volume/api.py:223
+msgid "already attached"
+msgstr ""
+
+#: cinder/volume/api.py:230
+msgid "already detached"
+msgstr ""
+
+#: cinder/volume/api.py:292
+msgid "must be available"
+msgstr ""
+
+#: cinder/volume/api.py:325
+msgid "Volume Snapshot status must be available or error"
+msgstr ""
+
+#: cinder/volume/driver.py:96
+#, python-format
+msgid "Recovering from a failed execute.  Try number %s"
+msgstr ""
+
+#: cinder/volume/driver.py:106
+#, python-format
+msgid "volume group %s doesn't exist"
+msgstr ""
+
+#: cinder/volume/driver.py:270
+#, python-format
+msgid "Skipping ensure_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:318
+#, python-format
+msgid "Skipping remove_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:327
+#, python-format
+msgid ""
+"Skipping remove_export. No iscsi_target is presently exported for volume:"
+" %d"
+msgstr ""
+
+#: cinder/volume/driver.py:337
+msgid "ISCSI provider_location not stored, using discovery"
+msgstr ""
+
+#: cinder/volume/driver.py:384
+#, python-format
+msgid "Could not find iSCSI export  for volume %s"
+msgstr ""
+
+#: cinder/volume/driver.py:388
+#, python-format
+msgid "ISCSI Discovery: Found %s"
+msgstr ""
+
+#: cinder/volume/driver.py:466
+#, python-format
+msgid "Cannot confirm exported volume id:%(volume_id)s."
+msgstr ""
+
+#: cinder/volume/driver.py:493
+#, python-format
+msgid "FAKE ISCSI: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:505
+#, python-format
+msgid "rbd has no pool %s"
+msgstr ""
+
+#: cinder/volume/driver.py:579
+#, python-format
+msgid "Sheepdog is not working: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:581
+msgid "Sheepdog is not working"
+msgstr ""
+
+#: cinder/volume/driver.py:680 cinder/volume/driver.py:685
+#, python-format
+msgid "LoggingVolumeDriver: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:96
+#, python-format
+msgid "Re-exporting %s volumes"
+msgstr ""
+
+#: cinder/volume/manager.py:101
+#, python-format
+msgid "volume %s: skipping export"
+msgstr ""
+
+#: cinder/volume/manager.py:107
+#, python-format
+msgid "volume %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:119
+#, python-format
+msgid "volume %(vol_name)s: creating lv of size %(vol_size)sG"
+msgstr ""
+
+#: cinder/volume/manager.py:131
+#, python-format
+msgid "volume %s: creating export"
+msgstr ""
+
+#: cinder/volume/manager.py:144
+#, python-format
+msgid "volume %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:153
+msgid "Volume is still attached"
+msgstr ""
+
+#: cinder/volume/manager.py:155
+msgid "Volume is not local to this node"
+msgstr ""
+
+#: cinder/volume/manager.py:159
+#, python-format
+msgid "volume %s: removing export"
+msgstr ""
+
+#: cinder/volume/manager.py:161
+#, python-format
+msgid "volume %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:164
+#, python-format
+msgid "volume %s: volume is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:176
+#, python-format
+msgid "volume %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:183
+#, python-format
+msgid "snapshot %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:187
+#, python-format
+msgid "snapshot %(snap_name)s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:202
+#, python-format
+msgid "snapshot %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:211
+#, python-format
+msgid "snapshot %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:214
+#, python-format
+msgid "snapshot %s: snapshot is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:226
+#, python-format
+msgid "snapshot %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:310
+msgid "Checking volume capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:314
+#, python-format
+msgid "New capabilities found: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:325
+msgid "Clear capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:329
+#, python-format
+msgid "Notification {%s} received"
+msgstr ""
+
+#: cinder/volume/netapp.py:79
+#, python-format
+msgid "API %(name)sfailed: %(reason)s"
+msgstr ""
+
+#: cinder/volume/netapp.py:109
+#, python-format
+msgid "%s is not set"
+msgstr ""
+
+#: cinder/volume/netapp.py:128
+#, fuzzy
+msgid "Connected to DFM server"
+msgstr "Оновлено з'єднання до черги"
+
+#: cinder/volume/netapp.py:159
+#, python-format
+msgid "Job failed: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:240
+msgid "Failed to provision dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:252
+msgid "No LUN was created by the provision job"
+msgstr ""
+
+#: cinder/volume/netapp.py:261 cinder/volume/netapp.py:433
+#, python-format
+msgid "Failed to find LUN ID for volume %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:280
+msgid "Failed to remove and delete dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:603 cinder/volume/netapp.py:657
+#, python-format
+msgid "No LUN ID for volume %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:607 cinder/volume/netapp.py:661
+#, python-format
+msgid "Failed to get LUN details for LUN ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:614
+#, python-format
+msgid "Failed to get host details for host ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:620
+#, python-format
+msgid "Failed to get target portal for filer: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:625
+#, python-format
+msgid "Failed to get target IQN for filer: %s"
+msgstr ""
+
+#: cinder/volume/san.py:113 cinder/volume/san.py:151
+msgid "Specify san_password or san_private_key"
+msgstr ""
+
+#: cinder/volume/san.py:156
+msgid "san_ip must be set"
+msgstr ""
+
+#: cinder/volume/san.py:320
+#, python-format
+msgid "LUID not found for %(zfs_poolname)s. Output=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:452
+#, python-format
+msgid "CLIQ command returned %s"
+msgstr ""
+
+#: cinder/volume/san.py:458
+#, python-format
+msgid "Malformed response to CLIQ command %(verb)s %(cliq_args)s. Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:466
+#, python-format
+msgid "Error running CLIQ command %(verb)s %(cliq_args)s.  Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:496
+#, python-format
+msgid ""
+"Unexpected number of virtual ips for cluster  %(cluster_name)s. "
+"Result=%(_xml)s"
+msgstr ""
+
+#: cinder/volume/san.py:549
+#, python-format
+msgid "Volume info: %(volume_name)s => %(volume_attributes)s"
+msgstr ""
+
+#: cinder/volume/san.py:594
+msgid "local_path not supported"
+msgstr ""
+
+#: cinder/volume/san.py:626
+#, python-format
+msgid "Could not determine project for volume %s, can't export"
+msgstr ""
+
+#: cinder/volume/san.py:696
+#, python-format
+msgid "Payload for SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:713
+#, python-format
+msgid "Call to json.loads() raised an exception: %s"
+msgstr ""
+
+#: cinder/volume/san.py:718
+#, python-format
+msgid "Results of SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:732
+#, python-format
+msgid "Found solidfire account: %s"
+msgstr ""
+
+#: cinder/volume/san.py:746
+#, python-format
+msgid "solidfire account: %s does not exist, create it..."
+msgstr ""
+
+#: cinder/volume/san.py:804
+msgid "Enter SolidFire create_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:846
+msgid "Leaving SolidFire create_volume"
+msgstr ""
+
+#: cinder/volume/san.py:861
+msgid "Enter SolidFire delete_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:880
+#, python-format
+msgid "Deleting volumeID: %s "
+msgstr ""
+
+#: cinder/volume/san.py:888
+msgid "Leaving SolidFire delete_volume"
+msgstr ""
+
+#: cinder/volume/san.py:891
+msgid "Executing SolidFire ensure_export..."
+msgstr ""
+
+#: cinder/volume/san.py:895
+msgid "Executing SolidFire create_export..."
+msgstr ""
+
+#: cinder/volume/volume_types.py:49 cinder/volume/volume_types.py:108
+msgid "name cannot be None"
+msgstr ""
+
+#: cinder/volume/volume_types.py:96
+msgid "id cannot be None"
+msgstr ""
+
+#: cinder/volume/xensm.py:55
+#, python-format
+msgid "SR name = %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:56
+#, python-format
+msgid "Params: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:60
+#, python-format
+msgid "Failed to create sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:62
+msgid "Create failed"
+msgstr ""
+
+#: cinder/volume/xensm.py:64
+#, python-format
+msgid "SR UUID of new SR is: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:71
+msgid "Failed to update db"
+msgstr ""
+
+#: cinder/volume/xensm.py:80
+#, python-format
+msgid "Failed to introduce sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:91
+#, python-format
+msgid "Failed to reach backend %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:100
+msgid "XenSMDriver requires xenapi connection"
+msgstr ""
+
+#: cinder/volume/xensm.py:110
+msgid "Failed to initiate session"
+msgstr ""
+
+#: cinder/volume/xensm.py:142
+#, python-format
+msgid "Volume will be created in backend - %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:154
+msgid "Failed to update volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:157
+msgid "Unable to create volume"
+msgstr ""
+
+#: cinder/volume/xensm.py:171
+msgid "Failed to delete vdi"
+msgstr ""
+
+#: cinder/volume/xensm.py:177
+msgid "Failed to delete volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:210
+msgid "Failed to find volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:221
+msgid "Failed to find backend in db"
+msgstr ""
+
+#: cinder/volume/nexenta/__init__.py:27
+msgid "Nexenta SA returned the error"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:64
+#, python-format
+msgid "Sending JSON data: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:69
+#, python-format
+msgid "Auto switching to HTTPS connection to %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:75
+msgid "No headers in server response"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:76
+msgid "Bad response from server"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:79
+#, fuzzy, python-format
+msgid "Got response: %s"
+msgstr "відповідь %s"
+
+#: cinder/volume/nexenta/volume.py:96
+#, python-format
+msgid "Volume %s does not exist in Nexenta SA"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:180
+msgid ""
+"Call to local_path should not happen. Verify that use_local_volumes flag "
+"is turned off."
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:202
+#, python-format
+msgid "Ignored target creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:210
+#, python-format
+msgid "Ignored target group creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:219
+#, python-format
+msgid "Ignored target group member addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:227
+#, python-format
+msgid "Ignored LU creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:237
+#, python-format
+msgid "Ignored LUN mapping entry addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:273
+#, python-format
+msgid ""
+"Got error trying to destroy target group %(target_group)s, assuming it is"
+" already gone: %(exc)s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:280
+#, python-format
+msgid ""
+"Got error trying to delete target %(target)s, assuming it is already "
+"gone: %(exc)s"
+msgstr ""
+
+#~ msgid "Unable to locate account %(account_name) on Solidfire device"
+#~ msgstr ""
+
+#~ msgid "Zone %(zone_id)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Cinder access parameters were not specified."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(id)d could not be found."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(name)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Detected more than one volume with name %(vol_name)"
+#~ msgstr ""
+
+#~ msgid "Detected existing vlan with id %(vlan)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab semaphore \"%(lock)s\" "
+#~ "for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab file lock "
+#~ "\"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Parent group id and group id cannot be same"
+#~ msgstr ""
+
+#~ msgid "No body provided"
+#~ msgstr ""
+
+#~ msgid "Create VSA %(display_name)s of type %(vc_type)s"
+#~ msgstr ""
+
+#~ msgid "Delete VSA with id: %s"
+#~ msgstr ""
+
+#~ msgid "Associate address %(ip)s to VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "Disassociate address from VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "%(obj)s with ID %(id)s not found"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(obj)s with ID %(id)s belongs to "
+#~ "VSA %(own_vsa_id)s and not to VSA "
+#~ "%(vsa_id)s."
+#~ msgstr ""
+
+#~ msgid "Index. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Detail. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Create. vsa_id=%(vsa_id)s, body=%(body)s"
+#~ msgstr ""
+
+#~ msgid "Create volume of %(size)s GB from VSA ID %(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Update %(obj)s with id: %(id)s, changes: %(changes)s"
+#~ msgstr ""
+
+#~ msgid "Delete. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Show. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Index instances for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You cannot run"
+#~ " any more instances of this type."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You can only"
+#~ " run %s more instances of this "
+#~ "type."
+#~ msgstr ""
+
+#~ msgid "Going to try to soft delete %s"
+#~ msgstr ""
+
+#~ msgid "No host for instance %s, deleting immediately"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to stop %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to start %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Going to force the deletion of the"
+#~ " vm %(instance_uuid)s, even if it is"
+#~ " deleted"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s did not exist "
+#~ "in the DB, but I will shut "
+#~ "it down anyway using a special "
+#~ "context"
+#~ msgstr ""
+
+#~ msgid "exception terminating the instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "trying to destroy already destroyed instance: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(name)s found in database but"
+#~ " not known by hypervisor. Setting "
+#~ "power state to NOSTATE"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Detected instance  with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Destroying instance with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid "SQL connection failed (%(connstring)s). %(attempts)d attempts left."
+#~ msgstr ""
+
+#~ msgid "Can't downgrade without losing data"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_id)s not found"
+#~ msgstr ""
+
+#~ msgid "Network %s has active ports, cannot delete"
+#~ msgstr ""
+
+#~ msgid "No fixed IPs to deallocate for vif %sid"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "AMQP server on %(fl_host)s:%(fl_port)d is "
+#~ "unreachable: %(e)s. Trying again in "
+#~ "%(fl_intv)d seconds."
+#~ msgstr ""
+
+#~ msgid "Unable to connect to AMQP server after %(tries)d tries. Shutting down."
+#~ msgstr ""
+
+#~ msgid "Failed to fetch message from queue: %s"
+#~ msgstr ""
+
+#~ msgid "Initing the Adapter Consumer for %s"
+#~ msgstr ""
+
+#~ msgid "Created \"%(exchange)s\" fanout exchange with \"%(key)s\" routing key"
+#~ msgstr ""
+
+#~ msgid "Exception while processing consumer"
+#~ msgstr ""
+
+#~ msgid "Creating \"%(exchange)s\" fanout exchange"
+#~ msgstr ""
+
+#~ msgid "topic is %s"
+#~ msgstr "заголовок %s"
+
+#~ msgid "message %s"
+#~ msgstr "повідомлення %s"
+
+#~ msgid ""
+#~ "Cannot confirm tmpfile at %(ipath)s is"
+#~ " on same shared storage between "
+#~ "%(src)s and %(dest)s."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of memory(host:%(avail)s <= "
+#~ "instance:%(mem_inst)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of disk(host:%(available)s <="
+#~ " instance:%(necessary)s)"
+#~ msgstr ""
+
+#~ msgid "Driver Method %(driver_method)s missing: %(e)s.Reverting to schedule()"
+#~ msgstr ""
+
+#~ msgid "Setting instance %(instance_uuid)s to ERROR state."
+#~ msgstr ""
+
+#~ msgid "_filter_hosts: %(request_spec)s"
+#~ msgstr ""
+
+#~ msgid "Filter hosts for drive type %s"
+#~ msgstr ""
+
+#~ msgid "Host %s has no free capacity. Skip"
+#~ msgstr ""
+
+#~ msgid "Filter hosts: %s"
+#~ msgstr ""
+
+#~ msgid "Must implement host selection mechanism"
+#~ msgstr ""
+
+#~ msgid "Maximum number of hosts selected (%d)"
+#~ msgstr ""
+
+#~ msgid "Selected excessive host %(host)s"
+#~ msgstr ""
+
+#~ msgid "Provision volume %(name)s of size %(size)s GB on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "volume_params %(volume_params)s"
+#~ msgstr ""
+
+#~ msgid "%(i)d: Volume %(name)s"
+#~ msgstr ""
+
+#~ msgid "Attempting to spawn %(num_volumes)d volume(s)"
+#~ msgstr ""
+
+#~ msgid "Error creating volumes"
+#~ msgstr ""
+
+#~ msgid "Non-VSA volume %d"
+#~ msgstr ""
+
+#~ msgid "Spawning volume %(volume_id)s with drive type %(drive_type)s"
+#~ msgstr ""
+
+#~ msgid "Error creating volume"
+#~ msgstr ""
+
+#~ msgid "No capability selected for volume of size %(size)s"
+#~ msgstr ""
+
+#~ msgid "Host %s:"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\tDrive %(qosgrp)-25s: total %(total)2s, "
+#~ "used %(used)2s, free %(free)2s. Available "
+#~ "capacity %(avail)-5s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t LeastUsedHost: Best host: %(best_host)s."
+#~ " (used capacity %(min_used)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t MostAvailCap: Best host: %(best_host)s. "
+#~ "(available %(max_avail)s %(type_str)s)"
+#~ msgstr ""
+
+#~ msgid "(%(nm)s) publish (key: %(routing_key)s) %(message)s"
+#~ msgstr ""
+
+#~ msgid "Publishing to route %s"
+#~ msgstr ""
+
+#~ msgid "Declaring queue %s"
+#~ msgstr "Оголошення черги %s"
+
+#~ msgid "Declaring exchange %s"
+#~ msgstr "Оголошення точки обміну %s"
+
+#~ msgid "Binding %(queue)s to %(exchange)s with key %(routing_key)s"
+#~ msgstr ""
+
+#~ msgid "Getting from %(queue)s: %(message)s"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate wrong VSA name. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate DB error. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: user_data = %s"
+#~ msgstr ""
+
+#~ msgid "_create: param=%s"
+#~ msgstr ""
+
+#~ msgid "Host %s"
+#~ msgstr ""
+
+#~ msgid "Test: provision vol %(name)s on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "\t vol=%(vol)s"
+#~ msgstr ""
+
+#~ msgid "Test: VSA update request: vsa_id=%(vsa_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume create: %s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get request: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume update request: id=%(volume_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: success    %(result)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: %(status)s    %(error_info)s"
+#~ msgstr ""
+
+#~ msgid "Unable to get updated status: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "deactivate_node is called for                "
+#~ "node_id = %(id)s node_ip = %(ip)s"
+#~ msgstr ""
+
+#~ msgid "virsh said: %r"
+#~ msgstr ""
+
+#~ msgid "cool, it's a device"
+#~ msgstr ""
+
+#~ msgid "Unable to read LXC console"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "to xml...\n"
+#~ ":%s "
+#~ msgstr ""
+
+#~ msgid "During wait running, %s disappeared."
+#~ msgstr ""
+
+#~ msgid "Instance %s running successfully."
+#~ msgstr ""
+
+#~ msgid "The nwfilter(%(instance_secgroup_filter_name)s) is not found."
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image verification failed"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): image "
+#~ "verification skipped, no hash stored"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): checking"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in use:"
+#~ " on this node %(local)d local, "
+#~ "%(remote)d on other nodes"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): warning "
+#~ "-- an absent base file is in "
+#~ "use! instances: %(instance_list)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in: on"
+#~ " other nodes (%(remote)d on other "
+#~ "nodes)"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is not in use"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is in use"
+#~ msgstr ""
+
+#~ msgid "Created VM %s..."
+#~ msgstr ""
+
+#~ msgid "Created VM %(instance_name)s as %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Creating a CDROM-specific VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Created a CDROM-specific VBD %(vbd_ref)s"
+#~ "  for VM %(vm_ref)s, VDI %(vdi_ref)s."
+#~ msgstr ""
+
+#~ msgid "No primary VDI found for%(vm_ref)s"
+#~ msgstr ""
+
+#~ msgid "Snapshotting VM %(vm_ref)s with label '%(label)s'..."
+#~ msgstr ""
+
+#~ msgid "Created snapshot %(template_vm_ref)s from VM %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Fetching image %(image)s"
+#~ msgstr ""
+
+#~ msgid "Image Type: %s"
+#~ msgstr ""
+
+#~ msgid "ISO: Found sr possibly containing the ISO image"
+#~ msgstr ""
+
+#~ msgid "Size for image %(image)s:%(virtual_size)d"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to fetch glance image"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s ... "
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s done."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful first time."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug rejected: retrying..."
+#~ msgstr ""
+
+#~ msgid "Not sleeping anymore!"
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful eventually."
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure in VBD.unplug: %s"
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure %s"
+#~ msgstr ""
+
+#~ msgid "Starting instance %s"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn"
+#~ msgstr ""
+
+#~ msgid "Instance %s failed to spawn - performing clean-up"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn - Unable to create VM"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Auto configuring disk for instance "
+#~ "%(instance_uuid)s, attempting to resize "
+#~ "partition..."
+#~ msgstr ""
+
+#~ msgid "Invalid value for injected_files: '%s'"
+#~ msgstr ""
+
+#~ msgid "Starting VM %s..."
+#~ msgstr ""
+
+#~ msgid "Spawning VM %(instance_uuid)s created %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Instance %s: waiting for running"
+#~ msgstr ""
+
+#~ msgid "Instance %s: running"
+#~ msgstr ""
+
+#~ msgid "Resources to remove:%s"
+#~ msgstr ""
+
+#~ msgid "Removing VDI %(vdi_ref)s(uuid:%(vdi_to_remove)s)"
+#~ msgstr ""
+
+#~ msgid "Skipping VDI destroy for %s"
+#~ msgstr ""
+
+#~ msgid "Finished snapshot and upload for VM %s"
+#~ msgstr ""
+
+#~ msgid "Starting snapshot for VM %s"
+#~ msgstr ""
+
+#~ msgid "Unable to Snapshot instance %(instance_uuid)s: %(exc)s"
+#~ msgstr ""
+
+#~ msgid "Updating instance '%(instance_uuid)s' progress to %(progress)d"
+#~ msgstr ""
+
+#~ msgid "Resize instance %s complete"
+#~ msgstr ""
+
+#~ msgid "domid changed from %(olddomid)s to %(newdomid)s"
+#~ msgstr ""
+
+#~ msgid "VM %(instance_uuid)s already halted,skipping shutdown..."
+#~ msgstr ""
+
+#~ msgid "Shutting down VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Destroying VDIs for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s using RAW or "
+#~ "VHD, skipping kernel and ramdisk "
+#~ "deletion"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_uuid)s VM destroyed"
+#~ msgstr ""
+
+#~ msgid "Destroying VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Automatically hard rebooting %d"
+#~ msgstr ""
+
+#~ msgid "Instance for migration %d not found, skipping"
+#~ msgstr ""
+
+#~ msgid "injecting network info to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "creating vif(s) for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "Creating VIF for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr ""
+
+#~ msgid "Created VIF %(vif_ref)s for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr ""
+
+#~ msgid "injecting hostname to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The agent call to %(method)s returned"
+#~ " an invalid response: %(ret)r. VM "
+#~ "id=%(instance_uuid)s; path=%(path)s; args=%(addl_args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "TIMEOUT: The call to %(method)s timed"
+#~ " out. VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "NOT IMPLEMENTED: The call to %(method)s"
+#~ " is not supported by the agent. "
+#~ "VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The call to %(method)s returned an "
+#~ "error: %(e)s. VM id=%(instance_uuid)s; "
+#~ "args=%(args)r"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid "Error destroying VDI"
+#~ msgstr ""
+
+#~ msgid "Volume status must be available"
+#~ msgstr ""
+
+#~ msgid "\tVolume %s is NOT VSA volume"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s creation - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s succeeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s deletion - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s suceeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s local path call - call discover"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s ensure export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s create export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s remove export - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE remove_export for %s failed"
+#~ msgstr ""
+
+#~ msgid "Failed to retrieve QoS info"
+#~ msgstr ""
+
+#~ msgid "invalid drive data"
+#~ msgstr ""
+
+#~ msgid "drive_name not defined"
+#~ msgstr ""
+
+#~ msgid "invalid drive type name %s"
+#~ msgstr ""
+
+#~ msgid "*** Experimental VSA code ***"
+#~ msgstr ""
+
+#~ msgid "Requested number of VCs (%d) is too high. Setting to default"
+#~ msgstr ""
+
+#~ msgid "Creating VSA: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d %(vsa_name)s: Create "
+#~ "volume %(vol_name)s, %(vol_size)d GB, type "
+#~ "%(vol_type_id)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA status to %(status)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA call"
+#~ msgstr ""
+
+#~ msgid "Adding %(add_cnt)s VCs to VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "Deleting %(del_cnt)s VCs from VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Deleting %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Unable to delete volume %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Forced delete. %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate VSA ID %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Delete instance %(name)s"
+#~ msgstr ""
+
+#~ msgid "Create call received for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Failed to find VSA %(vsa_id)d"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Drive %(vol_id)s created. Status %(status)s"
+#~ msgstr ""
+
+#~ msgid "Drive %(vol_name)s (%(vol_disp_name)s) still in creating phase - wait"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Not all volumes "
+#~ "are created (%(cvol_real)d of %(cvol_exp)d)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Drive %(vol_name)s "
+#~ "(%(vol_disp_name)s) is in %(status)s state"
+#~ msgstr ""
+
+#~ msgid "Failed to update attach status for volume %(vol_name)s. %(ex)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Delete all BE volumes"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Start %(vc_count)d instances"
+#~ msgstr ""
+
diff --git a/cinder/locale/zh_CN/LC_MESSAGES/nova.po b/cinder/locale/zh_CN/LC_MESSAGES/nova.po
new file mode 100644
index 000000000..165b7b5e1
--- /dev/null
+++ b/cinder/locale/zh_CN/LC_MESSAGES/nova.po
@@ -0,0 +1,8064 @@
+# Chinese (Simplified) translation for cinder
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the cinder package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version:  cinder\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-04-08 23:04+0000\n"
+"PO-Revision-Date: 2012-04-03 23:36+0000\n"
+"Last-Translator: cheesecake <Unknown>\n"
+"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: cinder/context.py:59
+#, python-format
+msgid "Arguments dropped when creating context: %s"
+msgstr ""
+
+#: cinder/context.py:90
+#, python-format
+msgid "read_deleted can only be one of 'no', 'yes' or 'only', not %r"
+msgstr ""
+
+#: cinder/crypto.py:48
+msgid "Filename of root CA"
+msgstr "根证书的文件名"
+
+#: cinder/crypto.py:51
+msgid "Filename of private key"
+msgstr "私钥文件名"
+
+#: cinder/crypto.py:54
+msgid "Filename of root Certificate Revocation List"
+msgstr "根证书撤销列表的文件名"
+
+#: cinder/crypto.py:57
+msgid "Where we keep our keys"
+msgstr "保存密钥的位置"
+
+#: cinder/crypto.py:60
+msgid "Where we keep our root CA"
+msgstr "保存根证书的位置"
+
+#: cinder/crypto.py:63
+msgid "Should we use a CA for each project?"
+msgstr "是否每个项目都使用认证权威?"
+
+#: cinder/crypto.py:67
+#, python-format
+msgid "Subject for certificate for users, %s for project, user, timestamp"
+msgstr "用户证书的标题,%s 依次分别为项目,用户,时间戳"
+
+#: cinder/crypto.py:72
+#, python-format
+msgid "Subject for certificate for projects, %s for project, timestamp"
+msgstr "项目证书的标题,%s 依次分别为项目,时间戳"
+
+#: cinder/crypto.py:292
+#, python-format
+msgid "Flags path: %s"
+msgstr "标记所在路径:%s"
+
+#: cinder/exception.py:56
+msgid "Unexpected error while running command."
+msgstr "运行命令时出现意外错误"
+
+#: cinder/exception.py:59
+#, python-format
+msgid ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+msgstr ""
+"%(description)s\n"
+"命令:%(cmd)s\n"
+"退出代码:%(exit_code)s\n"
+"标准输出:%(stdout)r\n"
+"标准错误输出:%(stderr)r"
+
+#: cinder/exception.py:94
+msgid "DB exception wrapped."
+msgstr "数据库异常被包裹。"
+
+#: cinder/exception.py:155
+msgid "An unknown exception occurred."
+msgstr "发生未知异常。"
+
+#: cinder/exception.py:178
+msgid "Failed to decrypt text"
+msgstr "解密文本失败"
+
+#: cinder/exception.py:182
+msgid "Failed to paginate through images from image service"
+msgstr "无法在镜像服务中翻页"
+
+#: cinder/exception.py:186
+msgid "Virtual Interface creation failed"
+msgstr "虚拟接口创建失败"
+
+#: cinder/exception.py:190
+msgid "5 attempts to create virtual interfacewith unique mac address failed"
+msgstr "用唯一mac地址5次尝试创建虚拟接口失败"
+
+#: cinder/exception.py:195
+msgid "Connection to glance failed"
+msgstr "连接到glance失败"
+
+#: cinder/exception.py:199
+msgid "Connection to melange failed"
+msgstr "连接到melange失败"
+
+#: cinder/exception.py:203
+msgid "Not authorized."
+msgstr "未授权。"
+
+#: cinder/exception.py:208
+msgid "User does not have admin privileges"
+msgstr "用户没有管理员权限"
+
+#: cinder/exception.py:212
+#, python-format
+msgid "Policy doesn't allow %(action)s to be performed."
+msgstr "政策不允许 %(action)s 被执行。"
+
+#: cinder/exception.py:216
+#, fuzzy, python-format
+msgid "Not authorized for image %(image_id)s."
+msgstr "没有为镜像 %(image_id)s 找到内核。"
+
+#: cinder/exception.py:220
+msgid "Unacceptable parameters."
+msgstr "无法接受的参数。"
+
+#: cinder/exception.py:225
+msgid "Invalid snapshot"
+msgstr "无效的快照"
+
+#: cinder/exception.py:229
+#, python-format
+msgid "Volume %(volume_id)s is not attached to anything"
+msgstr "卷 %(volume_id)s 没有附加任何东西"
+
+#: cinder/exception.py:233 cinder/api/openstack/compute/contrib/keypairs.py:113
+msgid "Keypair data is invalid"
+msgstr "密钥对数据无效"
+
+#: cinder/exception.py:237
+msgid "Failed to load data into json format"
+msgstr "把数据加载为json格式失败"
+
+#: cinder/exception.py:241
+msgid "The request is invalid."
+msgstr "请求无效。"
+
+#: cinder/exception.py:245
+#, python-format
+msgid "Invalid signature %(signature)s for user %(user)s."
+msgstr "无效签名 %(signature)s 针对用户是 %(user)s"
+
+#: cinder/exception.py:249
+msgid "Invalid input received"
+msgstr "收到无效的输入"
+
+#: cinder/exception.py:253
+#, python-format
+msgid "Invalid instance type %(instance_type)s."
+msgstr "无效的实例类型 %(instance_type)s。"
+
+#: cinder/exception.py:257
+msgid "Invalid volume type"
+msgstr "无效的卷类型"
+
+#: cinder/exception.py:261
+msgid "Invalid volume"
+msgstr "无效的卷"
+
+#: cinder/exception.py:265
+#, python-format
+msgid "Invalid port range %(from_port)s:%(to_port)s. %(msg)s"
+msgstr "无效的端口范围 %(from_port)s:%(to_port)s. %(msg)s"
+
+#: cinder/exception.py:269
+#, python-format
+msgid "Invalid IP protocol %(protocol)s."
+msgstr "无效的IP协议 %(protocol)s。"
+
+#: cinder/exception.py:273
+#, python-format
+msgid "Invalid content type %(content_type)s."
+msgstr "无效的内容类型 %(content_type)s。"
+
+#: cinder/exception.py:277
+#, python-format
+msgid "Invalid cidr %(cidr)s."
+msgstr "无效的cidr %(cidr)s。"
+
+#: cinder/exception.py:281
+msgid "Invalid reuse of an RPC connection."
+msgstr "无效的RPC连接重用。"
+
+#: cinder/exception.py:285
+msgid "Invalid Parameter: Unicode is not supported by the current database."
+msgstr ""
+
+#: cinder/exception.py:292
+#, python-format
+msgid "%(err)s"
+msgstr "%(err)s"
+
+#: cinder/exception.py:296
+#, python-format
+msgid ""
+"Cannot perform action '%(action)s' on aggregate %(aggregate_id)s. Reason:"
+" %(reason)s."
+msgstr "无法执行action '%(action)s' 于聚合 %(aggregate_id)s 上。原因: %(reason)s。"
+
+#: cinder/exception.py:301
+#, fuzzy, python-format
+msgid "Group not valid. Reason: %(reason)s"
+msgstr "找不到有效主机,原因是 %(reason)s。"
+
+#: cinder/exception.py:305
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot %(method)s while"
+" the instance is in this state."
+msgstr "实例 %(instance_uuid)s 处于%(attr)s %(state)s 中。该实例在这种状态下不能执行 %(method)s。"
+
+#: cinder/exception.py:310
+#, python-format
+msgid "Instance %(instance_id)s is not running."
+msgstr "实例 %(instance_id)s 没有运行。"
+
+#: cinder/exception.py:314
+#, python-format
+msgid "Instance %(instance_id)s is not suspended."
+msgstr "实例 %(instance_id)s 没有挂起。"
+
+#: cinder/exception.py:318
+#, python-format
+msgid "Instance %(instance_id)s is not in rescue mode"
+msgstr "实例 %(instance_id)s 不在救援模式。"
+
+#: cinder/exception.py:322
+msgid "Failed to suspend instance"
+msgstr "挂起实例失败"
+
+#: cinder/exception.py:326
+msgid "Failed to resume server"
+msgstr "服务器恢复失败"
+
+#: cinder/exception.py:330
+msgid "Failed to reboot instance"
+msgstr "重新启动实例失败"
+
+#: cinder/exception.py:334
+#, fuzzy
+msgid "Failed to terminate instance"
+msgstr "重新启动实例失败"
+
+#: cinder/exception.py:338
+msgid "Service is unavailable at this time."
+msgstr "该时刻服务无法使用。"
+
+#: cinder/exception.py:342
+msgid "Volume service is unavailable at this time."
+msgstr "该时刻卷服务无法使用。"
+
+#: cinder/exception.py:346
+msgid "Compute service is unavailable at this time."
+msgstr "该时刻计算服务无法使用。"
+
+#: cinder/exception.py:350
+#, python-format
+msgid "Unable to migrate instance (%(instance_id)s) to current host (%(host)s)."
+msgstr "无法把实例 (%(instance_id)s) 迁移到当前主机 (%(host)s)。"
+
+#: cinder/exception.py:355
+msgid "Destination compute host is unavailable at this time."
+msgstr "该时刻目标计算主机无法使用。"
+
+#: cinder/exception.py:359
+msgid "Original compute host is unavailable at this time."
+msgstr "该时刻原始计算主机无法使用。"
+
+#: cinder/exception.py:363
+msgid "The supplied hypervisor type of is invalid."
+msgstr "提供的虚拟机管理程序类型无效。"
+
+#: cinder/exception.py:367
+msgid "The instance requires a newer hypervisor version than has been provided."
+msgstr "该实例需要比当前版本更新的虚拟机管理程序。"
+
+#: cinder/exception.py:372
+#, python-format
+msgid ""
+"The supplied disk path (%(path)s) already exists, it is expected not to "
+"exist."
+msgstr "提供的磁盘路径 (%(path)s) 已经存在,预计是不存在的。"
+
+#: cinder/exception.py:377
+#, python-format
+msgid "The supplied device path (%(path)s) is invalid."
+msgstr "提供的设备路径 (%(path)s) 是无效的。"
+
+#: cinder/exception.py:381
+#, fuzzy, python-format
+msgid "The supplied device (%(device)s) is busy."
+msgstr "提供的设备路径 (%(path)s) 是无效的。"
+
+#: cinder/exception.py:385
+msgid "Unacceptable CPU info"
+msgstr "无法接受的CPU信息"
+
+#: cinder/exception.py:389
+#, python-format
+msgid "%(address)s is not a valid IP v4/6 address."
+msgstr "%(address)s 不是有效的IP v4/6地址。"
+
+#: cinder/exception.py:393
+#, python-format
+msgid ""
+"VLAN tag is not appropriate for the port group %(bridge)s. Expected VLAN "
+"tag is %(tag)s, but the one associated with the port group is %(pgroup)s."
+msgstr "VLAN标签对于端口组%(bridge)s 是不适合的。预计的VLAN标签是 %(tag)s,但与端口组关联的是 %(pgroup)s。"
+
+#: cinder/exception.py:399
+#, python-format
+msgid ""
+"vSwitch which contains the port group %(bridge)s is not associated with "
+"the desired physical adapter. Expected vSwitch is %(expected)s, but the "
+"one associated is %(actual)s."
+msgstr ""
+"包含端口组 %(bridge)s 的vSwitch没有与预计的物理适配器关联。预计的vSwitch是 %(expected)s,但关联的是 "
+"%(actual)s。"
+
+#: cinder/exception.py:406
+#, python-format
+msgid "Disk format %(disk_format)s is not acceptable"
+msgstr "磁盘格式 %(disk_format)s 不能接受"
+
+#: cinder/exception.py:410
+#, python-format
+msgid "Image %(image_id)s is unacceptable: %(reason)s"
+msgstr "镜像 %(image_id)s 无法接受,原因是: %(reason)s"
+
+#: cinder/exception.py:414
+#, python-format
+msgid "Instance %(instance_id)s is unacceptable: %(reason)s"
+msgstr "实例 %(instance_id)s 无法接受,原因是: %(reason)s"
+
+#: cinder/exception.py:418
+#, python-format
+msgid "Ec2 id %(ec2_id)s is unacceptable."
+msgstr "Ec2 id %(ec2_id)s 无法接受。"
+
+#: cinder/exception.py:422
+msgid "Resource could not be found."
+msgstr "资源没有找到。"
+
+#: cinder/exception.py:427
+#, python-format
+msgid "Required flag %(flag)s not set."
+msgstr "要求的标记 %(flag)s 没有设置。"
+
+#: cinder/exception.py:431
+#, python-format
+msgid "Volume %(volume_id)s could not be found."
+msgstr "卷 %(volume_id)s 没有找到。"
+
+#: cinder/exception.py:435
+#, fuzzy, python-format
+msgid "Unable to locate account %(account_name)s on Solidfire device"
+msgstr "无法找到帐户 %(account_name) on Solidfire 设备"
+
+#: cinder/exception.py:440
+#, python-format
+msgid "Volume not found for instance %(instance_id)s."
+msgstr "没有为实例 %(instance_id)s 找到卷。"
+
+#: cinder/exception.py:444
+#, python-format
+msgid "Volume %(volume_id)s has no metadata with key %(metadata_key)s."
+msgstr "卷 %(volume_id)s 没有含键 %(metadata_key)s 的元数据。"
+
+#: cinder/exception.py:449
+msgid "Zero volume types found."
+msgstr "没有找到卷类型。"
+
+#: cinder/exception.py:453
+#, python-format
+msgid "Volume type %(volume_type_id)s could not be found."
+msgstr "卷类型 %(volume_type_id)s 没有找到。"
+
+#: cinder/exception.py:457
+#, python-format
+msgid "Volume type with name %(volume_type_name)s could not be found."
+msgstr "名为 %(volume_type_name)s 的卷类型没有找到。"
+
+#: cinder/exception.py:462
+#, python-format
+msgid ""
+"Volume Type %(volume_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr "卷类型 %(volume_type_id)s 没有额外说明键 %(extra_specs_key)s 。"
+
+#: cinder/exception.py:467
+#, python-format
+msgid "Snapshot %(snapshot_id)s could not be found."
+msgstr "快照 %(snapshot_id)s 没有找到。"
+
+#: cinder/exception.py:471
+#, python-format
+msgid "deleting volume %(volume_name)s that has snapshot"
+msgstr "正在删除有快照的卷  %(volume_name)s"
+
+#: cinder/exception.py:475
+#, python-format
+msgid "deleting snapshot %(snapshot_name)s that has dependent volumes"
+msgstr ""
+
+#: cinder/exception.py:480
+#, python-format
+msgid "No target id found for volume %(volume_id)s."
+msgstr "没有为卷 %(volume_id)s 找到目标id。"
+
+#: cinder/exception.py:484
+#, python-format
+msgid "No disk at %(location)s"
+msgstr "在 %(location)s 没有磁盘"
+
+#: cinder/exception.py:488
+#, python-format
+msgid "Could not find a handler for %(driver_type)s volume."
+msgstr "无法为 %(driver_type)s 卷找到句柄。"
+
+#: cinder/exception.py:492
+#, python-format
+msgid "Invalid image href %(image_href)s."
+msgstr "无效的镜像href %(image_href)s。"
+
+#: cinder/exception.py:496
+msgid ""
+"Some images have been stored via hrefs. This version of the api does not "
+"support displaying image hrefs."
+msgstr "有些镜像通过hrefs存储。该api版本不支持显示镜像hrefs。"
+
+#: cinder/exception.py:501
+#, python-format
+msgid "Image %(image_id)s could not be found."
+msgstr "镜像 %(image_id)s 没有找到。"
+
+#: cinder/exception.py:505
+#, python-format
+msgid "Kernel not found for image %(image_id)s."
+msgstr "没有为镜像 %(image_id)s 找到内核。"
+
+#: cinder/exception.py:509
+#, python-format
+msgid "User %(user_id)s could not be found."
+msgstr "用户 %(user_id)s 没有找到。"
+
+#: cinder/exception.py:513
+#, python-format
+msgid "Project %(project_id)s could not be found."
+msgstr "项目 %(project_id)s 没有找到。"
+
+#: cinder/exception.py:517
+#, python-format
+msgid "User %(user_id)s is not a member of project %(project_id)s."
+msgstr "用户 %(user_id)s 不是项目 %(project_id)s 的成员。"
+
+#: cinder/exception.py:521
+#, python-format
+msgid "Role %(role_id)s could not be found."
+msgstr "角色 %(role_id)s 没有找到。"
+
+#: cinder/exception.py:525
+msgid "Cannot find SR to read/write VDI."
+msgstr "没有找到存储库来读写VDI。"
+
+#: cinder/exception.py:529
+#, python-format
+msgid "%(req)s is required to create a network."
+msgstr "创建网络 %(req)s  是必要的。"
+
+#: cinder/exception.py:533
+#, python-format
+msgid "Network %(network_id)s could not be found."
+msgstr "网络 %(network_id)s 没有找到。"
+
+#: cinder/exception.py:537
+#, python-format
+msgid "Network could not be found for bridge %(bridge)s"
+msgstr "无法为桥 %(bridge)s 找到网络"
+
+#: cinder/exception.py:541
+#, python-format
+msgid "Network could not be found for uuid %(uuid)s"
+msgstr "无法为uuid %(uuid)s 找到网络"
+
+#: cinder/exception.py:545
+#, python-format
+msgid "Network could not be found with cidr %(cidr)s."
+msgstr "无法为cidr %(cidr)s 找到网络。"
+
+#: cinder/exception.py:549
+#, python-format
+msgid "Network could not be found for instance %(instance_id)s."
+msgstr "无法为实例 %(instance_id)s 找到网络。"
+
+#: cinder/exception.py:553
+msgid "No networks defined."
+msgstr "没有网络定义。"
+
+#: cinder/exception.py:557
+#, python-format
+msgid ""
+"Either Network uuid %(network_uuid)s is not present or is not assigned to"
+" the project %(project_id)s."
+msgstr "或者网络uuid %(network_uuid)s不存在,或者它没有分配给项目 %(project_id)s。"
+
+#: cinder/exception.py:562
+#, python-format
+msgid "Host is not set to the network (%(network_id)s)."
+msgstr "主机没有设置于网络 (%(network_id)s)。"
+
+#: cinder/exception.py:566
+#, fuzzy, python-format
+msgid "Network %(network)s has active ports, cannot delete."
+msgstr "网络 %s 存在活跃的端口,无法删除"
+
+#: cinder/exception.py:570
+msgid "Could not find the datastore reference(s) which the VM uses."
+msgstr "无法找到虚拟机使用的数据存储引用。"
+
+#: cinder/exception.py:574
+#, python-format
+msgid "No fixed IP associated with id %(id)s."
+msgstr "没有固定IP与id %(id)s 关联。"
+
+#: cinder/exception.py:578
+#, python-format
+msgid "Fixed ip not found for address %(address)s."
+msgstr "没有为地址 %(address)s 找到固定IP。"
+
+#: cinder/exception.py:582
+#, python-format
+msgid "Instance %(instance_id)s has zero fixed ips."
+msgstr "实例 %(instance_id)s 没有固定ip。"
+
+#: cinder/exception.py:586
+#, python-format
+msgid "Network host %(host)s has zero fixed ips in network %(network_id)s."
+msgstr "网络主机 %(host)s 在网络 %(network_id)s 中没有固定ip。"
+
+#: cinder/exception.py:591
+#, python-format
+msgid "Instance %(instance_id)s doesn't have fixed ip '%(ip)s'."
+msgstr "实例 %(instance_id)s 没有固定ip '%(ip)s'。"
+
+#: cinder/exception.py:595
+#, python-format
+msgid "Host %(host)s has zero fixed ips."
+msgstr "主机 %(host)s 没有固定IP。"
+
+#: cinder/exception.py:599
+#, python-format
+msgid ""
+"Fixed IP address (%(address)s) does not exist in network "
+"(%(network_uuid)s)."
+msgstr "固定IP地址 (%(address)s) 在网络 (%(network_uuid)s) 中不存在。"
+
+#: cinder/exception.py:604
+#, python-format
+msgid "Fixed IP address %(address)s is already in use."
+msgstr "固定IP地址 %(address)s 已在使用。"
+
+#: cinder/exception.py:608
+#, python-format
+msgid "Fixed IP address %(address)s is invalid."
+msgstr "固定IP地址 %(address)s 无效。"
+
+#: cinder/exception.py:612
+msgid "Zero fixed ips available."
+msgstr "没有固定ip可用。"
+
+#: cinder/exception.py:616
+msgid "Zero fixed ips could be found."
+msgstr "找不到固定IP。"
+
+#: cinder/exception.py:620
+#, python-format
+msgid "Floating ip not found for id %(id)s."
+msgstr "找不到适合id %(id)s 的浮动IP。"
+
+#: cinder/exception.py:624
+#, python-format
+msgid "The DNS entry %(name)s already exists in domain %(domain)s."
+msgstr "DNS 入口 %(name)s 已经在域中 %(domain)s 存在。"
+
+#: cinder/exception.py:628
+#, python-format
+msgid "Floating ip not found for address %(address)s."
+msgstr "找不到适合地址 %(address)s 的浮动ip。"
+
+#: cinder/exception.py:632
+#, python-format
+msgid "Floating ip not found for host %(host)s."
+msgstr "没有为主机 %(host)s 找到浮动IP。"
+
+#: cinder/exception.py:636
+msgid "Zero floating ips available."
+msgstr "没有浮动IP可用。"
+
+#: cinder/exception.py:640
+#, python-format
+msgid "Floating ip %(address)s is associated."
+msgstr "浮动ip %(address)s 已被关联。"
+
+#: cinder/exception.py:644
+#, python-format
+msgid "Floating ip %(address)s is not associated."
+msgstr "浮动ip %(address)s 没有被关联。"
+
+#: cinder/exception.py:648
+msgid "Zero floating ips exist."
+msgstr "没有浮动ip存在。"
+
+#: cinder/exception.py:652
+#, python-format
+msgid "Interface %(interface)s not found."
+msgstr "接口 %(interface)s没有找到。"
+
+#: cinder/exception.py:656
+#, python-format
+msgid "Keypair %(name)s not found for user %(user_id)s"
+msgstr "密钥对 %(name)s 没有为用户 %(user_id)s 找到。"
+
+#: cinder/exception.py:660
+#, python-format
+msgid "Certificate %(certificate_id)s not found."
+msgstr "证书 %(certificate_id)s 没有找到。"
+
+#: cinder/exception.py:664
+#, python-format
+msgid "Service %(service_id)s could not be found."
+msgstr "服务 %(service_id)s 没有找到。"
+
+#: cinder/exception.py:668
+#, python-format
+msgid "Host %(host)s could not be found."
+msgstr "主机 %(host)s 没有找到。"
+
+#: cinder/exception.py:672
+#, python-format
+msgid "Compute host %(host)s could not be found."
+msgstr "计算主机 %(host)s 没有找到。"
+
+#: cinder/exception.py:676
+#, python-format
+msgid "Could not find binary %(binary)s on host %(host)s."
+msgstr "没有找到二进制 %(binary)s 在主机 %(host)s 上。"
+
+#: cinder/exception.py:680
+#, python-format
+msgid "Auth token %(token)s could not be found."
+msgstr "认证令牌 %(token)s 没有找到。"
+
+#: cinder/exception.py:684
+#, python-format
+msgid "Access Key %(access_key)s could not be found."
+msgstr "访问密钥 %(access_key)s 没有找到。"
+
+#: cinder/exception.py:688
+msgid "Quota could not be found"
+msgstr "配额没有找到。"
+
+#: cinder/exception.py:692
+#, python-format
+msgid "Quota for project %(project_id)s could not be found."
+msgstr "没有为项目 %(project_id)s 找到配额。"
+
+#: cinder/exception.py:696
+#, fuzzy, python-format
+msgid "Quota class %(class_name)s could not be found."
+msgstr "找不到类 %(class_name)s :异常 %(exception)s"
+
+#: cinder/exception.py:700
+#, python-format
+msgid "Security group %(security_group_id)s not found."
+msgstr "安全组 %(security_group_id)s 没有找到。"
+
+#: cinder/exception.py:704
+#, python-format
+msgid "Security group %(security_group_id)s not found for project %(project_id)s."
+msgstr "没有找到安全组 %(security_group_id)s 针对项目 %(project_id)s 。"
+
+#: cinder/exception.py:709
+#, python-format
+msgid "Security group with rule %(rule_id)s not found."
+msgstr "带有规则 %(rule_id)s 的安全组没有找到。"
+
+#: cinder/exception.py:713
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is already associated with the "
+"instance %(instance_id)s"
+msgstr "安全组 %(security_group_id)s 已经与实例 %(instance_id)s 关联。"
+
+#: cinder/exception.py:718
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is not associated with the instance "
+"%(instance_id)s"
+msgstr "安全组 %(security_group_id)s 没有与实例 %(instance_id)s 关联。"
+
+#: cinder/exception.py:723
+#, python-format
+msgid "Migration %(migration_id)s could not be found."
+msgstr "迁移 %(migration_id)s 没有找到。"
+
+#: cinder/exception.py:727
+#, python-format
+msgid "Migration not found for instance %(instance_id)s with status %(status)s."
+msgstr "没有为实例 %(instance_id)s 找到迁移其状态为 %(status)s 。"
+
+#: cinder/exception.py:732
+#, python-format
+msgid "Console pool %(pool_id)s could not be found."
+msgstr "控制台池 %(pool_id)s 没有找到。"
+
+#: cinder/exception.py:736
+#, python-format
+msgid ""
+"Console pool of type %(console_type)s for compute host %(compute_host)s "
+"on proxy host %(host)s not found."
+msgstr "没有找到类型是 %(console_type)s 的控制台池针对计算主机 %(compute_host)s 在代理主机 %(host)s 上。"
+
+#: cinder/exception.py:742
+#, python-format
+msgid "Console %(console_id)s could not be found."
+msgstr "控制台%(console_id)s 没有找到。"
+
+#: cinder/exception.py:746
+#, python-format
+msgid "Console for instance %(instance_id)s could not be found."
+msgstr "没有为实例 %(instance_id)s 找到控制台。"
+
+#: cinder/exception.py:750
+#, python-format
+msgid ""
+"Console for instance %(instance_id)s in pool %(pool_id)s could not be "
+"found."
+msgstr "没有为实例 %(instance_id)s 在池 %(pool_id)s 中找到控制台。"
+
+#: cinder/exception.py:755
+#, python-format
+msgid "Invalid console type %(console_type)s "
+msgstr "无效的控制台类型 %(console_type)s "
+
+#: cinder/exception.py:759
+msgid "Zero instance types found."
+msgstr "没有找到实例类型。"
+
+#: cinder/exception.py:763
+#, python-format
+msgid "Instance type %(instance_type_id)s could not be found."
+msgstr "实例类型 %(instance_type_id)s 没有找到。"
+
+#: cinder/exception.py:767
+#, python-format
+msgid "Instance type with name %(instance_type_name)s could not be found."
+msgstr "名为 %(instance_type_name)s 的实例类型没有找到。"
+
+#: cinder/exception.py:772
+#, python-format
+msgid "Flavor %(flavor_id)s could not be found."
+msgstr "类型 %(flavor_id)s 没有找到。"
+
+#: cinder/exception.py:776
+#, fuzzy, python-format
+msgid "Cell %(cell_id)s could not be found."
+msgstr "区域 %(zone_id)s 没有找到。"
+
+#: cinder/exception.py:780
+#, python-format
+msgid "Scheduler Host Filter %(filter_name)s could not be found."
+msgstr "调度器主机过滤器 %(filter_name)s 没有找到。"
+
+#: cinder/exception.py:784
+#, python-format
+msgid "Scheduler cost function %(cost_fn_str)s could not be found."
+msgstr "调度器的成本函数 %(cost_fn_str)s 没有找到。"
+
+#: cinder/exception.py:789
+#, python-format
+msgid "Scheduler weight flag not found: %(flag_name)s"
+msgstr "未找到调度器的权重标记:%(flag_name)s"
+
+#: cinder/exception.py:793
+#, python-format
+msgid "Instance %(instance_id)s has no metadata with key %(metadata_key)s."
+msgstr "实例 %(instance_id)s 没有键为 %(metadata_key)s 的元数据。"
+
+#: cinder/exception.py:798
+#, python-format
+msgid ""
+"Instance Type %(instance_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr "实例类型 %(instance_type_id)s 没有额外的 键为%(extra_specs_key)s 的规格说明。"
+
+#: cinder/exception.py:803
+msgid "LDAP object could not be found"
+msgstr "未定义LDAP对象"
+
+#: cinder/exception.py:807
+#, python-format
+msgid "LDAP user %(user_id)s could not be found."
+msgstr "没有找到LDAP用户 %(user_id)s。"
+
+#: cinder/exception.py:811
+#, python-format
+msgid "LDAP group %(group_id)s could not be found."
+msgstr "没有找到LDAP用户组 %(group_id)s。"
+
+#: cinder/exception.py:815
+#, python-format
+msgid "LDAP user %(user_id)s is not a member of group %(group_id)s."
+msgstr "LDAP用户 %(user_id)s 不是 %(group_id)s 的组成员。"
+
+#: cinder/exception.py:819
+#, python-format
+msgid "File %(file_path)s could not be found."
+msgstr "找不到文件 %(file_path)s。"
+
+#: cinder/exception.py:823
+msgid "Zero files could be found."
+msgstr "没找到文件"
+
+#: cinder/exception.py:827
+#, python-format
+msgid "Virtual switch associated with the network adapter %(adapter)s not found."
+msgstr "未找到与网络适配器 %(adapter)s 关联的虚拟交换机。"
+
+#: cinder/exception.py:832
+#, python-format
+msgid "Network adapter %(adapter)s could not be found."
+msgstr "未找到网络适配器 %(adapter)s。"
+
+#: cinder/exception.py:836
+#, python-format
+msgid "Class %(class_name)s could not be found: %(exception)s"
+msgstr "找不到类 %(class_name)s :异常 %(exception)s"
+
+#: cinder/exception.py:840
+msgid "Action not allowed."
+msgstr "操作不允许。"
+
+#: cinder/exception.py:844
+#, python-format
+msgid "Unable to use global role %(role_id)s"
+msgstr "无法使用全局角色 %(role_id)s"
+
+#: cinder/exception.py:848
+msgid "Rotation is not allowed for snapshots"
+msgstr "快照不允许循环。"
+
+#: cinder/exception.py:852
+msgid "Rotation param is required for backup image_type"
+msgstr "备份 image_type 要求循环参数。"
+
+#: cinder/exception.py:861
+#, python-format
+msgid "Key pair %(key_name)s already exists."
+msgstr "密钥对 %(key_name)s 已经存在。"
+
+#: cinder/exception.py:865
+#, python-format
+msgid "User %(user)s already exists."
+msgstr "用户 %(user)s 已存在。"
+
+#: cinder/exception.py:869
+#, python-format
+msgid "LDAP user %(user)s already exists."
+msgstr "LDAP用户 %(user)s 已经存在。"
+
+#: cinder/exception.py:873
+#, python-format
+msgid "LDAP group %(group)s already exists."
+msgstr "LDAP用户组 %(group)s 已经存在。"
+
+#: cinder/exception.py:877
+#, python-format
+msgid "User %(uid)s is already a member of the group %(group_dn)s"
+msgstr "用户 %(uid)s 已经是 组 %(group_dn)s 中的成员"
+
+#: cinder/exception.py:882
+#, python-format
+msgid "Project %(project)s already exists."
+msgstr "项目 %(project)s 已经存在。"
+
+#: cinder/exception.py:886
+#, python-format
+msgid "Instance %(name)s already exists."
+msgstr "实例 %(name)s 已经存在。"
+
+#: cinder/exception.py:890
+#, python-format
+msgid "Instance Type %(name)s already exists."
+msgstr "实例类型 %(name)s 已经存在。"
+
+#: cinder/exception.py:894
+#, python-format
+msgid "Volume Type %(name)s already exists."
+msgstr "卷类型 %(name)s 已经存在。"
+
+#: cinder/exception.py:898
+#, python-format
+msgid "%(path)s is on shared storage: %(reason)s"
+msgstr "%(path)s 在共享存储上:%(reason)s"
+
+#: cinder/exception.py:902
+msgid "Migration error"
+msgstr "迁移错误"
+
+#: cinder/exception.py:906
+#, python-format
+msgid "Malformed message body: %(reason)s"
+msgstr "错误格式的消息体: %(reason)s"
+
+#: cinder/exception.py:910
+#, python-format
+msgid "Could not find config at %(path)s"
+msgstr "在 %(path)s 找不到配置文件。"
+
+#: cinder/exception.py:914
+#, python-format
+msgid "Could not load paste app '%(name)s' from %(path)s"
+msgstr "无法从路径 %(path)s 中加载应用 '%(name)s'"
+
+#: cinder/exception.py:918
+msgid "When resizing, instances must change size!"
+msgstr "调整时实例的大小必须要发生变化。"
+
+#: cinder/exception.py:922
+msgid "Image is larger than instance type allows"
+msgstr "镜像比实例类型所允许的大。"
+
+#: cinder/exception.py:926
+msgid "1 or more Zones could not complete the request"
+msgstr "1个或多个区域无法完成请求。"
+
+#: cinder/exception.py:930
+msgid "Instance type's memory is too small for requested image."
+msgstr "实例类型的内存对于所请求的镜像太小。"
+
+#: cinder/exception.py:934
+msgid "Instance type's disk is too small for requested image."
+msgstr "实例类型的磁盘对于所请求的镜像太小。"
+
+#: cinder/exception.py:938
+#, python-format
+msgid "Insufficient free memory on compute node to start %(uuid)s."
+msgstr "没有足够的可用内存来启动计算节点  %(uuid)s。"
+
+#: cinder/exception.py:942
+msgid "Could not fetch bandwidth/cpu/disk metrics for this host."
+msgstr "无法获取此主机的带宽、CPU和磁盘指标。"
+
+#: cinder/exception.py:946
+#, python-format
+msgid "No valid host was found. %(reason)s"
+msgstr "找不到有效主机,原因是 %(reason)s。"
+
+#: cinder/exception.py:950
+#, python-format
+msgid "Host %(host)s is not up or doesn't exist."
+msgstr "主机 %(host)s 没有启动或者不存在。"
+
+#: cinder/exception.py:954
+msgid "Quota exceeded"
+msgstr "超出配额"
+
+#: cinder/exception.py:958
+#, fuzzy, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: action '%(action)s' caused an error: "
+"%(reason)s."
+msgstr "聚合 %(aggregate_id)s没有主机 %(host)s。"
+
+#: cinder/exception.py:963
+#, python-format
+msgid "Aggregate %(aggregate_id)s could not be found."
+msgstr "找不到聚合 %(aggregate_id)s。"
+
+#: cinder/exception.py:967
+#, python-format
+msgid "Aggregate %(aggregate_name)s already exists."
+msgstr "聚合 %(aggregate_name)s 已经存在。"
+
+#: cinder/exception.py:971
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no host %(host)s."
+msgstr "聚合 %(aggregate_id)s没有主机 %(host)s。"
+
+#: cinder/exception.py:975
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no metadata with key %(metadata_key)s."
+msgstr "聚合 %(aggregate_id)s 没有键为 %(metadata_key)s 的元数据。"
+
+#: cinder/exception.py:980
+#, python-format
+msgid "Host %(host)s already member of another aggregate."
+msgstr "主机 %(host)s 已经是另外一个聚合的成员。"
+
+#: cinder/exception.py:984
+#, python-format
+msgid "Aggregate %(aggregate_id)s already has host %(host)s."
+msgstr "聚合 %(aggregate_id)s已经有主机 %(host)s。"
+
+#: cinder/exception.py:988
+#, fuzzy, python-format
+msgid "Detected more than one volume with name %(vol_name)s"
+msgstr "检测到不止一个名称为 %(vol_name) 的卷。"
+
+#: cinder/exception.py:992
+#, python-format
+msgid "Cannot create volume_type with name %(name)s and specs %(extra_specs)s"
+msgstr "无法创建名称为 %(name)s 规格为 %(extra_specs)s 的卷类型。"
+
+#: cinder/exception.py:997
+msgid "Unable to create instance type"
+msgstr "无法创建实例类型。"
+
+#: cinder/exception.py:1001
+msgid "Bad response from SolidFire API"
+msgstr "来自SolidFire API的错误响应"
+
+#: cinder/exception.py:1005
+#, python-format
+msgid "Error in SolidFire API response: status=%(status)s"
+msgstr "SolidFire API响应里发生错误:status=%(status)s"
+
+#: cinder/exception.py:1009
+#, python-format
+msgid "Error in SolidFire API response: data=%(data)s"
+msgstr "SolidFire API响应里发生错误:data=%(data)s"
+
+#: cinder/exception.py:1013
+#, fuzzy, python-format
+msgid "Detected existing vlan with id %(vlan)d"
+msgstr "检测到已存在的id为%(vlan) vlan"
+
+#: cinder/exception.py:1017
+#, python-format
+msgid "Instance %(instance_id)s could not be found."
+msgstr "实例 %(instance_id)s 没有找到。"
+
+#: cinder/exception.py:1021
+#, python-format
+msgid "Invalid id: %(val)s (expecting \"i-...\")."
+msgstr ""
+
+#: cinder/exception.py:1025
+#, fuzzy, python-format
+msgid "Could not fetch image %(image)s"
+msgstr "获取镜像 %(image)s"
+
+#: cinder/log.py:315
+#, python-format
+msgid "syslog facility must be one of: %s"
+msgstr "syslog设备必须作为一个 %s 。"
+
+#: cinder/manager.py:146
+#, python-format
+msgid "Skipping %(full_task_name)s, %(ticks_to_skip)s ticks left until next run"
+msgstr "跳过 %(full_task_name)s,到下次运行还剩下%(ticks_to_skip)s 跳。"
+
+#: cinder/manager.py:152
+#, python-format
+msgid "Running periodic task %(full_task_name)s"
+msgstr "正在运行周期性任务 %(full_task_name)s"
+
+#: cinder/manager.py:159
+#, python-format
+msgid "Error during %(full_task_name)s: %(e)s"
+msgstr "在 %(full_task_name)s 期间发生的错误:%(e)s"
+
+#: cinder/manager.py:203
+msgid "Notifying Schedulers of capabilities ..."
+msgstr "向调度器通报能力。"
+
+#: cinder/policy.py:30
+msgid "JSON file representing policy"
+msgstr "JSON文件表示策略。"
+
+#: cinder/policy.py:33
+msgid "Rule checked when requested rule is not found"
+msgstr "请求的规则找不到时的检查缺省规则。"
+
+#: cinder/service.py:137
+msgid "SIGTERM received"
+msgstr ""
+
+#: cinder/service.py:177
+#, python-format
+msgid "Starting %(topic)s node (version %(vcs_string)s)"
+msgstr "启动 %(topic)s 节点 (版本 %(vcs_string)s)"
+
+#: cinder/service.py:195
+#, python-format
+msgid "Creating Consumer connection for Service %s"
+msgstr "为服务 %s 创建消费者"
+
+#: cinder/service.py:282
+msgid "Service killed that has no database entry"
+msgstr "因无数据库记录,服务已被中止"
+
+#: cinder/service.py:319
+msgid "The service database object disappeared, Recreating it."
+msgstr "服务数据库对象消失,正在重新创建。"
+
+#: cinder/service.py:334
+msgid "Recovered model server connection!"
+msgstr "与模型服务器(model server)的连接已恢复!"
+
+#: cinder/service.py:340
+msgid "model server went away"
+msgstr "失去与模型服务器的连接"
+
+#: cinder/service.py:433
+msgid "Full set of FLAGS:"
+msgstr "标记全集:"
+
+#: cinder/service.py:440
+#, python-format
+msgid "%(flag)s : FLAG SET "
+msgstr "%(flag)s:标记集合 "
+
+#: cinder/utils.py:79
+#, python-format
+msgid "Inner Exception: %s"
+msgstr "内层异常:%s"
+
+#: cinder/utils.py:165
+#, python-format
+msgid "Fetching %s"
+msgstr "正在抓取 %s"
+
+#: cinder/utils.py:210
+#, python-format
+msgid "Got unknown keyword args to utils.execute: %r"
+msgstr "发现未知的 utils.execute 关键字参数:%r"
+
+#: cinder/utils.py:220
+#, python-format
+msgid "Running cmd (subprocess): %s"
+msgstr "正在运行cmd (subprocess):%s"
+
+#: cinder/utils.py:236 cinder/utils.py:315
+#, python-format
+msgid "Result was %s"
+msgstr "运行结果为 %s"
+
+#: cinder/utils.py:249
+#, python-format
+msgid "%r failed. Retrying."
+msgstr "%r 失败,重试。"
+
+#: cinder/utils.py:291
+#, python-format
+msgid "Running cmd (SSH): %s"
+msgstr "运行cmd (SSH):%s"
+
+#: cinder/utils.py:293
+msgid "Environment not supported over SSH"
+msgstr "SSH上不支持环境变量"
+
+#: cinder/utils.py:297
+msgid "process_input not supported over SSH"
+msgstr "SSH上不支持的进程输入参数。"
+
+#: cinder/utils.py:352
+#, python-format
+msgid "debug in callback: %s"
+msgstr "回调中debug:%s"
+
+#: cinder/utils.py:534
+#, python-format
+msgid "Link Local address is not found.:%s"
+msgstr "本地IP地址没有找到:%s"
+
+#: cinder/utils.py:537
+#, python-format
+msgid "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+msgstr "无法连接到 %(interface)s 的本地IP:%(ex)s"
+
+#: cinder/utils.py:648
+#, python-format
+msgid "Invalid backend: %s"
+msgstr "无效的后台:%s"
+
+#: cinder/utils.py:659
+#, python-format
+msgid "backend %s"
+msgstr "后台 %s"
+
+#: cinder/utils.py:709
+msgid "in looping call"
+msgstr "循环调用中。"
+
+#: cinder/utils.py:927
+#, fuzzy, python-format
+msgid "Attempting to grab semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr "正在试图获取信号量 \"%(lock)s\" 为方法 \"%(method)s\"...锁"
+
+#: cinder/utils.py:931
+#, fuzzy, python-format
+msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr "获得信号量 \"%(lock)s\" 为方法 \"%(method)s\" ...锁"
+
+#: cinder/utils.py:935
+#, fuzzy, python-format
+msgid "Attempting to grab file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr "正在 试图获取锁 \"%(lock)s\" 为方法 \"%(method)s\"...锁"
+
+#: cinder/utils.py:942
+#, fuzzy, python-format
+msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr "获得文件锁 \"%(lock)s\" 为方法 \"%(method)s\"...锁"
+
+#: cinder/utils.py:1001
+#, python-format
+msgid "Found sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1008
+#, python-format
+msgid "Cleaned sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1023
+#, python-format
+msgid "Found lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1028
+#, python-format
+msgid "Cleaned lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1138
+#, python-format
+msgid "Expected object of type: %s"
+msgstr "期望的对象类型:%s"
+
+#: cinder/utils.py:1169
+#, python-format
+msgid "Invalid server_string: %s"
+msgstr "不正确的server_string:%s"
+
+#: cinder/utils.py:1298
+#, python-format
+msgid "timefunc: '%(name)s' took %(total_time).2f secs"
+msgstr "timefunc:'%(name)s' 用了%(total_time).2f 秒"
+
+#: cinder/utils.py:1330
+msgid "Original exception being dropped"
+msgstr "正在丢弃原来的异常。"
+
+#: cinder/utils.py:1461
+#, python-format
+msgid "Class %(fullname)s is deprecated: %(msg)s"
+msgstr "类 %(fullname)s 是不推荐的:%(msg)s"
+
+#: cinder/utils.py:1463
+#, python-format
+msgid "Class %(fullname)s is deprecated"
+msgstr "类 %(fullname)s 是不推荐的"
+
+#: cinder/utils.py:1495
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated: %(msg)s"
+msgstr "函数 %(name)s 在%(location)s 里的是不推荐的:%(msg)s"
+
+#: cinder/utils.py:1497
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated"
+msgstr "函数 %(name)s 在%(location)s 里的是不推荐的"
+
+#: cinder/utils.py:1681
+#, fuzzy, python-format
+msgid "Could not remove tmpdir: %s"
+msgstr "移除容器失败:%s"
+
+#: cinder/wsgi.py:97
+#, python-format
+msgid "Started %(name)s on %(host)s:%(port)s"
+msgstr "启动%(name)s 位置在 %(host)s:%(port)s"
+
+#: cinder/wsgi.py:108
+msgid "Stopping WSGI server."
+msgstr "关闭WSGI服务器"
+
+#: cinder/wsgi.py:111
+msgid "Stopping raw TCP server."
+msgstr "正在停止裸TCP服务器。"
+
+#: cinder/wsgi.py:117
+#, python-format
+msgid "Starting TCP server %(arg0)s on %(host)s:%(port)s"
+msgstr "正在启动TCP服务器 %(arg0)s 位置在%(host)s:%(port)s"
+
+#: cinder/wsgi.py:133
+msgid "WSGI server has stopped."
+msgstr "WSGI服务器已经停止。"
+
+#: cinder/wsgi.py:211
+msgid "You must implement __call__"
+msgstr "你必须执行 __call__"
+
+#: cinder/api/direct.py:218
+msgid "not available"
+msgstr "不可用"
+
+#: cinder/api/direct.py:299
+#, python-format
+msgid "Returned non-serializeable type: %s"
+msgstr "返回的non-serializeable类型:%s"
+
+#: cinder/api/sizelimit.py:51
+msgid "Request is too large."
+msgstr ""
+
+#: cinder/api/validator.py:142
+#, python-format
+msgid "%(key)s with value %(value)s failed validator  %(validator)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:73
+#, python-format
+msgid "%(code)s: %(message)s"
+msgstr "%(code)s: %(message)s"
+
+#: cinder/api/ec2/__init__.py:95
+#, python-format
+msgid "FaultWrapper: %s"
+msgstr "FaultWrapper: %s"
+
+#: cinder/api/ec2/__init__.py:170
+msgid "Too many failed authentications."
+msgstr "认证失败过多"
+
+#: cinder/api/ec2/__init__.py:180
+#, python-format
+msgid ""
+"Access key %(access_key)s has had %(failures)d failed authentications and"
+" will be locked out for %(lock_mins)d minutes."
+msgstr "访问密钥 %(access_key)s 有错误 %(failures)d,认证失败将被锁定 %(lock_mins)d 分钟。"
+
+#: cinder/api/ec2/__init__.py:267
+msgid "Signature not provided"
+msgstr "签名没有提供"
+
+#: cinder/api/ec2/__init__.py:271
+msgid "Access key not provided"
+msgstr "访问密钥没有提供"
+
+#: cinder/api/ec2/__init__.py:306 cinder/api/ec2/__init__.py:319
+msgid "Failure communicating with keystone"
+msgstr "与keystone交流失败"
+
+#: cinder/api/ec2/__init__.py:388
+#, python-format
+msgid "Authentication Failure: %s"
+msgstr "认证失败:%s"
+
+#: cinder/api/ec2/__init__.py:404
+#, python-format
+msgid "Authenticated Request For %(uname)s:%(pname)s)"
+msgstr "为%(uname)s:%(pname)s 验证通过的请求"
+
+#: cinder/api/ec2/__init__.py:435
+#, python-format
+msgid "action: %s"
+msgstr "执行: %s"
+
+#: cinder/api/ec2/__init__.py:437
+#, python-format
+msgid "arg: %(key)s\t\tval: %(value)s"
+msgstr "arg: %(key)s\t\tval: %(value)s"
+
+#: cinder/api/ec2/__init__.py:512
+#, python-format
+msgid "Unauthorized request for controller=%(controller)s and action=%(action)s"
+msgstr "为controller=%(controller)s 以及 action=%(action)s未验证的请求"
+
+#: cinder/api/ec2/__init__.py:584
+#, python-format
+msgid "InstanceNotFound raised: %s"
+msgstr "引起异常 InstanceNotFound: %s"
+
+#: cinder/api/ec2/__init__.py:590
+#, python-format
+msgid "VolumeNotFound raised: %s"
+msgstr "引起异常 VolumeNotFound: %s"
+
+#: cinder/api/ec2/__init__.py:596
+#, python-format
+msgid "SnapshotNotFound raised: %s"
+msgstr "引起异常 SnapshotNotFound: %s"
+
+#: cinder/api/ec2/__init__.py:602
+#, python-format
+msgid "NotFound raised: %s"
+msgstr "引起异常 NotFound: %s"
+
+#: cinder/api/ec2/__init__.py:605
+#, python-format
+msgid "EC2APIError raised: %s"
+msgstr "引起异常 EC2APIError: %s"
+
+#: cinder/api/ec2/__init__.py:613
+#, python-format
+msgid "KeyPairExists raised: %s"
+msgstr "引起异常 KeyPairExists: %s"
+
+#: cinder/api/ec2/__init__.py:617
+#, python-format
+msgid "InvalidParameterValue raised: %s"
+msgstr "引起异常 InvalidParameterValue: %s"
+
+#: cinder/api/ec2/__init__.py:621
+#, python-format
+msgid "InvalidPortRange raised: %s"
+msgstr "引起异常 InvalidPortRange: %s"
+
+#: cinder/api/ec2/__init__.py:625
+#, python-format
+msgid "NotAuthorized raised: %s"
+msgstr "引起异常 NotAuthorized: %s"
+
+#: cinder/api/ec2/__init__.py:629
+#, python-format
+msgid "InvalidRequest raised: %s"
+msgstr "引起异常 InvalidRequest: %s"
+
+#: cinder/api/ec2/__init__.py:633
+#, fuzzy, python-format
+msgid "QuotaError raised: %s"
+msgstr "引起意外的错误:%s"
+
+#: cinder/api/ec2/__init__.py:637
+#, python-format
+msgid "Invalid id: bogus (expecting \"i-...\"): %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:646
+#, python-format
+msgid "Unexpected error raised: %s"
+msgstr "引起意外的错误:%s"
+
+#: cinder/api/ec2/__init__.py:647
+#, python-format
+msgid "Environment: %s"
+msgstr "Environment: %s"
+
+#: cinder/api/ec2/__init__.py:649 cinder/api/metadata/handler.py:248
+msgid "An unknown error has occurred. Please try your request again."
+msgstr "发生了一个未知的错误. 请重试你的请求."
+
+#: cinder/api/ec2/apirequest.py:64
+#, python-format
+msgid "Unsupported API request: controller = %(controller)s, action = %(action)s"
+msgstr "不支持的API请求:controller = %(controller)s,action = %(action)s"
+
+#: cinder/api/ec2/cloud.py:336
+#, python-format
+msgid "Create snapshot of volume %s"
+msgstr "创建卷 %s 的快照"
+
+#: cinder/api/ec2/cloud.py:372
+#, fuzzy, python-format
+msgid ""
+"Value (%s) for KeyName is invalid. Content limited to Alphanumeric "
+"character, spaces, dashes, and underscore."
+msgstr "参数GroupName的值 (%s) 无效。内容仅限于含有字母数字的字符,空格,破折号和下划线。"
+
+#: cinder/api/ec2/cloud.py:378
+#, fuzzy, python-format
+msgid "Value (%s) for Keyname is invalid. Length exceeds maximum of 255."
+msgstr "参数GroupName的值 (%s) 无效。长度超过了上限255。"
+
+#: cinder/api/ec2/cloud.py:382
+#, python-format
+msgid "Create key pair %s"
+msgstr "创建密钥对 %s"
+
+#: cinder/api/ec2/cloud.py:391
+#, python-format
+msgid "Import key %s"
+msgstr "导入密钥 %s"
+
+#: cinder/api/ec2/cloud.py:409
+#, python-format
+msgid "Delete key pair %s"
+msgstr "删除密钥对 %s"
+
+#: cinder/api/ec2/cloud.py:551
+#, fuzzy
+msgid "Invalid CIDR"
+msgstr "无效的"
+
+#: cinder/api/ec2/cloud.py:639 cinder/api/ec2/cloud.py:693
+#: cinder/api/ec2/cloud.py:800
+msgid "Not enough parameters, need group_name or group_id"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:654
+#: cinder/api/openstack/compute/contrib/security_groups.py:517
+#, python-format
+msgid "Revoke security group ingress %s"
+msgstr "撤销 %s 安全组入口权限"
+
+#: cinder/api/ec2/cloud.py:666 cinder/api/ec2/cloud.py:719
+#, fuzzy, python-format
+msgid "%s Not enough parameters to build a valid rule"
+msgstr "参数不够创建有效规则。"
+
+#: cinder/api/ec2/cloud.py:684 cinder/api/ec2/cloud.py:744
+msgid "No rule for the specified parameters."
+msgstr "对给定的参数无特定规则。"
+
+#: cinder/api/ec2/cloud.py:708
+#: cinder/api/openstack/compute/contrib/security_groups.py:354
+#, python-format
+msgid "Authorize security group ingress %s"
+msgstr "授权 %s 安全组入口权限"
+
+#: cinder/api/ec2/cloud.py:725
+#, fuzzy, python-format
+msgid "%s - This rule already exists in group"
+msgstr "这条规则已经存在于组%s 中"
+
+#: cinder/api/ec2/cloud.py:769
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Content limited to "
+"Alphanumeric characters, spaces, dashes, and underscores."
+msgstr "参数GroupName的值 (%s) 无效。内容仅限于含有字母数字的字符,空格,破折号和下划线。"
+
+#: cinder/api/ec2/cloud.py:776
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Length exceeds maximum of "
+"255."
+msgstr "参数GroupName的值 (%s) 无效。长度超过了上限255。"
+
+#: cinder/api/ec2/cloud.py:780
+#: cinder/api/openstack/compute/contrib/security_groups.py:292
+#, python-format
+msgid "Create Security Group %s"
+msgstr "创建安全组 %s"
+
+#: cinder/api/ec2/cloud.py:783
+#, python-format
+msgid "group %s already exists"
+msgstr "安全组 %s 已经存在"
+
+#: cinder/api/ec2/cloud.py:815
+#: cinder/api/openstack/compute/contrib/security_groups.py:245
+#, python-format
+msgid "Delete security group %s"
+msgstr "删除安全组 %s"
+
+#: cinder/api/ec2/cloud.py:823 cinder/compute/manager.py:1630
+#, python-format
+msgid "Get console output for instance %s"
+msgstr "获取实例 %s 控制台输出"
+
+#: cinder/api/ec2/cloud.py:894
+#, python-format
+msgid "Create volume from snapshot %s"
+msgstr "从快照 %s 创建卷"
+
+#: cinder/api/ec2/cloud.py:898 cinder/api/openstack/compute/contrib/volumes.py:186
+#: cinder/api/openstack/volume/volumes.py:222
+#, python-format
+msgid "Create volume of %s GB"
+msgstr "创建 %s GB的卷"
+
+#: cinder/api/ec2/cloud.py:921
+#, fuzzy
+msgid "Delete Failed"
+msgstr "创建失败"
+
+#: cinder/api/ec2/cloud.py:931
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(instance_id)s at %(device)s"
+msgstr "把卷 %(volume_id)s 附加到实例 %(instance_id)s 上位置在 %(device)s"
+
+#: cinder/api/ec2/cloud.py:939
+#, fuzzy
+msgid "Attach Failed."
+msgstr "创建失败"
+
+#: cinder/api/ec2/cloud.py:952 cinder/api/openstack/compute/contrib/volumes.py:366
+#, python-format
+msgid "Detach volume %s"
+msgstr "分离卷 %s"
+
+#: cinder/api/ec2/cloud.py:959
+#, fuzzy, python-format
+msgid "Detach Volume Failed."
+msgstr "分离卷 %s"
+
+#: cinder/api/ec2/cloud.py:984 cinder/api/ec2/cloud.py:1041
+#: cinder/api/ec2/cloud.py:1518 cinder/api/ec2/cloud.py:1533
+#, python-format
+msgid "attribute not supported: %s"
+msgstr "属性不支持: %s"
+
+#: cinder/api/ec2/cloud.py:1107
+#, python-format
+msgid "vol = %s\n"
+msgstr "vol = %s\n"
+
+#: cinder/api/ec2/cloud.py:1255
+msgid "Allocate address"
+msgstr "分配地址"
+
+#: cinder/api/ec2/cloud.py:1267
+#, python-format
+msgid "Release address %s"
+msgstr "释放地址 %s"
+
+#: cinder/api/ec2/cloud.py:1272
+#, python-format
+msgid "Associate address %(public_ip)s to instance %(instance_id)s"
+msgstr "把地址 %(public_ip)s 关联到实例 %(instance_id)s"
+
+#: cinder/api/ec2/cloud.py:1282
+#, python-format
+msgid "Disassociate address %s"
+msgstr "取消地址 %s 的关联"
+
+#: cinder/api/ec2/cloud.py:1308
+msgid "Image must be available"
+msgstr "镜像必须可用。"
+
+#: cinder/api/ec2/cloud.py:1329
+msgid "Going to start terminating instances"
+msgstr "准备开始终止实例"
+
+#: cinder/api/ec2/cloud.py:1343
+#, python-format
+msgid "Reboot instance %r"
+msgstr "重启实例 %r"
+
+#: cinder/api/ec2/cloud.py:1354
+msgid "Going to stop instances"
+msgstr "准备停止实例"
+
+#: cinder/api/ec2/cloud.py:1365
+msgid "Going to start instances"
+msgstr "准备启动实例"
+
+#: cinder/api/ec2/cloud.py:1455
+#, python-format
+msgid "De-registering image %s"
+msgstr "解除镜像 %s 的注册"
+
+#: cinder/api/ec2/cloud.py:1471
+msgid "imageLocation is required"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1490
+#, python-format
+msgid "Registered image %(image_location)s with id %(image_id)s"
+msgstr "用id %(image_id)s 注册镜像 %(image_location)s"
+
+#: cinder/api/ec2/cloud.py:1536
+msgid "user or group not specified"
+msgstr "用户或者组没有确定"
+
+#: cinder/api/ec2/cloud.py:1538
+msgid "only group \"all\" is supported"
+msgstr "仅仅支持组\"all\""
+
+#: cinder/api/ec2/cloud.py:1540
+msgid "operation_type must be add or remove"
+msgstr "operation_type必须添加或者移除"
+
+#: cinder/api/ec2/cloud.py:1542
+#, python-format
+msgid "Updating image %s publicity"
+msgstr "正在更新镜像 %s 的 publicity 属性"
+
+#: cinder/api/ec2/cloud.py:1555
+#, python-format
+msgid "Not allowed to modify attributes for image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1603
+#, python-format
+msgid "Couldn't stop instance with in %d sec"
+msgstr "无法在 %d 秒内停止实例"
+
+#: cinder/api/metadata/handler.py:246 cinder/api/metadata/handler.py:253
+#, python-format
+msgid "Failed to get metadata for ip: %s"
+msgstr "为ip: %s获取元数据失败"
+
+#: cinder/api/openstack/__init__.py:43
+#, python-format
+msgid "Caught error: %s"
+msgstr "抓到错误:%s"
+
+#: cinder/api/openstack/__init__.py:45 cinder/api/openstack/wsgi.py:886
+#, python-format
+msgid "%(url)s returned with HTTP %(status)d"
+msgstr "%(url)s 随HTTP %(status)d返回"
+
+#: cinder/api/openstack/__init__.py:94
+msgid "Must specify an ExtensionManager class"
+msgstr "必须明确一个ExtensionManager类"
+
+#: cinder/api/openstack/__init__.py:105
+#, python-format
+msgid "Extended resource: %s"
+msgstr "扩展资源:%s"
+
+#: cinder/api/openstack/__init__.py:130
+#, python-format
+msgid ""
+"Extension %(ext_name)s: Cannot extend resource %(collection)s: No such "
+"resource"
+msgstr "扩展%(ext_name)s:无法扩展资源 %(collection)s:没有那种资源"
+
+#: cinder/api/openstack/__init__.py:135
+#, python-format
+msgid "Extension %(ext_name)s extending resource: %(collection)s"
+msgstr "扩展资源的扩展 %(ext_name)s:%(collection)s"
+
+#: cinder/api/openstack/auth.py:90
+#, python-format
+msgid "%(user_id)s could not be found with token '%(token)s'"
+msgstr "%(user_id)s 通过令牌 '%(token)s' 是找不到的"
+
+#: cinder/api/openstack/auth.py:134
+#, python-format
+msgid "%(user_id)s must be an admin or a member of %(project_id)s"
+msgstr "%(user_id)s 必须是 %(project_id)s 的管理员或者成员"
+
+#: cinder/api/openstack/auth.py:152
+msgid "Authentication requests must be made against a version root (e.g. /v2)."
+msgstr "认证请求必须针对root版本(例如 /v2)。"
+
+#: cinder/api/openstack/auth.py:167
+#, python-format
+msgid "Could not find %s in request."
+msgstr "请求中找不到 %s"
+
+#: cinder/api/openstack/auth.py:191
+#, python-format
+msgid "Successfully authenticated '%s'"
+msgstr "成功验证 '%s'"
+
+#: cinder/api/openstack/auth.py:241
+msgid "User not found with provided API key."
+msgstr "没有为提供的API密钥找到用户。"
+
+#: cinder/api/openstack/auth.py:258
+#, python-format
+msgid "Provided API key is valid, but not for user '%(username)s'"
+msgstr "提供的API密钥有效,但并不是给用户 '%(username)s' 的。"
+
+#: cinder/api/openstack/common.py:133 cinder/api/openstack/common.py:167
+msgid "limit param must be an integer"
+msgstr "limit 参数必须是整数"
+
+#: cinder/api/openstack/common.py:136 cinder/api/openstack/common.py:171
+msgid "limit param must be positive"
+msgstr "limit参数必须是正数"
+
+#: cinder/api/openstack/common.py:161
+msgid "offset param must be an integer"
+msgstr "offset 参数必须是整数"
+
+#: cinder/api/openstack/common.py:175
+msgid "offset param must be positive"
+msgstr "offset 参数必须是正数"
+
+#: cinder/api/openstack/common.py:203
+#, python-format
+msgid "marker [%s] not found"
+msgstr "没有找到标记 [%s]"
+
+#: cinder/api/openstack/common.py:243
+#, python-format
+msgid "href %s does not contain version"
+msgstr "href %s 不包含版本"
+
+#: cinder/api/openstack/common.py:278
+msgid "Image metadata limit exceeded"
+msgstr "超过镜像元数据限制"
+
+#: cinder/api/openstack/common.py:295
+#, fuzzy, python-format
+msgid "Converting nw_info: %s"
+msgstr "实例的network_info:|%s|"
+
+#: cinder/api/openstack/common.py:305
+#, fuzzy, python-format
+msgid "Converted networks: %s"
+msgstr "意外错误:%s"
+
+#: cinder/api/openstack/common.py:338
+#, python-format
+msgid "Cannot '%(action)s' while instance is in %(attr)s %(state)s"
+msgstr "'%(action)s' 针对处于 %(attr)s %(state)s 的实例是无法进行"
+
+#: cinder/api/openstack/common.py:341
+#, python-format
+msgid "Instance is in an invalid state for '%(action)s'"
+msgstr "实例针对 '%(action)s' 处于无效状态"
+
+#: cinder/api/openstack/common.py:421
+msgid "Rejecting snapshot request, snapshots currently disabled"
+msgstr "拒绝快照请求,快照当前未被激活"
+
+#: cinder/api/openstack/common.py:423
+msgid "Instance snapshots are not permitted at this time."
+msgstr "该时刻实例快照是不允许的。"
+
+#: cinder/api/openstack/extensions.py:188
+#, python-format
+msgid "Loaded extension: %s"
+msgstr "加载的扩展:%s"
+
+#: cinder/api/openstack/extensions.py:225
+#, python-format
+msgid "Ext name: %s"
+msgstr "Ext name: %s"
+
+#: cinder/api/openstack/extensions.py:226
+#, python-format
+msgid "Ext alias: %s"
+msgstr "Ext alias: %s"
+
+#: cinder/api/openstack/extensions.py:227
+#, python-format
+msgid "Ext description: %s"
+msgstr "Ext 描述: %s"
+
+#: cinder/api/openstack/extensions.py:229
+#, python-format
+msgid "Ext namespace: %s"
+msgstr "Ext 命名空间: %s"
+
+#: cinder/api/openstack/extensions.py:230
+#, python-format
+msgid "Ext updated: %s"
+msgstr "Ext updated: %s"
+
+#: cinder/api/openstack/extensions.py:232
+#, python-format
+msgid "Exception loading extension: %s"
+msgstr "加载扩展发生异常:%s"
+
+#: cinder/api/openstack/extensions.py:246
+#, python-format
+msgid "Loading extension %s"
+msgstr "正在加载扩展 %s"
+
+#: cinder/api/openstack/extensions.py:252
+#, python-format
+msgid "Calling extension factory %s"
+msgstr "调用扩展工厂 %s"
+
+#: cinder/api/openstack/extensions.py:264
+#, python-format
+msgid "Failed to load extension %(ext_factory)s: %(exc)s"
+msgstr "加载扩展 %(ext_factory)s 失败:%(exc)s"
+
+#: cinder/api/openstack/extensions.py:344
+#, python-format
+msgid "Failed to load extension %(classpath)s: %(exc)s"
+msgstr "加载扩展 %(classpath)s 失败:%(exc)s"
+
+#: cinder/api/openstack/extensions.py:368
+#, python-format
+msgid "Failed to load extension %(ext_name)s: %(exc)s"
+msgstr "加载扩展 %(ext_name)s 失败:%(exc)s"
+
+#: cinder/api/openstack/wsgi.py:135 cinder/api/openstack/wsgi.py:538
+msgid "cannot understand JSON"
+msgstr "无法理解JSON"
+
+#: cinder/api/openstack/wsgi.py:159
+#: cinder/api/openstack/compute/contrib/hosts.py:86
+msgid "cannot understand XML"
+msgstr "无法理解XML"
+
+#: cinder/api/openstack/wsgi.py:543
+msgid "too many body keys"
+msgstr "过多主体密钥"
+
+#: cinder/api/openstack/wsgi.py:582
+#, fuzzy, python-format
+msgid "Exception handling resource: %s"
+msgstr "扩展资源:%s"
+
+#: cinder/api/openstack/wsgi.py:586
+#, python-format
+msgid "Fault thrown: %s"
+msgstr "错误抛出: %s"
+
+#: cinder/api/openstack/wsgi.py:589
+#, python-format
+msgid "HTTP exception thrown: %s"
+msgstr "HTTP 异常抛出:%s"
+
+#: cinder/api/openstack/wsgi.py:697
+msgid "Unrecognized Content-Type provided in request"
+msgstr "请求中提供了无法识别的 Content-Type"
+
+#: cinder/api/openstack/wsgi.py:701
+msgid "No Content-Type provided in request"
+msgstr "请求中没有提供 Content-Type"
+
+#: cinder/api/openstack/wsgi.py:705
+msgid "Empty body provided in request"
+msgstr "请求中没有提供主体"
+
+#: cinder/api/openstack/wsgi.py:816
+#, python-format
+msgid "There is no such action: %s"
+msgstr "没有该动作:%s"
+
+#: cinder/api/openstack/wsgi.py:819 cinder/api/openstack/wsgi.py:832
+#: cinder/api/openstack/compute/server_metadata.py:58
+#: cinder/api/openstack/compute/server_metadata.py:76
+#: cinder/api/openstack/compute/server_metadata.py:101
+#: cinder/api/openstack/compute/server_metadata.py:126
+#: cinder/api/openstack/compute/contrib/admin_actions.py:211
+#: cinder/api/openstack/compute/contrib/console_output.py:52
+msgid "Malformed request body"
+msgstr "错误格式的请求主体"
+
+#: cinder/api/openstack/wsgi.py:829
+msgid "Unsupported Content-Type"
+msgstr "不支持的Content-Type"
+
+#: cinder/api/openstack/wsgi.py:841
+msgid "Malformed request url"
+msgstr "错误格式的请求url"
+
+#: cinder/api/openstack/wsgi.py:889
+#, python-format
+msgid "%(url)s returned a fault: %(e)s"
+msgstr "%(url)s返回错误:%(e)s"
+
+#: cinder/api/openstack/xmlutil.py:265
+msgid "element is not a child"
+msgstr "元素不是子节点"
+
+#: cinder/api/openstack/xmlutil.py:414
+msgid "root element selecting a list"
+msgstr "根元素选择列表"
+
+#: cinder/api/openstack/xmlutil.py:739
+#, python-format
+msgid "Template tree mismatch; adding slave %(slavetag)s to master %(mastertag)s"
+msgstr "模板数不匹配;把slave %(slavetag)s 添加到master %(mastertag)s"
+
+#: cinder/api/openstack/xmlutil.py:858
+msgid "subclasses must implement construct()!"
+msgstr "subclasses必须执行construct()!"
+
+#: cinder/api/openstack/compute/extensions.py:29
+#: cinder/api/openstack/volume/extensions.py:29
+msgid "Initializing extension manager."
+msgstr "正在初始化扩展管理员。"
+
+#: cinder/api/openstack/compute/image_metadata.py:40
+#: cinder/api/openstack/compute/images.py:146
+#: cinder/api/openstack/compute/images.py:161
+msgid "Image not found."
+msgstr "镜像没有找到。"
+
+#: cinder/api/openstack/compute/image_metadata.py:79
+msgid "Incorrect request body format"
+msgstr "不正确的请求主体格式"
+
+#: cinder/api/openstack/compute/image_metadata.py:83
+#: cinder/api/openstack/compute/server_metadata.py:80
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:79
+#: cinder/api/openstack/compute/contrib/volumetypes.py:188
+msgid "Request body and URI mismatch"
+msgstr "请求主体和URI不匹配"
+
+#: cinder/api/openstack/compute/image_metadata.py:86
+#: cinder/api/openstack/compute/server_metadata.py:84
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:82
+#: cinder/api/openstack/compute/contrib/volumetypes.py:191
+msgid "Request body contains too many items"
+msgstr "请求主体包含太多items"
+
+#: cinder/api/openstack/compute/image_metadata.py:111
+msgid "Invalid metadata key"
+msgstr "无效的元数据键"
+
+#: cinder/api/openstack/compute/ips.py:74
+msgid "Instance does not exist"
+msgstr "实例不存在"
+
+#: cinder/api/openstack/compute/ips.py:97
+msgid "Instance is not a member of specified network"
+msgstr "实例并不是指定网络的成员"
+
+#: cinder/api/openstack/compute/limits.py:140
+#, python-format
+msgid ""
+"Only %(value)s %(verb)s request(s) can be made to %(uri)s every "
+"%(unit_string)s."
+msgstr "只能有 %(value)s 个 %(verb)s 请求发送给 %(uri)s 限定是每一个 %(unit_string)s。"
+
+#: cinder/api/openstack/compute/limits.py:266
+msgid "This request was rate-limited."
+msgstr "这个请求受到频率限制。"
+
+#: cinder/api/openstack/compute/server_metadata.py:38
+#: cinder/api/openstack/compute/server_metadata.py:122
+#: cinder/api/openstack/compute/server_metadata.py:159
+msgid "Server does not exist"
+msgstr "服务器不存在"
+
+#: cinder/api/openstack/compute/server_metadata.py:141
+#: cinder/api/openstack/compute/server_metadata.py:152
+msgid "Metadata item was not found"
+msgstr "元数据项目未找到"
+
+#: cinder/api/openstack/compute/servers.py:425
+#, python-format
+msgid "Invalid server status: %(status)s"
+msgstr "无效的服务器状态:%(status)s"
+
+#: cinder/api/openstack/compute/servers.py:433
+msgid "Invalid changes-since value"
+msgstr "无效的changes-since值"
+
+#: cinder/api/openstack/compute/servers.py:483
+msgid "Personality file limit exceeded"
+msgstr "超过个性化文件限制"
+
+#: cinder/api/openstack/compute/servers.py:485
+msgid "Personality file path too long"
+msgstr "个性化文件路径太长"
+
+#: cinder/api/openstack/compute/servers.py:487
+msgid "Personality file content too long"
+msgstr "个性化文件内容太长"
+
+#: cinder/api/openstack/compute/servers.py:501
+msgid "Server name is not a string or unicode"
+msgstr "服务器名称不是字符串或者unicode"
+
+#: cinder/api/openstack/compute/servers.py:505
+msgid "Server name is an empty string"
+msgstr "服务器名称是空串"
+
+#: cinder/api/openstack/compute/servers.py:509
+#, fuzzy
+msgid "Server name must be less than 256 characters."
+msgstr "密钥对名称长度必须在1到255个字符之间"
+
+#: cinder/api/openstack/compute/servers.py:527
+#, python-format
+msgid "Bad personality format: missing %s"
+msgstr "错误的个性化格式:丢失 %s"
+
+#: cinder/api/openstack/compute/servers.py:530
+msgid "Bad personality format"
+msgstr "损坏的个性化格式"
+
+#: cinder/api/openstack/compute/servers.py:535
+#, python-format
+msgid "Personality content for %s cannot be decoded"
+msgstr "个性化 %s 的内容无法解码"
+
+#: cinder/api/openstack/compute/servers.py:550
+#, python-format
+msgid "Bad networks format: network uuid is not in proper format (%s)"
+msgstr "损坏的网络格式:网络 uuid 格式不正确 (%s)"
+
+#: cinder/api/openstack/compute/servers.py:559
+#, python-format
+msgid "Invalid fixed IP address (%s)"
+msgstr "不正确的固定 IP 地址(%s)"
+
+#: cinder/api/openstack/compute/servers.py:566
+#, python-format
+msgid "Duplicate networks (%s) are not allowed"
+msgstr "不允许重复的网络(%s)"
+
+#: cinder/api/openstack/compute/servers.py:572
+#, python-format
+msgid "Bad network format: missing %s"
+msgstr "错误的网络格式:丢失%s"
+
+#: cinder/api/openstack/compute/servers.py:575
+msgid "Bad networks format"
+msgstr "错误的网络格式"
+
+#: cinder/api/openstack/compute/servers.py:587
+msgid "Userdata content cannot be decoded"
+msgstr "Userdata 内容无法解码"
+
+#: cinder/api/openstack/compute/servers.py:594
+msgid "accessIPv4 is not proper IPv4 format"
+msgstr "accessIPv4 不是正确的IPv4格式"
+
+#: cinder/api/openstack/compute/servers.py:601
+#, fuzzy
+msgid "accessIPv6 is not proper IPv6 format"
+msgstr "accessIPv4 不是正确的IPv4格式"
+
+#: cinder/api/openstack/compute/servers.py:633
+msgid "Server name is not defined"
+msgstr "服务器名称未定义"
+
+#: cinder/api/openstack/compute/servers.py:675
+#: cinder/api/openstack/compute/servers.py:740
+msgid "Invalid flavorRef provided."
+msgstr "提供了无效的flavorRef。"
+
+#: cinder/api/openstack/compute/servers.py:737
+msgid "Can not find requested image"
+msgstr "无法找到请求的镜像"
+
+#: cinder/api/openstack/compute/servers.py:743
+msgid "Invalid key_name provided."
+msgstr "提供了无效的key_name。"
+
+#: cinder/api/openstack/compute/servers.py:829
+#: cinder/api/openstack/compute/servers.py:849
+msgid "Instance has not been resized."
+msgstr "实例还没有调整大小。"
+
+#: cinder/api/openstack/compute/servers.py:835
+#, python-format
+msgid "Error in confirm-resize %s"
+msgstr "confirm-resize中的错误 %s"
+
+#: cinder/api/openstack/compute/servers.py:855
+#, python-format
+msgid "Error in revert-resize %s"
+msgstr "revert-resize中的错误 %s"
+
+#: cinder/api/openstack/compute/servers.py:868
+msgid "Argument 'type' for reboot is not HARD or SOFT"
+msgstr "重启的参数'type'既不是HARD也不是SOFT"
+
+#: cinder/api/openstack/compute/servers.py:872
+msgid "Missing argument 'type' for reboot"
+msgstr "缺少重启的参数'type'"
+
+#: cinder/api/openstack/compute/servers.py:885
+#, python-format
+msgid "Error in reboot %s"
+msgstr "重启中错误 %s"
+
+#: cinder/api/openstack/compute/servers.py:897
+msgid "Unable to locate requested flavor."
+msgstr "无法找到请求的类型。"
+
+#: cinder/api/openstack/compute/servers.py:900
+msgid "Resize requires a change in size."
+msgstr "调整大小需要尺寸的改变。"
+
+#: cinder/api/openstack/compute/servers.py:924
+msgid "Malformed server entity"
+msgstr "错误格式的服务器实体"
+
+#: cinder/api/openstack/compute/servers.py:931
+msgid "Missing imageRef attribute"
+msgstr "缺少属性imageRef"
+
+#: cinder/api/openstack/compute/servers.py:940
+msgid "Invalid imageRef provided."
+msgstr "提供了无效的imageRef。"
+
+#: cinder/api/openstack/compute/servers.py:949
+msgid "Missing flavorRef attribute"
+msgstr "缺少属性flavorRef"
+
+#: cinder/api/openstack/compute/servers.py:962
+msgid "No adminPass was specified"
+msgstr "没有确定adminPass"
+
+#: cinder/api/openstack/compute/servers.py:966
+#: cinder/api/openstack/compute/servers.py:1144
+msgid "Invalid adminPass"
+msgstr "无效的adminPass"
+
+#: cinder/api/openstack/compute/servers.py:980
+msgid "Unable to parse metadata key/value pairs."
+msgstr "无法解析元数据键/值对"
+
+#: cinder/api/openstack/compute/servers.py:993
+msgid "Resize request has invalid 'flavorRef' attribute."
+msgstr "调整大小请求中的属性'flavorRef'无效。"
+
+#: cinder/api/openstack/compute/servers.py:996
+msgid "Resize requests require 'flavorRef' attribute."
+msgstr "调整大小请求要求有属性'flavorRef'。"
+
+#: cinder/api/openstack/compute/servers.py:1014
+#: cinder/api/openstack/compute/contrib/aggregates.py:142
+#: cinder/api/openstack/compute/contrib/networks.py:65
+msgid "Invalid request body"
+msgstr "无效的请求主体"
+
+#: cinder/api/openstack/compute/servers.py:1019
+msgid "Could not parse imageRef from request."
+msgstr "无法解析请求中的imageRef。"
+
+#: cinder/api/openstack/compute/servers.py:1071
+msgid "Instance could not be found"
+msgstr "无法找到实例"
+
+#: cinder/api/openstack/compute/servers.py:1074
+msgid "Cannot find image for rebuild"
+msgstr "无法找到用来重新创建的镜像"
+
+#: cinder/api/openstack/compute/servers.py:1103
+msgid "createImage entity requires name attribute"
+msgstr "实体createImage需要属性name"
+
+#: cinder/api/openstack/compute/servers.py:1112
+#: cinder/api/openstack/compute/contrib/admin_actions.py:238
+msgid "Invalid metadata"
+msgstr "无效的元数据"
+
+#: cinder/api/openstack/compute/servers.py:1167
+#, python-format
+msgid "Removing options '%(unk_opt_str)s' from query"
+msgstr "正在从查询语句中移除选项 '%(unk_opt_str)s'"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:60
+#, python-format
+msgid "Compute.api::pause %s"
+msgstr "Compute.api::暂停 %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:77
+#, python-format
+msgid "Compute.api::unpause %s"
+msgstr "Compute.api::取消暂停 %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:94
+#, python-format
+msgid "compute.api::suspend %s"
+msgstr "compute.api::挂起 %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:111
+#, python-format
+msgid "compute.api::resume %s"
+msgstr "compute.api::resume %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:127
+#, python-format
+msgid "Error in migrate %s"
+msgstr "迁移错误 %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:141
+#, python-format
+msgid "Compute.api::reset_network %s"
+msgstr "Compute.api::reset_network %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:154
+#: cinder/api/openstack/compute/contrib/admin_actions.py:170
+#: cinder/api/openstack/compute/contrib/admin_actions.py:186
+#: cinder/api/openstack/compute/contrib/multinic.py:41
+#: cinder/api/openstack/compute/contrib/rescue.py:44
+msgid "Server not found"
+msgstr "没有找到服务器"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:157
+#, python-format
+msgid "Compute.api::inject_network_info %s"
+msgstr "Compute.api::inject_network_info %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:173
+#, python-format
+msgid "Compute.api::lock %s"
+msgstr "compute.api::加锁 %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:189
+#, python-format
+msgid "Compute.api::unlock %s"
+msgstr "compute.api::解锁 %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:219
+#, python-format
+msgid "createBackup entity requires %s attribute"
+msgstr "实体createBackup需要有属性 %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:223
+msgid "Malformed createBackup entity"
+msgstr "错误格式的实体createBackup"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:229
+msgid "createBackup attribute 'rotation' must be an integer"
+msgstr "createBackup的属性 'rotation'必须是整数"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:244
+#: cinder/api/openstack/compute/contrib/console_output.py:47
+#: cinder/api/openstack/compute/contrib/console_output.py:59
+#: cinder/api/openstack/compute/contrib/consoles.py:49
+#: cinder/api/openstack/compute/contrib/consoles.py:60
+#: cinder/api/openstack/compute/contrib/server_action_list.py:49
+#: cinder/api/openstack/compute/contrib/server_diagnostics.py:47
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:38
+msgid "Instance not found"
+msgstr "没有找到实例"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:272
+msgid "host and block_migration must be specified."
+msgstr "host与block_migration必须确定"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:284
+#, python-format
+msgid "Live migration of instance %(id)s to host %(host)s failed"
+msgstr "实例 %(id)s 到主机 %(host)s 的动态迁移失败"
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:76
+#, fuzzy, python-format
+msgid ""
+"Cannot create aggregate with name %(name)s and availability zone "
+"%(avail_zone)s"
+msgstr "无法创建名称为 %(name)s 规格为 %(extra_specs)s 的卷类型。"
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:88
+#, python-format
+msgid "Cannot show aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:114
+#, fuzzy, python-format
+msgid "Cannot update aggregate: %(id)s"
+msgstr "更新代理失败:%(resp)r"
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:126
+#, python-format
+msgid "Cannot delete aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:139
+#, python-format
+msgid "Aggregates does not have %s action"
+msgstr "聚合没有动作 %s"
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:152
+#: cinder/api/openstack/compute/contrib/aggregates.py:158
+#, python-format
+msgid "Cannot add host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:171
+#: cinder/api/openstack/compute/contrib/aggregates.py:175
+#, python-format
+msgid "Cannot remove host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:195
+#, python-format
+msgid "Cannot set metadata %(metadata)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/certificates.py:75
+msgid "Only root certificate can be retrieved."
+msgstr "只有根证书能被获取。"
+
+#: cinder/api/openstack/compute/contrib/cloudpipe.py:146
+msgid ""
+"Unable to claim IP for VPN instances, ensure it isn't running, and try "
+"again in a few minutes"
+msgstr "无法为VPN实例申请IP,确保实例没有运行,过一会儿再试。"
+
+#: cinder/api/openstack/compute/contrib/consoles.py:44
+msgid "Missing type specification"
+msgstr "缺少类型规范"
+
+#: cinder/api/openstack/compute/contrib/consoles.py:56
+msgid "Invalid type specification"
+msgstr "无效的类型规范"
+
+#: cinder/api/openstack/compute/contrib/disk_config.py:44
+#, python-format
+msgid "%s must be either 'MANUAL' or 'AUTO'."
+msgstr "%s 必须是'MANUAL' 或者 'AUTO'。"
+
+#: cinder/api/openstack/compute/contrib/extended_server_attributes.py:77
+#: cinder/api/openstack/compute/contrib/extended_status.py:61
+msgid "Server not found."
+msgstr "没有找到服务器。"
+
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:61
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:91
+#, fuzzy
+msgid "Flavor not found."
+msgstr "没有找到服务器。"
+
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:49
+#: cinder/api/openstack/compute/contrib/volumetypes.py:158
+msgid "No Request Body"
+msgstr "没有请求主体"
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:159
+#, python-format
+msgid "No more floating ips in pool %s."
+msgstr "池 %s 中已经没有浮动ip。"
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:161
+msgid "No more floating ips available."
+msgstr "没有更多的浮动ip。"
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:201
+#: cinder/api/openstack/compute/contrib/floating_ips.py:230
+#: cinder/api/openstack/compute/contrib/security_groups.py:571
+#: cinder/api/openstack/compute/contrib/security_groups.py:604
+msgid "Missing parameter dict"
+msgstr "缺少参数 dict"
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:204
+#: cinder/api/openstack/compute/contrib/floating_ips.py:233
+msgid "Address not specified"
+msgstr "地址没有指定"
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:213
+msgid "No fixed ips associated to instance"
+msgstr "没有固定ip与实例关联"
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:216
+msgid "Associate floating ip failed"
+msgstr "关联浮动ip失败"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:144
+#, python-format
+msgid "Invalid status: '%s'"
+msgstr "无效的状态:'%s'"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:148
+#, fuzzy, python-format
+msgid "Invalid mode: '%s'"
+msgstr "无效的状态:'%s'"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:152
+#, python-format
+msgid "Invalid update setting: '%s'"
+msgstr "无效的更新设置:'%s'"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:170
+#, fuzzy, python-format
+msgid "Putting host %(host)s in maintenance mode %(mode)s."
+msgstr "把主机 %(host)s 设置为 %(state)s。"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:181
+#, python-format
+msgid "Setting host %(host)s to %(state)s."
+msgstr "把主机 %(host)s 设置为 %(state)s。"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:230
+msgid "Describe-resource is admin only functionality"
+msgstr "Describe-resource是只有管理员才能执行的功能。"
+
+#: cinder/api/openstack/compute/contrib/hosts.py:238
+msgid "Host not found"
+msgstr "没有找到主机"
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:70
+msgid "Keypair name contains unsafe characters"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:95
+msgid "Keypair name must be between 1 and 255 characters long"
+msgstr "密钥对名称长度必须在1到255个字符之间"
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:100
+#, python-format
+msgid "Key pair '%s' already exists."
+msgstr "密钥对 '%s' 已经存在。"
+
+#: cinder/api/openstack/compute/contrib/multinic.py:52
+msgid "Missing 'networkId' argument for addFixedIp"
+msgstr "addFixedIp缺少参数'networkId'"
+
+#: cinder/api/openstack/compute/contrib/multinic.py:68
+msgid "Missing 'address' argument for removeFixedIp"
+msgstr "removeFixedIp缺少参数'address'"
+
+#: cinder/api/openstack/compute/contrib/multinic.py:77
+#, python-format
+msgid "Unable to find address %r"
+msgstr "无法找到地址 %r"
+
+#: cinder/api/openstack/compute/contrib/networks.py:62
+#, python-format
+msgid "Network does not have %s action"
+msgstr "网络不包含动作 %s"
+
+#: cinder/api/openstack/compute/contrib/networks.py:70
+#, python-format
+msgid "Disassociating network with id %s"
+msgstr "为id是 %s 的网络解除关联"
+
+#: cinder/api/openstack/compute/contrib/networks.py:74
+#: cinder/api/openstack/compute/contrib/networks.py:91
+#: cinder/api/openstack/compute/contrib/networks.py:101
+msgid "Network not found"
+msgstr "没有找到网络"
+
+#: cinder/api/openstack/compute/contrib/networks.py:87
+#, python-format
+msgid "Showing network with id %s"
+msgstr "显示id是 %s 的网络"
+
+#: cinder/api/openstack/compute/contrib/networks.py:97
+#, python-format
+msgid "Deleting network with id %s"
+msgstr "正在删除id是 %s 的网络"
+
+#: cinder/api/openstack/compute/contrib/scheduler_hints.py:41
+msgid "Malformed scheduler_hints attribute"
+msgstr "错误格式的 scheduler_hints 属性"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:222
+msgid "Security group id should be integer"
+msgstr "安全组id应该是整数"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:243
+#, fuzzy
+msgid "Security group is still in use"
+msgstr "安全组id应该是整数"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:295
+#, python-format
+msgid "Security group %s already exists"
+msgstr "安全组 %s 已经存在"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:315
+#, python-format
+msgid "Security group %s is not a string or unicode"
+msgstr "安全组 %s 既不是字符串也不是unicode"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:318
+#, python-format
+msgid "Security group %s cannot be empty."
+msgstr "安全组 %s 不能为空。"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:321
+#, python-format
+msgid "Security group %s should not be greater than 255 characters."
+msgstr "安全组 %s 不能比255个字符更长。"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:348
+msgid "Parent group id is not integer"
+msgstr "父组id不是整数"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:351
+#, python-format
+msgid "Security group (%s) not found"
+msgstr "没有找到安全组 (%s)"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:369
+msgid "Not enough parameters to build a valid rule."
+msgstr "参数不够创建有效规则。"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:376
+#, python-format
+msgid "This rule already exists in group %s"
+msgstr "这条规则已经存在于组%s 中"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:414
+msgid "Parent or group id is not integer"
+msgstr "父组id或者组id不是整数"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:507
+msgid "Rule id is not integer"
+msgstr "规则id不是整数"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:510
+#, python-format
+msgid "Rule (%s) not found"
+msgstr "没有找到规则 (%s)"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:574
+#: cinder/api/openstack/compute/contrib/security_groups.py:607
+msgid "Security group not specified"
+msgstr "没有指定安全组"
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:578
+#: cinder/api/openstack/compute/contrib/security_groups.py:611
+msgid "Security group name cannot be empty"
+msgstr "安全组名称不能是空"
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:45
+#, python-format
+msgid "start instance %r"
+msgstr "启动实例 %r"
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:54
+#, python-format
+msgid "stop instance %r"
+msgstr "停止实例 %r"
+
+#: cinder/api/openstack/compute/contrib/volumes.py:73
+#: cinder/api/openstack/volume/volumes.py:106
+#, python-format
+msgid "vol=%s"
+msgstr "vol=%s"
+
+#: cinder/api/openstack/compute/contrib/volumes.py:146
+#: cinder/api/openstack/volume/volumes.py:184
+#, python-format
+msgid "Delete volume with id: %s"
+msgstr "删除id为 %s 的卷"
+
+#: cinder/api/openstack/compute/contrib/volumes.py:329
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(server_id)s at %(device)s"
+msgstr "把卷 %(volume_id)s 附加到实例 %(server_id)s 的 %(device)s 设备上"
+
+#: cinder/api/openstack/compute/contrib/volumes.py:481
+#: cinder/api/openstack/volume/snapshots.py:110
+#, python-format
+msgid "Delete snapshot with id: %s"
+msgstr "删除id为 %s 的快照"
+
+#: cinder/api/openstack/compute/contrib/volumes.py:524
+#: cinder/api/openstack/volume/snapshots.py:150
+#, python-format
+msgid "Create snapshot from volume %s"
+msgstr "为卷 %s 创建快照"
+
+#: cinder/auth/fakeldap.py:33
+msgid "Attempted to instantiate singleton"
+msgstr "试图实例化单例"
+
+#: cinder/auth/ldapdriver.py:650
+#, python-format
+msgid ""
+"Attempted to remove the last member of a group. Deleting the group at %s "
+"instead."
+msgstr "尝试删除组中最后一个成员,用删除组 %s 来代替。"
+
+#: cinder/auth/manager.py:298
+#, python-format
+msgid "Looking up user: %r"
+msgstr "查找用户:%r"
+
+#: cinder/auth/manager.py:302
+#, python-format
+msgid "Failed authorization for access key %s"
+msgstr "访问密钥 %s 授权失败"
+
+#: cinder/auth/manager.py:308
+#, python-format
+msgid "Using project name = user name (%s)"
+msgstr "使用用户名称来作为项目名称 (%s)"
+
+#: cinder/auth/manager.py:315
+#, python-format
+msgid "failed authorization: no project named %(pjid)s (user=%(uname)s)"
+msgstr "授权失败:没有此项目名称 %(pjid)s (user=%(uname)s)"
+
+#: cinder/auth/manager.py:324
+#, python-format
+msgid ""
+"Failed authorization: user %(uname)s not admin and not member of project "
+"%(pjname)s"
+msgstr "授权失败:用户 %(uname)s 不是管理员,也不是项目 %(pjname)s 的成员"
+
+#: cinder/auth/manager.py:331 cinder/auth/manager.py:343
+#, python-format
+msgid "user.secret: %s"
+msgstr "user.secret: %s"
+
+#: cinder/auth/manager.py:332 cinder/auth/manager.py:344
+#, python-format
+msgid "expected_signature: %s"
+msgstr "expected_signature: %s"
+
+#: cinder/auth/manager.py:333 cinder/auth/manager.py:345
+#, python-format
+msgid "signature: %s"
+msgstr "签名: %s"
+
+#: cinder/auth/manager.py:335 cinder/auth/manager.py:357
+#, python-format
+msgid "Invalid signature for user %s"
+msgstr "用户 %s 的签名无效"
+
+#: cinder/auth/manager.py:353
+#, python-format
+msgid "host_only_signature: %s"
+msgstr "host_only_signature: %s"
+
+#: cinder/auth/manager.py:449
+msgid "Must specify project"
+msgstr "必须指定项目"
+
+#: cinder/auth/manager.py:490
+#, python-format
+msgid "Adding role %(role)s to user %(uid)s in project %(pid)s"
+msgstr "为用户 %(uid)s 添加角色 %(role)s 用户位置在%(pid)s 项目里"
+
+#: cinder/auth/manager.py:493
+#, python-format
+msgid "Adding sitewide role %(role)s to user %(uid)s"
+msgstr "添加全局角色 %(role)s 给用户 %(uid)s"
+
+#: cinder/auth/manager.py:519
+#, python-format
+msgid "Removing role %(role)s from user %(uid)s on project %(pid)s"
+msgstr "移除用户 %(uid)s 的角色 %(role)s 用户位置是在项目 %(pid)s 里"
+
+#: cinder/auth/manager.py:522
+#, python-format
+msgid "Removing sitewide role %(role)s from user %(uid)s"
+msgstr "移除全局角色 %(role)s 对象是用户 %(uid)s"
+
+#: cinder/auth/manager.py:595
+#, python-format
+msgid "Created project %(name)s with manager %(manager_user)s"
+msgstr "创建项目 %(name)s 通过管理员 %(manager_user)s"
+
+#: cinder/auth/manager.py:613
+#, python-format
+msgid "modifying project %s"
+msgstr "正在修改项目 %s"
+
+#: cinder/auth/manager.py:625
+#, python-format
+msgid "Adding user %(uid)s to project %(pid)s"
+msgstr "添加用户 %(uid)s 到项目%(pid)s"
+
+#: cinder/auth/manager.py:646
+#, python-format
+msgid "Remove user %(uid)s from project %(pid)s"
+msgstr "移除用户 %(uid)s 于项目 %(pid)s 中"
+
+#: cinder/auth/manager.py:676
+#, python-format
+msgid "Deleting project %s"
+msgstr "删除项目 %s"
+
+#: cinder/auth/manager.py:734
+#, python-format
+msgid "Created user %(rvname)s (admin: %(rvadmin)r)"
+msgstr "已创建用户 %(rvname)s (admin: %(rvadmin)r)"
+
+#: cinder/auth/manager.py:743
+#, python-format
+msgid "Deleting user %s"
+msgstr "删除用户 %s"
+
+#: cinder/auth/manager.py:753
+#, python-format
+msgid "Access Key change for user %s"
+msgstr "修改用户 %s 的访问密钥"
+
+#: cinder/auth/manager.py:755
+#, python-format
+msgid "Secret Key change for user %s"
+msgstr "修改用户 %s 的私钥"
+
+#: cinder/auth/manager.py:757
+#, python-format
+msgid "Admin status set to %(admin)r for user %(uid)s"
+msgstr "将管理员状态设置为 %(admin)r 目的是针对用户 %(uid)s"
+
+#: cinder/auth/manager.py:802
+#, python-format
+msgid "No vpn data for project %s"
+msgstr "没有 %s 项目的vpn数据"
+
+#: cinder/cloudpipe/pipelib.py:46
+#, fuzzy, python-format
+msgid "Instance type for vpn instances"
+msgstr "无效的实例类型 %(instance_type)s。"
+
+#: cinder/cloudpipe/pipelib.py:49
+msgid "Template for cloudpipe instance boot script"
+msgstr "cloudpipe实例的启动脚本模板"
+
+#: cinder/cloudpipe/pipelib.py:52
+msgid "Network to push into openvpn config"
+msgstr "网络地址已存入openvpn配置"
+
+#: cinder/cloudpipe/pipelib.py:55
+msgid "Netmask to push into openvpn config"
+msgstr "子网掩码已存入openvpn配置"
+
+#: cinder/cloudpipe/pipelib.py:107
+#, python-format
+msgid "Launching VPN for %s"
+msgstr "启动VPN %s"
+
+#: cinder/compute/api.py:141
+msgid "No compute host specified"
+msgstr "未指定计算宿主机"
+
+#: cinder/compute/api.py:144
+#, python-format
+msgid "Unable to find host for Instance %s"
+msgstr "无法找到实例 %s 的宿主机"
+
+#: cinder/compute/api.py:192
+#, python-format
+msgid ""
+"Quota exceeded for %(pid)s, tried to set %(num_metadata)s metadata "
+"properties"
+msgstr "%(pid)s 已经超过配额,试图设置 %(num_metadata)s 个元数据属性"
+
+#: cinder/compute/api.py:203
+#, python-format
+msgid "Quota exceeded for %(pid)s, metadata property key or value too long"
+msgstr "%(pid)s 已经超过配额,元数据属性键或值太长"
+
+#: cinder/compute/api.py:257
+#, fuzzy
+msgid "Cannot run any more instances of this type."
+msgstr "超过实例的配额。您无法运行更多此类型的实例。"
+
+#: cinder/compute/api.py:259
+#, fuzzy, python-format
+msgid "Can only run %s more instances of this type."
+msgstr "超过实例的配额。您只能再运行 %s 个此类型的实例。"
+
+#: cinder/compute/api.py:261
+#, fuzzy, python-format
+msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances. "
+msgstr "%(pid)s 已经超过配额,试图运行 %(min_count)s 个实例"
+
+#: cinder/compute/api.py:310
+msgid "Creating a raw instance"
+msgstr "正在创建裸实例"
+
+#: cinder/compute/api.py:312
+#, python-format
+msgid "Using Kernel=%(kernel_id)s, Ramdisk=%(ramdisk_id)s"
+msgstr "使用 Kernel=%(kernel_id)s, Ramdisk=%(ramdisk_id)s"
+
+#: cinder/compute/api.py:383
+#, python-format
+msgid "Going to run %s instances..."
+msgstr "准备运行 %s 个实例"
+
+#: cinder/compute/api.py:447
+#, python-format
+msgid "bdm %s"
+msgstr "bdm %s"
+
+#: cinder/compute/api.py:474
+#, python-format
+msgid "block_device_mapping %s"
+msgstr "block_device_mapping %s"
+
+#: cinder/compute/api.py:591
+#, python-format
+msgid "Sending create to scheduler for %(pid)s/%(uid)s's"
+msgstr "为 %(pid)s/%(uid)s 向调度器发送创建命令"
+
+#: cinder/compute/api.py:871
+#, fuzzy, python-format
+msgid "Going to try to soft delete instance"
+msgstr "准备尝试软删除实例 %s"
+
+#: cinder/compute/api.py:891
+#, fuzzy, python-format
+msgid "No host for instance, deleting immediately"
+msgstr "没有托管实例 %s,立刻删除"
+
+#: cinder/compute/api.py:939
+#, fuzzy, python-format
+msgid "Going to try to terminate instance"
+msgstr "准备尝试终止实例 %s"
+
+#: cinder/compute/api.py:977
+#, fuzzy, python-format
+msgid "Going to try to stop instance"
+msgstr "准备尝试停止实例 %s"
+
+#: cinder/compute/api.py:996
+#, fuzzy, python-format
+msgid "Going to try to start instance"
+msgstr "准备尝试启动实例 %s"
+
+#: cinder/compute/api.py:1000
+#, python-format
+msgid "Instance %(instance_uuid)s is not stopped. (%(vm_state)s"
+msgstr "实例 %(instance_uuid)s 没有停止。(%(vm_state)s"
+
+#: cinder/compute/api.py:1071 cinder/volume/api.py:173
+#: cinder/volume/volume_types.py:64
+#, python-format
+msgid "Searching by: %s"
+msgstr "搜索条件: %s"
+
+#: cinder/compute/api.py:1201
+#, python-format
+msgid "Image type not recognized %s"
+msgstr "无法识别镜像类型 %s"
+
+#: cinder/compute/api.py:1369
+msgid "flavor_id is None. Assuming migration."
+msgstr "flavor_id为空。假定在迁移。"
+
+#: cinder/compute/api.py:1377
+#, python-format
+msgid ""
+"Old instance type %(current_instance_type_name)s,  new instance type "
+"%(new_instance_type_name)s"
+msgstr "旧的实例类型 %(current_instance_type_name)s,新的实例类型 %(new_instance_type_name)s"
+
+#: cinder/compute/api.py:1644
+#, python-format
+msgid "multiple fixedips exist, using the first: %s"
+msgstr "存在多个固定IP,使用第一个:%s"
+
+#: cinder/compute/instance_types.py:57 cinder/compute/instance_types.py:65
+msgid "create arguments must be positive integers"
+msgstr "创建参数必须是正整数"
+
+#: cinder/compute/instance_types.py:76 cinder/volume/volume_types.py:41
+#, python-format
+msgid "DB error: %s"
+msgstr "数据库错误:%s"
+
+#: cinder/compute/instance_types.py:86
+#, python-format
+msgid "Instance type %s not found for deletion"
+msgstr "未找到要删除的实例类型 %s"
+
+#: cinder/compute/manager.py:138
+#, python-format
+msgid "check_instance_lock: decorating: |%s|"
+msgstr "check_instance_lock: decorating: |%s|"
+
+#: cinder/compute/manager.py:140
+#, python-format
+msgid ""
+"check_instance_lock: arguments: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+msgstr ""
+"check_instance_lock: arguments: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+
+#: cinder/compute/manager.py:144
+#, python-format
+msgid "check_instance_lock: locked: |%s|"
+msgstr "check_instance_lock: 锁定: |%s|"
+
+#: cinder/compute/manager.py:146
+#, python-format
+msgid "check_instance_lock: admin: |%s|"
+msgstr "check_instance_lock: admin: |%s|"
+
+#: cinder/compute/manager.py:151
+#, python-format
+msgid "check_instance_lock: executing: |%s|"
+msgstr "check_instance_lock: 执行中: |%s|"
+
+#: cinder/compute/manager.py:155
+#, python-format
+msgid "check_instance_lock: not executing |%s|"
+msgstr "check_instance_lock:  未执行 |%s|"
+
+#: cinder/compute/manager.py:201
+#, python-format
+msgid "Unable to load the virtualization driver: %s"
+msgstr "无法加载虚拟驱动:%s"
+
+#: cinder/compute/manager.py:223
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s has been destroyed from under us while trying "
+"to set it to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:240
+#, python-format
+msgid "Current state is %(drv_state)s, state in DB is %(db_state)s."
+msgstr "当前状态是 %(drv_state)s,数据库状态是 %(db_state)s。"
+
+#: cinder/compute/manager.py:245
+msgid "Rebooting instance after cinder-compute restart."
+msgstr "cinder-compute重启后,实例正在重启。"
+
+#: cinder/compute/manager.py:255
+msgid "Hypervisor driver does not support firewall rules"
+msgstr "虚拟机管理程序驱动不支持防火墙规则"
+
+#: cinder/compute/manager.py:260
+msgid "Checking state"
+msgstr "正在检查状态"
+
+#: cinder/compute/manager.py:329
+#, python-format
+msgid "Setting up bdm %s"
+msgstr "正在设置 bdm %s"
+
+#: cinder/compute/manager.py:400
+#, python-format
+msgid "Instance %s already deleted from database. Attempting forceful vm deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:406
+#, fuzzy, python-format
+msgid "Exception encountered while terminating the instance %s"
+msgstr "终止实例 %(instance_uuid)s 时发生异常"
+
+#: cinder/compute/manager.py:444
+#, python-format
+msgid "Instance %s not found."
+msgstr "未找到实例 %s"
+
+#: cinder/compute/manager.py:480
+msgid "Instance has already been created"
+msgstr "实例已经创建"
+
+#: cinder/compute/manager.py:523
+#, python-format
+msgid ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+
+#: cinder/compute/manager.py:528
+#, python-format
+msgid ""
+"Image '%(image_id)s' size %(size_bytes)d exceeded instance_type allowed "
+"size %(allowed_size_bytes)d"
+msgstr ""
+"镜像 '%(image_id)s'  的大小为 %(size_bytes)d ,超过实例类型 instance_type 所允许的大小 "
+"%(allowed_size_bytes)d"
+
+#: cinder/compute/manager.py:538
+msgid "Starting instance..."
+msgstr "正在启动虚拟机"
+
+#: cinder/compute/manager.py:548
+msgid "Skipping network allocation for instance"
+msgstr "实例跳过网络分配"
+
+#: cinder/compute/manager.py:561
+msgid "Instance failed network setup"
+msgstr "实例网络设置失败"
+
+#: cinder/compute/manager.py:565
+#, python-format
+msgid "Instance network_info: |%s|"
+msgstr "实例的network_info:|%s|"
+
+#: cinder/compute/manager.py:578
+msgid "Instance failed block device setup"
+msgstr "实例块设备设置失败"
+
+#: cinder/compute/manager.py:594
+msgid "Instance failed to spawn"
+msgstr "实例生产失败"
+
+#: cinder/compute/manager.py:615
+msgid "Deallocating network for instance"
+msgstr "释放实例的网络"
+
+#: cinder/compute/manager.py:672
+#, python-format
+msgid "%(action_str)s instance"
+msgstr "%(action_str)s 实例"
+
+#: cinder/compute/manager.py:699
+#, python-format
+msgid "Ignoring DiskNotFound: %s"
+msgstr "忽略异常 DiskNotFound: %s"
+
+#: cinder/compute/manager.py:708
+#, python-format
+msgid "terminating bdm %s"
+msgstr "终止bdm %s"
+
+#: cinder/compute/manager.py:742 cinder/compute/manager.py:1328
+#: cinder/compute/manager.py:1416 cinder/compute/manager.py:2501
+#, python-format
+msgid "%s. Setting instance vm_state to ERROR"
+msgstr "%s。把实例的 vm_state设置为ERROR"
+
+#: cinder/compute/manager.py:811
+#, python-format
+msgid ""
+"Cannot rebuild instance [%(instance_uuid)s], because the given image does"
+" not exist."
+msgstr "无法重建实例 [%(instance_uuid)s],因为给定的镜像不存在。"
+
+#: cinder/compute/manager.py:816
+#, python-format
+msgid "Cannot rebuild instance [%(instance_uuid)s]: %(exc)s"
+msgstr "无法重新创建实例 [%(instance_uuid)s]: %(exc)s"
+
+#: cinder/compute/manager.py:823
+#, python-format
+msgid "Rebuilding instance %s"
+msgstr "正在重新创建实例 %s"
+
+#: cinder/compute/manager.py:876
+#, python-format
+msgid "Rebooting instance %s"
+msgstr "正在重启虚拟机 %s"
+
+#: cinder/compute/manager.py:891
+#, python-format
+msgid ""
+"trying to reboot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr "试图重启一个没有运行的实例:%(instance_uuid)s (状态:%(state)s 预计:%(running)s)"
+
+#: cinder/compute/manager.py:933
+#, python-format
+msgid "instance %s: snapshotting"
+msgstr "实例 %s: 快照中"
+
+#: cinder/compute/manager.py:939
+#, python-format
+msgid ""
+"trying to snapshot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr "试图为一个没有运行的实例快照:%(instance_uuid)s (状态:%(state)s 预计:%(running)s)"
+
+#: cinder/compute/manager.py:995
+#, python-format
+msgid "Found %(num_images)d images (rotation: %(rotation)d)"
+msgstr "找到 %(num_images)d 个镜像 (rotation: %(rotation)d)"
+
+#: cinder/compute/manager.py:1001
+#, python-format
+msgid "Rotating out %d backups"
+msgstr "轮换出%d个备份"
+
+#: cinder/compute/manager.py:1005
+#, python-format
+msgid "Deleting image %s"
+msgstr "正在删除镜像 %s"
+
+#: cinder/compute/manager.py:1035
+#, python-format
+msgid "Failed to set admin password. Instance %s is not running"
+msgstr "设置管理员密码失败。实例 %s 没有运行"
+
+#: cinder/compute/manager.py:1041
+#, python-format
+msgid "Instance %s: Root password set"
+msgstr "实例 %s:Root密码已设置"
+
+#: cinder/compute/manager.py:1050
+msgid "set_admin_password is not implemented by this driver."
+msgstr "该驱动不能执行set_admin_password。"
+
+#: cinder/compute/manager.py:1064
+msgid "Error setting admin password"
+msgstr "设置管理员密码出错"
+
+#: cinder/compute/manager.py:1079
+#, python-format
+msgid ""
+"trying to inject a file into a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+"试图把一个文件注入到没有运行的实例:%(instance_uuid)s (状态: %(current_power_state)s 预计: "
+"%(expected_state)s)"
+
+#: cinder/compute/manager.py:1084
+#, python-format
+msgid "instance %(instance_uuid)s: injecting file to %(path)s"
+msgstr "实例 %(instance_uuid)s:把文件注入 %(path)s"
+
+#: cinder/compute/manager.py:1098
+#, python-format
+msgid ""
+"trying to update agent on a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+"试图更新没有运行的实例上的代理:%(instance_uuid)s (状态: %(current_power_state)s 预计: "
+"%(expected_state)s)"
+
+#: cinder/compute/manager.py:1103
+#, python-format
+msgid "instance %(instance_uuid)s: updating agent to %(url)s"
+msgstr "实例 %(instance_uuid)s:正在把代理更新到 %(url)s"
+
+#: cinder/compute/manager.py:1116
+#, python-format
+msgid "instance %s: rescuing"
+msgstr "实例 %s:正在救援中"
+
+#: cinder/compute/manager.py:1141
+#, python-format
+msgid "instance %s: unrescuing"
+msgstr "实例 %s:取消救援"
+
+#: cinder/compute/manager.py:1270
+msgid "destination same as source!"
+msgstr "目标与来源一样。"
+
+#: cinder/compute/manager.py:1287
+#, python-format
+msgid "instance %s: migrating"
+msgstr "实例 %s:正在迁移"
+
+#: cinder/compute/manager.py:1471
+#, python-format
+msgid "instance %s: pausing"
+msgstr "实例 %s: 暂停"
+
+#: cinder/compute/manager.py:1489
+#, python-format
+msgid "instance %s: unpausing"
+msgstr "实例 %s: 取消暫停"
+
+#: cinder/compute/manager.py:1525
+#, python-format
+msgid "instance %s: retrieving diagnostics"
+msgstr "实例 %s :获取诊断"
+
+#: cinder/compute/manager.py:1534
+#, python-format
+msgid "instance %s: suspending"
+msgstr "实例 %s:挂起"
+
+#: cinder/compute/manager.py:1556
+#, python-format
+msgid "instance %s: resuming"
+msgstr "实例 %s: 恢复中"
+
+#: cinder/compute/manager.py:1579
+#, python-format
+msgid "instance %s: locking"
+msgstr "实例%s:锁定中"
+
+#: cinder/compute/manager.py:1588
+#, python-format
+msgid "instance %s: unlocking"
+msgstr "实例%s:取消锁定"
+
+#: cinder/compute/manager.py:1596
+#, python-format
+msgid "instance %s: getting locked state"
+msgstr "实例%s:获取锁定的状态"
+
+#: cinder/compute/manager.py:1606
+#, python-format
+msgid "instance %s: reset network"
+msgstr "实例%s:重置网络"
+
+#: cinder/compute/manager.py:1614
+#, python-format
+msgid "instance %s: inject network info"
+msgstr "实例 %s:注入网络信息"
+
+#: cinder/compute/manager.py:1618
+#, python-format
+msgid "network_info to inject: |%s|"
+msgstr "将注入的network_info:|%s|"
+
+#: cinder/compute/manager.py:1655
+#, python-format
+msgid "instance %s: getting vnc console"
+msgstr "实例 %s:正在获得VNC控制台"
+
+#: cinder/compute/manager.py:1685
+#, python-format
+msgid "Booting with volume %(volume_id)s at %(mountpoint)s"
+msgstr "卷 %(volume_id)s 正在 %(mountpoint)s 上启动"
+
+#: cinder/compute/manager.py:1703
+#, fuzzy, python-format
+msgid ""
+"instance %(instance_uuid)s: attaching volume %(volume_id)s to "
+"%(mountpoint)s"
+msgstr "正在把卷 %(volume_id)s 附加到 %(mountpoint)s"
+
+#: cinder/compute/manager.py:1705
+#, python-format
+msgid "Attaching volume %(volume_id)s to %(mountpoint)s"
+msgstr "正在把卷 %(volume_id)s 附加到 %(mountpoint)s"
+
+#: cinder/compute/manager.py:1714
+#, fuzzy, python-format
+msgid "instance %(instance_uuid)s: attach failed %(mountpoint)s, removing"
+msgstr "%(mountpoint)s 附加失败,移除中"
+
+#: cinder/compute/manager.py:1724
+#, python-format
+msgid "Attach failed %(mountpoint)s, removing"
+msgstr "%(mountpoint)s 附加失败,移除中"
+
+#: cinder/compute/manager.py:1752
+#, python-format
+msgid "Detach volume %(volume_id)s from mountpoint %(mp)s"
+msgstr "卷 %(volume_id)s 从挂载点 %(mp)s 分离"
+
+#: cinder/compute/manager.py:1756
+#, python-format
+msgid "Detaching volume from unknown instance %s"
+msgstr "从未知实例%s中分离卷"
+
+#: cinder/compute/manager.py:1822
+#, python-format
+msgid ""
+"Creating tmpfile %s to notify to other compute nodes that they should "
+"mount the same storage."
+msgstr "创建tmpfile %s 来通知其他的计算节点需要挂载相同的存储。"
+
+#: cinder/compute/manager.py:1884
+msgid "Instance has no volume."
+msgstr "实例没有卷。"
+
+#: cinder/compute/manager.py:1916
+#, python-format
+msgid "plug_vifs() failed %(cnt)d.Retry up to %(max_retry)d for %(hostname)s."
+msgstr "plug_vifs() 失败%(cnt)d 次。最多重新尝试 %(max_retry)d 次在主机 %(hostname)s。"
+
+#: cinder/compute/manager.py:1973
+#, python-format
+msgid "Pre live migration failed at  %(dest)s"
+msgstr "预在线迁移在%(dest)s失败"
+
+#: cinder/compute/manager.py:2000
+msgid "post_live_migration() is started.."
+msgstr "post_live_migration()已经启动。"
+
+#: cinder/compute/manager.py:2030
+msgid "No floating_ip found"
+msgstr "没有找到floating_ip"
+
+#: cinder/compute/manager.py:2038
+msgid "No floating_ip found."
+msgstr "没有找到floating_ip"
+
+#: cinder/compute/manager.py:2040
+#, python-format
+msgid ""
+"Live migration: Unexpected error: cannot inherit floating ip.\n"
+"%(e)s"
+msgstr ""
+"在线迁移:意外的错误:无法继承浮动ip。\n"
+"%(e)s"
+
+#: cinder/compute/manager.py:2073
+#, python-format
+msgid "Migrating instance to %(dest)s finished successfully."
+msgstr "把实例迁移到 %(dest)s 成功完成。"
+
+#: cinder/compute/manager.py:2075
+msgid ""
+"You may see the error \"libvirt: QEMU error: Domain not found: no domain "
+"with matching name.\" This error can be safely ignored."
+msgstr ""
+"你会看到错误“libvirt: QEMU error: Domain not found: no domain with matching "
+"name。”这个错误可以放心的忽略。"
+
+#: cinder/compute/manager.py:2090
+msgid "Post operation of migraton started"
+msgstr "迁移后操作启动"
+
+#: cinder/compute/manager.py:2226
+#, python-format
+msgid "Updated the info_cache for instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:2255
+msgid "Updating bandwidth usage cache"
+msgstr "更新带宽使用缓存"
+
+#: cinder/compute/manager.py:2277
+msgid "Updating host status"
+msgstr "更新主机状态"
+
+#: cinder/compute/manager.py:2305
+#, python-format
+msgid ""
+"Found %(num_db_instances)s in the database and %(num_vm_instances)s on "
+"the hypervisor."
+msgstr "在数据库中找到 %(num_db_instances)s个实例,在虚拟机管理程序找到 %(num_vm_instances)s 个实例。"
+
+#: cinder/compute/manager.py:2331
+#, python-format
+msgid ""
+"During the sync_power process the instance %(uuid)s has moved from host "
+"%(src)s to host %(dst)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2344
+#, python-format
+msgid ""
+"Instance %s is in the process of migrating to this host. Wait next "
+"sync_power cycle before setting power state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2350
+#, fuzzy, python-format
+msgid ""
+"Instance found in database but not known by hypervisor. Setting power "
+"state to NOSTATE"
+msgstr "数据库中发现实例 %(name)s ,但是虚拟机管理程序不知道。设置加电状态为NOSTATE"
+
+#: cinder/compute/manager.py:2380
+msgid "FLAGS.reclaim_instance_interval <= 0, skipping..."
+msgstr "FLAGS.reclaim_instance_interval <= 0,跳过..."
+
+#: cinder/compute/manager.py:2392
+msgid "Reclaiming deleted instance"
+msgstr "回收删除的实例"
+
+#: cinder/compute/manager.py:2458
+#, fuzzy, python-format
+msgid ""
+"Detected instance with name label '%(name)s' which is marked as DELETED "
+"but still present on host."
+msgstr "检测标签名为 '%(name_label)s' 的实例,这些实例被标识为DELETED却仍然存在于主机上。"
+
+#: cinder/compute/manager.py:2465
+#, fuzzy, python-format
+msgid ""
+"Destroying instance with name label '%(name)s' which is marked as DELETED"
+" but still present on host."
+msgstr "销毁标签名为 '%(name_label)s' 的实例,这些实例被标识为DELETED却仍然存在于主机上。"
+
+#: cinder/compute/manager.py:2472
+#, python-format
+msgid "Unrecognized value '%(action)s' for FLAGS.running_deleted_instance_action"
+msgstr "无法识别的FLAGS.running_deleted_instance_action的取值 '%(action)s'"
+
+#: cinder/compute/manager.py:2542
+#, fuzzy, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: unrecoverable state during operation on "
+"%(host)s"
+msgstr "聚合 %(aggregate_id)s已经有主机 %(host)s。"
+
+#: cinder/compute/utils.py:142
+msgid "v4 subnets are required for legacy nw_info"
+msgstr "遗留的网络信息 nw_info 要求使用 IPv4 子网"
+
+#: cinder/console/manager.py:77 cinder/console/vmrc_manager.py:70
+msgid "Adding console"
+msgstr "正在添加控制台"
+
+#: cinder/console/manager.py:97
+#, python-format
+msgid "Tried to remove non-existant console %(console_id)s."
+msgstr "尝试删除不存在的控制台%(console_id)s。"
+
+#: cinder/console/vmrc_manager.py:122
+#, python-format
+msgid "Tried to remove non-existent console %(console_id)s."
+msgstr "尝试删除不存在的控制台%(console_id)s。"
+
+#: cinder/console/vmrc_manager.py:125
+#, python-format
+msgid "Removing console %(console_id)s."
+msgstr "删除控制台%(console_id)s。"
+
+#: cinder/console/xvp.py:98
+msgid "Rebuilding xvp conf"
+msgstr "重建xvp配置"
+
+#: cinder/console/xvp.py:116
+#, python-format
+msgid "Re-wrote %s"
+msgstr "重写%s"
+
+#: cinder/console/xvp.py:121
+msgid "Stopping xvp"
+msgstr "停止xvp"
+
+#: cinder/console/xvp.py:134
+msgid "Starting xvp"
+msgstr "正在启动xvp"
+
+#: cinder/console/xvp.py:141
+#, python-format
+msgid "Error starting xvp: %s"
+msgstr "启动xvp发生错误:%s"
+
+#: cinder/console/xvp.py:144
+msgid "Restarting xvp"
+msgstr "重启xvp"
+
+#: cinder/console/xvp.py:146
+msgid "xvp not running..."
+msgstr "xvp不在运行中"
+
+#: cinder/consoleauth/manager.py:63
+#, python-format
+msgid "Deleting Expired Token: (%s)"
+msgstr "删除过期令牌:(%s)"
+
+#: cinder/consoleauth/manager.py:75
+#, python-format
+msgid "Received Token: %(token)s, %(token_dict)s)"
+msgstr "接收到令牌:%(token)s, %(token_dict)s)"
+
+#: cinder/consoleauth/manager.py:79
+#, python-format
+msgid "Checking Token: %(token)s, %(token_valid)s)"
+msgstr "检查令牌:%(token)s, %(token_valid)s)"
+
+#: cinder/db/sqlalchemy/api.py:57
+msgid "Use of empty request context is deprecated"
+msgstr "使用空的请求上下文是不推荐的"
+
+#: cinder/db/sqlalchemy/api.py:198
+#, python-format
+msgid "Unrecognized read_deleted value '%s'"
+msgstr "无法识别的 read_deleted 取值”%s“"
+
+#: cinder/db/sqlalchemy/api.py:516 cinder/db/sqlalchemy/api.py:551
+#, python-format
+msgid "No ComputeNode for %(host)s"
+msgstr "主机 %(host)s 没有计算节点"
+
+#: cinder/db/sqlalchemy/api.py:4019 cinder/db/sqlalchemy/api.py:4045
+#, python-format
+msgid "No backend config with id %(sm_backend_id)s"
+msgstr "没有id为%(sm_backend_id)s的后台配置"
+
+#: cinder/db/sqlalchemy/api.py:4103
+#, python-format
+msgid "No sm_flavor called %(sm_flavor)s"
+msgstr "没有 sm_flavor 调用 %(sm_flavor)s"
+
+#: cinder/db/sqlalchemy/api.py:4147
+#, python-format
+msgid "No sm_volume with id %(volume_id)s"
+msgstr "没有id为 %(volume_id)s 的 sm_volume"
+
+#: cinder/db/sqlalchemy/migration.py:66
+msgid "python-migrate is not installed. Exiting."
+msgstr "没有安装 python-migrate。正退出。"
+
+#: cinder/db/sqlalchemy/migration.py:78
+msgid "version should be an integer"
+msgstr "version应该是整数"
+
+#: cinder/db/sqlalchemy/session.py:137
+#, fuzzy, python-format
+msgid "SQL connection failed. %s attempts left."
+msgstr "SQL连接失败 (%(connstring)s)。还剩 %(attempts)d 次。"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:48
+msgid "interface column not added to networks table"
+msgstr "interface 列没有加入networks 表中"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:80
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:54
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:48
+#, python-format
+msgid "Table |%s| not created!"
+msgstr "表 |%s| 没有创建"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:87
+msgid "VIF column not added to fixed_ips table"
+msgstr "VIF 列没有加入到 fixed_ips 表中"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:97
+#, python-format
+msgid "join list for moving mac_addresses |%s|"
+msgstr "为移动 mac_addresses |%s| 加入列表"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:39
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:60
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:99
+msgid "foreign key constraint couldn't be added"
+msgstr "外键约束无法添加"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:58
+msgid "foreign key constraint couldn't be dropped"
+msgstr "外键约束无法删除"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py:34
+msgid "priority column not added to networks table"
+msgstr "priority列没有加入到 networks 表中"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:41
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:42
+#: cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py:56
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:68
+msgid "foreign key constraint couldn't be removed"
+msgstr "外键约束无法去除"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py:34
+msgid "progress column not added to instances table"
+msgstr "progress列没有加入到实例表中"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py:97
+#, python-format
+msgid ""
+"Could not cast flavorid to integer: %s. Set flavorid to an integer-like "
+"string to downgrade."
+msgstr "无法把 flavorid 转化为整数:%s。设置 flavorid 成类似整数的字符串来降级。"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:69
+msgid "instance_info_caches tables not dropped"
+msgstr "instance_info_caches 没有删除掉"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py:41
+msgid "progress column not added to compute_nodes table"
+msgstr "progress 列没有加入到 compute_nodes 表中"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:76
+msgid "dns_domains table not dropped"
+msgstr "dns_domains 表没有删除"
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:60
+#, fuzzy
+msgid "quota_classes table not dropped"
+msgstr "instance_info_caches 没有删除掉"
+
+#: cinder/image/glance.py:147
+msgid "Connection error contacting glance server, retrying"
+msgstr "glance服务器连接错误,重试中"
+
+#: cinder/image/glance.py:153 cinder/network/quantum/melange_connection.py:104
+msgid "Maximum attempts reached"
+msgstr "达到最大尝试次数"
+
+#: cinder/image/glance.py:278
+#, python-format
+msgid "Creating image in Glance. Metadata passed in %s"
+msgstr "正在Glance中创建镜像。元数据 %s 已经传入。"
+
+#: cinder/image/glance.py:281
+#, python-format
+msgid "Metadata after formatting for Glance %s"
+msgstr "为Glance 进行格式化后的元数据 %s"
+
+#: cinder/image/glance.py:289
+#, python-format
+msgid "Metadata returned from Glance formatted for Base %s"
+msgstr "从Glance返回的为Base格式化的元数据 %s"
+
+#: cinder/image/glance.py:331 cinder/image/glance.py:335
+msgid "Not the image owner"
+msgstr "不是镜像所有者"
+
+#: cinder/image/glance.py:410
+#, python-format
+msgid "%(timestamp)s does not follow any of the signatures: %(iso_formats)s"
+msgstr "%(timestamp)s 没有遵循任何签名格式:%(iso_formats)s"
+
+#: cinder/image/s3.py:309
+#, python-format
+msgid "Failed to download %(image_location)s to %(image_path)s"
+msgstr "把 %(image_location)s 下载到 %(image_path)s失败"
+
+#: cinder/image/s3.py:328
+#, python-format
+msgid "Failed to decrypt %(image_location)s to %(image_path)s"
+msgstr "解密 %(image_location)s 到 %(image_path)s失败"
+
+#: cinder/image/s3.py:340
+#, python-format
+msgid "Failed to untar %(image_location)s to %(image_path)s"
+msgstr "解包 %(image_location)s 到 %(image_path)s 失败"
+
+#: cinder/image/s3.py:353
+#, python-format
+msgid "Failed to upload %(image_location)s to %(image_path)s"
+msgstr "上传 %(image_location)s 到 %(image_path)s 失败"
+
+#: cinder/image/s3.py:379
+#, python-format
+msgid "Failed to decrypt private key: %s"
+msgstr "解密私钥失败:%s"
+
+#: cinder/image/s3.py:387
+#, python-format
+msgid "Failed to decrypt initialization vector: %s"
+msgstr "解密初始化vector失败:%s"
+
+#: cinder/image/s3.py:398
+#, python-format
+msgid "Failed to decrypt image file %(image_file)s: %(err)s"
+msgstr "解密镜像文件 %(image_file)s 失败:%(err)s"
+
+#: cinder/image/s3.py:410
+msgid "Unsafe filenames in image"
+msgstr "镜像中不安全的文件名"
+
+#: cinder/ipv6/account_identifier.py:38 cinder/ipv6/rfc2462.py:34
+#, python-format
+msgid "Bad mac for to_global_ipv6: %s"
+msgstr "错误的to_global_ipv6 mac:%s"
+
+#: cinder/ipv6/account_identifier.py:40 cinder/ipv6/rfc2462.py:36
+#, python-format
+msgid "Bad prefix for to_global_ipv6: %s"
+msgstr "错误的to_global_ipv6前缀:%s"
+
+#: cinder/ipv6/account_identifier.py:42
+#, python-format
+msgid "Bad project_id for to_global_ipv6: %s"
+msgstr "错误的to_global_ipv6 oject_id;%s"
+
+#: cinder/network/ldapdns.py:321
+msgid "This driver only supports type 'a' entries."
+msgstr "驱动仅支持入口类型 'a'。"
+
+#: cinder/network/linux_net.py:166
+#, python-format
+msgid "Attempted to remove chain %s which does not exist"
+msgstr "试图移除不存在的链 %s。"
+
+#: cinder/network/linux_net.py:192
+#, python-format
+msgid "Unknown chain: %r"
+msgstr "未知链:%r"
+
+#: cinder/network/linux_net.py:215
+#, python-format
+msgid ""
+"Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r "
+"%(top)r"
+msgstr "试图移除不存在的规则:%(chain)r %(rule)r %(wrap)r %(top)r"
+
+#: cinder/network/linux_net.py:335
+msgid "IPTablesManager.apply completed with success"
+msgstr "IPTablesManager.apply成功完成"
+
+#: cinder/network/linux_net.py:694
+#, python-format
+msgid "Hupping dnsmasq threw %s"
+msgstr "挂起进程 dnsmasq 时抛出 %s"
+
+#: cinder/network/linux_net.py:696
+#, python-format
+msgid "Pid %d is stale, relaunching dnsmasq"
+msgstr "Pid %d 过期了,重新启动dnsmasq"
+
+#: cinder/network/linux_net.py:756
+#, python-format
+msgid "killing radvd threw %s"
+msgstr "杀掉进程 radvd 时抛出 %s"
+
+#: cinder/network/linux_net.py:758
+#, python-format
+msgid "Pid %d is stale, relaunching radvd"
+msgstr "Pid %d 过期了,重新启动radvd"
+
+#: cinder/network/linux_net.py:967
+#, python-format
+msgid "Starting VLAN inteface %s"
+msgstr "正在开启VLAN接口 %s"
+
+#: cinder/network/linux_net.py:999
+#, python-format
+msgid "Starting Bridge interface for %s"
+msgstr "正在为 %s 开启桥接口"
+
+#: cinder/network/linux_net.py:1142
+#, fuzzy, python-format
+msgid "Starting bridge %s "
+msgstr "保证桥 %s"
+
+#: cinder/network/linux_net.py:1149
+#, fuzzy, python-format
+msgid "Done starting bridge %s"
+msgstr "保证桥 %s"
+
+#: cinder/network/linux_net.py:1167
+#, fuzzy, python-format
+msgid "Failed unplugging gateway interface '%s'"
+msgstr "移除实例”%s“的虚拟网络设备时失败"
+
+#: cinder/network/linux_net.py:1170
+#, python-format
+msgid "Unplugged gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/manager.py:291
+#, fuzzy, python-format
+msgid "Fixed ip %(fixed_ip_id)s not found"
+msgstr "证书 %(certificate_id)s 没有找到。"
+
+#: cinder/network/manager.py:300 cinder/network/manager.py:496
+#, python-format
+msgid "Interface %(interface)s not found"
+msgstr "没有找到接口 %(interface)s"
+
+#: cinder/network/manager.py:315
+#, python-format
+msgid "floating IP allocation for instance |%s|"
+msgstr "为实例 |%s| 分配浮动IP"
+
+#: cinder/network/manager.py:353
+#, python-format
+msgid "floating IP deallocation for instance |%s|"
+msgstr "为实例 |%s| 释放浮动IP"
+
+#: cinder/network/manager.py:386
+#, python-format
+msgid "Address |%(address)s| is not allocated"
+msgstr "地址 |%(address)s| 没有分配"
+
+#: cinder/network/manager.py:390
+#, python-format
+msgid "Address |%(address)s| is not allocated to your project |%(project)s|"
+msgstr "地址 |%(address)s| 没有分配给你的项目 |%(project)s|"
+
+#: cinder/network/manager.py:402
+#, python-format
+msgid "Quota exceeded for %s, tried to allocate address"
+msgstr "%s 的配额超出,尝试分配地址"
+
+#: cinder/network/manager.py:614
+#, python-format
+msgid ""
+"Database inconsistency: DNS domain |%s| is registered in the Cinder db but "
+"not visible to either the floating or instance DNS driver. It will be "
+"ignored."
+msgstr "数据库不一致:DNS域|%s| 在Cinder数据库中注册,但是对浮动或者实例DNS驱动均不可见。将被忽略。"
+
+#: cinder/network/manager.py:660
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing zone to |%(av_zone)s|."
+msgstr "域 |%(domain)s| 已经存在,把区域改变为 |%(av_zone)s|。"
+
+#: cinder/network/manager.py:670
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing project to |%(project)s|."
+msgstr "域 |%(domain)s| 已经存在,把项目改变为 |%(project)s|。"
+
+#: cinder/network/manager.py:778
+#, python-format
+msgid "Disassociated %s stale fixed ip(s)"
+msgstr "解除 %s 过期固定ip的关联"
+
+#: cinder/network/manager.py:782
+msgid "setting network host"
+msgstr "设置网络主机"
+
+#: cinder/network/manager.py:896
+#, python-format
+msgid "network allocations for instance |%s|"
+msgstr "为实例 |%s| 的网路分配"
+
+#: cinder/network/manager.py:901
+#, python-format
+msgid "networks retrieved for instance |%(instance_id)s|: |%(networks)s|"
+msgstr "为实例 |%(instance_id)s| 获取的网络:|%(networks)s|"
+
+#: cinder/network/manager.py:930
+#, python-format
+msgid "network deallocation for instance |%s|"
+msgstr "为实例 |%s| 解除网络分配"
+
+#: cinder/network/manager.py:1152
+#, python-format
+msgid ""
+"instance-dns-zone is |%(domain)s|, which is in availability zone "
+"|%(zone)s|. Instance |%(instance)s| is in zone |%(zone2)s|. No DNS record"
+" will be created."
+msgstr ""
+"instance-dns-zone是 |%(domain)s|,该域位于区域 |%(zone)s| 中。实例|%(instance)s| 在区域 "
+"|%(zone2)s| 里。没有DNS记录将创建。"
+
+#: cinder/network/manager.py:1227
+#, python-format
+msgid "Unable to release %s because vif doesn't exist."
+msgstr ""
+
+#: cinder/network/manager.py:1244
+#, python-format
+msgid "Leased IP |%(address)s|"
+msgstr "租用的IP |%(address)s|"
+
+#: cinder/network/manager.py:1248
+#, python-format
+msgid "IP %s leased that is not associated"
+msgstr "没有关联的IP %s 被租用了"
+
+#: cinder/network/manager.py:1256
+#, python-format
+msgid "IP |%s| leased that isn't allocated"
+msgstr "没有分配的IP |%s| 被租用了"
+
+#: cinder/network/manager.py:1261
+#, python-format
+msgid "Released IP |%(address)s|"
+msgstr "释放的IP |%(address)s|"
+
+#: cinder/network/manager.py:1265
+#, python-format
+msgid "IP %s released that is not associated"
+msgstr "没有关联的IP %s 被释放了"
+
+#: cinder/network/manager.py:1268
+#, python-format
+msgid "IP %s released that was not leased"
+msgstr "没有租用的IP %s 被释放了"
+
+#: cinder/network/manager.py:1331
+msgid "cidr already in use"
+msgstr "cidr 已经在使用"
+
+#: cinder/network/manager.py:1334
+#, python-format
+msgid "requested cidr (%(cidr)s) conflicts with existing supernet (%(super)s)"
+msgstr "请求的cidr (%(cidr)s) 与已存在的超网络 (%(super)s) 冲突"
+
+#: cinder/network/manager.py:1345
+#, python-format
+msgid ""
+"requested cidr (%(cidr)s) conflicts with existing smaller cidr "
+"(%(smaller)s)"
+msgstr "请求的cidr (%(cidr)s) 与已存在的较小的cidr (%(smaller)s) 冲突"
+
+#: cinder/network/manager.py:1404
+msgid "Network already exists!"
+msgstr "网络已经存在。"
+
+#: cinder/network/manager.py:1423
+#, python-format
+msgid "Network must be disassociated from project %s before delete"
+msgstr "网路在删除前必须与项目 %s 解除关联"
+
+#: cinder/network/manager.py:1832
+msgid ""
+"The sum between the number of networks and the vlan start cannot be "
+"greater than 4094"
+msgstr "网络数量与VLAN起始数之和不能大于4049"
+
+#: cinder/network/manager.py:1839
+#, python-format
+msgid ""
+"The network range is not big enough to fit %(num_networks)s. Network size"
+" is %(network_size)s"
+msgstr "网络范围不够多而不适合 %(num_networks)s。网络大小是 %(network_size)s。"
+
+#: cinder/network/minidns.py:65
+msgid "This driver only supports type 'a'"
+msgstr "驱动仅支持类型 'a'"
+
+#: cinder/network/quantum/client.py:154
+msgid "Tenant ID not set"
+msgstr "租户ID没有设"
+
+#: cinder/network/quantum/client.py:180
+#, python-format
+msgid "Quantum Client Request: %(method)s %(action)s"
+msgstr "Quantum客户请求:%(method)s %(action)s"
+
+#: cinder/network/quantum/client.py:196
+#, python-format
+msgid "Quantum entity not found: %s"
+msgstr "Quantum实体没有找到:%s"
+
+#: cinder/network/quantum/client.py:206
+#, python-format
+msgid "Server %(status_code)s error: %(data)s"
+msgstr "服务器 %(status_code)s 错误:%(data)s"
+
+#: cinder/network/quantum/client.py:210
+#, python-format
+msgid "Unable to connect to server. Got error: %s"
+msgstr "无法连接到服务器。出现错误:%s"
+
+#: cinder/network/quantum/client.py:228
+#, python-format
+msgid "unable to deserialize object of type = '%s'"
+msgstr "无法反序列化type = '%s' 的对象"
+
+#: cinder/network/quantum/manager.py:162
+msgid "QuantumManager does not use 'multi_host' parameter."
+msgstr "QuantumManager 没有使用 'multi_host' 参数。"
+
+#: cinder/network/quantum/manager.py:166
+msgid "QuantumManager requires that only one network is created per call"
+msgstr "QuantumManager 要求每次调用仅创建一个网落。"
+
+#: cinder/network/quantum/manager.py:176
+msgid "QuantumManager does not use 'vlan_start' parameter."
+msgstr "QuantumManager 没有使用 'vlan_start' 参数。"
+
+#: cinder/network/quantum/manager.py:182
+msgid "QuantumManager does not use 'vpn_start' parameter."
+msgstr "QuantumManager 没有使用 'vpn_start' 参数。"
+
+#: cinder/network/quantum/manager.py:186
+msgid "QuantumManager does not use 'bridge' parameter."
+msgstr "QuantumManager 没有使用 'bridge' 参数。"
+
+#: cinder/network/quantum/manager.py:190
+msgid "QuantumManager does not use 'bridge_interface' parameter."
+msgstr "QuantumManager 没有使用 'bridge_interface' 参数。"
+
+#: cinder/network/quantum/manager.py:195
+msgid "QuantumManager requires a valid (.1) gateway address."
+msgstr "QuantumManager 要求一个有效的 (.1) 网关地址。"
+
+#: cinder/network/quantum/manager.py:204
+#, python-format
+msgid ""
+"Unable to find existing quantum network for tenant '%(q_tenant_id)s' with"
+" net-id '%(quantum_net_id)s'"
+msgstr "无法为租户 '%(q_tenant_id)s' 找到已存在的 net-id是 '%(quantum_net_id)s' 的quantum网络"
+
+#: cinder/network/quantum/manager.py:301
+#, python-format
+msgid "network allocations for instance %s"
+msgstr "实例 %s 的网络分配"
+
+#: cinder/network/quantum/manager.py:588
+#, python-format
+msgid ""
+"port deallocation failed for instance: |%(instance_id)s|, port_id: "
+"|%(port_id)s|"
+msgstr "实例的端口取消分配失败:|%(instance_id)s|, port_id: |%(port_id)s|"
+
+#: cinder/network/quantum/manager.py:606
+#, python-format
+msgid ""
+"ipam deallocation failed for instance: |%(instance_id)s|, vif_uuid: "
+"|%(vif_uuid)s|"
+msgstr "实例的ipam取消分配失败:|%(instance_id)s|, vif_uuid: |%(vif_uuid)s|"
+
+#: cinder/network/quantum/melange_connection.py:96
+#, python-format
+msgid "Server returned error: %s"
+msgstr "服务器返回错误:%s"
+
+#: cinder/network/quantum/melange_connection.py:98
+msgid "Connection error contacting melange service, retrying"
+msgstr "melange服务的连接错误,重试"
+
+#: cinder/network/quantum/melange_connection.py:108
+#, python-format
+msgid ""
+"allocate IP on network |%(network_id)s| belonging to "
+"|%(network_tenant_id)s| to this vif |%(vif_id)s| with mac "
+"|%(mac_address)s| belonging to |%(project_id)s| "
+msgstr ""
+"在网络 |%(network_id)s| 中分配IP地址,该网络属于 |%(network_tenant_id)s|, 分配IP给该vif "
+"|%(vif_id)s|, 其中mac是 |%(mac_address)s| 所属项目 |%(project_id)s| "
+
+#: cinder/network/quantum/melange_ipam_lib.py:133
+msgid "get_project_and_global_net_ids must be called with a non-null project_id"
+msgstr "调用get_project_and_global_net_ids时 project_id必须是非空。"
+
+#: cinder/network/quantum/cinder_ipam_lib.py:75
+msgid "Error creating network entry"
+msgstr "创建网络入口的错误"
+
+#: cinder/network/quantum/cinder_ipam_lib.py:90
+#, python-format
+msgid "No network with net_id = %s"
+msgstr "没有net_id = %s的网络"
+
+#: cinder/network/quantum/cinder_ipam_lib.py:221
+#, fuzzy, python-format
+msgid "No fixed IPs to deallocate for vif %s"
+msgstr "没有为vif %sid取消分配固定IP"
+
+#: cinder/network/quantum/quantum_connection.py:99
+#, python-format
+msgid "Connecting interface %(interface_id)s to net %(net_id)s for %(tenant_id)s"
+msgstr "将连接接口 %(interface_id)s 连接到net %(net_id)s 针对租户 %(tenant_id)s"
+
+#: cinder/network/quantum/quantum_connection.py:113
+#, python-format
+msgid "Deleting port %(port_id)s on net %(net_id)s for %(tenant_id)s"
+msgstr "端口 %(port_id)s 在net %(net_id)s 上删除,针对租户是 %(tenant_id)s"
+
+#: cinder/notifier/api.py:115
+#, python-format
+msgid "%s not in valid priorities"
+msgstr "%s 不在有效的优先级"
+
+#: cinder/notifier/api.py:130
+#, python-format
+msgid ""
+"Problem '%(e)s' attempting to send to notification system. "
+"Payload=%(payload)s"
+msgstr "Problem '%(e)s' 试图发送到通知系统。Payload=%(payload)s"
+
+#: cinder/notifier/list_notifier.py:65
+#, python-format
+msgid "Problem '%(e)s' attempting to send to notification driver %(driver)s."
+msgstr "Problem '%(e)s' 试图发送到通知驱动 %(driver)s。"
+
+#: cinder/notifier/rabbit_notifier.py:46
+#, python-format
+msgid "Could not send notification to %(topic)s. Payload=%(message)s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:146
+#, python-format
+msgid "Returning exception %s to caller"
+msgstr "返回 %s 异常给调用者"
+
+#: cinder/rpc/amqp.py:188
+#, python-format
+msgid "unpacked context: %s"
+msgstr "未打包的上下文:%s"
+
+#: cinder/rpc/amqp.py:231
+#, python-format
+msgid "received %s"
+msgstr "已接收 %s"
+
+#: cinder/rpc/amqp.py:236
+#, python-format
+msgid "no method for message: %s"
+msgstr "没有适用于消息的方法:%s"
+
+#: cinder/rpc/amqp.py:237
+#, python-format
+msgid "No method for message: %s"
+msgstr "没有适用于消息的方法:%s"
+
+#: cinder/rpc/amqp.py:321
+#, python-format
+msgid "Making asynchronous call on %s ..."
+msgstr "在 %s 做异步call"
+
+#: cinder/rpc/amqp.py:324
+#, python-format
+msgid "MSG_ID is %s"
+msgstr "消息ID(MSG_ID)是 %s"
+
+#: cinder/rpc/amqp.py:346
+#, python-format
+msgid "Making asynchronous cast on %s..."
+msgstr "在 %s 做异步cast"
+
+#: cinder/rpc/amqp.py:354
+msgid "Making asynchronous fanout cast..."
+msgstr "做异步fanout cast"
+
+#: cinder/rpc/amqp.py:379
+#, python-format
+msgid "Sending notification on %s..."
+msgstr "正在 %s 上发送通知"
+
+#: cinder/rpc/common.py:54
+#, python-format
+msgid ""
+"Remote error: %(exc_type)s %(value)s\n"
+"%(traceback)s."
+msgstr ""
+"远程错误:%(exc_type)s %(value)s\n"
+"%(traceback)s。"
+
+#: cinder/rpc/common.py:71
+msgid "Timeout while waiting on RPC response."
+msgstr "等待RPC响应返回超时"
+
+#: cinder/rpc/impl_kombu.py:111
+msgid "Failed to process message... skipping it."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:407
+#, python-format
+msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d"
+msgstr "正在重新连接位于 %(hostname)s:%(port)d 的AMQP服务器"
+
+#: cinder/rpc/impl_kombu.py:430
+#, python-format
+msgid "Connected to AMQP server on %(hostname)s:%(port)d"
+msgstr "连接到位于 %(hostname)s:%(port)d 的AMQP服务器"
+
+#: cinder/rpc/impl_kombu.py:466
+#, python-format
+msgid ""
+"Unable to connect to AMQP server on %(hostname)s:%(port)d after "
+"%(max_retries)d tries: %(err_str)s"
+msgstr ""
+"无法连接到位于%(hostname)s:%(port)d的AMQP server,尝试已经 %(max_retries)d "
+"次:%(err_str)s"
+
+#: cinder/rpc/impl_kombu.py:482
+#, python-format
+msgid ""
+"AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying "
+"again in %(sleep_time)d seconds."
+msgstr "位于%(hostname)s:%(port)d的AMQP服务器不可达:%(err_str)s。%(sleep_time)d 秒钟后请再尝试。"
+
+#: cinder/rpc/impl_kombu.py:533 cinder/rpc/impl_qpid.py:385
+#, python-format
+msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s"
+msgstr "为topic '%(topic)s'声明消费者失败:%(err_str)s"
+
+#: cinder/rpc/impl_kombu.py:551 cinder/rpc/impl_qpid.py:400
+#, python-format
+msgid "Timed out waiting for RPC response: %s"
+msgstr "等待RPC响应超时:%s"
+
+#: cinder/rpc/impl_kombu.py:555 cinder/rpc/impl_qpid.py:404
+#, python-format
+msgid "Failed to consume message from queue: %s"
+msgstr "从队列中消费消息失败:%s"
+
+#: cinder/rpc/impl_kombu.py:589 cinder/rpc/impl_qpid.py:434
+#, python-format
+msgid "Failed to publish message to topic '%(topic)s': %(err_str)s"
+msgstr "给topic '%(topic)s'发布消息失败:%(err_str)s"
+
+#: cinder/rpc/impl_qpid.py:341
+#, python-format
+msgid "Unable to connect to AMQP server: %s "
+msgstr "无法连接到AMQP服务器:%s "
+
+#: cinder/rpc/impl_qpid.py:346
+#, python-format
+msgid "Connected to AMQP server on %s"
+msgstr "连接到 %s 的AMQP服务器"
+
+#: cinder/rpc/impl_qpid.py:354
+msgid "Re-established AMQP queues"
+msgstr "重建AMQP队列"
+
+#: cinder/rpc/impl_qpid.py:412
+msgid "Error processing message.  Skipping it."
+msgstr ""
+
+#: cinder/scheduler/chance.py:47 cinder/scheduler/simple.py:91
+#: cinder/scheduler/simple.py:143
+msgid "Is the appropriate service running?"
+msgstr "正确的服务在运行吗?"
+
+#: cinder/scheduler/chance.py:52
+msgid "Could not find another compute"
+msgstr "无法找到另一个计算节点"
+
+#: cinder/scheduler/driver.py:63
+#, python-format
+msgid "Casted '%(method)s' to volume '%(host)s'"
+msgstr "把“%(method)s”投放在卷%(host)s\""
+
+#: cinder/scheduler/driver.py:80
+#, python-format
+msgid "Casted '%(method)s' to compute '%(host)s'"
+msgstr "把“%(method)s”投放在主机 \"%(host)s\""
+
+#: cinder/scheduler/driver.py:89
+#, python-format
+msgid "Casted '%(method)s' to network '%(host)s'"
+msgstr "把“%(method)s”投放在网络 \"%(host)s\""
+
+#: cinder/scheduler/driver.py:107
+#, python-format
+msgid "Casted '%(method)s' to %(topic)s '%(host)s'"
+msgstr "把“%(method)s”投放在 %(topic)s \"%(host)s\""
+
+#: cinder/scheduler/driver.py:181
+msgid "Must implement a fallback schedule"
+msgstr "必须实现一个回滚 schedule"
+
+#: cinder/scheduler/driver.py:185
+msgid "Driver must implement schedule_prep_resize"
+msgstr ""
+
+#: cinder/scheduler/driver.py:190
+msgid "Driver must implement schedule_run_instance"
+msgstr ""
+
+#: cinder/scheduler/driver.py:325
+msgid "Block migration can not be used with shared storage."
+msgstr "块存储迁移无法在共享存储使用"
+
+#: cinder/scheduler/driver.py:330
+#, fuzzy
+msgid "Live migration can not be used without shared storage."
+msgstr "块存储迁移无法在共享存储使用"
+
+#: cinder/scheduler/driver.py:367 cinder/scheduler/driver.py:457
+#, python-format
+msgid "host %(dest)s is not compatible with original host %(src)s."
+msgstr "主机 %(dest)s 和原先的主机 %(src)s 不兼容。"
+
+#: cinder/scheduler/driver.py:416
+#, fuzzy, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"memory(host:%(avail)s <= instance:%(mem_inst)s)"
+msgstr "无法迁移 %(instance_id)s 到 %(dest)s 上:缺少内存(主机:%(avail)s <= 实例:%(mem_inst)s)"
+
+#: cinder/scheduler/driver.py:472
+#, fuzzy, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"disk(host:%(available)s <= instance:%(necessary)s)"
+msgstr ""
+"无法迁移%(instance_id)s 到 %(dest)s 上:缺少磁盘(主机:%(available)s <= "
+"实例:%(necessary)s)"
+
+#: cinder/scheduler/filter_scheduler.py:51
+#, python-format
+msgid "No host selection for %s defined."
+msgstr "没有主机选择所定义的 %s 主题消息"
+
+#: cinder/scheduler/filter_scheduler.py:64
+#, python-format
+msgid "Attempting to build %(num_instances)d instance(s)"
+msgstr "尝试创建 %(num_instances)d 个实例"
+
+#: cinder/scheduler/filter_scheduler.py:157
+msgid "Scheduler only understands Compute nodes (for now)"
+msgstr "调度器只能理解计算节点(暂时)"
+
+#: cinder/scheduler/filter_scheduler.py:199
+#, python-format
+msgid "Filtered %(hosts)s"
+msgstr "过滤掉的主机 %(hosts)s"
+
+#: cinder/scheduler/filter_scheduler.py:209
+#, python-format
+msgid "Weighted %(weighted_host)s"
+msgstr "加权的主机 %(weighted_host)s"
+
+#: cinder/scheduler/host_manager.py:144
+#, python-format
+msgid "Host filter fails for ignored host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:151
+#, python-format
+msgid "Host filter fails for non-forced host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:157
+#, python-format
+msgid "Host filter function %(func)s failed for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:163
+#, fuzzy, python-format
+msgid "Host filter passes for %(host)s"
+msgstr "主机 %(host)s 没有计算节点"
+
+#: cinder/scheduler/host_manager.py:272
+#, python-format
+msgid "Received %(service_name)s service update from %(host)s."
+msgstr "接收到 %(service_name)s 服务更新,来自 %(host)s。"
+
+#: cinder/scheduler/host_manager.py:313
+msgid "host_manager only implemented for 'compute'"
+msgstr "host_manager 只实现了“compute”"
+
+#: cinder/scheduler/host_manager.py:323
+#, python-format
+msgid "No service for compute ID %s"
+msgstr "计算节点 %s 没有服务"
+
+#: cinder/scheduler/manager.py:85
+#, fuzzy, python-format
+msgid ""
+"Driver Method %(driver_method_name)s missing: %(e)s. Reverting to "
+"schedule()"
+msgstr "驱动方法 %(driver_method)s 丢失:%(e)s。撤销回schedule()"
+
+#: cinder/scheduler/manager.py:150
+#, python-format
+msgid "Failed to schedule_%(method)s: %(ex)s"
+msgstr "schedule_%(method)s 失败:%(ex)s"
+
+#: cinder/scheduler/manager.py:159
+#, fuzzy, python-format
+msgid "Setting instance %(instance_uuid)s to %(state)s state."
+msgstr "设置实例 %(instance_uuid)s 至 ERROR 状态"
+
+#: cinder/scheduler/scheduler_options.py:66
+#, python-format
+msgid "Could not stat scheduler options file %(filename)s: '%(e)s'"
+msgstr "无法统计调度器的选项文件 %(filename)s:“%(e)s”"
+
+#: cinder/scheduler/scheduler_options.py:75
+#, python-format
+msgid "Could not decode scheduler options: '%(e)s'"
+msgstr "无法解码调度器的选项:“%(e)s”"
+
+#: cinder/scheduler/simple.py:87
+msgid "Not enough allocatable CPU cores remaining"
+msgstr "没有足够可分配的剩余CPU核心"
+
+#: cinder/scheduler/simple.py:137
+msgid "Not enough allocatable volume gigabytes remaining"
+msgstr "卷没有足够可分配的空间"
+
+#: cinder/scheduler/filters/core_filter.py:45
+msgid "VCPUs not set; assuming CPU collection broken"
+msgstr "未设置 VCPUs;假设 CPU 集合损坏了"
+
+#: cinder/tests/fake_utils.py:72
+#, python-format
+msgid "Faking execution of cmd (subprocess): %s"
+msgstr "伪执行命令(子进程):%s"
+
+#: cinder/tests/fake_utils.py:80
+#, python-format
+msgid "Faked command matched %s"
+msgstr "伪命令匹配 %s"
+
+#: cinder/tests/fake_utils.py:96
+#, python-format
+msgid "Faked command raised an exception %s"
+msgstr "伪命令引起异常 %s"
+
+#: cinder/tests/fake_utils.py:101
+#, python-format
+msgid "Reply to faked command is stdout='%(stdout)s' stderr='%(stderr)s'"
+msgstr "伪命令的标准输出stdout='%(stdout)s' 标准错误输出 stderr='%(stderr)s'"
+
+#: cinder/tests/fakelibvirt.py:784
+msgid "Please extend mock libvirt module to support flags"
+msgstr "请扩展模拟的 libvirt 模块来支持标记"
+
+#: cinder/tests/fakelibvirt.py:790
+msgid "Please extend fake libvirt module to support this auth method"
+msgstr "请扩展伪libvirt模块来支持这种认知方法"
+
+#: cinder/tests/test_compute.py:365 cinder/tests/test_compute.py:1419
+#, python-format
+msgid "Running instances: %s"
+msgstr "正在运行的实例:%s"
+
+#: cinder/tests/test_compute.py:371
+#, python-format
+msgid "After terminating instances: %s"
+msgstr "终止实例之后:%s"
+
+#: cinder/tests/test_compute.py:589
+msgid "Internal error"
+msgstr "内部错误"
+
+#: cinder/tests/test_compute.py:1430
+#, python-format
+msgid "After force-killing instances: %s"
+msgstr "强制杀死实例后:%s"
+
+#: cinder/tests/test_misc.py:92
+#, python-format
+msgid ""
+"The following migrations are missing a downgrade:\n"
+"\t%s"
+msgstr ""
+"下面的迁移缺少了降级:\n"
+"\t%s"
+
+#: cinder/tests/test_cinder_manage.py:169
+msgid "id"
+msgstr "id"
+
+#: cinder/tests/test_cinder_manage.py:170
+msgid "IPv4"
+msgstr "IPv4"
+
+#: cinder/tests/test_cinder_manage.py:171
+msgid "IPv6"
+msgstr "IPv6"
+
+#: cinder/tests/test_cinder_manage.py:172
+msgid "start address"
+msgstr "起始地址"
+
+#: cinder/tests/test_cinder_manage.py:173
+msgid "DNS1"
+msgstr "DNS1"
+
+#: cinder/tests/test_cinder_manage.py:174
+msgid "DNS2"
+msgstr "DNS2"
+
+#: cinder/tests/test_cinder_manage.py:175
+msgid "VlanID"
+msgstr "VlanID"
+
+#: cinder/tests/test_cinder_manage.py:176
+msgid "project"
+msgstr "项目"
+
+#: cinder/tests/test_cinder_manage.py:177
+msgid "uuid"
+msgstr "uuid"
+
+#: cinder/tests/test_volume.py:216
+#, python-format
+msgid "Target %s allocated"
+msgstr "目标 %s 已经分配"
+
+#: cinder/tests/test_volume.py:468
+#, python-format
+msgid "Cannot confirm exported volume id:%s."
+msgstr "无法确认导出的卷 id:%s。"
+
+#: cinder/tests/test_volume_types.py:58
+#, python-format
+msgid "Given data: %s"
+msgstr "给定数据:%s"
+
+#: cinder/tests/test_volume_types.py:59
+#, python-format
+msgid "Result data: %s"
+msgstr "结果数据:%s"
+
+#: cinder/tests/test_xenapi.py:626
+#, python-format
+msgid "Creating files in %s to simulate guest agent"
+msgstr "在%s 创建文件模拟客户代理"
+
+#: cinder/tests/test_xenapi.py:637
+#, python-format
+msgid "Removing simulated guest agent files in %s"
+msgstr "移除在 %s 的模拟的客户代理文件"
+
+#: cinder/tests/api/openstack/compute/test_servers.py:2144
+#, fuzzy, python-format
+msgid "Quota exceeded: code=%(code)s"
+msgstr "超出配额"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:57
+#, python-format
+msgid "_create: %s"
+msgstr "_create: %s"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:66
+#, python-format
+msgid "_delete: %s"
+msgstr "_delete: %s"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:75
+#, python-format
+msgid "_get: %s"
+msgstr "_get: %s"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:85
+#, python-format
+msgid "_get_all: %s"
+msgstr "_get_all: %s"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:125
+#, python-format
+msgid "test_snapshot_create: param=%s"
+msgstr "test_snapshot_create: param=%s"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:134
+#, python-format
+msgid "test_snapshot_create: resp_dict=%s"
+msgstr "test_snapshot_create: resp_dict=%s"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:156
+#, python-format
+msgid "test_snapshot_create_force: param=%s"
+msgstr "test_snapshot_create_force: param=%s"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:165
+#, python-format
+msgid "test_snapshot_create_force: resp_dict=%s"
+msgstr "test_snapshot_create_force: resp_dict=%s"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:205
+#, python-format
+msgid "test_snapshot_show: resp=%s"
+msgstr "test_snapshot_show: resp=%s"
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:231
+#, python-format
+msgid "test_snapshot_detail: resp_dict=%s"
+msgstr "test_snapshot_detail: resp_dict=%s"
+
+#: cinder/tests/integrated/test_login.py:31
+#, python-format
+msgid "flavor: %s"
+msgstr "类型:%s"
+
+#: cinder/tests/integrated/api/client.py:38
+#, python-format
+msgid ""
+"%(message)s\n"
+"Status Code: %(_status)s\n"
+"Body: %(_body)s"
+msgstr ""
+"%(message)s\n"
+"状态码: %(_status)s\n"
+"主体: %(_body)s"
+
+#: cinder/tests/integrated/api/client.py:47
+msgid "Authentication error"
+msgstr "认证错误"
+
+#: cinder/tests/integrated/api/client.py:55
+msgid "Authorization error"
+msgstr "授权错误"
+
+#: cinder/tests/integrated/api/client.py:63
+msgid "Item not found"
+msgstr "条目没有找到"
+
+#: cinder/tests/integrated/api/client.py:105
+#, python-format
+msgid "Doing %(method)s on %(relative_url)s"
+msgstr "正在 %(relative_url)s 执行 %(method)s"
+
+#: cinder/tests/integrated/api/client.py:107
+#, python-format
+msgid "Body: %s"
+msgstr "主体:%s"
+
+#: cinder/tests/integrated/api/client.py:125
+#, python-format
+msgid "%(auth_uri)s => code %(http_status)s"
+msgstr "%(auth_uri)s => code %(http_status)s"
+
+#: cinder/tests/integrated/api/client.py:151
+#, python-format
+msgid "%(relative_uri)s => code %(http_status)s"
+msgstr "%(relative_uri)s => code %(http_status)s"
+
+#: cinder/tests/integrated/api/client.py:161
+msgid "Unexpected status code"
+msgstr "意外的状态码"
+
+#: cinder/tests/integrated/api/client.py:168
+#, python-format
+msgid "Decoding JSON: %s"
+msgstr "解码JSON:%s"
+
+#: cinder/tests/rpc/common.py:133
+#, python-format
+msgid "Nested received %(queue)s, %(value)s"
+msgstr "嵌套(调用)接收到 %(queue)s, %(value)s"
+
+#: cinder/tests/rpc/common.py:142
+#, python-format
+msgid "Nested return %s"
+msgstr "嵌套(调用)返回 %s"
+
+#: cinder/tests/rpc/common.py:160
+msgid "RPC backend does not support timeouts"
+msgstr "RPC后台不支持超时"
+
+#: cinder/tests/rpc/common.py:227 cinder/tests/rpc/common.py:233
+#, python-format
+msgid "Received %s"
+msgstr "已接收 %s"
+
+#: cinder/virt/connection.py:85
+msgid "Failed to open connection to the hypervisor"
+msgstr "打开虚拟机管理程序的连接失败"
+
+#: cinder/virt/fake.py:270 cinder/virt/xenapi_conn.py:396
+#: cinder/virt/baremetal/proxy.py:716 cinder/virt/libvirt/connection.py:2045
+#, python-format
+msgid "Compute_service record created for %s "
+msgstr "Compute_service记录为 %s 创建 "
+
+#: cinder/virt/fake.py:273 cinder/virt/xenapi_conn.py:399
+#: cinder/virt/baremetal/proxy.py:720 cinder/virt/libvirt/connection.py:2048
+#, python-format
+msgid "Compute_service record updated for %s "
+msgstr "Compute_service记录为 %s 更新 "
+
+#: cinder/virt/firewall.py:130
+#, python-format
+msgid "Attempted to unfilter instance %s which is not filtered"
+msgstr "试图不过滤没有过滤的实例 %s"
+
+#: cinder/virt/firewall.py:137
+#, python-format
+msgid "Filters added to instance %s"
+msgstr "过滤器添加给实例 %s"
+
+#: cinder/virt/firewall.py:139
+msgid "Provider Firewall Rules refreshed"
+msgstr "提供者防火墙规则刷新"
+
+#: cinder/virt/firewall.py:291
+#, python-format
+msgid "Adding security group rule: %r"
+msgstr "添加安全组规则:%r"
+
+#: cinder/virt/firewall.py:403 cinder/virt/xenapi/firewall.py:87
+#, python-format
+msgid "Adding provider rule: %s"
+msgstr "添加提供者规则:%s"
+
+#: cinder/virt/images.py:86
+msgid "'qemu-img info' parsing failed."
+msgstr "'qemu-img info'解析失败"
+
+#: cinder/virt/images.py:92
+#, python-format
+msgid "fmt=%(fmt)s backed by: %(backing_file)s"
+msgstr "fmt=%(fmt)s 由 %(backing_file)s 支持"
+
+#: cinder/virt/images.py:104
+#, python-format
+msgid "Converted to raw, but format is now %s"
+msgstr "转化为裸格式,但目前格式是 %s"
+
+#: cinder/virt/vmwareapi_conn.py:105
+msgid ""
+"Must specify vmwareapi_host_ip,vmwareapi_host_username and "
+"vmwareapi_host_password to useconnection_type=vmwareapi"
+msgstr "针对useconnection_type=vmwareapi必须指定vmwareapi_host_ip,vmwareapi_host_username和vmwareapi_host_password"
+
+#: cinder/virt/vmwareapi_conn.py:276
+#, python-format
+msgid "In vmwareapi:_create_session, got this exception: %s"
+msgstr "在vmwareapi:_create_session,得到这个异常:%s"
+
+#: cinder/virt/vmwareapi_conn.py:359
+#, python-format
+msgid "In vmwareapi:_call_method, got this exception: %s"
+msgstr "在vmwareapi:_call_method,得到这个异常:%s"
+
+#: cinder/virt/vmwareapi_conn.py:398
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: success"
+msgstr "任务 [%(task_name)s] %(task_ref)s 状态:成功"
+
+#: cinder/virt/vmwareapi_conn.py:404
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: error %(error_info)s"
+msgstr "任务 [%(task_name)s] %(task_ref)s 状态:错误 %(error_info)s"
+
+#: cinder/virt/vmwareapi_conn.py:409
+#, python-format
+msgid "In vmwareapi:_poll_task, Got this error %s"
+msgstr "在vmwareapi:_poll_task,得到这个错误 %s"
+
+#: cinder/virt/xenapi_conn.py:140
+msgid ""
+"Must specify xenapi_connection_url, xenapi_connection_username "
+"(optionally), and xenapi_connection_password to use "
+"connection_type=xenapi"
+msgstr ""
+"针对use connection_type=xenapi必须指定xenapi_connection_url, "
+"xenapi_connection_username (可选) 和 xenapi_connection_password"
+
+#: cinder/virt/xenapi_conn.py:329 cinder/virt/libvirt/connection.py:472
+msgid "Could not determine iscsi initiator name"
+msgstr "无法确定iscsi initiator名字"
+
+#: cinder/virt/xenapi_conn.py:460
+msgid "Host startup on XenServer is not supported."
+msgstr "不支持在XenServer启动主机"
+
+#: cinder/virt/xenapi_conn.py:489
+msgid "Unable to log in to XenAPI (is the Dom0 disk full?)"
+msgstr "无法登录到XenAPI(Dom0磁盘是空么?)"
+
+#: cinder/virt/xenapi_conn.py:527
+msgid "Host is member of a pool, but DB says otherwise"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:599 cinder/virt/xenapi_conn.py:612
+#, python-format
+msgid "Got exception: %s"
+msgstr "得到异常:%s"
+
+#: cinder/virt/baremetal/dom.py:93
+msgid "No domains exist."
+msgstr "没有域存在。"
+
+#: cinder/virt/baremetal/dom.py:95
+#, python-format
+msgid "============= initial domains =========== : %s"
+msgstr "============= 初始域 =========== : %s"
+
+#: cinder/virt/baremetal/dom.py:99
+msgid "Building domain: to be removed"
+msgstr "创建域:将被移除"
+
+#: cinder/virt/baremetal/dom.py:103
+msgid "Not running domain: remove"
+msgstr "没有运行的域:移除"
+
+#: cinder/virt/baremetal/dom.py:111
+msgid "domain running on an unknown node: discarded"
+msgstr "运行在位置结点的域:放弃"
+
+#: cinder/virt/baremetal/dom.py:127
+#, python-format
+msgid "No such domain (%s)"
+msgstr "没有这个域 (%s)"
+
+#: cinder/virt/baremetal/dom.py:134
+#, python-format
+msgid "Failed power down Bare-metal node %s"
+msgstr "裸机结点 %s 电源停止失败"
+
+#: cinder/virt/baremetal/dom.py:143
+msgid "deactivate -> activate fails"
+msgstr "deactivate -> activate失败"
+
+#: cinder/virt/baremetal/dom.py:153
+msgid "destroy_domain: no such domain"
+msgstr "destroy_domain:没有该域"
+
+#: cinder/virt/baremetal/dom.py:154
+#, python-format
+msgid "No such domain %s"
+msgstr "没有该域 %s"
+
+#: cinder/virt/baremetal/dom.py:161
+#, python-format
+msgid "Domains: %s"
+msgstr "域:%s"
+
+#: cinder/virt/baremetal/dom.py:163
+#, python-format
+msgid "Nodes: %s"
+msgstr "结点:%s"
+
+#: cinder/virt/baremetal/dom.py:166
+#, python-format
+msgid "After storing domains: %s"
+msgstr "储存域之后:%s"
+
+#: cinder/virt/baremetal/dom.py:169
+msgid "deactivation/removing domain failed"
+msgstr "域去活/移除失败"
+
+#: cinder/virt/baremetal/dom.py:176
+msgid "===== Domain is being created ====="
+msgstr "===== 域正在创建 ====="
+
+#: cinder/virt/baremetal/dom.py:179
+msgid "Same domain name already exists"
+msgstr "同样的域名已经存在"
+
+#: cinder/virt/baremetal/dom.py:181
+msgid "create_domain: before get_idle_node"
+msgstr "create_domain:在get_idle_node之前"
+
+#: cinder/virt/baremetal/dom.py:198
+#, python-format
+msgid "Created new domain: %s"
+msgstr "新域创建:%s"
+
+#: cinder/virt/baremetal/dom.py:213
+#, python-format
+msgid "Failed to boot Bare-metal node %s"
+msgstr "裸机结点 %s 启动失败"
+
+#: cinder/virt/baremetal/dom.py:222
+msgid "No such domain exists"
+msgstr "没有该域"
+
+#: cinder/virt/baremetal/dom.py:226
+#, python-format
+msgid "change_domain_state: to new state %s"
+msgstr "change_domain_state:新状态 %s"
+
+#: cinder/virt/baremetal/dom.py:233
+#, python-format
+msgid "Stored fake domains to the file: %s"
+msgstr "把伪域名存到文件中:%s"
+
+#: cinder/virt/baremetal/dom.py:244
+msgid "domain does not exist"
+msgstr "域不存在"
+
+#: cinder/virt/baremetal/nodes.py:42
+#, python-format
+msgid "Unknown baremetal driver %(d)s"
+msgstr "未知的裸机驱动 %(d)s"
+
+#: cinder/virt/baremetal/proxy.py:148
+#, python-format
+msgid "Error encountered when destroying instance '%(name)s': %(ex)s"
+msgstr "销毁实例 '%(name)s' 时遇到错误:%(ex)s"
+
+#: cinder/virt/baremetal/proxy.py:162
+#, python-format
+msgid "instance %(instance_name)s: deleting instance files %(target)s"
+msgstr "实例 %(instance_name)s:正在删除实例文件 %(target)s"
+
+#: cinder/virt/baremetal/proxy.py:189
+#, python-format
+msgid "instance %s: rebooted"
+msgstr "实例 %s:重启"
+
+#: cinder/virt/baremetal/proxy.py:192
+msgid "_wait_for_reboot failed"
+msgstr "_wait_for_reboot失败"
+
+#: cinder/virt/baremetal/proxy.py:222
+#, python-format
+msgid "instance %s: rescued"
+msgstr "实例 %s:已救援"
+
+#: cinder/virt/baremetal/proxy.py:225
+msgid "_wait_for_rescue failed"
+msgstr "_wait_for_rescue 失败"
+
+#: cinder/virt/baremetal/proxy.py:242
+msgid "<============= spawn of baremetal =============>"
+msgstr "<============= 生产裸机=============>"
+
+#: cinder/virt/baremetal/proxy.py:255
+#, python-format
+msgid "instance %s: is building"
+msgstr "实例 %s:正在创建中"
+
+#: cinder/virt/baremetal/proxy.py:260
+msgid "Key is injected but instance is not running yet"
+msgstr "已经注入密钥但是实例还没有运行"
+
+#: cinder/virt/baremetal/proxy.py:265
+#, python-format
+msgid "instance %s: booted"
+msgstr "实例 %s:已启动"
+
+#: cinder/virt/baremetal/proxy.py:268
+#, python-format
+msgid "~~~~~~ current state = %s ~~~~~~"
+msgstr "~~~~~~ 当前状态 = %s ~~~~~~"
+
+#: cinder/virt/baremetal/proxy.py:269
+#, python-format
+msgid "instance %s spawned successfully"
+msgstr "实例 %s 生产成功"
+
+#: cinder/virt/baremetal/proxy.py:272
+#, python-format
+msgid "instance %s:not booted"
+msgstr "实例 %s:没有启动"
+
+#: cinder/virt/baremetal/proxy.py:274
+msgid "Bremetal assignment is overcommitted."
+msgstr "过多提交裸机分配"
+
+#: cinder/virt/baremetal/proxy.py:354
+#, python-format
+msgid "instance %s: Creating image"
+msgstr "实例 %s:正在创建镜像"
+
+#: cinder/virt/baremetal/proxy.py:473
+#, python-format
+msgid "instance %(inst_name)s: injecting %(injection)s into image %(img_id)s"
+msgstr "实例 %(inst_name)s:将 %(injection)s 注入镜像 %(img_id)s"
+
+#: cinder/virt/baremetal/proxy.py:484
+#, python-format
+msgid ""
+"instance %(inst_name)s: ignoring error injecting data into image "
+"%(img_id)s (%(e)s)"
+msgstr "实例 %(inst_name)s:忽略向镜像 %(img_id)s 注入数据的错误 (%(e)s)"
+
+#: cinder/virt/baremetal/proxy.py:529
+#, python-format
+msgid "instance %s: starting toXML method"
+msgstr "实例 %s:开始方法 toXML"
+
+#: cinder/virt/baremetal/proxy.py:531
+#, python-format
+msgid "instance %s: finished toXML method"
+msgstr "实例 %s:方法toXML 完成"
+
+#: cinder/virt/baremetal/proxy.py:574 cinder/virt/libvirt/connection.py:1815
+msgid ""
+"Cannot get the number of cpu, because this function is not implemented "
+"for this platform. This error can be safely ignored for now."
+msgstr "无法得到CPU的数目,因为这个函数不是给这个平台执行的。这个错误可以被放心忽略。"
+
+#: cinder/virt/baremetal/proxy.py:714
+#, python-format
+msgid "#### RLK: cpu_arch = %s "
+msgstr "#### RLK: cpu_arch = %s "
+
+#: cinder/virt/baremetal/proxy.py:746
+msgid "Updating!"
+msgstr "正在更新。"
+
+#: cinder/virt/baremetal/proxy.py:773 cinder/virt/libvirt/connection.py:2609
+#: cinder/virt/xenapi/host.py:129
+msgid "Updating host stats"
+msgstr "正在更新主机状态"
+
+#: cinder/virt/baremetal/tilera.py:185
+msgid "free_node...."
+msgstr "free_node..."
+
+#: cinder/virt/baremetal/tilera.py:216
+#, fuzzy, python-format
+msgid "deactivate_node is called for node_id = %(id)s node_ip = %(ip)s"
+msgstr "针对node_id = %(id)s node_ip = %(ip)s调用了deactivate_node"
+
+#: cinder/virt/baremetal/tilera.py:221
+msgid "status of node is set to 0"
+msgstr "结点状态设为0"
+
+#: cinder/virt/baremetal/tilera.py:232
+msgid "rootfs is already removed"
+msgstr "rootfs 已经被移除了"
+
+#: cinder/virt/baremetal/tilera.py:264
+msgid "Before ping to the bare-metal node"
+msgstr "在ping裸机节点之前"
+
+#: cinder/virt/baremetal/tilera.py:275
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is ready"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:279
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is not ready, out_msg=%(out_msg)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:292
+msgid "Noting to do for tilera nodes: vmlinux is in CF"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:316
+msgid "activate_node"
+msgstr "activate_node"
+
+#: cinder/virt/baremetal/tilera.py:330
+msgid "Node is unknown error state."
+msgstr "节点处于未知的错误状态。"
+
+#: cinder/virt/disk/api.py:165
+msgid "no capable image handler configured"
+msgstr "没有合适的镜像句柄配置好"
+
+#: cinder/virt/disk/api.py:178
+#, python-format
+msgid "unknown disk image handler: %s"
+msgstr "未知的磁盘镜像句柄:%s"
+
+#: cinder/virt/disk/api.py:189
+msgid "image already mounted"
+msgstr "镜像已经挂载"
+
+#: cinder/virt/disk/api.py:276 cinder/virt/disk/guestfs.py:64
+#: cinder/virt/disk/guestfs.py:78 cinder/virt/disk/mount.py:100
+#, python-format
+msgid "Failed to mount filesystem: %s"
+msgstr "挂载文件系统失败:%s"
+
+#: cinder/virt/disk/api.py:291
+#, python-format
+msgid "Failed to remove container: %s"
+msgstr "移除容器失败:%s"
+
+#: cinder/virt/disk/api.py:441
+#, python-format
+msgid "User %(username)s not found in password file."
+msgstr ""
+
+#: cinder/virt/disk/api.py:457
+#, python-format
+msgid "User %(username)s not found in shadow file."
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:39
+#, python-format
+msgid "unsupported partition: %s"
+msgstr "不支持的分区:%s"
+
+#: cinder/virt/disk/guestfs.py:77
+msgid "unknown guestmount error"
+msgstr "未知的guestmount错误"
+
+#: cinder/virt/disk/loop.py:30
+#, python-format
+msgid "Could not attach image to loopback: %s"
+msgstr "无法给loopback附加镜像:%s"
+
+#: cinder/virt/disk/mount.py:76
+msgid "no partitions found"
+msgstr "未找到分区"
+
+#: cinder/virt/disk/mount.py:77
+#, python-format
+msgid "Failed to map partitions: %s"
+msgstr "映射分区失败:%s"
+
+#: cinder/virt/disk/nbd.py:58
+msgid "nbd unavailable: module not loaded"
+msgstr "NBD不可用:模块没有加载"
+
+#: cinder/virt/disk/nbd.py:63
+msgid "No free nbd devices"
+msgstr "没有空闲NBD设备"
+
+#: cinder/virt/disk/nbd.py:81
+#, python-format
+msgid "qemu-nbd error: %s"
+msgstr "qemu-nbd 错误:%s"
+
+#: cinder/virt/disk/nbd.py:93
+#, python-format
+msgid "nbd device %s did not show up"
+msgstr "nbd 设备 %s 没有出现"
+
+#: cinder/virt/libvirt/connection.py:265
+#, python-format
+msgid "Connecting to libvirt: %s"
+msgstr "正在连接 libvirt:%s"
+
+#: cinder/virt/libvirt/connection.py:286
+msgid "Connection to libvirt broke"
+msgstr "连接 libvirt 失败"
+
+#: cinder/virt/libvirt/connection.py:388
+#, python-format
+msgid "Error from libvirt during destroy. Code=%(errcode)s Error=%(e)s"
+msgstr "销毁时发生错误。Code=%(errcode)s Error=%(e)s"
+
+#: cinder/virt/libvirt/connection.py:400
+#, python-format
+msgid ""
+"Error from libvirt during saved instance removal. Code=%(errcode)s "
+"Error=%(e)s"
+msgstr "删除已保存的实例时 libvirt 发生错误。Code=%(errcode)s Error=%(e)s"
+
+#: cinder/virt/libvirt/connection.py:411
+#, python-format
+msgid "Error from libvirt during undefine. Code=%(errcode)s Error=%(e)s"
+msgstr "在 undefine 时 libvirt 发生错误。Code=%(errcode)s Error=%(e)s"
+
+#: cinder/virt/libvirt/connection.py:423
+msgid "Instance destroyed successfully."
+msgstr "实例销毁成功。"
+
+#: cinder/virt/libvirt/connection.py:435
+#, fuzzy, python-format
+msgid "Error from libvirt during unfilter. Code=%(errcode)s Error=%(e)s"
+msgstr "在 undefine 时 libvirt 发生错误。Code=%(errcode)s Error=%(e)s"
+
+#: cinder/virt/libvirt/connection.py:461
+#, python-format
+msgid "Deleting instance files %(target)s"
+msgstr "删除实例文件 %(target)s"
+
+#: cinder/virt/libvirt/connection.py:554
+msgid "attaching LXC block device"
+msgstr "附加 LXC 块设备"
+
+#: cinder/virt/libvirt/connection.py:567
+msgid "detaching LXC block device"
+msgstr "分离LXC 块设备"
+
+#: cinder/virt/libvirt/connection.py:692
+#, fuzzy
+msgid "Instance soft rebooted successfully."
+msgstr "实例成功重启。"
+
+#: cinder/virt/libvirt/connection.py:696
+#, fuzzy
+msgid "Failed to soft reboot instance."
+msgstr "重新启动实例失败"
+
+#: cinder/virt/libvirt/connection.py:725
+#, fuzzy
+msgid "Instance shutdown successfully."
+msgstr "实例成功生产。"
+
+#: cinder/virt/libvirt/connection.py:761 cinder/virt/libvirt/connection.py:905
+msgid "During reboot, instance disappeared."
+msgstr "重启过程中,实例消失。"
+
+#: cinder/virt/libvirt/connection.py:766
+msgid "Instance rebooted successfully."
+msgstr "实例成功重启。"
+
+#: cinder/virt/libvirt/connection.py:867 cinder/virt/xenapi/vmops.py:1358
+#, python-format
+msgid ""
+"Found %(migration_count)d unconfirmed migrations older than "
+"%(confirm_window)d seconds"
+msgstr "发现 %(migration_count)d 个超过 %(confirm_window)d 秒未经确认的迁移"
+
+#: cinder/virt/libvirt/connection.py:871
+#, python-format
+msgid "Automatically confirming migration %d"
+msgstr "正在自动确认迁移 %d"
+
+#: cinder/virt/libvirt/connection.py:896
+msgid "Instance is running"
+msgstr "实例在运行"
+
+#: cinder/virt/libvirt/connection.py:910
+msgid "Instance spawned successfully."
+msgstr "实例成功生产。"
+
+#: cinder/virt/libvirt/connection.py:926
+#, python-format
+msgid "data: %(data)r, fpath: %(fpath)r"
+msgstr "data:%(data)r, fpath: %(fpath)r"
+
+#: cinder/virt/libvirt/connection.py:978
+#, fuzzy
+msgid "Guest does not have a console available"
+msgstr "用户没有管理员权限"
+
+#: cinder/virt/libvirt/connection.py:1020
+#, python-format
+msgid "Path '%(path)s' supports direct I/O"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1024
+#, python-format
+msgid "Path '%(path)s' does not support direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1028 cinder/virt/libvirt/connection.py:1032
+#, python-format
+msgid "Error on '%(path)s' while checking direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1153
+msgid "Creating image"
+msgstr "正在创建镜像"
+
+#: cinder/virt/libvirt/connection.py:1339
+#, python-format
+msgid "Injecting %(injection)s into image %(img_id)s"
+msgstr "将 %(injection)s 注入到镜像 %(img_id)s"
+
+#: cinder/virt/libvirt/connection.py:1349
+#, python-format
+msgid "Ignoring error injecting data into image %(img_id)s (%(e)s)"
+msgstr "忽略向镜像 %(img_id)s  注入的数据的错误 (%(e)s)"
+
+#: cinder/virt/libvirt/connection.py:1381
+#, python-format
+msgid "block_device_list %s"
+msgstr "块设备列表 block_device_list %s"
+
+#: cinder/virt/libvirt/connection.py:1658
+msgid "Starting toXML method"
+msgstr "正在启动 toXML 方法"
+
+#: cinder/virt/libvirt/connection.py:1662
+msgid "Finished toXML method"
+msgstr "toXML方法完成"
+
+#: cinder/virt/libvirt/connection.py:1679
+#, python-format
+msgid ""
+"Error from libvirt while looking up %(instance_name)s: [Error Code "
+"%(error_code)s] %(ex)s"
+msgstr "查找 %(instance_name)s时libvirt出错:[错误代码 %(error_code)s] %(ex)s"
+
+#: cinder/virt/libvirt/connection.py:1920
+msgid "libvirt version is too old (does not support getVersion)"
+msgstr "libvirt版本过旧(不支持getVersion)"
+
+#: cinder/virt/libvirt/connection.py:1942
+#, python-format
+msgid "'<cpu>' must be 1, but %d\n"
+msgstr "'<cpu>' 必须为 1, 但是为 %d\n"
+
+#: cinder/virt/libvirt/connection.py:1969
+#, python-format
+msgid "topology (%(topology)s) must have %(ks)s"
+msgstr "拓扑 (%(topology)s) 必须含有 %(ks)s"
+
+#: cinder/virt/libvirt/connection.py:2067
+#, python-format
+msgid ""
+"Instance launched has CPU info:\n"
+"%s"
+msgstr ""
+"已启动实例的CPU信息:\n"
+"%s"
+
+#: cinder/virt/libvirt/connection.py:2079
+#, python-format
+msgid ""
+"CPU doesn't have compatibility.\n"
+"\n"
+"%(ret)s\n"
+"\n"
+"Refer to %(u)s"
+msgstr ""
+"CPU 不兼容.\n"
+"\n"
+"%(ret)s\n"
+"\n"
+"参考 %(u)s"
+
+#: cinder/virt/libvirt/connection.py:2136
+#, python-format
+msgid "Timeout migrating for %s. nwfilter not found."
+msgstr "迁移 %s 超时"
+
+#: cinder/virt/libvirt/connection.py:2352
+#, python-format
+msgid "skipping %(path)s since it looks like volume"
+msgstr "因它像卷,所以跳过 %(path)s"
+
+#: cinder/virt/libvirt/connection.py:2407
+#, python-format
+msgid "Getting disk size of %(i_name)s: %(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2458
+#, python-format
+msgid "Instance %s: Starting migrate_disk_and_power_off"
+msgstr "实例 %s:开始执行 migrate_disk_and_power_off"
+
+#: cinder/virt/libvirt/connection.py:2513
+#, fuzzy, python-format
+msgid "During wait running, instance disappeared."
+msgstr "%s 在运行中消失了。"
+
+#: cinder/virt/libvirt/connection.py:2518
+#, fuzzy, python-format
+msgid "Instance running successfully."
+msgstr "实例 %s 成功运行。"
+
+#: cinder/virt/libvirt/connection.py:2525
+#, python-format
+msgid "Instance %s: Starting finish_migration"
+msgstr "实例 %s:开始执行 finish_migration"
+
+#: cinder/virt/libvirt/connection.py:2565
+#, python-format
+msgid "Instance %s: Starting finish_revert_migration"
+msgstr "实例 %s:开始执行 finish_revert_migration"
+
+#: cinder/virt/libvirt/firewall.py:42
+msgid ""
+"Libvirt module could not be loaded. NWFilterFirewall will not work "
+"correctly."
+msgstr "Libvirt模块无法加载。NWFilterFirewall 无法正常工作。"
+
+#: cinder/virt/libvirt/firewall.py:93
+msgid "Called setup_basic_filtering in nwfilter"
+msgstr "在 nwfilter 里调用 setup_basic_filtering"
+
+#: cinder/virt/libvirt/firewall.py:101
+msgid "Ensuring static filters"
+msgstr "正在确保静态过滤器"
+
+#: cinder/virt/libvirt/firewall.py:171
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) is not found."
+msgstr "nwfilter(%(instance_filter_name)s)未找到"
+
+#: cinder/virt/libvirt/firewall.py:217
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) for%(name)s is not found."
+msgstr "名称为 %(name)s 的nwfilter(%(instance_filter_name)s) 未找到。"
+
+#: cinder/virt/libvirt/firewall.py:233
+msgid "iptables firewall: Setup Basic Filtering"
+msgstr "iptables 防火墙:设置基本的过滤规则"
+
+#: cinder/virt/libvirt/firewall.py:252
+msgid "Attempted to unfilter instance which is not filtered"
+msgstr "试图不过滤没有过滤的实例"
+
+#: cinder/virt/libvirt/imagecache.py:170
+#, python-format
+msgid "%s is a valid instance name"
+msgstr "%s 是一个正确的实例名称"
+
+#: cinder/virt/libvirt/imagecache.py:173
+#, python-format
+msgid "%s has a disk file"
+msgstr "%s 有一个磁盘文件"
+
+#: cinder/virt/libvirt/imagecache.py:175
+#, python-format
+msgid "Instance %(instance)s is backed by %(backing)s"
+msgstr "实例 %(instance)s  由文件 %(backing)s 来备份"
+
+#: cinder/virt/libvirt/imagecache.py:186
+#, python-format
+msgid ""
+"Instance %(instance)s is using a backing file %(backing)s which does not "
+"appear in the image service"
+msgstr "实例 %(instance)s 正在使用的备份文件 %(backing)s 没有出现在镜像服务里。"
+
+#: cinder/virt/libvirt/imagecache.py:237
+#, fuzzy, python-format
+msgid "%(id)s (%(base_file)s): image verification failed"
+msgstr "%(container_format)s-%(id)s (%(base_file)s):镜像验证失败"
+
+#: cinder/virt/libvirt/imagecache.py:247
+#, fuzzy, python-format
+msgid "%(id)s (%(base_file)s): image verification skipped, no hash stored"
+msgstr "%(container_format)s-%(id)s (%(base_file)s):镜像验证跳过,没有散列存储"
+
+#: cinder/virt/libvirt/imagecache.py:266
+#, fuzzy, python-format
+msgid "Cannot remove %(base_file)s, it does not exist"
+msgstr "删除 %(base_file)s 失败,错误是 %(error)s"
+
+#: cinder/virt/libvirt/imagecache.py:278
+#, python-format
+msgid "Base file too young to remove: %s"
+msgstr "基文件太新不需要删除:%s"
+
+#: cinder/virt/libvirt/imagecache.py:281
+#, python-format
+msgid "Removing base file: %s"
+msgstr "正在删除基文件:%s"
+
+#: cinder/virt/libvirt/imagecache.py:288
+#, python-format
+msgid "Failed to remove %(base_file)s, error was %(error)s"
+msgstr "删除 %(base_file)s 失败,错误是 %(error)s"
+
+#: cinder/virt/libvirt/imagecache.py:299
+#, fuzzy, python-format
+msgid "%(id)s (%(base_file)s): checking"
+msgstr "%(container_format)s-%(id)s (%(base_file)s):正在检查中"
+
+#: cinder/virt/libvirt/imagecache.py:318
+#, fuzzy, python-format
+msgid ""
+"%(id)s (%(base_file)s): in use: on this node %(local)d local, %(remote)d "
+"on other nodes"
+msgstr ""
+"%(container_format)s-%(id)s (%(base_file)s):正在使用中:本地节点 %(local)d, 远程节点 "
+"%(remote)d"
+
+#: cinder/virt/libvirt/imagecache.py:330
+#, fuzzy, python-format
+msgid ""
+"%(id)s (%(base_file)s): warning -- an absent base file is in use! "
+"instances: %(instance_list)s"
+msgstr ""
+"%(container_format)s-%(id)s (%(base_file)s):警告 -- 使用中缺少基文件! 实例: "
+"%(instance_list)s"
+
+#: cinder/virt/libvirt/imagecache.py:338
+#, fuzzy, python-format
+msgid "%(id)s (%(base_file)s): in use on (%(remote)d on other nodes)"
+msgstr "%(container_format)s-%(id)s (%(base_file)s):在使用中: 在远程节点 (%(remote)d 上"
+
+#: cinder/virt/libvirt/imagecache.py:348
+#, fuzzy, python-format
+msgid "%(id)s (%(base_file)s): image is not in use"
+msgstr "%(container_format)s-%(id)s (%(base_file)s):镜像不在使用中"
+
+#: cinder/virt/libvirt/imagecache.py:354
+#, fuzzy, python-format
+msgid "%(id)s (%(base_file)s): image is in use"
+msgstr "%(container_format)s-%(id)s (%(base_file)s):镜像在使用中"
+
+#: cinder/virt/libvirt/imagecache.py:377
+#, python-format
+msgid "Skipping verification, no base directory at %s"
+msgstr "跳过验证,在 %s 上没有基础目录"
+
+#: cinder/virt/libvirt/imagecache.py:381
+msgid "Verify base images"
+msgstr "验证基础镜像"
+
+#: cinder/virt/libvirt/imagecache.py:388
+#, python-format
+msgid "Image id %(id)s yields fingerprint %(fingerprint)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:406
+#, python-format
+msgid "Unknown base file: %s"
+msgstr "未知的基文件:%s"
+
+#: cinder/virt/libvirt/imagecache.py:411
+#, python-format
+msgid "Active base files: %s"
+msgstr "活跃的基文件:%s"
+
+#: cinder/virt/libvirt/imagecache.py:414
+#, python-format
+msgid "Corrupt base files: %s"
+msgstr "损坏的基文件:%s"
+
+#: cinder/virt/libvirt/imagecache.py:418
+#, python-format
+msgid "Removable base files: %s"
+msgstr "可删除的基文件:%s"
+
+#: cinder/virt/libvirt/imagecache.py:426
+msgid "Verification complete"
+msgstr "确认完成"
+
+#: cinder/virt/libvirt/utils.py:264
+msgid "Unable to find an open port"
+msgstr "无法找到一个开放端口"
+
+#: cinder/virt/libvirt/vif.py:90
+#, python-format
+msgid "Ensuring vlan %(vlan)s and bridge %(bridge)s"
+msgstr "保证vlan %(vlan)s 和桥 %(bridge)s"
+
+#: cinder/virt/libvirt/vif.py:99
+#, python-format
+msgid "Ensuring bridge %s"
+msgstr "保证桥 %s"
+
+#: cinder/virt/libvirt/vif.py:165 cinder/virt/libvirt/vif.py:220
+#, python-format
+msgid "Failed while unplugging vif of instance '%s'"
+msgstr "移除实例”%s“的虚拟网络设备时失败"
+
+#: cinder/virt/libvirt/volume.py:163
+#, python-format
+msgid "iSCSI device not found at %s"
+msgstr "在 %s 未找到iSCSI设备"
+
+#: cinder/virt/libvirt/volume.py:166
+#, python-format
+msgid ""
+"ISCSI volume not yet found at: %(mount_device)s. Will rescan & retry.  "
+"Try number: %(tries)s"
+msgstr "在 %(mount_device)s 上还没有找到iSCSI卷。将再次扫描并重试。尝试次数:%(tries)s"
+
+#: cinder/virt/libvirt/volume.py:178
+#, python-format
+msgid "Found iSCSI node %(mount_device)s (after %(tries)s rescans)"
+msgstr "找到iSCSI节点 %(mount_device)s (经过%(tries)s 次再扫描)"
+
+#: cinder/virt/vmwareapi/error_util.py:93
+#, python-format
+msgid "Error(s) %s occurred in the call to RetrieveProperties"
+msgstr "调用 RetrieveProperties 时发生错误 %s"
+
+#: cinder/virt/vmwareapi/fake.py:44 cinder/virt/xenapi/fake.py:77
+#, python-format
+msgid "%(text)s: _db_content => %(content)s"
+msgstr "%(text)s: _db_content => %(content)s"
+
+#: cinder/virt/vmwareapi/fake.py:131
+#, python-format
+msgid "Property %(attr)s not set for the managed object %(objName)s"
+msgstr "属性 %(attr)s 没有为管理对象 %(objName)s 设置"
+
+#: cinder/virt/vmwareapi/fake.py:437
+msgid "There is no VM registered"
+msgstr "没有虚拟机注册"
+
+#: cinder/virt/vmwareapi/fake.py:439 cinder/virt/vmwareapi/fake.py:609
+#, python-format
+msgid "Virtual Machine with ref %s is not there"
+msgstr "ref 为 %s 的虚拟机不存在"
+
+#: cinder/virt/vmwareapi/fake.py:502
+#, python-format
+msgid "Logging out a session that is invalid or already logged out: %s"
+msgstr "退出无效的会话或者已经退出了:%s"
+
+#: cinder/virt/vmwareapi/fake.py:517
+msgid "Session is faulty"
+msgstr "会话有错误"
+
+#: cinder/virt/vmwareapi/fake.py:520
+msgid "Session Invalid"
+msgstr "会话无效"
+
+#: cinder/virt/vmwareapi/fake.py:606
+msgid " No Virtual Machine has been registered yet"
+msgstr " 还没有虚拟机被注册"
+
+#: cinder/virt/vmwareapi/io_util.py:99
+#, python-format
+msgid "Glance image %s is in killed state"
+msgstr "Glance 镜像 %s 在被杀死的状态"
+
+#: cinder/virt/vmwareapi/io_util.py:107
+#, python-format
+msgid "Glance image %(image_id)s is in unknown state - %(state)s"
+msgstr "Glance 镜像 %(image_id)s 处于未知状态 - %(state)s"
+
+#: cinder/virt/vmwareapi/network_utils.py:128
+msgid ""
+"ESX SOAP server returned an empty port group for the host system in its "
+"response"
+msgstr "ESX SOAP 服务器在响应里为托管系统返回一个空的端口组"
+
+#: cinder/virt/vmwareapi/network_utils.py:155
+#, python-format
+msgid "Creating Port Group with name %s on the ESX host"
+msgstr "正在ESX主机上创建名称为 %s 的端口组"
+
+#: cinder/virt/vmwareapi/network_utils.py:169
+#, python-format
+msgid "Created Port Group with name %s on the ESX host"
+msgstr "已经在ESX主机上创建了名称为 %s 的端口组"
+
+#: cinder/virt/vmwareapi/read_write_util.py:150
+#, python-format
+msgid "Exception during HTTP connection close in VMWareHTTpWrite. Exception is %s"
+msgstr "HTTP连接关闭时发生异常 VMWareHTTpWrite. Exception:%s"
+
+#: cinder/virt/vmwareapi/vim.py:84
+msgid "Unable to import suds."
+msgstr "无法导入 suds。"
+
+#: cinder/virt/vmwareapi/vim.py:90
+msgid "Must specify vmwareapi_wsdl_loc"
+msgstr "必须指定 vmwareapi_wsdl_loc"
+
+#: cinder/virt/vmwareapi/vim.py:145
+#, python-format
+msgid "No such SOAP method '%s' provided by VI SDK"
+msgstr "VI SDK没有提供这样的SOAP方法 “%s”"
+
+#: cinder/virt/vmwareapi/vim.py:150
+#, python-format
+msgid "httplib error in %s: "
+msgstr "在 %s 中发生 httplib 错误: "
+
+#: cinder/virt/vmwareapi/vim.py:157
+#, python-format
+msgid "Socket error in %s: "
+msgstr "在 %s 套接字中发生错误 "
+
+#: cinder/virt/vmwareapi/vim.py:162
+#, python-format
+msgid "Type error in  %s: "
+msgstr "在%s里发生类型错误: "
+
+#: cinder/virt/vmwareapi/vim.py:166
+#, python-format
+msgid "Exception in %s "
+msgstr "在 %s 发生异常 "
+
+#: cinder/virt/vmwareapi/vmops.py:66
+msgid "Getting list of instances"
+msgstr "获取实例列表"
+
+#: cinder/virt/vmwareapi/vmops.py:82
+#, python-format
+msgid "Got total of %s instances"
+msgstr "总共获得 %s 个实例"
+
+#: cinder/virt/vmwareapi/vmops.py:126
+msgid "Couldn't get a local Datastore reference"
+msgstr "无法得到本地的存储引用"
+
+#: cinder/virt/vmwareapi/vmops.py:196
+#, python-format
+msgid "Creating VM with the name %s on the ESX  host"
+msgstr "在ESX主机上创建名为 %s 的虚拟机"
+
+#: cinder/virt/vmwareapi/vmops.py:205
+#, python-format
+msgid "Created VM with the name %s on the ESX  host"
+msgstr "已经在ESX主机上创建名为 %s 的虚拟机"
+
+#: cinder/virt/vmwareapi/vmops.py:234
+#, python-format
+msgid ""
+"Creating Virtual Disk of size  %(vmdk_file_size_in_kb)s KB and adapter "
+"type  %(adapter_type)s on the ESX host local store %(data_store_name)s"
+msgstr ""
+"创建 %(vmdk_file_size_in_kb)s KB 大的虚拟磁盘和适配器类型 %(adapter_type)s 在ESX主机的本地存储 "
+"%(data_store_name)s 上"
+
+#: cinder/virt/vmwareapi/vmops.py:251
+#, python-format
+msgid ""
+"Created Virtual Disk of size %(vmdk_file_size_in_kb)s KB on the ESX host "
+"local store %(data_store_name)s"
+msgstr "创建 %(vmdk_file_size_in_kb)s KB 大的虚拟磁盘在ESX主机的本地存储 %(data_store_name)s 上"
+
+#: cinder/virt/vmwareapi/vmops.py:260
+#, python-format
+msgid ""
+"Deleting the file %(flat_uploaded_vmdk_path)s on the ESX host localstore "
+"%(data_store_name)s"
+msgstr "删除文件 %(flat_uploaded_vmdk_path)s 在ESX主机的本地存储 %(data_store_name)s 上"
+
+#: cinder/virt/vmwareapi/vmops.py:272
+#, python-format
+msgid ""
+"Deleted the file %(flat_uploaded_vmdk_path)s on the ESX host local store "
+"%(data_store_name)s"
+msgstr "删除文件 %(flat_uploaded_vmdk_path)s 在ESX主机的本地存储 %(data_store_name)s 上"
+
+#: cinder/virt/vmwareapi/vmops.py:283
+#, python-format
+msgid ""
+"Downloading image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr "下载文件数据 %(image_ref)s 到ESX主机的数据存储 %(data_store_name)s 上"
+
+#: cinder/virt/vmwareapi/vmops.py:298
+#, python-format
+msgid ""
+"Downloaded image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr "已经下载镜像文件数据 %(image_ref)s 在ESX数据存储 %(data_store_name)s 上"
+
+#: cinder/virt/vmwareapi/vmops.py:315
+#, python-format
+msgid "Reconfiguring VM instance %s to attach the image disk"
+msgstr "正在重新配置虚拟机实例 %s 来附加镜像磁盘"
+
+#: cinder/virt/vmwareapi/vmops.py:322
+#, python-format
+msgid "Reconfigured VM instance %s to attach the image disk"
+msgstr "已经重新配置虚拟机实例 %s 来附加于镜像磁盘"
+
+#: cinder/virt/vmwareapi/vmops.py:329
+#, python-format
+msgid "Powering on the VM instance %s"
+msgstr "正启动虚拟机实例 %s"
+
+#: cinder/virt/vmwareapi/vmops.py:335
+#, python-format
+msgid "Powered on the VM instance %s"
+msgstr "已经启动虚拟机实例 %s"
+
+#: cinder/virt/vmwareapi/vmops.py:381
+#, python-format
+msgid "Creating Snapshot of the VM instance %s "
+msgstr "正在创建虚拟机实例快照 %s "
+
+#: cinder/virt/vmwareapi/vmops.py:391
+#, python-format
+msgid "Created Snapshot of the VM instance %s "
+msgstr "已经创建虚拟机实例快照 %s "
+
+#: cinder/virt/vmwareapi/vmops.py:434
+#, python-format
+msgid "Copying disk data before snapshot of the VM  instance %s"
+msgstr "正在快照虚拟机实例 %s 之前复制磁盘数据"
+
+#: cinder/virt/vmwareapi/vmops.py:447
+#, python-format
+msgid "Copied disk data before snapshot of the VM instance %s"
+msgstr "已经在快照虚拟机实例 %s 之前复制磁盘数据"
+
+#: cinder/virt/vmwareapi/vmops.py:456
+#, python-format
+msgid "Uploading image %s"
+msgstr "上传镜像 %s"
+
+#: cinder/virt/vmwareapi/vmops.py:469
+#, python-format
+msgid "Uploaded image %s"
+msgstr "已经上传镜像  %s"
+
+#: cinder/virt/vmwareapi/vmops.py:479
+#, python-format
+msgid "Deleting temporary vmdk file %s"
+msgstr "正在删除临时的vmdk文件 %s"
+
+#: cinder/virt/vmwareapi/vmops.py:488
+#, python-format
+msgid "Deleted temporary vmdk file %s"
+msgstr "已经删除临时的vmdk文件 %s"
+
+#: cinder/virt/vmwareapi/vmops.py:520
+msgid "instance is not powered on"
+msgstr "实例未启动"
+
+#: cinder/virt/vmwareapi/vmops.py:527
+#, python-format
+msgid "Rebooting guest OS of VM %s"
+msgstr "正在重启虚拟机客户操作系统 %s"
+
+#: cinder/virt/vmwareapi/vmops.py:530
+#, python-format
+msgid "Rebooted guest OS of VM %s"
+msgstr "已经重启虚拟机客户操作系统 %s"
+
+#: cinder/virt/vmwareapi/vmops.py:532
+#, python-format
+msgid "Doing hard reboot of VM %s"
+msgstr "正在冷启动虚拟机 %s"
+
+#: cinder/virt/vmwareapi/vmops.py:536
+#, python-format
+msgid "Did hard reboot of VM %s"
+msgstr "已经冷启动虚拟机 %s"
+
+#: cinder/virt/vmwareapi/vmops.py:548
+#, python-format
+msgid "instance - %s not present"
+msgstr "实例 - %s 不存在"
+
+#: cinder/virt/vmwareapi/vmops.py:567
+#, python-format
+msgid "Powering off the VM %s"
+msgstr "正在关闭虚拟机 %s"
+
+#: cinder/virt/vmwareapi/vmops.py:572
+#, python-format
+msgid "Powered off the VM %s"
+msgstr "关闭虚拟机 %s"
+
+#: cinder/virt/vmwareapi/vmops.py:576
+#, python-format
+msgid "Unregistering the VM %s"
+msgstr "正在注销虚拟机 %s"
+
+#: cinder/virt/vmwareapi/vmops.py:579
+#, python-format
+msgid "Unregistered the VM %s"
+msgstr "已经注销虚拟机 %s"
+
+#: cinder/virt/vmwareapi/vmops.py:581
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while un-registering the "
+"VM: %s"
+msgstr "注销虚拟机时在 vmwareapi:vmops:destroy 中发生异常:%s"
+
+#: cinder/virt/vmwareapi/vmops.py:592
+#, python-format
+msgid "Deleting contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr "正在删除虚拟机 %(name)s 的内容位置在数据存储 %(datastore_name)s 中"
+
+#: cinder/virt/vmwareapi/vmops.py:602
+#, python-format
+msgid "Deleted contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr "已经删除虚拟机 %(name)s 的内未知在数据存储 %(datastore_name)s 中"
+
+#: cinder/virt/vmwareapi/vmops.py:607
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while deleting the VM "
+"contents from the disk: %s"
+msgstr "当从磁盘删除虚拟机的内容时在 vmwareapi:vmops:destroy 里发生异常:%s"
+
+#: cinder/virt/vmwareapi/vmops.py:615
+msgid "pause not supported for vmwareapi"
+msgstr "vmwareapi 不支持暂停"
+
+#: cinder/virt/vmwareapi/vmops.py:619
+msgid "unpause not supported for vmwareapi"
+msgstr "vmwareapi 不支持取消暂停"
+
+#: cinder/virt/vmwareapi/vmops.py:633
+#, python-format
+msgid "Suspending the VM %s "
+msgstr "挂起虚拟机 %s "
+
+#: cinder/virt/vmwareapi/vmops.py:637
+#, python-format
+msgid "Suspended the VM %s "
+msgstr "已经挂起虚拟机 %s "
+
+#: cinder/virt/vmwareapi/vmops.py:640
+msgid "instance is powered off and can not be suspended."
+msgstr "实例已关闭,无法挂起。"
+
+#: cinder/virt/vmwareapi/vmops.py:643
+#, python-format
+msgid "VM %s was already in suspended state. So returning without doing anything"
+msgstr "虚拟机 %s 已经在挂起状态。不做任何操作直接返回"
+
+#: cinder/virt/vmwareapi/vmops.py:656
+#, python-format
+msgid "Resuming the VM %s"
+msgstr "正在恢复虚拟机 %s"
+
+#: cinder/virt/vmwareapi/vmops.py:661
+#, python-format
+msgid "Resumed the VM %s "
+msgstr "已经恢复虚拟机 %s "
+
+#: cinder/virt/vmwareapi/vmops.py:663
+msgid "instance is not in a suspended state"
+msgstr "实例不在挂起状态"
+
+#: cinder/virt/vmwareapi/vmops.py:699
+msgid "get_diagnostics not implemented for vmwareapi"
+msgstr "get_diagnostics 没有在 vmwareapi 里实现"
+
+#: cinder/virt/vmwareapi/vmops.py:757
+#, python-format
+msgid ""
+"Reconfiguring VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr "正在重新配置实例 %(name)s 来设置机器的id为ip - %(ip_addr)s"
+
+#: cinder/virt/vmwareapi/vmops.py:765
+#, python-format
+msgid ""
+"Reconfigured VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr "已经重新配置虚拟机实例 %(name)s 来设置机器的id为ip - %(ip_addr)s"
+
+#: cinder/virt/vmwareapi/vmops.py:802
+#, python-format
+msgid "Creating directory with path %s"
+msgstr "正在使用路径 %s 创建目录"
+
+#: cinder/virt/vmwareapi/vmops.py:806
+#, python-format
+msgid "Created directory with path %s"
+msgstr "已经创建路径为 %s 的目录"
+
+#: cinder/virt/vmwareapi/vmware_images.py:89
+#, python-format
+msgid "Downloading image %s from glance image server"
+msgstr "正在从glance镜像服务器中下载镜像 %s"
+
+#: cinder/virt/vmwareapi/vmware_images.py:103
+#, python-format
+msgid "Downloaded image %s from glance image server"
+msgstr "已经从glance镜像服务器中下载镜像 %s"
+
+#: cinder/virt/vmwareapi/vmware_images.py:108
+#, python-format
+msgid "Uploading image %s to the Glance image server"
+msgstr "正在向Glance镜像服务器上传镜像 %s"
+
+#: cinder/virt/vmwareapi/vmware_images.py:129
+#, python-format
+msgid "Uploaded image %s to the Glance image server"
+msgstr "已经向Glance镜像服务器上传了镜像 %s"
+
+#: cinder/virt/vmwareapi/vmware_images.py:139
+#, python-format
+msgid "Getting image size for the image %s"
+msgstr "正在获取镜像 %s 的大小"
+
+#: cinder/virt/vmwareapi/vmware_images.py:143
+#, python-format
+msgid "Got image size of %(size)s for the image %(image)s"
+msgstr "获得大小为 %(size)s 的镜像目的为了 %(image)s"
+
+#: cinder/virt/xenapi/fake.py:553 cinder/virt/xenapi/fake.py:652
+#: cinder/virt/xenapi/fake.py:670 cinder/virt/xenapi/fake.py:732
+msgid "Raising NotImplemented"
+msgstr "产生 NotImplemented 错误"
+
+#: cinder/virt/xenapi/fake.py:555
+#, python-format
+msgid "xenapi.fake does not have an implementation for %s"
+msgstr "xenapi.fake 没有 %s 的实现"
+
+#: cinder/virt/xenapi/fake.py:589
+#, python-format
+msgid "Calling %(localname)s %(impl)s"
+msgstr "正在调用 %(localname)s %(impl)s"
+
+#: cinder/virt/xenapi/fake.py:594
+#, python-format
+msgid "Calling getter %s"
+msgstr "调用 getter %s"
+
+#: cinder/virt/xenapi/fake.py:654
+#, python-format
+msgid ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+msgstr "xenapi.fake 没有 %s 的实现或者调用时用了错误数目的参数"
+
+#: cinder/virt/xenapi/host.py:67
+#, python-format
+msgid ""
+"Instance %(name)s running on %(host)s could not be found in the database:"
+" assuming it is a worker VM and skipping migration to a new host"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:137
+#, python-format
+msgid "Unable to get SR for this host: %s"
+msgstr "无法为主机得到存储库:%s"
+
+#: cinder/virt/xenapi/host.py:169
+#, fuzzy, python-format
+msgid "Unable to get updated status"
+msgstr "无法得到最新的状态:%s"
+
+#: cinder/virt/xenapi/host.py:172
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s."
+msgstr "对 %(method)s 的调用返回错误:%(e)s。"
+
+#: cinder/virt/xenapi/network_utils.py:37
+#, python-format
+msgid "Found non-unique network for name_label %s"
+msgstr "发现不唯一的网络 name_label %s"
+
+#: cinder/virt/xenapi/network_utils.py:55
+#, python-format
+msgid "Found non-unique network for bridge %s"
+msgstr "发现桥 %s 的网络不唯一"
+
+#: cinder/virt/xenapi/network_utils.py:58
+#, python-format
+msgid "Found no network for bridge %s"
+msgstr "发现网桥 %s 没有网络"
+
+#: cinder/virt/xenapi/pool.py:111
+#, python-format
+msgid "Unable to eject %(host)s from the pool; pool not empty"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:126
+#, python-format
+msgid "Unable to eject %(host)s from the pool; No master found"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:143
+#, python-format
+msgid "Pool-Join failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:146
+#, fuzzy, python-format
+msgid "Unable to join %(host)s in the pool"
+msgstr "无法找到实例 %s 的宿主机"
+
+#: cinder/virt/xenapi/pool.py:162
+#, fuzzy, python-format
+msgid "Pool-eject failed: %(e)s"
+msgstr "注入文件失败:%(resp)r"
+
+#: cinder/virt/xenapi/pool.py:174
+#, fuzzy, python-format
+msgid "Unable to set up pool: %(e)s."
+msgstr "无法使用全局角色 %(role_id)s"
+
+#: cinder/virt/xenapi/pool.py:185
+#, python-format
+msgid "Pool-set_name_label failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:103
+#, python-format
+msgid "Found no PIF for device %s"
+msgstr "没有找到设备 %s 的PIF"
+
+#: cinder/virt/xenapi/vif.py:122
+#, python-format
+msgid ""
+"PIF %(pif_rec['uuid'])s for network %(bridge)s has VLAN id %(pif_vlan)d. "
+"Expected %(vlan_num)d"
+msgstr ""
+"网络 %(bridge)s 的 PIF %(pif_rec['uuid'])s  有VLAN id %(pif_vlan)d。期待的数目是 "
+"%(vlan_num)d"
+
+#: cinder/virt/xenapi/vm_utils.py:218
+#, fuzzy, python-format
+msgid "Created VM"
+msgstr "_create: %s"
+
+#: cinder/virt/xenapi/vm_utils.py:245
+#, python-format
+msgid "VBD not found in instance %s"
+msgstr "没有在实例 %s 找到VBD"
+
+#: cinder/virt/xenapi/vm_utils.py:262
+#, fuzzy, python-format
+msgid "VBD %s already detached"
+msgstr "已经分离"
+
+#: cinder/virt/xenapi/vm_utils.py:265
+#, python-format
+msgid "VBD %(vbd_ref)s detach rejected, attempt %(num_attempt)d/%(max_attempts)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:270
+#, python-format
+msgid "Unable to unplug VBD %s"
+msgstr "无法移除 VBD %s"
+
+#: cinder/virt/xenapi/vm_utils.py:275
+#, python-format
+msgid "Reached maximum number of retries trying to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:286
+#, python-format
+msgid "Unable to destroy VBD %s"
+msgstr "无法销毁 VBD %s"
+
+#: cinder/virt/xenapi/vm_utils.py:305
+#, fuzzy, python-format
+msgid "Creating %(vbd_type)s-type VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+msgstr "创建了VBD %(vbd_ref)s 目的是为了虚拟机 %(vm_ref)s,VDI %(vdi_ref)s"
+
+#: cinder/virt/xenapi/vm_utils.py:308
+#, python-format
+msgid "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+msgstr "创建了VBD %(vbd_ref)s 目的是为了虚拟机 %(vm_ref)s,VDI %(vdi_ref)s"
+
+#: cinder/virt/xenapi/vm_utils.py:319
+#, python-format
+msgid "Unable to destroy VDI %s"
+msgstr "无法销毁 VDI %s"
+
+#: cinder/virt/xenapi/vm_utils.py:336
+#, python-format
+msgid ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+msgstr ""
+"创建了 VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s) 位置在"
+" %(sr_ref)s。"
+
+#: cinder/virt/xenapi/vm_utils.py:345
+#, python-format
+msgid "Copied VDI %(vdi_ref)s from VDI %(vdi_to_copy_ref)s on %(sr_ref)s."
+msgstr "复制了 VDI %(vdi_ref)s ,对象来自VDI %(vdi_to_copy_ref)s ,位置在 %(sr_ref)s。"
+
+#: cinder/virt/xenapi/vm_utils.py:353
+#, python-format
+msgid "Cloned VDI %(vdi_ref)s from VDI %(vdi_to_clone_ref)s"
+msgstr "克隆了 VDI %(vdi_ref)s 对象来自VDI %(vdi_to_clone_ref)s"
+
+#: cinder/virt/xenapi/vm_utils.py:372
+#, fuzzy, python-format
+msgid "No primary VDI found for %(vm_ref)s"
+msgstr "未找到 %(vm_ref)s 的主VDI"
+
+#: cinder/virt/xenapi/vm_utils.py:379
+#, fuzzy, python-format
+msgid "Snapshotting with label '%(label)s'"
+msgstr "正在为虚拟机 %(vm_ref)s 做快照,采用标签是 “%(label)s”"
+
+#: cinder/virt/xenapi/vm_utils.py:392
+#, fuzzy, python-format
+msgid "Created snapshot %(template_vm_ref)s"
+msgstr "已经创建了快照 %(template_vm_ref)s 快照对象是虚拟机 %(vm_ref)s。"
+
+#: cinder/virt/xenapi/vm_utils.py:431
+#, python-format
+msgid "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+msgstr "请求xapi 上传 %(vdi_uuids)s 作为镜像ID %(image_id)s"
+
+#: cinder/virt/xenapi/vm_utils.py:583
+#, python-format
+msgid "Creating blank HD of size %(req_size)d gigs"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:634
+#, python-format
+msgid ""
+"Fast cloning is only supported on default local SR of type ext. SR on "
+"this system was found to be of type %(sr_type)s. Ignoring the cow flag."
+msgstr "只能在ext类型的缺省本地存储库支持快速克隆。这个系统的存储库类型为 %(sr_type)s。忽略此 cow 标记。"
+
+#: cinder/virt/xenapi/vm_utils.py:724
+#, python-format
+msgid ""
+"download_vhd %(image)s attempt %(attempt_num)d/%(max_attempts)d from "
+"%(glance_host)s:%(glance_port)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:734
+#, python-format
+msgid "download_vhd failed: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:750
+#, python-format
+msgid "Asking xapi to fetch vhd image %(image)s"
+msgstr "请求 xapi 获取 vhd 镜像 %(image)s"
+
+#: cinder/virt/xenapi/vm_utils.py:760
+#, python-format
+msgid ""
+"xapi 'download_vhd' returned VDI of type '%(vdi_type)s' with UUID "
+"'%(vdi_uuid)s'"
+msgstr "xapi 'download_vhd' 返回“%(vdi_type)s”类型的VDI,其UUID为 “%(vdi_uuid)s”"
+
+#: cinder/virt/xenapi/vm_utils.py:789
+#, python-format
+msgid "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+msgstr "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+
+#: cinder/virt/xenapi/vm_utils.py:805
+#, python-format
+msgid "image_size_bytes=%(size_bytes)d, allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr "image_size_bytes=%(size_bytes)d,allowed_size_bytes=%(allowed_size_bytes)d"
+
+#: cinder/virt/xenapi/vm_utils.py:809
+#, python-format
+msgid ""
+"Image size %(size_bytes)d exceeded instance_type allowed size "
+"%(allowed_size_bytes)d"
+msgstr "镜像大小 %(size_bytes)d 超过instance_type所允许的小大 %(allowed_size_bytes)d"
+
+#: cinder/virt/xenapi/vm_utils.py:831
+#, fuzzy, python-format
+msgid "Fetching image %(image)s, type %(image_type_str)"
+msgstr "获取镜像 %(image)s"
+
+#: cinder/virt/xenapi/vm_utils.py:844
+#, fuzzy, python-format
+msgid "Size for image %(image)s: %(virtual_size)d"
+msgstr "镜像 %(image)s 的大小:%(virtual_size)d"
+
+#: cinder/virt/xenapi/vm_utils.py:853
+#, python-format
+msgid ""
+"Kernel/Ramdisk image is too large: %(vdi_size)d bytes, max %(max_size)d "
+"bytes"
+msgstr "内核/内存盘镜像太大:%(vdi_size)d 字节,最大 %(max_size)d 字节"
+
+#: cinder/virt/xenapi/vm_utils.py:870
+#, python-format
+msgid "Copying VDI %s to /boot/guest on dom0"
+msgstr "将VDI %s 复制到dom0的/boot/guest下"
+
+#: cinder/virt/xenapi/vm_utils.py:884
+#, python-format
+msgid "Kernel/Ramdisk VDI %s destroyed"
+msgstr "内核/内存盘 VDI %s 已销毁"
+
+#: cinder/virt/xenapi/vm_utils.py:895
+#, fuzzy, python-format
+msgid "Failed to fetch glance image"
+msgstr "实例 %s:获取Glance镜像失败"
+
+#: cinder/virt/xenapi/vm_utils.py:934
+#, python-format
+msgid "Detected %(image_type_str)s format for image %(image_ref)s"
+msgstr "检测到 %(image_type_str)s 格式,目标是镜像 %(image_ref)s"
+
+#: cinder/virt/xenapi/vm_utils.py:955
+#, python-format
+msgid "Looking up vdi %s for PV kernel"
+msgstr "为PV内核查询vdi %s"
+
+#: cinder/virt/xenapi/vm_utils.py:973
+#, python-format
+msgid "Unknown image format %(disk_image_type)s"
+msgstr "未知的镜像格式 %(disk_image_type)s"
+
+#: cinder/virt/xenapi/vm_utils.py:1016
+#, python-format
+msgid "VDI %s is still available"
+msgstr "VDI %s 依然可用"
+
+#: cinder/virt/xenapi/vm_utils.py:1059
+#, python-format
+msgid "(VM_UTILS) xenserver vm state -> |%s|"
+msgstr "(VM_UTILS) xenserver 虚拟机状态 -> |%s|"
+
+#: cinder/virt/xenapi/vm_utils.py:1061
+#, python-format
+msgid "(VM_UTILS) xenapi power_state -> |%s|"
+msgstr "(VM_UTILS) xenapi power_state -> |%s|"
+
+#: cinder/virt/xenapi/vm_utils.py:1088
+#, python-format
+msgid "Unable to parse rrd of %(vm_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1108
+#, python-format
+msgid "Re-scanning SR %s"
+msgstr "重新扫描存储库 %s"
+
+#: cinder/virt/xenapi/vm_utils.py:1136
+#, python-format
+msgid "Flag sr_matching_filter '%s' does not respect formatting convention"
+msgstr "标记sr_matching_filter '%s' 没有遵循格式要求"
+
+#: cinder/virt/xenapi/vm_utils.py:1154
+msgid ""
+"XenAPI is unable to find a Storage Repository to install guest instances "
+"on. Please check your configuration and/or configure the flag "
+"'sr_matching_filter'"
+msgstr "XenAPI无法找到安装客户实例的存储库。请检查你的配置或者配置标记'sr_matching_filter'"
+
+#: cinder/virt/xenapi/vm_utils.py:1167
+msgid "Cannot find SR of content-type ISO"
+msgstr "无法找到content-type ISO的存储库"
+
+#: cinder/virt/xenapi/vm_utils.py:1175
+#, python-format
+msgid "ISO: looking at SR %(sr_rec)s"
+msgstr "ISO:正在查看存储库 %(sr_rec)s"
+
+#: cinder/virt/xenapi/vm_utils.py:1177
+msgid "ISO: not iso content"
+msgstr "ISO:非iso内容"
+
+#: cinder/virt/xenapi/vm_utils.py:1180
+msgid "ISO: iso content_type, no 'i18n-key' key"
+msgstr "ISO:iso content_type,没有 'i18n-key' 键"
+
+#: cinder/virt/xenapi/vm_utils.py:1183
+msgid "ISO: iso content_type, i18n-key value not 'local-storage-iso'"
+msgstr "ISO:iso content_type,i18n-key的值不是 'local-storage-iso'"
+
+#: cinder/virt/xenapi/vm_utils.py:1187
+msgid "ISO: SR MATCHing our criteria"
+msgstr "ISO: 存储库符合标准"
+
+#: cinder/virt/xenapi/vm_utils.py:1189
+msgid "ISO: ISO, looking to see if it is host local"
+msgstr "ISO: ISO, 正在查看是否是本地的主机"
+
+#: cinder/virt/xenapi/vm_utils.py:1192
+#, python-format
+msgid "ISO: PBD %(pbd_ref)s disappeared"
+msgstr "ISO: PBD %(pbd_ref)s 消失了"
+
+#: cinder/virt/xenapi/vm_utils.py:1195
+#, python-format
+msgid "ISO: PBD matching, want %(pbd_rec)s, have %(host)s"
+msgstr "ISO: PBD匹配, 想要 %(pbd_rec)s, 目前有 %(host)s"
+
+#: cinder/virt/xenapi/vm_utils.py:1198
+msgid "ISO: SR with local PBD"
+msgstr "ISO:含有本地PBD的存储库"
+
+#: cinder/virt/xenapi/vm_utils.py:1220
+#, python-format
+msgid ""
+"Unable to obtain RRD XML for VM %(vm_uuid)s with server details: "
+"%(server)s."
+msgstr "无法为含服务器详细信息的虚拟机 %(vm_uuid)s 获取RRD XML:%(server)s。"
+
+#: cinder/virt/xenapi/vm_utils.py:1236
+#, python-format
+msgid "Unable to obtain RRD XML updates with server details: %(server)s."
+msgstr "无法获取包含服务器详细情况的RRD XML更新:%(server)s。"
+
+#: cinder/virt/xenapi/vm_utils.py:1290
+#, python-format
+msgid "Invalid statistics data from Xenserver: %s"
+msgstr "来自Xenserver无效的统计数据:%s"
+
+#: cinder/virt/xenapi/vm_utils.py:1343
+#, python-format
+msgid "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+msgstr "VHD %(vdi_uuid)s 有父 %(parent_ref)s"
+
+#: cinder/virt/xenapi/vm_utils.py:1417
+#, python-format
+msgid ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+msgstr "父标识 %(parent_uuid)s 和原先的父标识 %(original_parent_uuid)s 不匹配,正在等待合并..."
+
+#: cinder/virt/xenapi/vm_utils.py:1427
+#, python-format
+msgid "VHD coalesce attempts exceeded (%(max_attempts)d), giving up..."
+msgstr "VHD coalesce 将要超过(%(max_attempts)d),放弃中..."
+
+#: cinder/virt/xenapi/vm_utils.py:1462
+#, python-format
+msgid "Timeout waiting for device %s to be created"
+msgstr "等待设备 %s 创建超时"
+
+#: cinder/virt/xenapi/vm_utils.py:1473
+#, python-format
+msgid "Plugging VBD %s ... "
+msgstr "插入VBD %s... "
+
+#: cinder/virt/xenapi/vm_utils.py:1476
+#, python-format
+msgid "Plugging VBD %s done."
+msgstr "插入VBD %s 完成。"
+
+#: cinder/virt/xenapi/vm_utils.py:1478
+#, python-format
+msgid "VBD %(vbd_ref)s plugged as %(orig_dev)s"
+msgstr "VBD %(vbd_ref)s 作为 %(orig_dev)s 插入"
+
+#: cinder/virt/xenapi/vm_utils.py:1481
+#, python-format
+msgid "VBD %(vbd_ref)s plugged into wrong dev, remapping to %(dev)s"
+msgstr "VBD %(vbd_ref)s 插入错误的设备,重新映射为 %(dev)s"
+
+#: cinder/virt/xenapi/vm_utils.py:1490
+#, python-format
+msgid "Destroying VBD for VDI %s ... "
+msgstr "正在销毁VDI为 %s 的 VBD "
+
+#: cinder/virt/xenapi/vm_utils.py:1498
+#, python-format
+msgid "Destroying VBD for VDI %s done."
+msgstr "已经销毁VDI为 %s 的 VBD"
+
+#: cinder/virt/xenapi/vm_utils.py:1511
+#, python-format
+msgid "Running pygrub against %s"
+msgstr "对 %s 运行pygrub"
+
+#: cinder/virt/xenapi/vm_utils.py:1518
+#, python-format
+msgid "Found Xen kernel %s"
+msgstr "找到Xen内核 %s"
+
+#: cinder/virt/xenapi/vm_utils.py:1520
+msgid "No Xen kernel found.  Booting HVM."
+msgstr "没有找到Xen内核。正在启动HVM。"
+
+#: cinder/virt/xenapi/vm_utils.py:1533
+msgid "Partitions:"
+msgstr "分区:"
+
+#: cinder/virt/xenapi/vm_utils.py:1539
+#, python-format
+msgid "  %(num)s: %(ptype)s %(size)d sectors"
+msgstr "  %(num)s: %(ptype)s %(size)d sectors"
+
+#: cinder/virt/xenapi/vm_utils.py:1565
+#, python-format
+msgid ""
+"Writing partition table %(primary_first)d %(primary_last)d to "
+"%(dev_path)s..."
+msgstr "将分区表 %(primary_first)d %(primary_last)d 写入到 %(dev_path)s..."
+
+#: cinder/virt/xenapi/vm_utils.py:1578
+#, python-format
+msgid "Writing partition table %s done."
+msgstr "完成写入分区表 %s 。"
+
+#: cinder/virt/xenapi/vm_utils.py:1632
+#, python-format
+msgid ""
+"Starting sparse_copy src=%(src_path)s dst=%(dst_path)s "
+"virtual_size=%(virtual_size)d block_size=%(block_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1664
+#, python-format
+msgid ""
+"Finished sparse_copy in %(duration).2f secs, %(compression_pct).2f%% "
+"reduction in size"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1714
+msgid ""
+"XenServer tools installed in this image are capable of network injection."
+"  Networking files will not bemanipulated"
+msgstr "安装在该镜像的XenServer工具可以进行网络注入。网络文件不会被操作。"
+
+#: cinder/virt/xenapi/vm_utils.py:1722
+msgid ""
+"XenServer tools are present in this image but are not capable of network "
+"injection"
+msgstr "该镜像有XenServer工具,但是不能进行网络注入"
+
+#: cinder/virt/xenapi/vm_utils.py:1726
+msgid "XenServer tools are not installed in this image"
+msgstr "没有在该镜像上安装XenServer工具"
+
+#: cinder/virt/xenapi/vm_utils.py:1742
+msgid "Manipulating interface files directly"
+msgstr "直接操作接口文件"
+
+#: cinder/virt/xenapi/vm_utils.py:1751
+#, python-format
+msgid "Failed to mount filesystem (expected for non-linux instances): %s"
+msgstr "挂载文件系统失败(期望的是非Linux实例):%s"
+
+#: cinder/virt/xenapi/vmops.py:131 cinder/virt/xenapi/vmops.py:722
+#, fuzzy, python-format
+msgid "Updating progress to %(progress)d"
+msgstr "将实例 '%(instance_uuid)s' 的进度更新到 %(progress)d"
+
+#: cinder/virt/xenapi/vmops.py:231
+#, python-format
+msgid "Attempted to power on non-existent instance bad instance id %s"
+msgstr "尝试过启动不存在的实例,实例的id %s 不正确"
+
+#: cinder/virt/xenapi/vmops.py:233
+#, fuzzy
+msgid "Starting instance"
+msgstr "正在启动虚拟机"
+
+#: cinder/virt/xenapi/vmops.py:303
+msgid "Removing kernel/ramdisk files from dom0"
+msgstr "从 dom0 中移除内核/内存盘文件"
+
+#: cinder/virt/xenapi/vmops.py:358
+#, fuzzy
+msgid "Failed to spawn, rolling back"
+msgstr "在数据库更新卷失败"
+
+#: cinder/virt/xenapi/vmops.py:443
+msgid "Detected ISO image type, creating blank VM for install"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:462
+#, fuzzy, python-format
+msgid "Auto configuring disk, attempting to resize partition..."
+msgstr "正在自动配置实例 %(instance_uuid)s 的磁盘,尝试调整分区大小..."
+
+#: cinder/virt/xenapi/vmops.py:515
+#, fuzzy, python-format
+msgid "Invalid value for injected_files: %r"
+msgstr "injected_files无效的值:'%s'"
+
+#: cinder/virt/xenapi/vmops.py:520
+#, python-format
+msgid "Injecting file path: '%s'"
+msgstr "注入文件路径:'%s'"
+
+#: cinder/virt/xenapi/vmops.py:527
+msgid "Setting admin password"
+msgstr "设置管理员密码"
+
+#: cinder/virt/xenapi/vmops.py:531
+msgid "Resetting network"
+msgstr "重置网络"
+
+#: cinder/virt/xenapi/vmops.py:538
+msgid "Setting VCPU weight"
+msgstr "设置VCPU 权重"
+
+#: cinder/virt/xenapi/vmops.py:544
+#, fuzzy
+msgid "Starting VM"
+msgstr "重启xvp"
+
+#: cinder/virt/xenapi/vmops.py:551
+#, python-format
+msgid ""
+"Latest agent build for %(hypervisor)s/%(os)s/%(architecture)s is "
+"%(version)s"
+msgstr "%(hypervisor)s/%(os)s/%(architecture)s 最新的agent build 是 %(version)s 版本"
+
+#: cinder/virt/xenapi/vmops.py:554
+#, python-format
+msgid "No agent build found for %(hypervisor)s/%(os)s/%(architecture)s"
+msgstr "没有找到 %(hypervisor)s/%(os)s/%(architecture)s 的代理创建"
+
+#: cinder/virt/xenapi/vmops.py:561
+msgid "Waiting for instance state to become running"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:573
+msgid "Querying agent version"
+msgstr "查询代理版本"
+
+#: cinder/virt/xenapi/vmops.py:576
+#, python-format
+msgid "Instance agent version: %s"
+msgstr "实例代理版本:%s"
+
+#: cinder/virt/xenapi/vmops.py:581
+#, python-format
+msgid "Updating Agent to %s"
+msgstr "把代理更新为 %s"
+
+#: cinder/virt/xenapi/vmops.py:616
+#, python-format
+msgid "No opaque_ref could be determined for '%s'."
+msgstr "无法为 '%s' 确定opaque_ref。"
+
+#: cinder/virt/xenapi/vmops.py:670
+#, fuzzy, python-format
+msgid "Finished snapshot and upload for VM"
+msgstr "快照完毕并为虚拟机 %s 上传"
+
+#: cinder/virt/xenapi/vmops.py:677
+#, fuzzy, python-format
+msgid "Starting snapshot for VM"
+msgstr "开始为虚拟机 %s 快照"
+
+#: cinder/virt/xenapi/vmops.py:686
+#, fuzzy, python-format
+msgid "Unable to Snapshot instance: %(exc)s"
+msgstr "无法为实例 %(instance_uuid)s 快照:%(exc)s"
+
+#: cinder/virt/xenapi/vmops.py:702
+msgid "Failed to transfer vhd to new host"
+msgstr "将 vhd 转移到新主机失败"
+
+#: cinder/virt/xenapi/vmops.py:770
+#, python-format
+msgid "Resizing down VDI %(cow_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr "将 VDI %(cow_uuid)s 由 %(old_gb)dGB 调小到  %(new_gb)dGB"
+
+#: cinder/virt/xenapi/vmops.py:893
+#, python-format
+msgid "Resizing up VDI %(vdi_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr "将 VDI %(vdi_uuid)s 由 %(old_gb)dGB 调大到  %(new_gb)dGB"
+
+#: cinder/virt/xenapi/vmops.py:901
+#, fuzzy, python-format
+msgid "Resize complete"
+msgstr "调整实例 %s 的大小完毕"
+
+#: cinder/virt/xenapi/vmops.py:928
+#, python-format
+msgid "Failed to query agent version: %(resp)r"
+msgstr "查询代理版本失败:%(resp)r"
+
+#: cinder/virt/xenapi/vmops.py:949
+#, fuzzy, python-format
+msgid "domid changed from %(domid)s to %(newdomid)s"
+msgstr "domid 由 %(olddomid)s 改变为 %(newdomid)s"
+
+#: cinder/virt/xenapi/vmops.py:962
+#, python-format
+msgid "Failed to update agent: %(resp)r"
+msgstr "更新代理失败:%(resp)r"
+
+#: cinder/virt/xenapi/vmops.py:983
+#, python-format
+msgid "Failed to exchange keys: %(resp)r"
+msgstr "交换钥匙失败:%(resp)r"
+
+#: cinder/virt/xenapi/vmops.py:998
+#, python-format
+msgid "Failed to update password: %(resp)r"
+msgstr "更新密码失败:%(resp)r"
+
+#: cinder/virt/xenapi/vmops.py:1023
+#, python-format
+msgid "Failed to inject file: %(resp)r"
+msgstr "注入文件失败:%(resp)r"
+
+#: cinder/virt/xenapi/vmops.py:1032
+#, fuzzy, python-format
+msgid "VM already halted, skipping shutdown..."
+msgstr "虚拟机 %(instance_uuid)s 已经终止,跳过关闭..."
+
+#: cinder/virt/xenapi/vmops.py:1036
+msgid "Shutting down VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1054
+msgid "Unable to find VBD for VM"
+msgstr "无法为虚拟机找到VBD"
+
+#: cinder/virt/xenapi/vmops.py:1097
+#, fuzzy, python-format
+msgid "Using RAW or VHD, skipping kernel and ramdisk deletion"
+msgstr "实例 %(instance_uuid)s 使用RAW或者VHD,跳过内核和内存盘的删除"
+
+#: cinder/virt/xenapi/vmops.py:1104
+msgid "instance has a kernel or ramdisk but not both"
+msgstr "实例拥有内核或者内存盘,但不是二者均有"
+
+#: cinder/virt/xenapi/vmops.py:1111
+msgid "kernel/ramdisk files removed"
+msgstr "内核/内存盘文件移除了"
+
+#: cinder/virt/xenapi/vmops.py:1121
+msgid "VM destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1147
+#, fuzzy
+msgid "Destroying VM"
+msgstr "重启xvp"
+
+#: cinder/virt/xenapi/vmops.py:1169
+msgid "VM is not present, skipping destroy..."
+msgstr "虚拟机不存在,跳过销毁..."
+
+#: cinder/virt/xenapi/vmops.py:1222
+#, python-format
+msgid "Instance is already in Rescue Mode: %s"
+msgstr "实例已处于救援模式:%s"
+
+#: cinder/virt/xenapi/vmops.py:1296
+#, python-format
+msgid "Found %(instance_count)d hung reboots older than %(timeout)d seconds"
+msgstr "找到%(instance_count)d个超过%(timeout)d秒悬挂的重启"
+
+#: cinder/virt/xenapi/vmops.py:1300
+#, fuzzy, python-format
+msgid "Automatically hard rebooting"
+msgstr "自动冷重启 %d"
+
+#: cinder/virt/xenapi/vmops.py:1363
+#, python-format
+msgid "Setting migration %(migration_id)s to error: %(reason)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1374
+#, fuzzy, python-format
+msgid ""
+"Automatically confirming migration %(migration_id)s for instance "
+"%(instance_uuid)s"
+msgstr "为实例 %(instance_uuid)s 关闭虚拟机"
+
+#: cinder/virt/xenapi/vmops.py:1379
+#, fuzzy, python-format
+msgid "Instance %(instance_uuid)s not found"
+msgstr "没有找到实例 %(instance_id)s"
+
+#: cinder/virt/xenapi/vmops.py:1383
+#, fuzzy
+msgid "In ERROR state"
+msgstr "节点处于未知的错误状态。"
+
+#: cinder/virt/xenapi/vmops.py:1389
+#, python-format
+msgid "In %(task_state)s task_state, not RESIZE_VERIFY"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1396
+#, python-format
+msgid "Error auto-confirming resize: %(e)s. Will retry later."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1418
+msgid "Could not get bandwidth info."
+msgstr "无法得到带宽信息"
+
+#: cinder/virt/xenapi/vmops.py:1469
+#, fuzzy, python-format
+msgid "Injecting network info to xenstore"
+msgstr "为虚拟机注入网络信息到xs:|%s|"
+
+#: cinder/virt/xenapi/vmops.py:1483
+#, fuzzy
+msgid "Creating vifs"
+msgstr "正在创建镜像"
+
+#: cinder/virt/xenapi/vmops.py:1492
+#, fuzzy, python-format
+msgid "Creating VIF for network %(network_ref)s"
+msgstr "正在为虚拟机 %(vm_ref)s,网络 %(network_ref)s 创建VIF。"
+
+#: cinder/virt/xenapi/vmops.py:1495
+#, fuzzy, python-format
+msgid "Created VIF %(vif_ref)s, network %(network_ref)s"
+msgstr "正在为虚拟机 %(vm_ref)s,网络 %(network_ref)s 创建VIF。"
+
+#: cinder/virt/xenapi/vmops.py:1520
+#, fuzzy, python-format
+msgid "Injecting hostname to xenstore"
+msgstr "为虚拟机注入hostname到xs:|%s|"
+
+#: cinder/virt/xenapi/vmops.py:1545
+#, fuzzy, python-format
+msgid ""
+"The agent call to %(method)s returned an invalid response: %(ret)r. "
+"path=%(path)s; args=%(args)r"
+msgstr ""
+"%(method)s 的代理调用返回无效的响应:%(ret)r。虚拟机id=%(instance_uuid)s; path=%(path)s; "
+"args=%(addl_args)r"
+
+#: cinder/virt/xenapi/vmops.py:1566
+#, fuzzy, python-format
+msgid "TIMEOUT: The call to %(method)s timed out. args=%(args)r"
+msgstr "超时:调用 %(method)s 超时。虚拟机id=%(instance_uuid)s; args=%(args)r"
+
+#: cinder/virt/xenapi/vmops.py:1570
+#, fuzzy, python-format
+msgid ""
+"NOT IMPLEMENTED: The call to %(method)s is not supported by the agent. "
+"args=%(args)r"
+msgstr "没有执行:代理不支持 %(method)s 的调用。虚拟机id=%(instance_uuid)s; args=%(args)r"
+
+#: cinder/virt/xenapi/vmops.py:1575
+#, fuzzy, python-format
+msgid "The call to %(method)s returned an error: %(e)s. args=%(args)r"
+msgstr "对 %(method)s 的调用返回错误:%(e)s。"
+
+#: cinder/virt/xenapi/vmops.py:1661
+#, python-format
+msgid "OpenSSL error: %s"
+msgstr "OpenSSL错误:%s"
+
+#: cinder/virt/xenapi/volume_utils.py:52
+msgid "creating sr within volume_utils"
+msgstr "在volume_utils创建存储库"
+
+#: cinder/virt/xenapi/volume_utils.py:55 cinder/virt/xenapi/volume_utils.py:83
+#, python-format
+msgid "type is = %s"
+msgstr "类型is = %s"
+
+#: cinder/virt/xenapi/volume_utils.py:58 cinder/virt/xenapi/volume_utils.py:86
+#, python-format
+msgid "name = %s"
+msgstr "name = %s"
+
+#: cinder/virt/xenapi/volume_utils.py:71
+#, python-format
+msgid "Created %(label)s as %(sr_ref)s."
+msgstr "将 %(label)s 作为 %(sr_ref)s 创建。"
+
+#: cinder/virt/xenapi/volume_utils.py:76 cinder/virt/xenapi/volume_utils.py:174
+msgid "Unable to create Storage Repository"
+msgstr "无法创建存储库"
+
+#: cinder/virt/xenapi/volume_utils.py:80
+msgid "introducing sr within volume_utils"
+msgstr "在volume_utils里引入sr"
+
+#: cinder/virt/xenapi/volume_utils.py:103 cinder/virt/xenapi/volume_utils.py:170
+#: cinder/virt/xenapi/volumeops.py:156
+#, python-format
+msgid "Introduced %(label)s as %(sr_ref)s."
+msgstr "将 %(label)s 作为 %(sr_ref)s 引入。"
+
+#: cinder/virt/xenapi/volume_utils.py:106
+msgid "Creating pbd for SR"
+msgstr "为存储库创建pbd"
+
+#: cinder/virt/xenapi/volume_utils.py:108
+msgid "Plugging SR"
+msgstr "插入存储库"
+
+#: cinder/virt/xenapi/volume_utils.py:116 cinder/virt/xenapi/volumeops.py:160
+msgid "Unable to introduce Storage Repository"
+msgstr "无法引入存储库"
+
+#: cinder/virt/xenapi/volume_utils.py:127 cinder/virt/xenapi/volumeops.py:50
+msgid "Unable to get SR using uuid"
+msgstr "无法得到使用uuid的存储库"
+
+#: cinder/virt/xenapi/volume_utils.py:129
+#, python-format
+msgid "Forgetting SR %s..."
+msgstr "遗忘存储库 %s..."
+
+#: cinder/virt/xenapi/volume_utils.py:137
+msgid "Unable to forget Storage Repository"
+msgstr "无法遗忘Storage Repository"
+
+#: cinder/virt/xenapi/volume_utils.py:157
+#, python-format
+msgid "Introducing %s..."
+msgstr "引入 %s..."
+
+#: cinder/virt/xenapi/volume_utils.py:186
+#, python-format
+msgid "Unable to find SR from VBD %s"
+msgstr "无法在VBD %s找到存储库"
+
+#: cinder/virt/xenapi/volume_utils.py:204
+#, python-format
+msgid "Ignoring exception %(exc)s when getting PBDs for %(sr_ref)s"
+msgstr "异常 %(exc)s 在为 %(sr_ref)s 得到PBDs时被忽略"
+
+#: cinder/virt/xenapi/volume_utils.py:210
+#, python-format
+msgid "Ignoring exception %(exc)s when unplugging PBD %(pbd)s"
+msgstr "异常 %(exc)s 在拔开PBD %(pbd)s 时被忽略"
+
+#: cinder/virt/xenapi/volume_utils.py:234
+#, python-format
+msgid "Unable to introduce VDI on SR %s"
+msgstr "无法在存储库 %s 上引入VDI"
+
+#: cinder/virt/xenapi/volume_utils.py:242
+#, python-format
+msgid "Unable to get record of VDI %s on"
+msgstr "无法使得VDI %s 的记录运行"
+
+#: cinder/virt/xenapi/volume_utils.py:264
+#, python-format
+msgid "Unable to introduce VDI for SR %s"
+msgstr "无法为存储库 %s 引入VDI"
+
+#: cinder/virt/xenapi/volume_utils.py:274
+#, python-format
+msgid "Error finding vdis in SR %s"
+msgstr "在存储库 %s 寻找VDIs出错"
+
+#: cinder/virt/xenapi/volume_utils.py:281
+#, python-format
+msgid "Unable to find vbd for vdi %s"
+msgstr "无法为VDI %s 找到VBD"
+
+#: cinder/virt/xenapi/volume_utils.py:315
+#, python-format
+msgid "Unable to obtain target information %(data)s, %(mountpoint)s"
+msgstr "无法获得目标信息 %(data)s, %(mountpoint)s"
+
+#: cinder/virt/xenapi/volume_utils.py:341
+#, python-format
+msgid "Mountpoint cannot be translated: %s"
+msgstr "挂载点无法被翻译:%s"
+
+#: cinder/virt/xenapi/volumeops.py:64
+msgid "Could not find VDI ref"
+msgstr "找不到VDI ref"
+
+#: cinder/virt/xenapi/volumeops.py:69
+#, python-format
+msgid "Creating SR %s"
+msgstr "正在创建存储库 %s"
+
+#: cinder/virt/xenapi/volumeops.py:73
+msgid "Could not create SR"
+msgstr "无法创建存储库"
+
+#: cinder/virt/xenapi/volumeops.py:76
+msgid "Could not retrieve SR record"
+msgstr "无法获取存储库记录"
+
+#: cinder/virt/xenapi/volumeops.py:81
+#, python-format
+msgid "Introducing SR %s"
+msgstr "引入存储库 %s"
+
+#: cinder/virt/xenapi/volumeops.py:85
+msgid "SR found in xapi database. No need to introduce"
+msgstr "在xapi数据库找到存储库。无需引入。"
+
+#: cinder/virt/xenapi/volumeops.py:90
+msgid "Could not introduce SR"
+msgstr "无法引入存储库"
+
+#: cinder/virt/xenapi/volumeops.py:94
+#, python-format
+msgid "Checking for SR %s"
+msgstr "检查存储库 %s"
+
+#: cinder/virt/xenapi/volumeops.py:106
+#, python-format
+msgid "SR %s not found in the xapi database"
+msgstr "在xapi数据库没有找到存储库 %s"
+
+#: cinder/virt/xenapi/volumeops.py:112
+msgid "Could not forget SR"
+msgstr "不能遗忘存储库"
+
+#: cinder/virt/xenapi/volumeops.py:121
+#, python-format
+msgid "Attach_volume: %(connection_info)s, %(instance_name)s, %(mountpoint)s"
+msgstr "Attach_volume: %(connection_info)s, %(instance_name)s, %(mountpoint)s"
+
+#: cinder/virt/xenapi/volumeops.py:178
+#, python-format
+msgid "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+msgstr "无法在存储库 %(sr_ref)s 上为实例 %(instance_name)s 创建 VDI"
+
+#: cinder/virt/xenapi/volumeops.py:189
+#, python-format
+msgid "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+msgstr "存储库 %(sr_ref)s 不能为实例%(instance_name)s使用"
+
+#: cinder/virt/xenapi/volumeops.py:197
+#, python-format
+msgid "Unable to attach volume to instance %s"
+msgstr "无法附加卷到实例 %s"
+
+#: cinder/virt/xenapi/volumeops.py:200
+#, python-format
+msgid "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+msgstr "挂载点 %(mountpoint)s 附加到实例 %(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:210
+#, python-format
+msgid "Detach_volume: %(instance_name)s, %(mountpoint)s"
+msgstr "分离_volume: %(instance_name)s, %(mountpoint)s"
+
+#: cinder/virt/xenapi/volumeops.py:219
+#, python-format
+msgid "Unable to locate volume %s"
+msgstr "无法找到 %s 卷"
+
+#: cinder/virt/xenapi/volumeops.py:227
+#, python-format
+msgid "Unable to detach volume %s"
+msgstr "无法分离 %s 卷"
+
+#: cinder/virt/xenapi/volumeops.py:232
+#, python-format
+msgid "Unable to destroy vbd %s"
+msgstr "无法销毁VBD %s"
+
+#: cinder/virt/xenapi/volumeops.py:239
+#, python-format
+msgid "Error purging SR %s"
+msgstr "净化存储库 %s 出错"
+
+#: cinder/virt/xenapi/volumeops.py:241
+#, python-format
+msgid "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+msgstr "挂载点 %(mountpoint)s 从实例 %(instance_name)s 分离"
+
+#: cinder/vnc/xvp_proxy.py:98 cinder/vnc/xvp_proxy.py:103
+#, python-format
+msgid "Error in handshake: %s"
+msgstr "握手出错:%s"
+
+#: cinder/vnc/xvp_proxy.py:119
+#, python-format
+msgid "Invalid request: %s"
+msgstr "无效的请求:%s"
+
+#: cinder/vnc/xvp_proxy.py:139
+#, python-format
+msgid "Request: %s"
+msgstr "请求:%s"
+
+#: cinder/vnc/xvp_proxy.py:142
+#, python-format
+msgid "Request made with missing token: %s"
+msgstr "请求缺少令牌:%s"
+
+#: cinder/vnc/xvp_proxy.py:153
+#, python-format
+msgid "Request made with invalid token: %s"
+msgstr "请求中有无效令牌:%s"
+
+#: cinder/vnc/xvp_proxy.py:160
+#, python-format
+msgid "Unexpected error: %s"
+msgstr "意外错误:%s"
+
+#: cinder/vnc/xvp_proxy.py:180
+#, python-format
+msgid "Starting cinder-xvpvncproxy node (version %s)"
+msgstr "启动cinder-xvpvncproxy节点(版本 %s)"
+
+#: cinder/volume/api.py:74 cinder/volume/api.py:220
+msgid "status must be available"
+msgstr "状态必须可用"
+
+#: cinder/volume/api.py:85
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to create %(size)sG volume"
+msgstr "%(pid)s 的配额超出,尝试创建 %(size)sG 的卷"
+
+#: cinder/volume/api.py:137
+#, fuzzy
+msgid "Volume status must be available or error"
+msgstr "卷组状态必须可获取"
+
+#: cinder/volume/api.py:142
+#, python-format
+msgid "Volume still has %d dependent snapshots"
+msgstr ""
+
+#: cinder/volume/api.py:223
+msgid "already attached"
+msgstr "已经附加"
+
+#: cinder/volume/api.py:230
+msgid "already detached"
+msgstr "已经分离"
+
+#: cinder/volume/api.py:292
+msgid "must be available"
+msgstr "必须可用"
+
+#: cinder/volume/api.py:325
+#, fuzzy
+msgid "Volume Snapshot status must be available or error"
+msgstr "卷组状态必须可获取"
+
+#: cinder/volume/driver.py:96
+#, python-format
+msgid "Recovering from a failed execute.  Try number %s"
+msgstr "从失败的执行中恢复。尝试编号 %s"
+
+#: cinder/volume/driver.py:106
+#, python-format
+msgid "volume group %s doesn't exist"
+msgstr "卷组 %s 不存在"
+
+#: cinder/volume/driver.py:270
+#, python-format
+msgid "Skipping ensure_export. No iscsi_target provisioned for volume: %d"
+msgstr "跳过ensure_export。没有为卷提供iscsi_target:%d"
+
+#: cinder/volume/driver.py:318
+#, python-format
+msgid "Skipping remove_export. No iscsi_target provisioned for volume: %d"
+msgstr "跳过remove_export。没有为卷提供iscsi_target:%d"
+
+#: cinder/volume/driver.py:327
+#, python-format
+msgid ""
+"Skipping remove_export. No iscsi_target is presently exported for volume:"
+" %d"
+msgstr "跳过remove_export。没有为卷导出iscsi_target:%d"
+
+#: cinder/volume/driver.py:337
+msgid "ISCSI provider_location not stored, using discovery"
+msgstr "采用discovery,ISCSI provider_location 没有存储"
+
+#: cinder/volume/driver.py:384
+#, python-format
+msgid "Could not find iSCSI export  for volume %s"
+msgstr "无法为卷 %s 找到 iSCSI 导出"
+
+#: cinder/volume/driver.py:388
+#, python-format
+msgid "ISCSI Discovery: Found %s"
+msgstr "ISCSI Discovery:找到 %s"
+
+#: cinder/volume/driver.py:466
+#, python-format
+msgid "Cannot confirm exported volume id:%(volume_id)s."
+msgstr "无法确认导出的卷id:%(volume_id)s。"
+
+#: cinder/volume/driver.py:493
+#, python-format
+msgid "FAKE ISCSI: %s"
+msgstr "FAKE ISCSI: %s"
+
+#: cinder/volume/driver.py:505
+#, python-format
+msgid "rbd has no pool %s"
+msgstr "RBD没有池 %s"
+
+#: cinder/volume/driver.py:579
+#, python-format
+msgid "Sheepdog is not working: %s"
+msgstr "Sheepdog 没有工作:%s"
+
+#: cinder/volume/driver.py:581
+msgid "Sheepdog is not working"
+msgstr "Sheepdog 没有工作"
+
+#: cinder/volume/driver.py:680 cinder/volume/driver.py:685
+#, python-format
+msgid "LoggingVolumeDriver: %s"
+msgstr "LoggingVolumeDriver: %s"
+
+#: cinder/volume/manager.py:96
+#, python-format
+msgid "Re-exporting %s volumes"
+msgstr "重新导出卷%s"
+
+#: cinder/volume/manager.py:101
+#, python-format
+msgid "volume %s: skipping export"
+msgstr "卷 %s:跳过导出"
+
+#: cinder/volume/manager.py:107
+#, python-format
+msgid "volume %s: creating"
+msgstr "卷 %s: 创建中"
+
+#: cinder/volume/manager.py:119
+#, python-format
+msgid "volume %(vol_name)s: creating lv of size %(vol_size)sG"
+msgstr "卷%(vol_name)s:创建大小为%(vol_size)s的逻辑卷"
+
+#: cinder/volume/manager.py:131
+#, python-format
+msgid "volume %s: creating export"
+msgstr "卷%s:正在创建导出"
+
+#: cinder/volume/manager.py:144
+#, python-format
+msgid "volume %s: created successfully"
+msgstr "卷%s:创建成功"
+
+#: cinder/volume/manager.py:153
+msgid "Volume is still attached"
+msgstr "卷仍在附加中"
+
+#: cinder/volume/manager.py:155
+msgid "Volume is not local to this node"
+msgstr "卷不属于这个节点"
+
+#: cinder/volume/manager.py:159
+#, python-format
+msgid "volume %s: removing export"
+msgstr "卷%s:正在移除导出"
+
+#: cinder/volume/manager.py:161
+#, python-format
+msgid "volume %s: deleting"
+msgstr "卷%s:删除中"
+
+#: cinder/volume/manager.py:164
+#, python-format
+msgid "volume %s: volume is busy"
+msgstr "卷 %s:卷繁忙"
+
+#: cinder/volume/manager.py:176
+#, python-format
+msgid "volume %s: deleted successfully"
+msgstr "卷%s:删除成功"
+
+#: cinder/volume/manager.py:183
+#, python-format
+msgid "snapshot %s: creating"
+msgstr "快照 %s:正在创建"
+
+#: cinder/volume/manager.py:187
+#, python-format
+msgid "snapshot %(snap_name)s: creating"
+msgstr "快照 %(snap_name)s:正在创建"
+
+#: cinder/volume/manager.py:202
+#, python-format
+msgid "snapshot %s: created successfully"
+msgstr "快照 %s:创建成功"
+
+#: cinder/volume/manager.py:211
+#, python-format
+msgid "snapshot %s: deleting"
+msgstr "快照 %s:正在删除"
+
+#: cinder/volume/manager.py:214
+#, fuzzy, python-format
+msgid "snapshot %s: snapshot is busy"
+msgstr "快照 %s:创建成功"
+
+#: cinder/volume/manager.py:226
+#, python-format
+msgid "snapshot %s: deleted successfully"
+msgstr "快照 %s:删除成功"
+
+#: cinder/volume/manager.py:310
+msgid "Checking volume capabilities"
+msgstr "检查卷能力"
+
+#: cinder/volume/manager.py:314
+#, python-format
+msgid "New capabilities found: %s"
+msgstr "找到新能力:%s"
+
+#: cinder/volume/manager.py:325
+msgid "Clear capabilities"
+msgstr "清理能力"
+
+#: cinder/volume/manager.py:329
+#, python-format
+msgid "Notification {%s} received"
+msgstr "收到通知 {%s}"
+
+#: cinder/volume/netapp.py:79
+#, fuzzy, python-format
+msgid "API %(name)sfailed: %(reason)s"
+msgstr "镜像 %(image_id)s 无法接受,原因是: %(reason)s"
+
+#: cinder/volume/netapp.py:109
+#, fuzzy, python-format
+msgid "%s is not set"
+msgstr "租户ID没有设"
+
+#: cinder/volume/netapp.py:128
+#, fuzzy, python-format
+msgid "Connected to DFM server"
+msgstr "连接到 %s 的AMQP服务器"
+
+#: cinder/volume/netapp.py:159
+#, fuzzy, python-format
+msgid "Job failed: %s"
+msgstr "未知的基文件:%s"
+
+#: cinder/volume/netapp.py:240
+#, fuzzy
+msgid "Failed to provision dataset member"
+msgstr "更新数据库失败"
+
+#: cinder/volume/netapp.py:252
+msgid "No LUN was created by the provision job"
+msgstr ""
+
+#: cinder/volume/netapp.py:261 cinder/volume/netapp.py:433
+#, fuzzy, python-format
+msgid "Failed to find LUN ID for volume %s"
+msgstr "无法为VDI %s 找到VBD"
+
+#: cinder/volume/netapp.py:280
+msgid "Failed to remove and delete dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:603 cinder/volume/netapp.py:657
+#, fuzzy, python-format
+msgid "No LUN ID for volume %s"
+msgstr "无法为卷 %s 找到 iSCSI 导出"
+
+#: cinder/volume/netapp.py:607 cinder/volume/netapp.py:661
+#, fuzzy, python-format
+msgid "Failed to get LUN details for LUN ID %s"
+msgstr "为ip: %s获取元数据失败"
+
+#: cinder/volume/netapp.py:614
+#, fuzzy, python-format
+msgid "Failed to get host details for host ID %s"
+msgstr "为ip: %s获取元数据失败"
+
+#: cinder/volume/netapp.py:620
+#, fuzzy, python-format
+msgid "Failed to get target portal for filer: %s"
+msgstr "为ip: %s获取元数据失败"
+
+#: cinder/volume/netapp.py:625
+#, fuzzy, python-format
+msgid "Failed to get target IQN for filer: %s"
+msgstr "为ip: %s获取元数据失败"
+
+#: cinder/volume/san.py:113 cinder/volume/san.py:151
+msgid "Specify san_password or san_private_key"
+msgstr "指定san_password或者san_private_key"
+
+#: cinder/volume/san.py:156
+msgid "san_ip must be set"
+msgstr "san_ip必须设置"
+
+#: cinder/volume/san.py:320
+#, python-format
+msgid "LUID not found for %(zfs_poolname)s. Output=%(out)s"
+msgstr "没有为 %(zfs_poolname)s 找到LUID。Output=%(out)s"
+
+#: cinder/volume/san.py:452
+#, python-format
+msgid "CLIQ command returned %s"
+msgstr "返回CLIQ命令 %s"
+
+#: cinder/volume/san.py:458
+#, python-format
+msgid "Malformed response to CLIQ command %(verb)s %(cliq_args)s. Result=%(out)s"
+msgstr "CLIQ命令 %(verb)s %(cliq_args)s 错误格式的响应。Result=%(out)s"
+
+#: cinder/volume/san.py:466
+#, python-format
+msgid "Error running CLIQ command %(verb)s %(cliq_args)s.  Result=%(out)s"
+msgstr "在运行CLIQ命令 %(verb)s %(cliq_args)s 时发生错误。输出结果 Result=%(out)s"
+
+#: cinder/volume/san.py:496
+#, python-format
+msgid ""
+"Unexpected number of virtual ips for cluster  %(cluster_name)s. "
+"Result=%(_xml)s"
+msgstr "集群 %(cluster_name)s 有意外数量的虚拟 ip 地址。输出结果 Result=%(_xml)s"
+
+#: cinder/volume/san.py:549
+#, python-format
+msgid "Volume info: %(volume_name)s => %(volume_attributes)s"
+msgstr "卷信息:%(volume_name)s => %(volume_attributes)s"
+
+#: cinder/volume/san.py:594
+msgid "local_path not supported"
+msgstr "不支持local_path"
+
+#: cinder/volume/san.py:626
+#, python-format
+msgid "Could not determine project for volume %s, can't export"
+msgstr "无法为卷 %s 确定项目,无法导出"
+
+#: cinder/volume/san.py:696
+#, python-format
+msgid "Payload for SolidFire API call: %s"
+msgstr "SolidFire API 调用的参数:%s"
+
+#: cinder/volume/san.py:713
+#, python-format
+msgid "Call to json.loads() raised an exception: %s"
+msgstr "调用 json.loads() 引起异常:%s"
+
+#: cinder/volume/san.py:718
+#, python-format
+msgid "Results of SolidFire API call: %s"
+msgstr "SolidFire API调用结果:%s"
+
+#: cinder/volume/san.py:732
+#, python-format
+msgid "Found solidfire account: %s"
+msgstr "找到solidfire帐户:%s"
+
+#: cinder/volume/san.py:746
+#, python-format
+msgid "solidfire account: %s does not exist, create it..."
+msgstr "solidfire帐户:%s 不存在,正在创建..."
+
+#: cinder/volume/san.py:804
+msgid "Enter SolidFire create_volume..."
+msgstr "进入SolidFire create_volume..."
+
+#: cinder/volume/san.py:846
+msgid "Leaving SolidFire create_volume"
+msgstr "离开SolidFire create_volume"
+
+#: cinder/volume/san.py:861
+msgid "Enter SolidFire delete_volume..."
+msgstr "进入SolidFire delete_volume..."
+
+#: cinder/volume/san.py:880
+#, python-format
+msgid "Deleting volumeID: %s "
+msgstr "正在删除volumeID:%s "
+
+#: cinder/volume/san.py:888
+msgid "Leaving SolidFire delete_volume"
+msgstr "离开SolidFire delete_volume"
+
+#: cinder/volume/san.py:891
+msgid "Executing SolidFire ensure_export..."
+msgstr "正在执行SolidFire ensure_export..."
+
+#: cinder/volume/san.py:895
+msgid "Executing SolidFire create_export..."
+msgstr "正在执行SolidFire create_export..."
+
+#: cinder/volume/volume_types.py:49 cinder/volume/volume_types.py:108
+msgid "name cannot be None"
+msgstr "name不能是None"
+
+#: cinder/volume/volume_types.py:96
+msgid "id cannot be None"
+msgstr "id不能是None"
+
+#: cinder/volume/xensm.py:55
+#, python-format
+msgid "SR name = %s"
+msgstr "存储库 name = %s"
+
+#: cinder/volume/xensm.py:56
+#, python-format
+msgid "Params: %s"
+msgstr "参数:%s"
+
+#: cinder/volume/xensm.py:60
+#, python-format
+msgid "Failed to create sr %s...continuing"
+msgstr "创建存储库 %s失败... 继续"
+
+#: cinder/volume/xensm.py:62
+msgid "Create failed"
+msgstr "创建失败"
+
+#: cinder/volume/xensm.py:64
+#, python-format
+msgid "SR UUID of new SR is: %s"
+msgstr "新存储库的存储库 UUID:%s"
+
+#: cinder/volume/xensm.py:71
+msgid "Failed to update db"
+msgstr "更新数据库失败"
+
+#: cinder/volume/xensm.py:80
+#, python-format
+msgid "Failed to introduce sr %s...continuing"
+msgstr "引入存储库 %s 失败... 继续"
+
+#: cinder/volume/xensm.py:91
+#, python-format
+msgid "Failed to reach backend %d"
+msgstr "到达后台 %d 失败"
+
+#: cinder/volume/xensm.py:100
+msgid "XenSMDriver requires xenapi connection"
+msgstr "XenSMDriver要求xenapi连接"
+
+#: cinder/volume/xensm.py:110
+msgid "Failed to initiate session"
+msgstr "初始化会话失败"
+
+#: cinder/volume/xensm.py:142
+#, python-format
+msgid "Volume will be created in backend - %d"
+msgstr "卷会在后台创建 - %d"
+
+#: cinder/volume/xensm.py:154
+msgid "Failed to update volume in db"
+msgstr "在数据库更新卷失败"
+
+#: cinder/volume/xensm.py:157
+msgid "Unable to create volume"
+msgstr "无法创建卷"
+
+#: cinder/volume/xensm.py:171
+msgid "Failed to delete vdi"
+msgstr "删除VDI失败"
+
+#: cinder/volume/xensm.py:177
+msgid "Failed to delete volume in db"
+msgstr "在数据库删除卷失败"
+
+#: cinder/volume/xensm.py:210
+msgid "Failed to find volume in db"
+msgstr "没有在数据库找到卷"
+
+#: cinder/volume/xensm.py:221
+msgid "Failed to find backend in db"
+msgstr "没有在数据库中找到后台(backend)"
+
+#: cinder/volume/nexenta/__init__.py:27
+#, fuzzy, python-format
+msgid "Nexenta SA returned the error"
+msgstr "服务器返回错误:%s"
+
+#: cinder/volume/nexenta/jsonrpc.py:64
+#, fuzzy, python-format
+msgid "Sending JSON data: %s"
+msgstr "给定数据:%s"
+
+#: cinder/volume/nexenta/jsonrpc.py:69
+#, python-format
+msgid "Auto switching to HTTPS connection to %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:75
+msgid "No headers in server response"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:76
+#, fuzzy
+msgid "Bad response from server"
+msgstr "来自SolidFire API的错误响应"
+
+#: cinder/volume/nexenta/jsonrpc.py:79
+#, fuzzy, python-format
+msgid "Got response: %s"
+msgstr "响应 %s"
+
+#: cinder/volume/nexenta/volume.py:96
+#, fuzzy, python-format
+msgid "Volume %s does not exist in Nexenta SA"
+msgstr "卷组 %s 不存在"
+
+#: cinder/volume/nexenta/volume.py:180
+msgid ""
+"Call to local_path should not happen. Verify that use_local_volumes flag "
+"is turned off."
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:202
+#, python-format
+msgid "Ignored target creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:210
+#, python-format
+msgid "Ignored target group creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:219
+#, python-format
+msgid "Ignored target group member addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:227
+#, python-format
+msgid "Ignored LU creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:237
+#, python-format
+msgid "Ignored LUN mapping entry addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:273
+#, python-format
+msgid ""
+"Got error trying to destroy target group %(target_group)s, assuming it is"
+" already gone: %(exc)s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:280
+#, python-format
+msgid ""
+"Got error trying to delete target %(target)s, assuming it is already "
+"gone: %(exc)s"
+msgstr ""
+
+#~ msgid "Cinder access parameters were not specified."
+#~ msgstr "未指定Cinder访问参数。"
+
+#~ msgid "Virtual Storage Array %(id)d could not be found."
+#~ msgstr "无法找到虚拟存储阵列 %(id)d。"
+
+#~ msgid "Virtual Storage Array %(name)s could not be found."
+#~ msgstr "无法找到虚拟存储阵列 %(name)s。"
+
+#~ msgid "Parent group id and group id cannot be same"
+#~ msgstr "父组id和组id不能一样"
+
+#~ msgid "No body provided"
+#~ msgstr "没有提供主体"
+
+#~ msgid "Create VSA %(display_name)s of type %(vc_type)s"
+#~ msgstr "创建VSA %(display_name)s 类型是 %(vc_type)s"
+
+#~ msgid "Delete VSA with id: %s"
+#~ msgstr "删除id:%s的VSA"
+
+#~ msgid "Associate address %(ip)s to VSA %(id)s"
+#~ msgstr "把地址 %(ip)s 与VSA %(id)s关联"
+
+#~ msgid "Disassociate address from VSA %(id)s"
+#~ msgstr "取消地址与VSA %(id)s关联"
+
+#~ msgid "%(obj)s with ID %(id)s not found"
+#~ msgstr "没有找到 %(obj)s 该对象的ID是 %(id)s"
+
+#~ msgid ""
+#~ "%(obj)s with ID %(id)s belongs to "
+#~ "VSA %(own_vsa_id)s and not to VSA "
+#~ "%(vsa_id)s."
+#~ msgstr "%(obj)s 的ID是 %(id)s 它属于VSA %(own_vsa_id)s而不是VSA %(vsa_id)s。"
+
+#~ msgid "Index. vsa_id=%(vsa_id)s"
+#~ msgstr "索引。vsa_id=%(vsa_id)s"
+
+#~ msgid "Detail. vsa_id=%(vsa_id)s"
+#~ msgstr "详细内容。vsa_id=%(vsa_id)s"
+
+#~ msgid "Create. vsa_id=%(vsa_id)s, body=%(body)s"
+#~ msgstr "创建卷。vsa_id=%(vsa_id)s, body=%(body)s"
+
+#~ msgid "Create volume of %(size)s GB from VSA ID %(vsa_id)s"
+#~ msgstr "创建 %(size)s GB的卷来源是VSA ID %(vsa_id)s"
+
+#~ msgid "Update %(obj)s with id: %(id)s, changes: %(changes)s"
+#~ msgstr "更新%(obj)s至id:%(id)s ,修改:%(changes)s"
+
+#~ msgid "Delete. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr "删除卷。vsa_id=%(vsa_id)s, id=%(id)s"
+
+#~ msgid "Show. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr "显示卷。vsa_id=%(vsa_id)s, id=%(id)s"
+
+#~ msgid "Index instances for VSA %s"
+#~ msgstr "为 VSA %s 索引实例"
+
+#~ msgid ""
+#~ "Going to force the deletion of the"
+#~ " vm %(instance_uuid)s, even if it is"
+#~ " deleted"
+#~ msgstr "准备强制删除虚拟机 %(instance_uuid)s,即使已经删除了。"
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s did not exist "
+#~ "in the DB, but I will shut "
+#~ "it down anyway using a special "
+#~ "context"
+#~ msgstr "数据库中不存在实例 %(instance_uuid)s,但是无论如何要用特殊上下文来关闭。"
+
+#~ msgid "trying to destroy already destroyed instance: %s"
+#~ msgstr "尝试销毁已经销毁的实例: %s"
+
+#~ msgid "Can't downgrade without losing data"
+#~ msgstr "无法不丢失数据地降级"
+
+#~ msgid ""
+#~ "AMQP server on %(fl_host)s:%(fl_port)d is "
+#~ "unreachable: %(e)s. Trying again in "
+#~ "%(fl_intv)d seconds."
+#~ msgstr "%(fl_host)s:%(fl_port)d上的AMQP服务器不可达:%(e)s。 %(fl_intv)d 秒钟后再尝试。"
+
+#~ msgid "Unable to connect to AMQP server after %(tries)d tries. Shutting down."
+#~ msgstr "%(tries)d 次尝试后依然无法连接到AMQP服务器。正在关闭。"
+
+#~ msgid "Reconnected to queue"
+#~ msgstr "重新连接队列"
+
+#~ msgid "Failed to fetch message from queue: %s"
+#~ msgstr "从队列获取消息失败:%s"
+
+#~ msgid "Initing the Adapter Consumer for %s"
+#~ msgstr "为%s初始化适配器消费者(Adapter Consumer)"
+
+#~ msgid "Created \"%(exchange)s\" fanout exchange with \"%(key)s\" routing key"
+#~ msgstr "\"%(exchange)s\" fanout exchange用路由密钥 \"%(key)s\" 创建的"
+
+#~ msgid "Exception while processing consumer"
+#~ msgstr "处理消费者出现异常"
+
+#~ msgid "Creating \"%(exchange)s\" fanout exchange"
+#~ msgstr "正在创建 \"%(exchange)s\" fanout exchange"
+
+#~ msgid "topic is %s"
+#~ msgstr "主题是 %s"
+
+#~ msgid "message %s"
+#~ msgstr "消息 %s"
+
+#~ msgid ""
+#~ "Cannot confirm tmpfile at %(ipath)s is"
+#~ " on same shared storage between "
+#~ "%(src)s and %(dest)s."
+#~ msgstr "无法确认tmpfile %(ipath)s 在相同的共享存储的 %(src)s 和 %(dest)s之间。"
+
+#~ msgid "_filter_hosts: %(request_spec)s"
+#~ msgstr "_filter_hosts: %(request_spec)s"
+
+#~ msgid "Filter hosts for drive type %s"
+#~ msgstr "按照驱动类型 %s 过滤主机"
+
+#~ msgid "Host %s has no free capacity. Skip"
+#~ msgstr "主机 %s 没有足够的容量。跳过"
+
+#~ msgid "Filter hosts: %s"
+#~ msgstr "过滤主机:%s"
+
+#~ msgid "Must implement host selection mechanism"
+#~ msgstr "必须实现主机选择机制"
+
+#~ msgid "Maximum number of hosts selected (%d)"
+#~ msgstr "所选择主机的最大数目(%d)"
+
+#~ msgid "Selected excessive host %(host)s"
+#~ msgstr "选择超过了主机 %(host)s"
+
+#~ msgid "Provision volume %(name)s of size %(size)s GB on host %(host)s"
+#~ msgstr "提供卷 %(name)s 它的大小为 %(size)s 位置在主机 %(host)s"
+
+#~ msgid "volume_params %(volume_params)s"
+#~ msgstr "volume_params %(volume_params)s"
+
+#~ msgid "%(i)d: Volume %(name)s"
+#~ msgstr "%(i)d:卷名%(name)s"
+
+#~ msgid "Attempting to spawn %(num_volumes)d volume(s)"
+#~ msgstr "正在尝试生产 %(num_volumes)d 个卷"
+
+#~ msgid "Error creating volumes"
+#~ msgstr "创建卷失败"
+
+#~ msgid "Non-VSA volume %d"
+#~ msgstr "Non-VSA 卷 %d"
+
+#~ msgid "Spawning volume %(volume_id)s with drive type %(drive_type)s"
+#~ msgstr "正在生产卷 %(volume_id)s 它的驱动类型为 %(drive_type)s"
+
+#~ msgid "Error creating volume"
+#~ msgstr "创建卷失败"
+
+#~ msgid "No capability selected for volume of size %(size)s"
+#~ msgstr "没有能力分配大小为 %(size)s 的卷"
+
+#~ msgid "Host %s:"
+#~ msgstr "主机 %s:"
+
+#~ msgid ""
+#~ "\tDrive %(qosgrp)-25s: total %(total)2s, "
+#~ "used %(used)2s, free %(free)2s. Available "
+#~ "capacity %(avail)-5s"
+#~ msgstr ""
+#~ "\t驱动 %(qosgrp)-25s:总共 %(total)2s,已用 %(used)2s,"
+#~ " 空闲 %(free)2s。可用 %(avail)-5s"
+
+#~ msgid ""
+#~ "\t LeastUsedHost: Best host: %(best_host)s."
+#~ " (used capacity %(min_used)s)"
+#~ msgstr "\t [ tab] LeastUsedHost:最佳主机: %(best_host)s。(使用的空间 %(min_used)s)"
+
+#~ msgid ""
+#~ "\t MostAvailCap: Best host: %(best_host)s. "
+#~ "(available %(max_avail)s %(type_str)s)"
+#~ msgstr "\t MostAvailCap:最佳主机: %(best_host)s。 (可用 %(max_avail)s %(type_str)s)"
+
+#~ msgid "(%(nm)s) publish (key: %(routing_key)s) %(message)s"
+#~ msgstr "(%(nm)s) 发布 (键:%(routing_key)s) %(message)s"
+
+#~ msgid "Publishing to route %s"
+#~ msgstr "发布并路由到 %s"
+
+#~ msgid "Declaring queue %s"
+#~ msgstr "正在声明队列 %s"
+
+#~ msgid "Declaring exchange %s"
+#~ msgstr "正在声明交换(exchange) %s"
+
+#~ msgid "Binding %(queue)s to %(exchange)s with key %(routing_key)s"
+#~ msgstr "把队列 %(queue)s 绑定到 %(exchange)s 采用的键是 %(routing_key)s"
+
+#~ msgid "Getting from %(queue)s: %(message)s"
+#~ msgstr "从队列 %(queue)s 取消息:%(message)s"
+
+#~ msgid "Test: Emulate wrong VSA name. Raise"
+#~ msgstr "测试:模拟错误的 VSA 名称。抛出异常"
+
+#~ msgid "Test: Emulate DB error. Raise"
+#~ msgstr "测试:模拟数据测试。抛出"
+
+#~ msgid "Test: user_data = %s"
+#~ msgstr "测试:user_data = %s"
+
+#~ msgid "_create: param=%s"
+#~ msgstr "_create: param=%s"
+
+#~ msgid "Host %s"
+#~ msgstr "主机 %s"
+
+#~ msgid "Test: provision vol %(name)s on host %(host)s"
+#~ msgstr "测试:在主机 %(host)s 上提供 %(name)s"
+
+#~ msgid "\t vol=%(vol)s"
+#~ msgstr "\t vol=%(vol)s"
+
+#~ msgid "Test: VSA update request: vsa_id=%(vsa_id)s values=%(values)s"
+#~ msgstr "测试:VSA更新请求:vsa_id=%(vsa_id)s values=%(values)s"
+
+#~ msgid "Test: Volume create: %s"
+#~ msgstr "测试:卷创建:%s"
+
+#~ msgid "Test: Volume get request: id=%(volume_id)s"
+#~ msgstr "测试:卷获取请求:id=%(volume_id)s"
+
+#~ msgid "Test: Volume update request: id=%(volume_id)s values=%(values)s"
+#~ msgstr "测试:卷更新请求:id=%(volume_id)s values=%(values)s"
+
+#~ msgid "Test: Volume get: id=%(volume_id)s"
+#~ msgstr "测试:卷获取:id=%(volume_id)s"
+
+#~ msgid "Task [%(name)s] %(task)s status: success    %(result)s"
+#~ msgstr "任务 [%(name)s] %(task)s 状态:成功 %(result)s"
+
+#~ msgid "Task [%(name)s] %(task)s status: %(status)s    %(error_info)s"
+#~ msgstr "任务 [%(name)s] %(task)s 状态:%(status)s %(error_info)s"
+
+#~ msgid "virsh said: %r"
+#~ msgstr "virsh 输出: %r"
+
+#~ msgid "cool, it's a device"
+#~ msgstr "酷,这是个设备"
+
+#~ msgid "Unable to read LXC console"
+#~ msgstr "无法读取 LXC 控制台"
+
+#~ msgid ""
+#~ "to xml...\n"
+#~ ":%s "
+#~ msgstr ""
+#~ "转换成 xml...\n"
+#~ ":%s "
+
+#~ msgid "The nwfilter(%(instance_secgroup_filter_name)s) is not found."
+#~ msgstr "nwfilter(%(instance_secgroup_filter_name)s) 未找到"
+
+#~ msgid "Created VM %s..."
+#~ msgstr "创建虚拟机 %s ..."
+
+#~ msgid "Created VM %(instance_name)s as %(vm_ref)s."
+#~ msgstr "已经将虚拟机 %(instance_name)s 创建成 %(vm_ref)s。"
+
+#~ msgid "Creating a CDROM-specific VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr "正在为虚拟机 %(vm_ref)s 创建一个特定的CDROM VBD,  VDI %(vdi_ref)s ... "
+
+#~ msgid ""
+#~ "Created a CDROM-specific VBD %(vbd_ref)s"
+#~ "  for VM %(vm_ref)s, VDI %(vdi_ref)s."
+#~ msgstr "已经创建了一个基于CDROM 的VBD %(vbd_ref)s,目的是为虚拟机 %(vm_ref)s,VDI %(vdi_ref)s。"
+
+#~ msgid "Image Type: %s"
+#~ msgstr "镜像类型:%s"
+
+#~ msgid "ISO: Found sr possibly containing the ISO image"
+#~ msgstr "ISO:找到可能包含该ISO镜像的存储库"
+
+#~ msgid "Creating VBD for VDI %s ... "
+#~ msgstr "正在为VDI%s创建VBD "
+
+#~ msgid "Creating VBD for VDI %s done."
+#~ msgstr "为VDI %s 创建VBD完成。"
+
+#~ msgid "VBD.unplug successful first time."
+#~ msgstr "VBD.unplug 操作第一次成功。"
+
+#~ msgid "VBD.unplug rejected: retrying..."
+#~ msgstr "VBD.unplug 操作被拒绝:重试中..."
+
+#~ msgid "Not sleeping anymore!"
+#~ msgstr "不再睡眠!"
+
+#~ msgid "VBD.unplug successful eventually."
+#~ msgstr "VBD.unplug 操作最终成功。"
+
+#~ msgid "Ignoring XenAPI.Failure in VBD.unplug: %s"
+#~ msgstr "在 VBD.unplug 操作中忽略XenAPI.Failure:%s"
+
+#~ msgid "Ignoring XenAPI.Failure %s"
+#~ msgstr "忽略 XenAPI.Failure %s"
+
+#~ msgid "Starting instance %s"
+#~ msgstr "启动实例 %s"
+
+#~ msgid "instance %s: Failed to spawn"
+#~ msgstr "实例 %s:生产失败"
+
+#~ msgid "Instance %s failed to spawn - performing clean-up"
+#~ msgstr "实例 %s 生产失败 - 正在进行清理"
+
+#~ msgid "instance %s: Failed to spawn - Unable to create VM"
+#~ msgstr "实例 %s:生产失败 - 无法创建虚拟机"
+
+#~ msgid "Starting VM %s..."
+#~ msgstr "启动虚拟机 %s..."
+
+#~ msgid "Spawning VM %(instance_uuid)s created %(vm_ref)s."
+#~ msgstr "生产 VM %(instance_uuid)s 它是由 %(vm_ref)s 创建的。"
+
+#~ msgid "Instance %s: waiting for running"
+#~ msgstr "实例 %s:等待运行"
+
+#~ msgid "Instance %s: running"
+#~ msgstr "实例 %s:运行"
+
+#~ msgid "Resources to remove:%s"
+#~ msgstr "将要移除的资源:%s"
+
+#~ msgid "Removing VDI %(vdi_ref)s(uuid:%(vdi_to_remove)s)"
+#~ msgstr "移除VDI %(vdi_ref)s(uuid:%(vdi_to_remove)s)"
+
+#~ msgid "Skipping VDI destroy for %s"
+#~ msgstr "跳过 %s 的VDI的销毁"
+
+#~ msgid "Destroying VDIs for Instance %(instance_uuid)s"
+#~ msgstr "正在为实例 %(instance_uuid)s 销毁 VDIs"
+
+#~ msgid "Instance %(instance_uuid)s VM destroyed"
+#~ msgstr "实例 %(instance_uuid)s 销毁了"
+
+#~ msgid "Destroying VM for Instance %(instance_uuid)s"
+#~ msgstr "正在为实例%(instance_uuid)s 销毁虚拟机"
+
+#~ msgid "Instance for migration %d not found, skipping"
+#~ msgstr "没有找到为迁移 %d 的实例,正在跳过"
+
+#~ msgid "creating vif(s) for vm: |%s|"
+#~ msgstr "正在为虚拟机创建 vif(s):|%s|"
+
+#~ msgid "Created VIF %(vif_ref)s for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr "创建VIF %(vif_ref)s 是为了虚拟机 %(vm_ref)s,网络 %(network_ref)s。"
+
+#~ msgid ""
+#~ "The call to %(method)s returned an "
+#~ "error: %(e)s. VM id=%(instance_uuid)s; "
+#~ "args=%(args)r"
+#~ msgstr "%(method)s 的调用返回错误:%(e)s。虚拟机id=%(instance_uuid)s; args=%(args)r"
+
+#~ msgid "Creating VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr "为虚拟机 %(vm_ref)s ,VDI %(vdi_ref)s 创建VBD... "
+
+#~ msgid "Error destroying VDI"
+#~ msgstr "销毁VDI出错"
+
+#~ msgid "\tVolume %s is NOT VSA volume"
+#~ msgstr "\t卷 %s 不是VSA 卷"
+
+#~ msgid "\tFE VSA Volume %s creation - do nothing"
+#~ msgstr "\tFE VSA 卷 %s 的创建 - 什么都不做"
+
+#~ msgid "VSA BE create_volume for %s failed"
+#~ msgstr "为 %s 的VSA BE create_volume失败"
+
+#~ msgid "VSA BE create_volume for %s succeeded"
+#~ msgstr "为 %s 的VSA BE create_volume成功"
+
+#~ msgid "\tFE VSA Volume %s deletion - do nothing"
+#~ msgstr "\tFE VSA 卷 %s 的删除 - 什么都不做"
+
+#~ msgid "VSA BE delete_volume for %s failed"
+#~ msgstr "为 %s 的VSA BE delete_volume失败"
+
+#~ msgid "VSA BE delete_volume for %s suceeded"
+#~ msgstr "为 %s 的VSA BE delete_volume成功"
+
+#~ msgid "\tFE VSA Volume %s local path call - call discover"
+#~ msgstr "\tFE VSA 卷 %s 本地路径调用 - 调用discover"
+
+#~ msgid "\tFE VSA Volume %s ensure export - do nothing"
+#~ msgstr "\tFE VSA Volume %s 确保导出 - 什么都不做"
+
+#~ msgid "\tFE VSA Volume %s create export - do nothing"
+#~ msgstr "\tFE VSA Volume %s 创建导出 - 什么都不做"
+
+#~ msgid "\tFE VSA Volume %s remove export - do nothing"
+#~ msgstr "\tFE VSA Volume %s 删除导出 - 什么都不做"
+
+#~ msgid "VSA BE remove_export for %s failed"
+#~ msgstr "为 %s 的VSA BE remove_export失败"
+
+#~ msgid "Failed to retrieve QoS info"
+#~ msgstr "获取QoS信息失败"
+
+#~ msgid "drive_name not defined"
+#~ msgstr "没有定义drive_name"
+
+#~ msgid "invalid drive type name %s"
+#~ msgstr "无效的drive类型名称 %s"
+
+#~ msgid "*** Experimental VSA code ***"
+#~ msgstr "*** 用于实验的VSA代码 ***"
+
+#~ msgid "Requested number of VCs (%d) is too high. Setting to default"
+#~ msgstr "请求的VCs (%d)数目过大。设置为默认值"
+
+#~ msgid "Creating VSA: %s"
+#~ msgstr "正在创建VSA:%s"
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d %(vsa_name)s: Create "
+#~ "volume %(vol_name)s, %(vol_size)d GB, type "
+#~ "%(vol_type_id)s"
+#~ msgstr ""
+#~ "VSA ID %(vsa_id)d %(vsa_name)s:创建卷 "
+#~ "%(vol_name)s,%(vol_size)d GB,类型 %(vol_type_id)s"
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA status to %(status)s"
+#~ msgstr "VSA ID %(vsa_id)d:更新VSA状态到 %(status)s"
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA call"
+#~ msgstr "VSA ID %(vsa_id)d:更新VSA调用"
+
+#~ msgid "Adding %(add_cnt)s VCs to VSA %(vsa_name)s."
+#~ msgstr "添加%(add_cnt)s VCs到 %(vsa_name)s。"
+
+#~ msgid "Deleting %(del_cnt)s VCs from VSA %(vsa_name)s."
+#~ msgstr "%(del_cnt)s VCs 从VSA %(vsa_name)s 中删除。"
+
+#~ msgid "VSA ID %(vsa_id)s: Deleting %(direction)s volume %(vol_name)s"
+#~ msgstr "VSA ID %(vsa_id)s:删除 %(direction)s 卷 %(vol_name)s"
+
+#~ msgid "Unable to delete volume %s"
+#~ msgstr "无法删除卷 %s"
+
+#~ msgid "VSA ID %(vsa_id)s: Forced delete. %(direction)s volume %(vol_name)s"
+#~ msgstr "VSA ID %(vsa_id)s:强迫删除。%(direction)s 卷 %(vol_name)s"
+
+#~ msgid "Going to try to terminate VSA ID %s"
+#~ msgstr "将要试图终止VSA ID %s"
+
+#~ msgid "VSA ID %(vsa_id)s: Delete instance %(name)s"
+#~ msgstr "VSA ID %(vsa_id)s:删除实例 %(name)s"
+
+#~ msgid "Create call received for VSA %s"
+#~ msgstr "收到VSA %s 的Create call"
+
+#~ msgid "Failed to find VSA %(vsa_id)d"
+#~ msgstr "没有找到VSA %(vsa_id)d"
+
+#~ msgid "VSA ID %(vsa_id)s: Drive %(vol_id)s created. Status %(status)s"
+#~ msgstr "VSA ID %(vsa_id)s:Drive %(vol_id)s 创建。状态 %(status)s"
+
+#~ msgid "Drive %(vol_name)s (%(vol_disp_name)s) still in creating phase - wait"
+#~ msgstr "Drive %(vol_name)s (%(vol_disp_name)s) 依然在创建阶段 - 请等待"
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Not all volumes "
+#~ "are created (%(cvol_real)d of %(cvol_exp)d)"
+#~ msgstr "VSA ID %(vsa_id)d: 不是所有的卷都创建了 (%(cvol_real)d of %(cvol_exp)d)"
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Drive %(vol_name)s "
+#~ "(%(vol_disp_name)s) is in %(status)s state"
+#~ msgstr ""
+#~ "VSA ID %(vsa_id)d:Drive %(vol_name)s "
+#~ "(%(vol_disp_name)s)处于 %(status)s 状态。"
+
+#~ msgid "Failed to update attach status for volume %(vol_name)s. %(ex)s"
+#~ msgstr "更新卷 %(vol_name)s 的附加状态失败。%(ex)s"
+
+#~ msgid "VSA ID %(vsa_id)d: Delete all BE volumes"
+#~ msgstr "VSA ID %(vsa_id)d:删除所有BE卷"
+
+#~ msgid "VSA ID %(vsa_id)d: Start %(vc_count)d instances"
+#~ msgstr "VSA ID %(vsa_id)d:启动 %(vc_count)d 个实例"
+
diff --git a/cinder/locale/zh_TW/LC_MESSAGES/nova.po b/cinder/locale/zh_TW/LC_MESSAGES/nova.po
new file mode 100644
index 000000000..48bc07cdc
--- /dev/null
+++ b/cinder/locale/zh_TW/LC_MESSAGES/nova.po
@@ -0,0 +1,8207 @@
+# Chinese (Traditional) translation for cinder
+# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
+# This file is distributed under the same license as the cinder package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version:  cinder\n"
+"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
+"POT-Creation-Date: 2012-04-08 23:04+0000\n"
+"PO-Revision-Date: 2012-03-07 02:00+0000\n"
+"Last-Translator: Charles Hsu <charles0126+openstack@gmail.com>\n"
+"Language-Team: Chinese (Traditional) <zh_TW@li.org>\n"
+"Plural-Forms: nplurals=1; plural=0\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 0.9.6\n"
+
+#: cinder/context.py:59
+#, python-format
+msgid "Arguments dropped when creating context: %s"
+msgstr ""
+
+#: cinder/context.py:90
+#, python-format
+msgid "read_deleted can only be one of 'no', 'yes' or 'only', not %r"
+msgstr ""
+
+#: cinder/crypto.py:48
+msgid "Filename of root CA"
+msgstr ""
+
+#: cinder/crypto.py:51
+msgid "Filename of private key"
+msgstr "Private key 私鑰檔案名稱"
+
+#: cinder/crypto.py:54
+msgid "Filename of root Certificate Revocation List"
+msgstr ""
+
+#: cinder/crypto.py:57
+msgid "Where we keep our keys"
+msgstr "我們的keys留存於何處"
+
+#: cinder/crypto.py:60
+msgid "Where we keep our root CA"
+msgstr "我們的根憑證留存於何處"
+
+#: cinder/crypto.py:63
+msgid "Should we use a CA for each project?"
+msgstr "是否需要一個project 使用一個CA"
+
+#: cinder/crypto.py:67
+#, python-format
+msgid "Subject for certificate for users, %s for project, user, timestamp"
+msgstr ""
+
+#: cinder/crypto.py:72
+#, python-format
+msgid "Subject for certificate for projects, %s for project, timestamp"
+msgstr ""
+
+#: cinder/crypto.py:292
+#, python-format
+msgid "Flags path: %s"
+msgstr ""
+
+#: cinder/exception.py:56
+msgid "Unexpected error while running command."
+msgstr "非預期的執行錯誤"
+
+#: cinder/exception.py:59
+#, python-format
+msgid ""
+"%(description)s\n"
+"Command: %(cmd)s\n"
+"Exit code: %(exit_code)s\n"
+"Stdout: %(stdout)r\n"
+"Stderr: %(stderr)r"
+msgstr ""
+"%(description)s\n"
+"命令: %(cmd)s\n"
+"退出代碼: %(exit_code)s\n"
+"標準輸出: %(stdout)r\n"
+"標準錯誤輸出: %(stderr)r"
+
+#: cinder/exception.py:94
+msgid "DB exception wrapped."
+msgstr ""
+
+#: cinder/exception.py:155
+msgid "An unknown exception occurred."
+msgstr "發生一個未知例外"
+
+#: cinder/exception.py:178
+msgid "Failed to decrypt text"
+msgstr "內文解碼失敗"
+
+#: cinder/exception.py:182
+msgid "Failed to paginate through images from image service"
+msgstr ""
+
+#: cinder/exception.py:186
+msgid "Virtual Interface creation failed"
+msgstr "建立虛擬介面失敗"
+
+#: cinder/exception.py:190
+msgid "5 attempts to create virtual interfacewith unique mac address failed"
+msgstr "連續嘗試 5 次建立唯一網路位置(MAC)的虛擬介面失敗"
+
+#: cinder/exception.py:195
+msgid "Connection to glance failed"
+msgstr "連接到glance失敗"
+
+#: cinder/exception.py:199
+msgid "Connection to melange failed"
+msgstr ""
+
+#: cinder/exception.py:203
+msgid "Not authorized."
+msgstr "未被授權"
+
+#: cinder/exception.py:208
+msgid "User does not have admin privileges"
+msgstr "使用者並沒有管理者權力"
+
+#: cinder/exception.py:212
+#, python-format
+msgid "Policy doesn't allow %(action)s to be performed."
+msgstr ""
+
+#: cinder/exception.py:216
+#, python-format
+msgid "Not authorized for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:220
+msgid "Unacceptable parameters."
+msgstr "不可接受的參數值"
+
+#: cinder/exception.py:225
+msgid "Invalid snapshot"
+msgstr "無效的快照(snapshot)"
+
+#: cinder/exception.py:229
+#, python-format
+msgid "Volume %(volume_id)s is not attached to anything"
+msgstr ""
+
+#: cinder/exception.py:233 cinder/api/openstack/compute/contrib/keypairs.py:113
+msgid "Keypair data is invalid"
+msgstr "無效的Keypair"
+
+#: cinder/exception.py:237
+msgid "Failed to load data into json format"
+msgstr ""
+
+#: cinder/exception.py:241
+msgid "The request is invalid."
+msgstr ""
+
+#: cinder/exception.py:245
+#, python-format
+msgid "Invalid signature %(signature)s for user %(user)s."
+msgstr ""
+
+#: cinder/exception.py:249
+msgid "Invalid input received"
+msgstr ""
+
+#: cinder/exception.py:253
+#, python-format
+msgid "Invalid instance type %(instance_type)s."
+msgstr ""
+
+#: cinder/exception.py:257
+msgid "Invalid volume type"
+msgstr ""
+
+#: cinder/exception.py:261
+msgid "Invalid volume"
+msgstr ""
+
+#: cinder/exception.py:265
+#, python-format
+msgid "Invalid port range %(from_port)s:%(to_port)s. %(msg)s"
+msgstr ""
+
+#: cinder/exception.py:269
+#, python-format
+msgid "Invalid IP protocol %(protocol)s."
+msgstr ""
+
+#: cinder/exception.py:273
+#, python-format
+msgid "Invalid content type %(content_type)s."
+msgstr ""
+
+#: cinder/exception.py:277
+#, python-format
+msgid "Invalid cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:281
+msgid "Invalid reuse of an RPC connection."
+msgstr ""
+
+#: cinder/exception.py:285
+msgid "Invalid Parameter: Unicode is not supported by the current database."
+msgstr ""
+
+#: cinder/exception.py:292
+#, python-format
+msgid "%(err)s"
+msgstr ""
+
+#: cinder/exception.py:296
+#, python-format
+msgid ""
+"Cannot perform action '%(action)s' on aggregate %(aggregate_id)s. Reason:"
+" %(reason)s."
+msgstr ""
+
+#: cinder/exception.py:301
+#, python-format
+msgid "Group not valid. Reason: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:305
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s in %(attr)s %(state)s. Cannot %(method)s while"
+" the instance is in this state."
+msgstr ""
+
+#: cinder/exception.py:310
+#, python-format
+msgid "Instance %(instance_id)s is not running."
+msgstr ""
+
+#: cinder/exception.py:314
+#, python-format
+msgid "Instance %(instance_id)s is not suspended."
+msgstr ""
+
+#: cinder/exception.py:318
+#, python-format
+msgid "Instance %(instance_id)s is not in rescue mode"
+msgstr ""
+
+#: cinder/exception.py:322
+msgid "Failed to suspend instance"
+msgstr ""
+
+#: cinder/exception.py:326
+msgid "Failed to resume server"
+msgstr ""
+
+#: cinder/exception.py:330
+msgid "Failed to reboot instance"
+msgstr ""
+
+#: cinder/exception.py:334
+msgid "Failed to terminate instance"
+msgstr ""
+
+#: cinder/exception.py:338
+msgid "Service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:342
+msgid "Volume service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:346
+msgid "Compute service is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:350
+#, python-format
+msgid "Unable to migrate instance (%(instance_id)s) to current host (%(host)s)."
+msgstr ""
+
+#: cinder/exception.py:355
+msgid "Destination compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:359
+msgid "Original compute host is unavailable at this time."
+msgstr ""
+
+#: cinder/exception.py:363
+msgid "The supplied hypervisor type of is invalid."
+msgstr ""
+
+#: cinder/exception.py:367
+msgid "The instance requires a newer hypervisor version than has been provided."
+msgstr ""
+
+#: cinder/exception.py:372
+#, python-format
+msgid ""
+"The supplied disk path (%(path)s) already exists, it is expected not to "
+"exist."
+msgstr ""
+
+#: cinder/exception.py:377
+#, python-format
+msgid "The supplied device path (%(path)s) is invalid."
+msgstr ""
+
+#: cinder/exception.py:381
+#, python-format
+msgid "The supplied device (%(device)s) is busy."
+msgstr ""
+
+#: cinder/exception.py:385
+msgid "Unacceptable CPU info"
+msgstr ""
+
+#: cinder/exception.py:389
+#, python-format
+msgid "%(address)s is not a valid IP v4/6 address."
+msgstr ""
+
+#: cinder/exception.py:393
+#, python-format
+msgid ""
+"VLAN tag is not appropriate for the port group %(bridge)s. Expected VLAN "
+"tag is %(tag)s, but the one associated with the port group is %(pgroup)s."
+msgstr ""
+
+#: cinder/exception.py:399
+#, python-format
+msgid ""
+"vSwitch which contains the port group %(bridge)s is not associated with "
+"the desired physical adapter. Expected vSwitch is %(expected)s, but the "
+"one associated is %(actual)s."
+msgstr ""
+
+#: cinder/exception.py:406
+#, python-format
+msgid "Disk format %(disk_format)s is not acceptable"
+msgstr ""
+
+#: cinder/exception.py:410
+#, python-format
+msgid "Image %(image_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:414
+#, python-format
+msgid "Instance %(instance_id)s is unacceptable: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:418
+#, python-format
+msgid "Ec2 id %(ec2_id)s is unacceptable."
+msgstr ""
+
+#: cinder/exception.py:422
+msgid "Resource could not be found."
+msgstr ""
+
+#: cinder/exception.py:427
+#, python-format
+msgid "Required flag %(flag)s not set."
+msgstr ""
+
+#: cinder/exception.py:431
+#, python-format
+msgid "Volume %(volume_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:435
+#, python-format
+msgid "Unable to locate account %(account_name)s on Solidfire device"
+msgstr ""
+
+#: cinder/exception.py:440
+#, python-format
+msgid "Volume not found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:444
+#, python-format
+msgid "Volume %(volume_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:449
+msgid "Zero volume types found."
+msgstr ""
+
+#: cinder/exception.py:453
+#, python-format
+msgid "Volume type %(volume_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:457
+#, python-format
+msgid "Volume type with name %(volume_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:462
+#, python-format
+msgid ""
+"Volume Type %(volume_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:467
+#, python-format
+msgid "Snapshot %(snapshot_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:471
+#, python-format
+msgid "deleting volume %(volume_name)s that has snapshot"
+msgstr ""
+
+#: cinder/exception.py:475
+#, python-format
+msgid "deleting snapshot %(snapshot_name)s that has dependent volumes"
+msgstr ""
+
+#: cinder/exception.py:480
+#, python-format
+msgid "No target id found for volume %(volume_id)s."
+msgstr ""
+
+#: cinder/exception.py:484
+#, python-format
+msgid "No disk at %(location)s"
+msgstr ""
+
+#: cinder/exception.py:488
+#, python-format
+msgid "Could not find a handler for %(driver_type)s volume."
+msgstr ""
+
+#: cinder/exception.py:492
+#, python-format
+msgid "Invalid image href %(image_href)s."
+msgstr ""
+
+#: cinder/exception.py:496
+msgid ""
+"Some images have been stored via hrefs. This version of the api does not "
+"support displaying image hrefs."
+msgstr ""
+
+#: cinder/exception.py:501
+#, python-format
+msgid "Image %(image_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:505
+#, python-format
+msgid "Kernel not found for image %(image_id)s."
+msgstr ""
+
+#: cinder/exception.py:509
+#, python-format
+msgid "User %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:513
+#, python-format
+msgid "Project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:517
+#, python-format
+msgid "User %(user_id)s is not a member of project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:521
+#, python-format
+msgid "Role %(role_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:525
+msgid "Cannot find SR to read/write VDI."
+msgstr ""
+
+#: cinder/exception.py:529
+#, python-format
+msgid "%(req)s is required to create a network."
+msgstr ""
+
+#: cinder/exception.py:533
+#, python-format
+msgid "Network %(network_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:537
+#, python-format
+msgid "Network could not be found for bridge %(bridge)s"
+msgstr ""
+
+#: cinder/exception.py:541
+#, python-format
+msgid "Network could not be found for uuid %(uuid)s"
+msgstr ""
+
+#: cinder/exception.py:545
+#, python-format
+msgid "Network could not be found with cidr %(cidr)s."
+msgstr ""
+
+#: cinder/exception.py:549
+#, python-format
+msgid "Network could not be found for instance %(instance_id)s."
+msgstr ""
+
+#: cinder/exception.py:553
+msgid "No networks defined."
+msgstr ""
+
+#: cinder/exception.py:557
+#, python-format
+msgid ""
+"Either Network uuid %(network_uuid)s is not present or is not assigned to"
+" the project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:562
+#, python-format
+msgid "Host is not set to the network (%(network_id)s)."
+msgstr ""
+
+#: cinder/exception.py:566
+#, python-format
+msgid "Network %(network)s has active ports, cannot delete."
+msgstr ""
+
+#: cinder/exception.py:570
+msgid "Could not find the datastore reference(s) which the VM uses."
+msgstr ""
+
+#: cinder/exception.py:574
+#, python-format
+msgid "No fixed IP associated with id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:578
+#, python-format
+msgid "Fixed ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:582
+#, python-format
+msgid "Instance %(instance_id)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:586
+#, python-format
+msgid "Network host %(host)s has zero fixed ips in network %(network_id)s."
+msgstr ""
+
+#: cinder/exception.py:591
+#, python-format
+msgid "Instance %(instance_id)s doesn't have fixed ip '%(ip)s'."
+msgstr ""
+
+#: cinder/exception.py:595
+#, python-format
+msgid "Host %(host)s has zero fixed ips."
+msgstr ""
+
+#: cinder/exception.py:599
+#, python-format
+msgid ""
+"Fixed IP address (%(address)s) does not exist in network "
+"(%(network_uuid)s)."
+msgstr ""
+
+#: cinder/exception.py:604
+#, python-format
+msgid "Fixed IP address %(address)s is already in use."
+msgstr ""
+
+#: cinder/exception.py:608
+#, python-format
+msgid "Fixed IP address %(address)s is invalid."
+msgstr ""
+
+#: cinder/exception.py:612
+msgid "Zero fixed ips available."
+msgstr ""
+
+#: cinder/exception.py:616
+msgid "Zero fixed ips could be found."
+msgstr ""
+
+#: cinder/exception.py:620
+#, python-format
+msgid "Floating ip not found for id %(id)s."
+msgstr ""
+
+#: cinder/exception.py:624
+#, python-format
+msgid "The DNS entry %(name)s already exists in domain %(domain)s."
+msgstr ""
+
+#: cinder/exception.py:628
+#, python-format
+msgid "Floating ip not found for address %(address)s."
+msgstr ""
+
+#: cinder/exception.py:632
+#, python-format
+msgid "Floating ip not found for host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:636
+msgid "Zero floating ips available."
+msgstr ""
+
+#: cinder/exception.py:640
+#, python-format
+msgid "Floating ip %(address)s is associated."
+msgstr ""
+
+#: cinder/exception.py:644
+#, python-format
+msgid "Floating ip %(address)s is not associated."
+msgstr ""
+
+#: cinder/exception.py:648
+msgid "Zero floating ips exist."
+msgstr ""
+
+#: cinder/exception.py:652
+#, python-format
+msgid "Interface %(interface)s not found."
+msgstr ""
+
+#: cinder/exception.py:656
+#, python-format
+msgid "Keypair %(name)s not found for user %(user_id)s"
+msgstr ""
+
+#: cinder/exception.py:660
+#, python-format
+msgid "Certificate %(certificate_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:664
+#, python-format
+msgid "Service %(service_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:668
+#, python-format
+msgid "Host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:672
+#, python-format
+msgid "Compute host %(host)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:676
+#, python-format
+msgid "Could not find binary %(binary)s on host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:680
+#, python-format
+msgid "Auth token %(token)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:684
+#, python-format
+msgid "Access Key %(access_key)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:688
+msgid "Quota could not be found"
+msgstr ""
+
+#: cinder/exception.py:692
+#, python-format
+msgid "Quota for project %(project_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:696
+#, python-format
+msgid "Quota class %(class_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:700
+#, python-format
+msgid "Security group %(security_group_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:704
+#, python-format
+msgid "Security group %(security_group_id)s not found for project %(project_id)s."
+msgstr ""
+
+#: cinder/exception.py:709
+#, python-format
+msgid "Security group with rule %(rule_id)s not found."
+msgstr ""
+
+#: cinder/exception.py:713
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is already associated with the "
+"instance %(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:718
+#, python-format
+msgid ""
+"Security group %(security_group_id)s is not associated with the instance "
+"%(instance_id)s"
+msgstr ""
+
+#: cinder/exception.py:723
+#, python-format
+msgid "Migration %(migration_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:727
+#, python-format
+msgid "Migration not found for instance %(instance_id)s with status %(status)s."
+msgstr ""
+
+#: cinder/exception.py:732
+#, python-format
+msgid "Console pool %(pool_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:736
+#, python-format
+msgid ""
+"Console pool of type %(console_type)s for compute host %(compute_host)s "
+"on proxy host %(host)s not found."
+msgstr ""
+
+#: cinder/exception.py:742
+#, python-format
+msgid "Console %(console_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:746
+#, python-format
+msgid "Console for instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:750
+#, python-format
+msgid ""
+"Console for instance %(instance_id)s in pool %(pool_id)s could not be "
+"found."
+msgstr ""
+
+#: cinder/exception.py:755
+#, python-format
+msgid "Invalid console type %(console_type)s "
+msgstr ""
+
+#: cinder/exception.py:759
+msgid "Zero instance types found."
+msgstr ""
+
+#: cinder/exception.py:763
+#, python-format
+msgid "Instance type %(instance_type_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:767
+#, python-format
+msgid "Instance type with name %(instance_type_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:772
+#, python-format
+msgid "Flavor %(flavor_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:776
+#, python-format
+msgid "Cell %(cell_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:780
+#, python-format
+msgid "Scheduler Host Filter %(filter_name)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:784
+#, python-format
+msgid "Scheduler cost function %(cost_fn_str)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:789
+#, python-format
+msgid "Scheduler weight flag not found: %(flag_name)s"
+msgstr ""
+
+#: cinder/exception.py:793
+#, python-format
+msgid "Instance %(instance_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:798
+#, python-format
+msgid ""
+"Instance Type %(instance_type_id)s has no extra specs with key "
+"%(extra_specs_key)s."
+msgstr ""
+
+#: cinder/exception.py:803
+msgid "LDAP object could not be found"
+msgstr ""
+
+#: cinder/exception.py:807
+#, python-format
+msgid "LDAP user %(user_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:811
+#, python-format
+msgid "LDAP group %(group_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:815
+#, python-format
+msgid "LDAP user %(user_id)s is not a member of group %(group_id)s."
+msgstr ""
+
+#: cinder/exception.py:819
+#, python-format
+msgid "File %(file_path)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:823
+msgid "Zero files could be found."
+msgstr ""
+
+#: cinder/exception.py:827
+#, python-format
+msgid "Virtual switch associated with the network adapter %(adapter)s not found."
+msgstr ""
+
+#: cinder/exception.py:832
+#, python-format
+msgid "Network adapter %(adapter)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:836
+#, python-format
+msgid "Class %(class_name)s could not be found: %(exception)s"
+msgstr ""
+
+#: cinder/exception.py:840
+msgid "Action not allowed."
+msgstr ""
+
+#: cinder/exception.py:844
+#, python-format
+msgid "Unable to use global role %(role_id)s"
+msgstr ""
+
+#: cinder/exception.py:848
+msgid "Rotation is not allowed for snapshots"
+msgstr ""
+
+#: cinder/exception.py:852
+msgid "Rotation param is required for backup image_type"
+msgstr ""
+
+#: cinder/exception.py:861
+#, python-format
+msgid "Key pair %(key_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:865
+#, python-format
+msgid "User %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:869
+#, python-format
+msgid "LDAP user %(user)s already exists."
+msgstr ""
+
+#: cinder/exception.py:873
+#, python-format
+msgid "LDAP group %(group)s already exists."
+msgstr ""
+
+#: cinder/exception.py:877
+#, python-format
+msgid "User %(uid)s is already a member of the group %(group_dn)s"
+msgstr ""
+
+#: cinder/exception.py:882
+#, python-format
+msgid "Project %(project)s already exists."
+msgstr ""
+
+#: cinder/exception.py:886
+#, python-format
+msgid "Instance %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:890
+#, python-format
+msgid "Instance Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:894
+#, python-format
+msgid "Volume Type %(name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:898
+#, python-format
+msgid "%(path)s is on shared storage: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:902
+msgid "Migration error"
+msgstr ""
+
+#: cinder/exception.py:906
+#, python-format
+msgid "Malformed message body: %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:910
+#, python-format
+msgid "Could not find config at %(path)s"
+msgstr ""
+
+#: cinder/exception.py:914
+#, python-format
+msgid "Could not load paste app '%(name)s' from %(path)s"
+msgstr ""
+
+#: cinder/exception.py:918
+msgid "When resizing, instances must change size!"
+msgstr ""
+
+#: cinder/exception.py:922
+msgid "Image is larger than instance type allows"
+msgstr ""
+
+#: cinder/exception.py:926
+msgid "1 or more Zones could not complete the request"
+msgstr ""
+
+#: cinder/exception.py:930
+msgid "Instance type's memory is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:934
+msgid "Instance type's disk is too small for requested image."
+msgstr ""
+
+#: cinder/exception.py:938
+#, python-format
+msgid "Insufficient free memory on compute node to start %(uuid)s."
+msgstr ""
+
+#: cinder/exception.py:942
+msgid "Could not fetch bandwidth/cpu/disk metrics for this host."
+msgstr ""
+
+#: cinder/exception.py:946
+#, python-format
+msgid "No valid host was found. %(reason)s"
+msgstr ""
+
+#: cinder/exception.py:950
+#, python-format
+msgid "Host %(host)s is not up or doesn't exist."
+msgstr ""
+
+#: cinder/exception.py:954
+msgid "Quota exceeded"
+msgstr ""
+
+#: cinder/exception.py:958
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: action '%(action)s' caused an error: "
+"%(reason)s."
+msgstr ""
+
+#: cinder/exception.py:963
+#, python-format
+msgid "Aggregate %(aggregate_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:967
+#, python-format
+msgid "Aggregate %(aggregate_name)s already exists."
+msgstr ""
+
+#: cinder/exception.py:971
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:975
+#, python-format
+msgid "Aggregate %(aggregate_id)s has no metadata with key %(metadata_key)s."
+msgstr ""
+
+#: cinder/exception.py:980
+#, python-format
+msgid "Host %(host)s already member of another aggregate."
+msgstr ""
+
+#: cinder/exception.py:984
+#, python-format
+msgid "Aggregate %(aggregate_id)s already has host %(host)s."
+msgstr ""
+
+#: cinder/exception.py:988
+#, python-format
+msgid "Detected more than one volume with name %(vol_name)s"
+msgstr ""
+
+#: cinder/exception.py:992
+#, python-format
+msgid "Cannot create volume_type with name %(name)s and specs %(extra_specs)s"
+msgstr ""
+
+#: cinder/exception.py:997
+msgid "Unable to create instance type"
+msgstr ""
+
+#: cinder/exception.py:1001
+msgid "Bad response from SolidFire API"
+msgstr ""
+
+#: cinder/exception.py:1005
+#, python-format
+msgid "Error in SolidFire API response: status=%(status)s"
+msgstr ""
+
+#: cinder/exception.py:1009
+#, python-format
+msgid "Error in SolidFire API response: data=%(data)s"
+msgstr ""
+
+#: cinder/exception.py:1013
+#, python-format
+msgid "Detected existing vlan with id %(vlan)d"
+msgstr ""
+
+#: cinder/exception.py:1017
+#, python-format
+msgid "Instance %(instance_id)s could not be found."
+msgstr ""
+
+#: cinder/exception.py:1021
+#, python-format
+msgid "Invalid id: %(val)s (expecting \"i-...\")."
+msgstr ""
+
+#: cinder/exception.py:1025
+#, python-format
+msgid "Could not fetch image %(image)s"
+msgstr ""
+
+#: cinder/log.py:315
+#, python-format
+msgid "syslog facility must be one of: %s"
+msgstr ""
+
+#: cinder/manager.py:146
+#, python-format
+msgid "Skipping %(full_task_name)s, %(ticks_to_skip)s ticks left until next run"
+msgstr ""
+
+#: cinder/manager.py:152
+#, python-format
+msgid "Running periodic task %(full_task_name)s"
+msgstr ""
+
+#: cinder/manager.py:159
+#, python-format
+msgid "Error during %(full_task_name)s: %(e)s"
+msgstr ""
+
+#: cinder/manager.py:203
+msgid "Notifying Schedulers of capabilities ..."
+msgstr ""
+
+#: cinder/policy.py:30
+msgid "JSON file representing policy"
+msgstr ""
+
+#: cinder/policy.py:33
+msgid "Rule checked when requested rule is not found"
+msgstr ""
+
+#: cinder/service.py:137
+msgid "SIGTERM received"
+msgstr ""
+
+#: cinder/service.py:177
+#, python-format
+msgid "Starting %(topic)s node (version %(vcs_string)s)"
+msgstr ""
+
+#: cinder/service.py:195
+#, python-format
+msgid "Creating Consumer connection for Service %s"
+msgstr ""
+
+#: cinder/service.py:282
+msgid "Service killed that has no database entry"
+msgstr ""
+
+#: cinder/service.py:319
+msgid "The service database object disappeared, Recreating it."
+msgstr ""
+
+#: cinder/service.py:334
+msgid "Recovered model server connection!"
+msgstr ""
+
+#: cinder/service.py:340
+msgid "model server went away"
+msgstr ""
+
+#: cinder/service.py:433
+msgid "Full set of FLAGS:"
+msgstr ""
+
+#: cinder/service.py:440
+#, python-format
+msgid "%(flag)s : FLAG SET "
+msgstr ""
+
+#: cinder/utils.py:79
+#, python-format
+msgid "Inner Exception: %s"
+msgstr ""
+
+#: cinder/utils.py:165
+#, python-format
+msgid "Fetching %s"
+msgstr ""
+
+#: cinder/utils.py:210
+#, python-format
+msgid "Got unknown keyword args to utils.execute: %r"
+msgstr ""
+
+#: cinder/utils.py:220
+#, python-format
+msgid "Running cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/utils.py:236 cinder/utils.py:315
+#, python-format
+msgid "Result was %s"
+msgstr ""
+
+#: cinder/utils.py:249
+#, python-format
+msgid "%r failed. Retrying."
+msgstr ""
+
+#: cinder/utils.py:291
+#, python-format
+msgid "Running cmd (SSH): %s"
+msgstr ""
+
+#: cinder/utils.py:293
+msgid "Environment not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:297
+msgid "process_input not supported over SSH"
+msgstr ""
+
+#: cinder/utils.py:352
+#, python-format
+msgid "debug in callback: %s"
+msgstr ""
+
+#: cinder/utils.py:534
+#, python-format
+msgid "Link Local address is not found.:%s"
+msgstr ""
+
+#: cinder/utils.py:537
+#, python-format
+msgid "Couldn't get Link Local IP of %(interface)s :%(ex)s"
+msgstr ""
+
+#: cinder/utils.py:648
+#, python-format
+msgid "Invalid backend: %s"
+msgstr ""
+
+#: cinder/utils.py:659
+#, python-format
+msgid "backend %s"
+msgstr ""
+
+#: cinder/utils.py:709
+msgid "in looping call"
+msgstr ""
+
+#: cinder/utils.py:927
+#, python-format
+msgid "Attempting to grab semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:931
+#, python-format
+msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:935
+#, python-format
+msgid "Attempting to grab file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:942
+#, python-format
+msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"..."
+msgstr ""
+
+#: cinder/utils.py:1001
+#, python-format
+msgid "Found sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1008
+#, python-format
+msgid "Cleaned sentinel %(filename)s for pid %(pid)s"
+msgstr ""
+
+#: cinder/utils.py:1023
+#, python-format
+msgid "Found lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1028
+#, python-format
+msgid "Cleaned lockfile %(file)s with link count %(count)d"
+msgstr ""
+
+#: cinder/utils.py:1138
+#, python-format
+msgid "Expected object of type: %s"
+msgstr ""
+
+#: cinder/utils.py:1169
+#, python-format
+msgid "Invalid server_string: %s"
+msgstr ""
+
+#: cinder/utils.py:1298
+#, python-format
+msgid "timefunc: '%(name)s' took %(total_time).2f secs"
+msgstr ""
+
+#: cinder/utils.py:1330
+msgid "Original exception being dropped"
+msgstr ""
+
+#: cinder/utils.py:1461
+#, python-format
+msgid "Class %(fullname)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1463
+#, python-format
+msgid "Class %(fullname)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1495
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated: %(msg)s"
+msgstr ""
+
+#: cinder/utils.py:1497
+#, python-format
+msgid "Function %(name)s in %(location)s is deprecated"
+msgstr ""
+
+#: cinder/utils.py:1681
+#, python-format
+msgid "Could not remove tmpdir: %s"
+msgstr ""
+
+#: cinder/wsgi.py:97
+#, python-format
+msgid "Started %(name)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:108
+msgid "Stopping WSGI server."
+msgstr ""
+
+#: cinder/wsgi.py:111
+msgid "Stopping raw TCP server."
+msgstr ""
+
+#: cinder/wsgi.py:117
+#, python-format
+msgid "Starting TCP server %(arg0)s on %(host)s:%(port)s"
+msgstr ""
+
+#: cinder/wsgi.py:133
+msgid "WSGI server has stopped."
+msgstr ""
+
+#: cinder/wsgi.py:211
+msgid "You must implement __call__"
+msgstr ""
+
+#: cinder/api/direct.py:218
+msgid "not available"
+msgstr ""
+
+#: cinder/api/direct.py:299
+#, python-format
+msgid "Returned non-serializeable type: %s"
+msgstr ""
+
+#: cinder/api/sizelimit.py:51
+msgid "Request is too large."
+msgstr ""
+
+#: cinder/api/validator.py:142
+#, python-format
+msgid "%(key)s with value %(value)s failed validator  %(validator)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:73
+#, python-format
+msgid "%(code)s: %(message)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:95
+#, python-format
+msgid "FaultWrapper: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:170
+msgid "Too many failed authentications."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:180
+#, python-format
+msgid ""
+"Access key %(access_key)s has had %(failures)d failed authentications and"
+" will be locked out for %(lock_mins)d minutes."
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:267
+msgid "Signature not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:271
+msgid "Access key not provided"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:306 cinder/api/ec2/__init__.py:319
+msgid "Failure communicating with keystone"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:388
+#, python-format
+msgid "Authentication Failure: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:404
+#, python-format
+msgid "Authenticated Request For %(uname)s:%(pname)s)"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:435
+#, python-format
+msgid "action: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:437
+#, python-format
+msgid "arg: %(key)s\t\tval: %(value)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:512
+#, python-format
+msgid "Unauthorized request for controller=%(controller)s and action=%(action)s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:584
+#, python-format
+msgid "InstanceNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:590
+#, python-format
+msgid "VolumeNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:596
+#, python-format
+msgid "SnapshotNotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:602
+#, python-format
+msgid "NotFound raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:605
+#, python-format
+msgid "EC2APIError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:613
+#, python-format
+msgid "KeyPairExists raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:617
+#, python-format
+msgid "InvalidParameterValue raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:621
+#, python-format
+msgid "InvalidPortRange raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:625
+#, python-format
+msgid "NotAuthorized raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:629
+#, python-format
+msgid "InvalidRequest raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:633
+#, python-format
+msgid "QuotaError raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:637
+#, python-format
+msgid "Invalid id: bogus (expecting \"i-...\"): %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:646
+#, python-format
+msgid "Unexpected error raised: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:647
+#, python-format
+msgid "Environment: %s"
+msgstr ""
+
+#: cinder/api/ec2/__init__.py:649 cinder/api/metadata/handler.py:248
+msgid "An unknown error has occurred. Please try your request again."
+msgstr ""
+
+#: cinder/api/ec2/apirequest.py:64
+#, python-format
+msgid "Unsupported API request: controller = %(controller)s, action = %(action)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:336
+#, python-format
+msgid "Create snapshot of volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:372
+#, python-format
+msgid ""
+"Value (%s) for KeyName is invalid. Content limited to Alphanumeric "
+"character, spaces, dashes, and underscore."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:378
+#, python-format
+msgid "Value (%s) for Keyname is invalid. Length exceeds maximum of 255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:382
+#, python-format
+msgid "Create key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:391
+#, python-format
+msgid "Import key %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:409
+#, python-format
+msgid "Delete key pair %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:551
+msgid "Invalid CIDR"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:639 cinder/api/ec2/cloud.py:693
+#: cinder/api/ec2/cloud.py:800
+msgid "Not enough parameters, need group_name or group_id"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:654
+#: cinder/api/openstack/compute/contrib/security_groups.py:517
+#, python-format
+msgid "Revoke security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:666 cinder/api/ec2/cloud.py:719
+#, python-format
+msgid "%s Not enough parameters to build a valid rule"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:684 cinder/api/ec2/cloud.py:744
+msgid "No rule for the specified parameters."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:708
+#: cinder/api/openstack/compute/contrib/security_groups.py:354
+#, python-format
+msgid "Authorize security group ingress %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:725
+#, python-format
+msgid "%s - This rule already exists in group"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:769
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Content limited to "
+"Alphanumeric characters, spaces, dashes, and underscores."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:776
+#, python-format
+msgid ""
+"Value (%s) for parameter GroupName is invalid. Length exceeds maximum of "
+"255."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:780
+#: cinder/api/openstack/compute/contrib/security_groups.py:292
+#, python-format
+msgid "Create Security Group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:783
+#, python-format
+msgid "group %s already exists"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:815
+#: cinder/api/openstack/compute/contrib/security_groups.py:245
+#, python-format
+msgid "Delete security group %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:823 cinder/compute/manager.py:1630
+#, python-format
+msgid "Get console output for instance %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:894
+#, python-format
+msgid "Create volume from snapshot %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:898 cinder/api/openstack/compute/contrib/volumes.py:186
+#: cinder/api/openstack/volume/volumes.py:222
+#, python-format
+msgid "Create volume of %s GB"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:921
+msgid "Delete Failed"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:931
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(instance_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:939
+msgid "Attach Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:952 cinder/api/openstack/compute/contrib/volumes.py:366
+#, python-format
+msgid "Detach volume %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:959
+msgid "Detach Volume Failed."
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:984 cinder/api/ec2/cloud.py:1041
+#: cinder/api/ec2/cloud.py:1518 cinder/api/ec2/cloud.py:1533
+#, python-format
+msgid "attribute not supported: %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1107
+#, python-format
+msgid "vol = %s\n"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1255
+msgid "Allocate address"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1267
+#, python-format
+msgid "Release address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1272
+#, python-format
+msgid "Associate address %(public_ip)s to instance %(instance_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1282
+#, python-format
+msgid "Disassociate address %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1308
+msgid "Image must be available"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1329
+msgid "Going to start terminating instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1343
+#, python-format
+msgid "Reboot instance %r"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1354
+msgid "Going to stop instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1365
+msgid "Going to start instances"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1455
+#, python-format
+msgid "De-registering image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1471
+msgid "imageLocation is required"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1490
+#, python-format
+msgid "Registered image %(image_location)s with id %(image_id)s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1536
+msgid "user or group not specified"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1538
+msgid "only group \"all\" is supported"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1540
+msgid "operation_type must be add or remove"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1542
+#, python-format
+msgid "Updating image %s publicity"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1555
+#, python-format
+msgid "Not allowed to modify attributes for image %s"
+msgstr ""
+
+#: cinder/api/ec2/cloud.py:1603
+#, python-format
+msgid "Couldn't stop instance with in %d sec"
+msgstr ""
+
+#: cinder/api/metadata/handler.py:246 cinder/api/metadata/handler.py:253
+#, python-format
+msgid "Failed to get metadata for ip: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:43
+#, python-format
+msgid "Caught error: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:45 cinder/api/openstack/wsgi.py:886
+#, python-format
+msgid "%(url)s returned with HTTP %(status)d"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:94
+msgid "Must specify an ExtensionManager class"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:105
+#, python-format
+msgid "Extended resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:130
+#, python-format
+msgid ""
+"Extension %(ext_name)s: Cannot extend resource %(collection)s: No such "
+"resource"
+msgstr ""
+
+#: cinder/api/openstack/__init__.py:135
+#, python-format
+msgid "Extension %(ext_name)s extending resource: %(collection)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:90
+#, python-format
+msgid "%(user_id)s could not be found with token '%(token)s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:134
+#, python-format
+msgid "%(user_id)s must be an admin or a member of %(project_id)s"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:152
+msgid "Authentication requests must be made against a version root (e.g. /v2)."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:167
+#, python-format
+msgid "Could not find %s in request."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:191
+#, python-format
+msgid "Successfully authenticated '%s'"
+msgstr ""
+
+#: cinder/api/openstack/auth.py:241
+msgid "User not found with provided API key."
+msgstr ""
+
+#: cinder/api/openstack/auth.py:258
+#, python-format
+msgid "Provided API key is valid, but not for user '%(username)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:133 cinder/api/openstack/common.py:167
+msgid "limit param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:136 cinder/api/openstack/common.py:171
+msgid "limit param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:161
+msgid "offset param must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/common.py:175
+msgid "offset param must be positive"
+msgstr ""
+
+#: cinder/api/openstack/common.py:203
+#, python-format
+msgid "marker [%s] not found"
+msgstr ""
+
+#: cinder/api/openstack/common.py:243
+#, python-format
+msgid "href %s does not contain version"
+msgstr ""
+
+#: cinder/api/openstack/common.py:278
+msgid "Image metadata limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/common.py:295
+#, python-format
+msgid "Converting nw_info: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:305
+#, python-format
+msgid "Converted networks: %s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:338
+#, python-format
+msgid "Cannot '%(action)s' while instance is in %(attr)s %(state)s"
+msgstr ""
+
+#: cinder/api/openstack/common.py:341
+#, python-format
+msgid "Instance is in an invalid state for '%(action)s'"
+msgstr ""
+
+#: cinder/api/openstack/common.py:421
+msgid "Rejecting snapshot request, snapshots currently disabled"
+msgstr ""
+
+#: cinder/api/openstack/common.py:423
+msgid "Instance snapshots are not permitted at this time."
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:188
+#, python-format
+msgid "Loaded extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:225
+#, python-format
+msgid "Ext name: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:226
+#, python-format
+msgid "Ext alias: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:227
+#, python-format
+msgid "Ext description: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:229
+#, python-format
+msgid "Ext namespace: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:230
+#, python-format
+msgid "Ext updated: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:232
+#, python-format
+msgid "Exception loading extension: %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:246
+#, python-format
+msgid "Loading extension %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:252
+#, python-format
+msgid "Calling extension factory %s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:264
+#, python-format
+msgid "Failed to load extension %(ext_factory)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:344
+#, python-format
+msgid "Failed to load extension %(classpath)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/extensions.py:368
+#, python-format
+msgid "Failed to load extension %(ext_name)s: %(exc)s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:135 cinder/api/openstack/wsgi.py:538
+msgid "cannot understand JSON"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:159
+#: cinder/api/openstack/compute/contrib/hosts.py:86
+msgid "cannot understand XML"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:543
+msgid "too many body keys"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:582
+#, python-format
+msgid "Exception handling resource: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:586
+#, python-format
+msgid "Fault thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:589
+#, python-format
+msgid "HTTP exception thrown: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:697
+msgid "Unrecognized Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:701
+msgid "No Content-Type provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:705
+msgid "Empty body provided in request"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:816
+#, python-format
+msgid "There is no such action: %s"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:819 cinder/api/openstack/wsgi.py:832
+#: cinder/api/openstack/compute/server_metadata.py:58
+#: cinder/api/openstack/compute/server_metadata.py:76
+#: cinder/api/openstack/compute/server_metadata.py:101
+#: cinder/api/openstack/compute/server_metadata.py:126
+#: cinder/api/openstack/compute/contrib/admin_actions.py:211
+#: cinder/api/openstack/compute/contrib/console_output.py:52
+msgid "Malformed request body"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:829
+msgid "Unsupported Content-Type"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:841
+msgid "Malformed request url"
+msgstr ""
+
+#: cinder/api/openstack/wsgi.py:889
+#, python-format
+msgid "%(url)s returned a fault: %(e)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:265
+msgid "element is not a child"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:414
+msgid "root element selecting a list"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:739
+#, python-format
+msgid "Template tree mismatch; adding slave %(slavetag)s to master %(mastertag)s"
+msgstr ""
+
+#: cinder/api/openstack/xmlutil.py:858
+msgid "subclasses must implement construct()!"
+msgstr ""
+
+#: cinder/api/openstack/compute/extensions.py:29
+#: cinder/api/openstack/volume/extensions.py:29
+msgid "Initializing extension manager."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:40
+#: cinder/api/openstack/compute/images.py:146
+#: cinder/api/openstack/compute/images.py:161
+msgid "Image not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:79
+msgid "Incorrect request body format"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:83
+#: cinder/api/openstack/compute/server_metadata.py:80
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:79
+#: cinder/api/openstack/compute/contrib/volumetypes.py:188
+msgid "Request body and URI mismatch"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:86
+#: cinder/api/openstack/compute/server_metadata.py:84
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:82
+#: cinder/api/openstack/compute/contrib/volumetypes.py:191
+msgid "Request body contains too many items"
+msgstr ""
+
+#: cinder/api/openstack/compute/image_metadata.py:111
+msgid "Invalid metadata key"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:74
+msgid "Instance does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/ips.py:97
+msgid "Instance is not a member of specified network"
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:140
+#, python-format
+msgid ""
+"Only %(value)s %(verb)s request(s) can be made to %(uri)s every "
+"%(unit_string)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/limits.py:266
+msgid "This request was rate-limited."
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:38
+#: cinder/api/openstack/compute/server_metadata.py:122
+#: cinder/api/openstack/compute/server_metadata.py:159
+msgid "Server does not exist"
+msgstr ""
+
+#: cinder/api/openstack/compute/server_metadata.py:141
+#: cinder/api/openstack/compute/server_metadata.py:152
+msgid "Metadata item was not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:425
+#, python-format
+msgid "Invalid server status: %(status)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:433
+msgid "Invalid changes-since value"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:483
+msgid "Personality file limit exceeded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:485
+msgid "Personality file path too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:487
+msgid "Personality file content too long"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:501
+msgid "Server name is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:505
+msgid "Server name is an empty string"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:509
+msgid "Server name must be less than 256 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:527
+#, python-format
+msgid "Bad personality format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:530
+msgid "Bad personality format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:535
+#, python-format
+msgid "Personality content for %s cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:550
+#, python-format
+msgid "Bad networks format: network uuid is not in proper format (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:559
+#, python-format
+msgid "Invalid fixed IP address (%s)"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:566
+#, python-format
+msgid "Duplicate networks (%s) are not allowed"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:572
+#, python-format
+msgid "Bad network format: missing %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:575
+msgid "Bad networks format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:587
+msgid "Userdata content cannot be decoded"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:594
+msgid "accessIPv4 is not proper IPv4 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:601
+msgid "accessIPv6 is not proper IPv6 format"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:633
+msgid "Server name is not defined"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:675
+#: cinder/api/openstack/compute/servers.py:740
+msgid "Invalid flavorRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:737
+msgid "Can not find requested image"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:743
+msgid "Invalid key_name provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:829
+#: cinder/api/openstack/compute/servers.py:849
+msgid "Instance has not been resized."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:835
+#, python-format
+msgid "Error in confirm-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:855
+#, python-format
+msgid "Error in revert-resize %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:868
+msgid "Argument 'type' for reboot is not HARD or SOFT"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:872
+msgid "Missing argument 'type' for reboot"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:885
+#, python-format
+msgid "Error in reboot %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:897
+msgid "Unable to locate requested flavor."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:900
+msgid "Resize requires a change in size."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:924
+msgid "Malformed server entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:931
+msgid "Missing imageRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:940
+msgid "Invalid imageRef provided."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:949
+msgid "Missing flavorRef attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:962
+msgid "No adminPass was specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:966
+#: cinder/api/openstack/compute/servers.py:1144
+msgid "Invalid adminPass"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:980
+msgid "Unable to parse metadata key/value pairs."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:993
+msgid "Resize request has invalid 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:996
+msgid "Resize requests require 'flavorRef' attribute."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1014
+#: cinder/api/openstack/compute/contrib/aggregates.py:142
+#: cinder/api/openstack/compute/contrib/networks.py:65
+msgid "Invalid request body"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1019
+msgid "Could not parse imageRef from request."
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1071
+msgid "Instance could not be found"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1074
+msgid "Cannot find image for rebuild"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1103
+msgid "createImage entity requires name attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1112
+#: cinder/api/openstack/compute/contrib/admin_actions.py:238
+msgid "Invalid metadata"
+msgstr ""
+
+#: cinder/api/openstack/compute/servers.py:1167
+#, python-format
+msgid "Removing options '%(unk_opt_str)s' from query"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:60
+#, python-format
+msgid "Compute.api::pause %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:77
+#, python-format
+msgid "Compute.api::unpause %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:94
+#, python-format
+msgid "compute.api::suspend %s"
+msgstr "compute.api::暫停 %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:111
+#, python-format
+msgid "compute.api::resume %s"
+msgstr "compute.api::繼續 %s"
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:127
+#, python-format
+msgid "Error in migrate %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:141
+#, python-format
+msgid "Compute.api::reset_network %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:154
+#: cinder/api/openstack/compute/contrib/admin_actions.py:170
+#: cinder/api/openstack/compute/contrib/admin_actions.py:186
+#: cinder/api/openstack/compute/contrib/multinic.py:41
+#: cinder/api/openstack/compute/contrib/rescue.py:44
+msgid "Server not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:157
+#, python-format
+msgid "Compute.api::inject_network_info %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:173
+#, python-format
+msgid "Compute.api::lock %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:189
+#, python-format
+msgid "Compute.api::unlock %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:219
+#, python-format
+msgid "createBackup entity requires %s attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:223
+msgid "Malformed createBackup entity"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:229
+msgid "createBackup attribute 'rotation' must be an integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:244
+#: cinder/api/openstack/compute/contrib/console_output.py:47
+#: cinder/api/openstack/compute/contrib/console_output.py:59
+#: cinder/api/openstack/compute/contrib/consoles.py:49
+#: cinder/api/openstack/compute/contrib/consoles.py:60
+#: cinder/api/openstack/compute/contrib/server_action_list.py:49
+#: cinder/api/openstack/compute/contrib/server_diagnostics.py:47
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:38
+msgid "Instance not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:272
+msgid "host and block_migration must be specified."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/admin_actions.py:284
+#, python-format
+msgid "Live migration of instance %(id)s to host %(host)s failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:76
+#, python-format
+msgid ""
+"Cannot create aggregate with name %(name)s and availability zone "
+"%(avail_zone)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:88
+#, python-format
+msgid "Cannot show aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:114
+#, python-format
+msgid "Cannot update aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:126
+#, python-format
+msgid "Cannot delete aggregate: %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:139
+#, python-format
+msgid "Aggregates does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:152
+#: cinder/api/openstack/compute/contrib/aggregates.py:158
+#, python-format
+msgid "Cannot add host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:171
+#: cinder/api/openstack/compute/contrib/aggregates.py:175
+#, python-format
+msgid "Cannot remove host %(host)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/aggregates.py:195
+#, python-format
+msgid "Cannot set metadata %(metadata)s in aggregate %(id)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/certificates.py:75
+msgid "Only root certificate can be retrieved."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/cloudpipe.py:146
+msgid ""
+"Unable to claim IP for VPN instances, ensure it isn't running, and try "
+"again in a few minutes"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:44
+msgid "Missing type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/consoles.py:56
+msgid "Invalid type specification"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/disk_config.py:44
+#, python-format
+msgid "%s must be either 'MANUAL' or 'AUTO'."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/extended_server_attributes.py:77
+#: cinder/api/openstack/compute/contrib/extended_status.py:61
+msgid "Server not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:61
+#: cinder/api/openstack/compute/contrib/flavorextradata.py:91
+msgid "Flavor not found."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/flavorextraspecs.py:49
+#: cinder/api/openstack/compute/contrib/volumetypes.py:158
+msgid "No Request Body"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:159
+#, python-format
+msgid "No more floating ips in pool %s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:161
+msgid "No more floating ips available."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:201
+#: cinder/api/openstack/compute/contrib/floating_ips.py:230
+#: cinder/api/openstack/compute/contrib/security_groups.py:571
+#: cinder/api/openstack/compute/contrib/security_groups.py:604
+msgid "Missing parameter dict"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:204
+#: cinder/api/openstack/compute/contrib/floating_ips.py:233
+msgid "Address not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:213
+msgid "No fixed ips associated to instance"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/floating_ips.py:216
+msgid "Associate floating ip failed"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:144
+#, python-format
+msgid "Invalid status: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:148
+#, python-format
+msgid "Invalid mode: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:152
+#, python-format
+msgid "Invalid update setting: '%s'"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:170
+#, python-format
+msgid "Putting host %(host)s in maintenance mode %(mode)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:181
+#, python-format
+msgid "Setting host %(host)s to %(state)s."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:230
+msgid "Describe-resource is admin only functionality"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/hosts.py:238
+msgid "Host not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:70
+msgid "Keypair name contains unsafe characters"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:95
+msgid "Keypair name must be between 1 and 255 characters long"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/keypairs.py:100
+#, python-format
+msgid "Key pair '%s' already exists."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:52
+msgid "Missing 'networkId' argument for addFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:68
+msgid "Missing 'address' argument for removeFixedIp"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/multinic.py:77
+#, python-format
+msgid "Unable to find address %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:62
+#, python-format
+msgid "Network does not have %s action"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:70
+#, python-format
+msgid "Disassociating network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:74
+#: cinder/api/openstack/compute/contrib/networks.py:91
+#: cinder/api/openstack/compute/contrib/networks.py:101
+msgid "Network not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:87
+#, python-format
+msgid "Showing network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/networks.py:97
+#, python-format
+msgid "Deleting network with id %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/scheduler_hints.py:41
+msgid "Malformed scheduler_hints attribute"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:222
+msgid "Security group id should be integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:243
+msgid "Security group is still in use"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:295
+#, python-format
+msgid "Security group %s already exists"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:315
+#, python-format
+msgid "Security group %s is not a string or unicode"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:318
+#, python-format
+msgid "Security group %s cannot be empty."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:321
+#, python-format
+msgid "Security group %s should not be greater than 255 characters."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:348
+msgid "Parent group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:351
+#, python-format
+msgid "Security group (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:369
+msgid "Not enough parameters to build a valid rule."
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:376
+#, python-format
+msgid "This rule already exists in group %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:414
+msgid "Parent or group id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:507
+msgid "Rule id is not integer"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:510
+#, python-format
+msgid "Rule (%s) not found"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:574
+#: cinder/api/openstack/compute/contrib/security_groups.py:607
+msgid "Security group not specified"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/security_groups.py:578
+#: cinder/api/openstack/compute/contrib/security_groups.py:611
+msgid "Security group name cannot be empty"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:45
+#, python-format
+msgid "start instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/server_start_stop.py:54
+#, python-format
+msgid "stop instance %r"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:73
+#: cinder/api/openstack/volume/volumes.py:106
+#, python-format
+msgid "vol=%s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:146
+#: cinder/api/openstack/volume/volumes.py:184
+#, python-format
+msgid "Delete volume with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:329
+#, python-format
+msgid "Attach volume %(volume_id)s to instance %(server_id)s at %(device)s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:481
+#: cinder/api/openstack/volume/snapshots.py:110
+#, python-format
+msgid "Delete snapshot with id: %s"
+msgstr ""
+
+#: cinder/api/openstack/compute/contrib/volumes.py:524
+#: cinder/api/openstack/volume/snapshots.py:150
+#, python-format
+msgid "Create snapshot from volume %s"
+msgstr ""
+
+#: cinder/auth/fakeldap.py:33
+msgid "Attempted to instantiate singleton"
+msgstr ""
+
+#: cinder/auth/ldapdriver.py:650
+#, python-format
+msgid ""
+"Attempted to remove the last member of a group. Deleting the group at %s "
+"instead."
+msgstr ""
+
+#: cinder/auth/manager.py:298
+#, python-format
+msgid "Looking up user: %r"
+msgstr ""
+
+#: cinder/auth/manager.py:302
+#, python-format
+msgid "Failed authorization for access key %s"
+msgstr ""
+
+#: cinder/auth/manager.py:308
+#, python-format
+msgid "Using project name = user name (%s)"
+msgstr ""
+
+#: cinder/auth/manager.py:315
+#, python-format
+msgid "failed authorization: no project named %(pjid)s (user=%(uname)s)"
+msgstr ""
+
+#: cinder/auth/manager.py:324
+#, python-format
+msgid ""
+"Failed authorization: user %(uname)s not admin and not member of project "
+"%(pjname)s"
+msgstr ""
+
+#: cinder/auth/manager.py:331 cinder/auth/manager.py:343
+#, python-format
+msgid "user.secret: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:332 cinder/auth/manager.py:344
+#, python-format
+msgid "expected_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:333 cinder/auth/manager.py:345
+#, python-format
+msgid "signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:335 cinder/auth/manager.py:357
+#, python-format
+msgid "Invalid signature for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:353
+#, python-format
+msgid "host_only_signature: %s"
+msgstr ""
+
+#: cinder/auth/manager.py:449
+msgid "Must specify project"
+msgstr ""
+
+#: cinder/auth/manager.py:490
+#, python-format
+msgid "Adding role %(role)s to user %(uid)s in project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:493
+#, python-format
+msgid "Adding sitewide role %(role)s to user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:519
+#, python-format
+msgid "Removing role %(role)s from user %(uid)s on project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:522
+#, python-format
+msgid "Removing sitewide role %(role)s from user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:595
+#, python-format
+msgid "Created project %(name)s with manager %(manager_user)s"
+msgstr ""
+
+#: cinder/auth/manager.py:613
+#, python-format
+msgid "modifying project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:625
+#, python-format
+msgid "Adding user %(uid)s to project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:646
+#, python-format
+msgid "Remove user %(uid)s from project %(pid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:676
+#, python-format
+msgid "Deleting project %s"
+msgstr ""
+
+#: cinder/auth/manager.py:734
+#, python-format
+msgid "Created user %(rvname)s (admin: %(rvadmin)r)"
+msgstr ""
+
+#: cinder/auth/manager.py:743
+#, python-format
+msgid "Deleting user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:753
+#, python-format
+msgid "Access Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:755
+#, python-format
+msgid "Secret Key change for user %s"
+msgstr ""
+
+#: cinder/auth/manager.py:757
+#, python-format
+msgid "Admin status set to %(admin)r for user %(uid)s"
+msgstr ""
+
+#: cinder/auth/manager.py:802
+#, python-format
+msgid "No vpn data for project %s"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:46
+msgid "Instance type for vpn instances"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:49
+msgid "Template for cloudpipe instance boot script"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:52
+msgid "Network to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:55
+msgid "Netmask to push into openvpn config"
+msgstr ""
+
+#: cinder/cloudpipe/pipelib.py:107
+#, python-format
+msgid "Launching VPN for %s"
+msgstr ""
+
+#: cinder/compute/api.py:141
+msgid "No compute host specified"
+msgstr ""
+
+#: cinder/compute/api.py:144
+#, python-format
+msgid "Unable to find host for Instance %s"
+msgstr ""
+
+#: cinder/compute/api.py:192
+#, python-format
+msgid ""
+"Quota exceeded for %(pid)s, tried to set %(num_metadata)s metadata "
+"properties"
+msgstr ""
+
+#: cinder/compute/api.py:203
+#, python-format
+msgid "Quota exceeded for %(pid)s, metadata property key or value too long"
+msgstr ""
+
+#: cinder/compute/api.py:257
+msgid "Cannot run any more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:259
+#, python-format
+msgid "Can only run %s more instances of this type."
+msgstr ""
+
+#: cinder/compute/api.py:261
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances. "
+msgstr ""
+
+#: cinder/compute/api.py:310
+msgid "Creating a raw instance"
+msgstr ""
+
+#: cinder/compute/api.py:312
+#, python-format
+msgid "Using Kernel=%(kernel_id)s, Ramdisk=%(ramdisk_id)s"
+msgstr ""
+
+#: cinder/compute/api.py:383
+#, python-format
+msgid "Going to run %s instances..."
+msgstr ""
+
+#: cinder/compute/api.py:447
+#, python-format
+msgid "bdm %s"
+msgstr ""
+
+#: cinder/compute/api.py:474
+#, python-format
+msgid "block_device_mapping %s"
+msgstr ""
+
+#: cinder/compute/api.py:591
+#, python-format
+msgid "Sending create to scheduler for %(pid)s/%(uid)s's"
+msgstr ""
+
+#: cinder/compute/api.py:871
+msgid "Going to try to soft delete instance"
+msgstr ""
+
+#: cinder/compute/api.py:891
+msgid "No host for instance, deleting immediately"
+msgstr ""
+
+#: cinder/compute/api.py:939
+msgid "Going to try to terminate instance"
+msgstr ""
+
+#: cinder/compute/api.py:977
+msgid "Going to try to stop instance"
+msgstr ""
+
+#: cinder/compute/api.py:996
+msgid "Going to try to start instance"
+msgstr ""
+
+#: cinder/compute/api.py:1000
+#, python-format
+msgid "Instance %(instance_uuid)s is not stopped. (%(vm_state)s"
+msgstr ""
+
+#: cinder/compute/api.py:1071 cinder/volume/api.py:173
+#: cinder/volume/volume_types.py:64
+#, python-format
+msgid "Searching by: %s"
+msgstr ""
+
+#: cinder/compute/api.py:1201
+#, python-format
+msgid "Image type not recognized %s"
+msgstr ""
+
+#: cinder/compute/api.py:1369
+msgid "flavor_id is None. Assuming migration."
+msgstr ""
+
+#: cinder/compute/api.py:1377
+#, python-format
+msgid ""
+"Old instance type %(current_instance_type_name)s,  new instance type "
+"%(new_instance_type_name)s"
+msgstr ""
+
+#: cinder/compute/api.py:1644
+#, python-format
+msgid "multiple fixedips exist, using the first: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:57 cinder/compute/instance_types.py:65
+msgid "create arguments must be positive integers"
+msgstr ""
+
+#: cinder/compute/instance_types.py:76 cinder/volume/volume_types.py:41
+#, python-format
+msgid "DB error: %s"
+msgstr ""
+
+#: cinder/compute/instance_types.py:86
+#, python-format
+msgid "Instance type %s not found for deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:138
+#, python-format
+msgid "check_instance_lock: decorating: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:140
+#, python-format
+msgid ""
+"check_instance_lock: arguments: |%(self)s| |%(context)s| "
+"|%(instance_uuid)s|"
+msgstr ""
+
+#: cinder/compute/manager.py:144
+#, python-format
+msgid "check_instance_lock: locked: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:146
+#, python-format
+msgid "check_instance_lock: admin: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:151
+#, python-format
+msgid "check_instance_lock: executing: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:155
+#, python-format
+msgid "check_instance_lock: not executing |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:201
+#, python-format
+msgid "Unable to load the virtualization driver: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:223
+#, python-format
+msgid ""
+"Instance %(instance_uuid)s has been destroyed from under us while trying "
+"to set it to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:240
+#, python-format
+msgid "Current state is %(drv_state)s, state in DB is %(db_state)s."
+msgstr ""
+
+#: cinder/compute/manager.py:245
+msgid "Rebooting instance after cinder-compute restart."
+msgstr ""
+
+#: cinder/compute/manager.py:255
+msgid "Hypervisor driver does not support firewall rules"
+msgstr ""
+
+#: cinder/compute/manager.py:260
+msgid "Checking state"
+msgstr ""
+
+#: cinder/compute/manager.py:329
+#, python-format
+msgid "Setting up bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:400
+#, python-format
+msgid "Instance %s already deleted from database. Attempting forceful vm deletion"
+msgstr ""
+
+#: cinder/compute/manager.py:406
+#, python-format
+msgid "Exception encountered while terminating the instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:444
+#, python-format
+msgid "Instance %s not found."
+msgstr ""
+
+#: cinder/compute/manager.py:480
+msgid "Instance has already been created"
+msgstr ""
+
+#: cinder/compute/manager.py:523
+#, python-format
+msgid ""
+"image_id=%(image_id)s, image_size_bytes=%(size_bytes)d, "
+"allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:528
+#, python-format
+msgid ""
+"Image '%(image_id)s' size %(size_bytes)d exceeded instance_type allowed "
+"size %(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/compute/manager.py:538
+msgid "Starting instance..."
+msgstr ""
+
+#: cinder/compute/manager.py:548
+msgid "Skipping network allocation for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:561
+msgid "Instance failed network setup"
+msgstr ""
+
+#: cinder/compute/manager.py:565
+#, python-format
+msgid "Instance network_info: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:578
+msgid "Instance failed block device setup"
+msgstr ""
+
+#: cinder/compute/manager.py:594
+msgid "Instance failed to spawn"
+msgstr ""
+
+#: cinder/compute/manager.py:615
+msgid "Deallocating network for instance"
+msgstr ""
+
+#: cinder/compute/manager.py:672
+#, python-format
+msgid "%(action_str)s instance"
+msgstr ""
+
+#: cinder/compute/manager.py:699
+#, python-format
+msgid "Ignoring DiskNotFound: %s"
+msgstr ""
+
+#: cinder/compute/manager.py:708
+#, python-format
+msgid "terminating bdm %s"
+msgstr ""
+
+#: cinder/compute/manager.py:742 cinder/compute/manager.py:1328
+#: cinder/compute/manager.py:1416 cinder/compute/manager.py:2501
+#, python-format
+msgid "%s. Setting instance vm_state to ERROR"
+msgstr ""
+
+#: cinder/compute/manager.py:811
+#, python-format
+msgid ""
+"Cannot rebuild instance [%(instance_uuid)s], because the given image does"
+" not exist."
+msgstr ""
+
+#: cinder/compute/manager.py:816
+#, python-format
+msgid "Cannot rebuild instance [%(instance_uuid)s]: %(exc)s"
+msgstr ""
+
+#: cinder/compute/manager.py:823
+#, python-format
+msgid "Rebuilding instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:876
+#, python-format
+msgid "Rebooting instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:891
+#, python-format
+msgid ""
+"trying to reboot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:933
+#, python-format
+msgid "instance %s: snapshotting"
+msgstr ""
+
+#: cinder/compute/manager.py:939
+#, python-format
+msgid ""
+"trying to snapshot a non-running instance: %(instance_uuid)s (state: "
+"%(state)s expected: %(running)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:995
+#, python-format
+msgid "Found %(num_images)d images (rotation: %(rotation)d)"
+msgstr ""
+
+#: cinder/compute/manager.py:1001
+#, python-format
+msgid "Rotating out %d backups"
+msgstr ""
+
+#: cinder/compute/manager.py:1005
+#, python-format
+msgid "Deleting image %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1035
+#, python-format
+msgid "Failed to set admin password. Instance %s is not running"
+msgstr ""
+
+#: cinder/compute/manager.py:1041
+#, python-format
+msgid "Instance %s: Root password set"
+msgstr ""
+
+#: cinder/compute/manager.py:1050
+msgid "set_admin_password is not implemented by this driver."
+msgstr ""
+
+#: cinder/compute/manager.py:1064
+msgid "Error setting admin password"
+msgstr ""
+
+#: cinder/compute/manager.py:1079
+#, python-format
+msgid ""
+"trying to inject a file into a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1084
+#, python-format
+msgid "instance %(instance_uuid)s: injecting file to %(path)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1098
+#, python-format
+msgid ""
+"trying to update agent on a non-running instance: %(instance_uuid)s "
+"(state: %(current_power_state)s expected: %(expected_state)s)"
+msgstr ""
+
+#: cinder/compute/manager.py:1103
+#, python-format
+msgid "instance %(instance_uuid)s: updating agent to %(url)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1116
+#, python-format
+msgid "instance %s: rescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1141
+#, python-format
+msgid "instance %s: unrescuing"
+msgstr ""
+
+#: cinder/compute/manager.py:1270
+msgid "destination same as source!"
+msgstr ""
+
+#: cinder/compute/manager.py:1287
+#, python-format
+msgid "instance %s: migrating"
+msgstr ""
+
+#: cinder/compute/manager.py:1471
+#, python-format
+msgid "instance %s: pausing"
+msgstr ""
+
+#: cinder/compute/manager.py:1489
+#, python-format
+msgid "instance %s: unpausing"
+msgstr ""
+
+#: cinder/compute/manager.py:1525
+#, python-format
+msgid "instance %s: retrieving diagnostics"
+msgstr ""
+
+#: cinder/compute/manager.py:1534
+#, python-format
+msgid "instance %s: suspending"
+msgstr ""
+
+#: cinder/compute/manager.py:1556
+#, python-format
+msgid "instance %s: resuming"
+msgstr ""
+
+#: cinder/compute/manager.py:1579
+#, python-format
+msgid "instance %s: locking"
+msgstr ""
+
+#: cinder/compute/manager.py:1588
+#, python-format
+msgid "instance %s: unlocking"
+msgstr ""
+
+#: cinder/compute/manager.py:1596
+#, python-format
+msgid "instance %s: getting locked state"
+msgstr ""
+
+#: cinder/compute/manager.py:1606
+#, python-format
+msgid "instance %s: reset network"
+msgstr ""
+
+#: cinder/compute/manager.py:1614
+#, python-format
+msgid "instance %s: inject network info"
+msgstr ""
+
+#: cinder/compute/manager.py:1618
+#, python-format
+msgid "network_info to inject: |%s|"
+msgstr ""
+
+#: cinder/compute/manager.py:1655
+#, python-format
+msgid "instance %s: getting vnc console"
+msgstr ""
+
+#: cinder/compute/manager.py:1685
+#, python-format
+msgid "Booting with volume %(volume_id)s at %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1703
+#, python-format
+msgid ""
+"instance %(instance_uuid)s: attaching volume %(volume_id)s to "
+"%(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1705
+#, python-format
+msgid "Attaching volume %(volume_id)s to %(mountpoint)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1714
+#, python-format
+msgid "instance %(instance_uuid)s: attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1724
+#, python-format
+msgid "Attach failed %(mountpoint)s, removing"
+msgstr ""
+
+#: cinder/compute/manager.py:1752
+#, python-format
+msgid "Detach volume %(volume_id)s from mountpoint %(mp)s"
+msgstr ""
+
+#: cinder/compute/manager.py:1756
+#, python-format
+msgid "Detaching volume from unknown instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:1822
+#, python-format
+msgid ""
+"Creating tmpfile %s to notify to other compute nodes that they should "
+"mount the same storage."
+msgstr ""
+
+#: cinder/compute/manager.py:1884
+msgid "Instance has no volume."
+msgstr ""
+
+#: cinder/compute/manager.py:1916
+#, python-format
+msgid "plug_vifs() failed %(cnt)d.Retry up to %(max_retry)d for %(hostname)s."
+msgstr ""
+
+#: cinder/compute/manager.py:1973
+#, python-format
+msgid "Pre live migration failed at  %(dest)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2000
+msgid "post_live_migration() is started.."
+msgstr ""
+
+#: cinder/compute/manager.py:2030
+msgid "No floating_ip found"
+msgstr ""
+
+#: cinder/compute/manager.py:2038
+msgid "No floating_ip found."
+msgstr ""
+
+#: cinder/compute/manager.py:2040
+#, python-format
+msgid ""
+"Live migration: Unexpected error: cannot inherit floating ip.\n"
+"%(e)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2073
+#, python-format
+msgid "Migrating instance to %(dest)s finished successfully."
+msgstr ""
+
+#: cinder/compute/manager.py:2075
+msgid ""
+"You may see the error \"libvirt: QEMU error: Domain not found: no domain "
+"with matching name.\" This error can be safely ignored."
+msgstr ""
+
+#: cinder/compute/manager.py:2090
+msgid "Post operation of migraton started"
+msgstr ""
+
+#: cinder/compute/manager.py:2226
+#, python-format
+msgid "Updated the info_cache for instance %s"
+msgstr ""
+
+#: cinder/compute/manager.py:2255
+msgid "Updating bandwidth usage cache"
+msgstr ""
+
+#: cinder/compute/manager.py:2277
+msgid "Updating host status"
+msgstr ""
+
+#: cinder/compute/manager.py:2305
+#, python-format
+msgid ""
+"Found %(num_db_instances)s in the database and %(num_vm_instances)s on "
+"the hypervisor."
+msgstr ""
+
+#: cinder/compute/manager.py:2331
+#, python-format
+msgid ""
+"During the sync_power process the instance %(uuid)s has moved from host "
+"%(src)s to host %(dst)s"
+msgstr ""
+
+#: cinder/compute/manager.py:2344
+#, python-format
+msgid ""
+"Instance %s is in the process of migrating to this host. Wait next "
+"sync_power cycle before setting power state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2350
+msgid ""
+"Instance found in database but not known by hypervisor. Setting power "
+"state to NOSTATE"
+msgstr ""
+
+#: cinder/compute/manager.py:2380
+msgid "FLAGS.reclaim_instance_interval <= 0, skipping..."
+msgstr ""
+
+#: cinder/compute/manager.py:2392
+msgid "Reclaiming deleted instance"
+msgstr ""
+
+#: cinder/compute/manager.py:2458
+#, python-format
+msgid ""
+"Detected instance with name label '%(name)s' which is marked as DELETED "
+"but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2465
+#, python-format
+msgid ""
+"Destroying instance with name label '%(name)s' which is marked as DELETED"
+" but still present on host."
+msgstr ""
+
+#: cinder/compute/manager.py:2472
+#, python-format
+msgid "Unrecognized value '%(action)s' for FLAGS.running_deleted_instance_action"
+msgstr ""
+
+#: cinder/compute/manager.py:2542
+#, python-format
+msgid ""
+"Aggregate %(aggregate_id)s: unrecoverable state during operation on "
+"%(host)s"
+msgstr ""
+
+#: cinder/compute/utils.py:142
+msgid "v4 subnets are required for legacy nw_info"
+msgstr ""
+
+#: cinder/console/manager.py:77 cinder/console/vmrc_manager.py:70
+msgid "Adding console"
+msgstr ""
+
+#: cinder/console/manager.py:97
+#, python-format
+msgid "Tried to remove non-existant console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:122
+#, python-format
+msgid "Tried to remove non-existent console %(console_id)s."
+msgstr ""
+
+#: cinder/console/vmrc_manager.py:125
+#, python-format
+msgid "Removing console %(console_id)s."
+msgstr ""
+
+#: cinder/console/xvp.py:98
+msgid "Rebuilding xvp conf"
+msgstr ""
+
+#: cinder/console/xvp.py:116
+#, python-format
+msgid "Re-wrote %s"
+msgstr ""
+
+#: cinder/console/xvp.py:121
+msgid "Stopping xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:134
+msgid "Starting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:141
+#, python-format
+msgid "Error starting xvp: %s"
+msgstr ""
+
+#: cinder/console/xvp.py:144
+msgid "Restarting xvp"
+msgstr ""
+
+#: cinder/console/xvp.py:146
+msgid "xvp not running..."
+msgstr ""
+
+#: cinder/consoleauth/manager.py:63
+#, python-format
+msgid "Deleting Expired Token: (%s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:75
+#, python-format
+msgid "Received Token: %(token)s, %(token_dict)s)"
+msgstr ""
+
+#: cinder/consoleauth/manager.py:79
+#, python-format
+msgid "Checking Token: %(token)s, %(token_valid)s)"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:57
+msgid "Use of empty request context is deprecated"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:198
+#, python-format
+msgid "Unrecognized read_deleted value '%s'"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:516 cinder/db/sqlalchemy/api.py:551
+#, python-format
+msgid "No ComputeNode for %(host)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4019 cinder/db/sqlalchemy/api.py:4045
+#, python-format
+msgid "No backend config with id %(sm_backend_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4103
+#, python-format
+msgid "No sm_flavor called %(sm_flavor)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/api.py:4147
+#, python-format
+msgid "No sm_volume with id %(volume_id)s"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:66
+msgid "python-migrate is not installed. Exiting."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migration.py:78
+msgid "version should be an integer"
+msgstr ""
+
+#: cinder/db/sqlalchemy/session.py:137
+#, python-format
+msgid "SQL connection failed. %s attempts left."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:48
+msgid "interface column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:80
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:54
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:48
+#, python-format
+msgid "Table |%s| not created!"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:87
+msgid "VIF column not added to fixed_ips table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/030_multi_nic.py:97
+#, python-format
+msgid "join list for moving mac_addresses |%s|"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:39
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:60
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:61
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:99
+msgid "foreign key constraint couldn't be added"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/031_fk_fixed_ips_virtual_interface_id.py:58
+msgid "foreign key constraint couldn't be dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/045_add_network_priority.py:34
+msgid "priority column not added to networks table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/047_remove_instances_fk_from_vif.py:41
+#: cinder/db/sqlalchemy/migrate_repo/versions/060_remove_network_fk_from_vif.py:42
+#: cinder/db/sqlalchemy/migrate_repo/versions/064_change_instance_id_to_uuid_in_instance_actions.py:56
+#: cinder/db/sqlalchemy/migrate_repo/versions/070_untie_cinder_network_models.py:68
+msgid "foreign key constraint couldn't be removed"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/049_add_instances_progress.py:34
+msgid "progress column not added to instances table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/055_convert_flavor_id_to_str.py:97
+#, python-format
+msgid ""
+"Could not cast flavorid to integer: %s. Set flavorid to an integer-like "
+"string to downgrade."
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/062_add_instance_info_cache_table.py:69
+msgid "instance_info_caches tables not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/069_block_migration.py:41
+msgid "progress column not added to compute_nodes table"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/072_add_dns_table.py:76
+msgid "dns_domains table not dropped"
+msgstr ""
+
+#: cinder/db/sqlalchemy/migrate_repo/versions/083_quota_class.py:60
+msgid "quota_classes table not dropped"
+msgstr ""
+
+#: cinder/image/glance.py:147
+msgid "Connection error contacting glance server, retrying"
+msgstr ""
+
+#: cinder/image/glance.py:153 cinder/network/quantum/melange_connection.py:104
+msgid "Maximum attempts reached"
+msgstr ""
+
+#: cinder/image/glance.py:278
+#, python-format
+msgid "Creating image in Glance. Metadata passed in %s"
+msgstr ""
+
+#: cinder/image/glance.py:281
+#, python-format
+msgid "Metadata after formatting for Glance %s"
+msgstr ""
+
+#: cinder/image/glance.py:289
+#, python-format
+msgid "Metadata returned from Glance formatted for Base %s"
+msgstr ""
+
+#: cinder/image/glance.py:331 cinder/image/glance.py:335
+msgid "Not the image owner"
+msgstr ""
+
+#: cinder/image/glance.py:410
+#, python-format
+msgid "%(timestamp)s does not follow any of the signatures: %(iso_formats)s"
+msgstr ""
+
+#: cinder/image/s3.py:309
+#, python-format
+msgid "Failed to download %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:328
+#, python-format
+msgid "Failed to decrypt %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:340
+#, python-format
+msgid "Failed to untar %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:353
+#, python-format
+msgid "Failed to upload %(image_location)s to %(image_path)s"
+msgstr ""
+
+#: cinder/image/s3.py:379
+#, python-format
+msgid "Failed to decrypt private key: %s"
+msgstr ""
+
+#: cinder/image/s3.py:387
+#, python-format
+msgid "Failed to decrypt initialization vector: %s"
+msgstr ""
+
+#: cinder/image/s3.py:398
+#, python-format
+msgid "Failed to decrypt image file %(image_file)s: %(err)s"
+msgstr ""
+
+#: cinder/image/s3.py:410
+msgid "Unsafe filenames in image"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:38 cinder/ipv6/rfc2462.py:34
+#, python-format
+msgid "Bad mac for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:40 cinder/ipv6/rfc2462.py:36
+#, python-format
+msgid "Bad prefix for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/ipv6/account_identifier.py:42
+#, python-format
+msgid "Bad project_id for to_global_ipv6: %s"
+msgstr ""
+
+#: cinder/network/ldapdns.py:321
+msgid "This driver only supports type 'a' entries."
+msgstr ""
+
+#: cinder/network/linux_net.py:166
+#, python-format
+msgid "Attempted to remove chain %s which does not exist"
+msgstr ""
+
+#: cinder/network/linux_net.py:192
+#, python-format
+msgid "Unknown chain: %r"
+msgstr ""
+
+#: cinder/network/linux_net.py:215
+#, python-format
+msgid ""
+"Tried to remove rule that was not there: %(chain)r %(rule)r %(wrap)r "
+"%(top)r"
+msgstr ""
+
+#: cinder/network/linux_net.py:335
+msgid "IPTablesManager.apply completed with success"
+msgstr ""
+
+#: cinder/network/linux_net.py:694
+#, python-format
+msgid "Hupping dnsmasq threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:696
+#, python-format
+msgid "Pid %d is stale, relaunching dnsmasq"
+msgstr ""
+
+#: cinder/network/linux_net.py:756
+#, python-format
+msgid "killing radvd threw %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:758
+#, python-format
+msgid "Pid %d is stale, relaunching radvd"
+msgstr ""
+
+#: cinder/network/linux_net.py:967
+#, python-format
+msgid "Starting VLAN inteface %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:999
+#, python-format
+msgid "Starting Bridge interface for %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1142
+#, python-format
+msgid "Starting bridge %s "
+msgstr ""
+
+#: cinder/network/linux_net.py:1149
+#, python-format
+msgid "Done starting bridge %s"
+msgstr ""
+
+#: cinder/network/linux_net.py:1167
+#, python-format
+msgid "Failed unplugging gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/linux_net.py:1170
+#, python-format
+msgid "Unplugged gateway interface '%s'"
+msgstr ""
+
+#: cinder/network/manager.py:291
+#, python-format
+msgid "Fixed ip %(fixed_ip_id)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:300 cinder/network/manager.py:496
+#, python-format
+msgid "Interface %(interface)s not found"
+msgstr ""
+
+#: cinder/network/manager.py:315
+#, python-format
+msgid "floating IP allocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:353
+#, python-format
+msgid "floating IP deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:386
+#, python-format
+msgid "Address |%(address)s| is not allocated"
+msgstr ""
+
+#: cinder/network/manager.py:390
+#, python-format
+msgid "Address |%(address)s| is not allocated to your project |%(project)s|"
+msgstr ""
+
+#: cinder/network/manager.py:402
+#, python-format
+msgid "Quota exceeded for %s, tried to allocate address"
+msgstr ""
+
+#: cinder/network/manager.py:614
+#, python-format
+msgid ""
+"Database inconsistency: DNS domain |%s| is registered in the Cinder db but "
+"not visible to either the floating or instance DNS driver. It will be "
+"ignored."
+msgstr ""
+
+#: cinder/network/manager.py:660
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing zone to |%(av_zone)s|."
+msgstr ""
+
+#: cinder/network/manager.py:670
+#, python-format
+msgid "Domain |%(domain)s| already exists, changing project to |%(project)s|."
+msgstr ""
+
+#: cinder/network/manager.py:778
+#, python-format
+msgid "Disassociated %s stale fixed ip(s)"
+msgstr ""
+
+#: cinder/network/manager.py:782
+msgid "setting network host"
+msgstr ""
+
+#: cinder/network/manager.py:896
+#, python-format
+msgid "network allocations for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:901
+#, python-format
+msgid "networks retrieved for instance |%(instance_id)s|: |%(networks)s|"
+msgstr ""
+
+#: cinder/network/manager.py:930
+#, python-format
+msgid "network deallocation for instance |%s|"
+msgstr ""
+
+#: cinder/network/manager.py:1152
+#, python-format
+msgid ""
+"instance-dns-zone is |%(domain)s|, which is in availability zone "
+"|%(zone)s|. Instance |%(instance)s| is in zone |%(zone2)s|. No DNS record"
+" will be created."
+msgstr ""
+
+#: cinder/network/manager.py:1227
+#, python-format
+msgid "Unable to release %s because vif doesn't exist."
+msgstr ""
+
+#: cinder/network/manager.py:1244
+#, python-format
+msgid "Leased IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1248
+#, python-format
+msgid "IP %s leased that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1256
+#, python-format
+msgid "IP |%s| leased that isn't allocated"
+msgstr ""
+
+#: cinder/network/manager.py:1261
+#, python-format
+msgid "Released IP |%(address)s|"
+msgstr ""
+
+#: cinder/network/manager.py:1265
+#, python-format
+msgid "IP %s released that is not associated"
+msgstr ""
+
+#: cinder/network/manager.py:1268
+#, python-format
+msgid "IP %s released that was not leased"
+msgstr ""
+
+#: cinder/network/manager.py:1331
+msgid "cidr already in use"
+msgstr ""
+
+#: cinder/network/manager.py:1334
+#, python-format
+msgid "requested cidr (%(cidr)s) conflicts with existing supernet (%(super)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1345
+#, python-format
+msgid ""
+"requested cidr (%(cidr)s) conflicts with existing smaller cidr "
+"(%(smaller)s)"
+msgstr ""
+
+#: cinder/network/manager.py:1404
+msgid "Network already exists!"
+msgstr ""
+
+#: cinder/network/manager.py:1423
+#, python-format
+msgid "Network must be disassociated from project %s before delete"
+msgstr ""
+
+#: cinder/network/manager.py:1832
+msgid ""
+"The sum between the number of networks and the vlan start cannot be "
+"greater than 4094"
+msgstr ""
+
+#: cinder/network/manager.py:1839
+#, python-format
+msgid ""
+"The network range is not big enough to fit %(num_networks)s. Network size"
+" is %(network_size)s"
+msgstr ""
+
+#: cinder/network/minidns.py:65
+msgid "This driver only supports type 'a'"
+msgstr ""
+
+#: cinder/network/quantum/client.py:154
+msgid "Tenant ID not set"
+msgstr ""
+
+#: cinder/network/quantum/client.py:180
+#, python-format
+msgid "Quantum Client Request: %(method)s %(action)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:196
+#, python-format
+msgid "Quantum entity not found: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:206
+#, python-format
+msgid "Server %(status_code)s error: %(data)s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:210
+#, python-format
+msgid "Unable to connect to server. Got error: %s"
+msgstr ""
+
+#: cinder/network/quantum/client.py:228
+#, python-format
+msgid "unable to deserialize object of type = '%s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:162
+msgid "QuantumManager does not use 'multi_host' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:166
+msgid "QuantumManager requires that only one network is created per call"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:176
+msgid "QuantumManager does not use 'vlan_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:182
+msgid "QuantumManager does not use 'vpn_start' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:186
+msgid "QuantumManager does not use 'bridge' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:190
+msgid "QuantumManager does not use 'bridge_interface' parameter."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:195
+msgid "QuantumManager requires a valid (.1) gateway address."
+msgstr ""
+
+#: cinder/network/quantum/manager.py:204
+#, python-format
+msgid ""
+"Unable to find existing quantum network for tenant '%(q_tenant_id)s' with"
+" net-id '%(quantum_net_id)s'"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:301
+#, python-format
+msgid "network allocations for instance %s"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:588
+#, python-format
+msgid ""
+"port deallocation failed for instance: |%(instance_id)s|, port_id: "
+"|%(port_id)s|"
+msgstr ""
+
+#: cinder/network/quantum/manager.py:606
+#, python-format
+msgid ""
+"ipam deallocation failed for instance: |%(instance_id)s|, vif_uuid: "
+"|%(vif_uuid)s|"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:96
+#, python-format
+msgid "Server returned error: %s"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:98
+msgid "Connection error contacting melange service, retrying"
+msgstr ""
+
+#: cinder/network/quantum/melange_connection.py:108
+#, python-format
+msgid ""
+"allocate IP on network |%(network_id)s| belonging to "
+"|%(network_tenant_id)s| to this vif |%(vif_id)s| with mac "
+"|%(mac_address)s| belonging to |%(project_id)s| "
+msgstr ""
+
+#: cinder/network/quantum/melange_ipam_lib.py:133
+msgid "get_project_and_global_net_ids must be called with a non-null project_id"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:75
+msgid "Error creating network entry"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:90
+#, python-format
+msgid "No network with net_id = %s"
+msgstr ""
+
+#: cinder/network/quantum/cinder_ipam_lib.py:221
+#, python-format
+msgid "No fixed IPs to deallocate for vif %s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:99
+#, python-format
+msgid "Connecting interface %(interface_id)s to net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/network/quantum/quantum_connection.py:113
+#, python-format
+msgid "Deleting port %(port_id)s on net %(net_id)s for %(tenant_id)s"
+msgstr ""
+
+#: cinder/notifier/api.py:115
+#, python-format
+msgid "%s not in valid priorities"
+msgstr ""
+
+#: cinder/notifier/api.py:130
+#, python-format
+msgid ""
+"Problem '%(e)s' attempting to send to notification system. "
+"Payload=%(payload)s"
+msgstr ""
+
+#: cinder/notifier/list_notifier.py:65
+#, python-format
+msgid "Problem '%(e)s' attempting to send to notification driver %(driver)s."
+msgstr ""
+
+#: cinder/notifier/rabbit_notifier.py:46
+#, python-format
+msgid "Could not send notification to %(topic)s. Payload=%(message)s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:146
+#, python-format
+msgid "Returning exception %s to caller"
+msgstr ""
+
+#: cinder/rpc/amqp.py:188
+#, python-format
+msgid "unpacked context: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:231
+#, python-format
+msgid "received %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:236
+#, python-format
+msgid "no method for message: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:237
+#, python-format
+msgid "No method for message: %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:321
+#, python-format
+msgid "Making asynchronous call on %s ..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:324
+#, python-format
+msgid "MSG_ID is %s"
+msgstr ""
+
+#: cinder/rpc/amqp.py:346
+#, python-format
+msgid "Making asynchronous cast on %s..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:354
+msgid "Making asynchronous fanout cast..."
+msgstr ""
+
+#: cinder/rpc/amqp.py:379
+#, python-format
+msgid "Sending notification on %s..."
+msgstr ""
+
+#: cinder/rpc/common.py:54
+#, python-format
+msgid ""
+"Remote error: %(exc_type)s %(value)s\n"
+"%(traceback)s."
+msgstr ""
+
+#: cinder/rpc/common.py:71
+msgid "Timeout while waiting on RPC response."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:111
+msgid "Failed to process message... skipping it."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:407
+#, python-format
+msgid "Reconnecting to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:430
+#, python-format
+msgid "Connected to AMQP server on %(hostname)s:%(port)d"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:466
+#, python-format
+msgid ""
+"Unable to connect to AMQP server on %(hostname)s:%(port)d after "
+"%(max_retries)d tries: %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:482
+#, python-format
+msgid ""
+"AMQP server on %(hostname)s:%(port)d is unreachable: %(err_str)s. Trying "
+"again in %(sleep_time)d seconds."
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:533 cinder/rpc/impl_qpid.py:385
+#, python-format
+msgid "Failed to declare consumer for topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:551 cinder/rpc/impl_qpid.py:400
+#, python-format
+msgid "Timed out waiting for RPC response: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:555 cinder/rpc/impl_qpid.py:404
+#, python-format
+msgid "Failed to consume message from queue: %s"
+msgstr ""
+
+#: cinder/rpc/impl_kombu.py:589 cinder/rpc/impl_qpid.py:434
+#, python-format
+msgid "Failed to publish message to topic '%(topic)s': %(err_str)s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:341
+#, python-format
+msgid "Unable to connect to AMQP server: %s "
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:346
+#, python-format
+msgid "Connected to AMQP server on %s"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:354
+msgid "Re-established AMQP queues"
+msgstr ""
+
+#: cinder/rpc/impl_qpid.py:412
+msgid "Error processing message.  Skipping it."
+msgstr ""
+
+#: cinder/scheduler/chance.py:47 cinder/scheduler/simple.py:91
+#: cinder/scheduler/simple.py:143
+msgid "Is the appropriate service running?"
+msgstr ""
+
+#: cinder/scheduler/chance.py:52
+msgid "Could not find another compute"
+msgstr ""
+
+#: cinder/scheduler/driver.py:63
+#, python-format
+msgid "Casted '%(method)s' to volume '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:80
+#, python-format
+msgid "Casted '%(method)s' to compute '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:89
+#, python-format
+msgid "Casted '%(method)s' to network '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:107
+#, python-format
+msgid "Casted '%(method)s' to %(topic)s '%(host)s'"
+msgstr ""
+
+#: cinder/scheduler/driver.py:181
+msgid "Must implement a fallback schedule"
+msgstr ""
+
+#: cinder/scheduler/driver.py:185
+msgid "Driver must implement schedule_prep_resize"
+msgstr ""
+
+#: cinder/scheduler/driver.py:190
+msgid "Driver must implement schedule_run_instance"
+msgstr ""
+
+#: cinder/scheduler/driver.py:325
+msgid "Block migration can not be used with shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:330
+msgid "Live migration can not be used without shared storage."
+msgstr ""
+
+#: cinder/scheduler/driver.py:367 cinder/scheduler/driver.py:457
+#, python-format
+msgid "host %(dest)s is not compatible with original host %(src)s."
+msgstr ""
+
+#: cinder/scheduler/driver.py:416
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"memory(host:%(avail)s <= instance:%(mem_inst)s)"
+msgstr ""
+
+#: cinder/scheduler/driver.py:472
+#, python-format
+msgid ""
+"Unable to migrate %(instance_uuid)s to %(dest)s: Lack of "
+"disk(host:%(available)s <= instance:%(necessary)s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:51
+#, python-format
+msgid "No host selection for %s defined."
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:64
+#, python-format
+msgid "Attempting to build %(num_instances)d instance(s)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:157
+msgid "Scheduler only understands Compute nodes (for now)"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:199
+#, python-format
+msgid "Filtered %(hosts)s"
+msgstr ""
+
+#: cinder/scheduler/filter_scheduler.py:209
+#, python-format
+msgid "Weighted %(weighted_host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:144
+#, python-format
+msgid "Host filter fails for ignored host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:151
+#, python-format
+msgid "Host filter fails for non-forced host %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:157
+#, python-format
+msgid "Host filter function %(func)s failed for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:163
+#, python-format
+msgid "Host filter passes for %(host)s"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:272
+#, python-format
+msgid "Received %(service_name)s service update from %(host)s."
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:313
+msgid "host_manager only implemented for 'compute'"
+msgstr ""
+
+#: cinder/scheduler/host_manager.py:323
+#, python-format
+msgid "No service for compute ID %s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:85
+#, python-format
+msgid ""
+"Driver Method %(driver_method_name)s missing: %(e)s. Reverting to "
+"schedule()"
+msgstr ""
+
+#: cinder/scheduler/manager.py:150
+#, python-format
+msgid "Failed to schedule_%(method)s: %(ex)s"
+msgstr ""
+
+#: cinder/scheduler/manager.py:159
+#, python-format
+msgid "Setting instance %(instance_uuid)s to %(state)s state."
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:66
+#, python-format
+msgid "Could not stat scheduler options file %(filename)s: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/scheduler_options.py:75
+#, python-format
+msgid "Could not decode scheduler options: '%(e)s'"
+msgstr ""
+
+#: cinder/scheduler/simple.py:87
+msgid "Not enough allocatable CPU cores remaining"
+msgstr ""
+
+#: cinder/scheduler/simple.py:137
+msgid "Not enough allocatable volume gigabytes remaining"
+msgstr ""
+
+#: cinder/scheduler/filters/core_filter.py:45
+msgid "VCPUs not set; assuming CPU collection broken"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:72
+#, python-format
+msgid "Faking execution of cmd (subprocess): %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:80
+#, python-format
+msgid "Faked command matched %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:96
+#, python-format
+msgid "Faked command raised an exception %s"
+msgstr ""
+
+#: cinder/tests/fake_utils.py:101
+#, python-format
+msgid "Reply to faked command is stdout='%(stdout)s' stderr='%(stderr)s'"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:784
+msgid "Please extend mock libvirt module to support flags"
+msgstr ""
+
+#: cinder/tests/fakelibvirt.py:790
+msgid "Please extend fake libvirt module to support this auth method"
+msgstr ""
+
+#: cinder/tests/test_compute.py:365 cinder/tests/test_compute.py:1419
+#, python-format
+msgid "Running instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:371
+#, python-format
+msgid "After terminating instances: %s"
+msgstr ""
+
+#: cinder/tests/test_compute.py:589
+msgid "Internal error"
+msgstr ""
+
+#: cinder/tests/test_compute.py:1430
+#, python-format
+msgid "After force-killing instances: %s"
+msgstr ""
+
+#: cinder/tests/test_misc.py:92
+#, python-format
+msgid ""
+"The following migrations are missing a downgrade:\n"
+"\t%s"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:169
+msgid "id"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:170
+msgid "IPv4"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:171
+msgid "IPv6"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:172
+msgid "start address"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:173
+msgid "DNS1"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:174
+msgid "DNS2"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:175
+msgid "VlanID"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:176
+msgid "project"
+msgstr ""
+
+#: cinder/tests/test_cinder_manage.py:177
+msgid "uuid"
+msgstr ""
+
+#: cinder/tests/test_volume.py:216
+#, python-format
+msgid "Target %s allocated"
+msgstr ""
+
+#: cinder/tests/test_volume.py:468
+#, python-format
+msgid "Cannot confirm exported volume id:%s."
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:58
+#, python-format
+msgid "Given data: %s"
+msgstr ""
+
+#: cinder/tests/test_volume_types.py:59
+#, python-format
+msgid "Result data: %s"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:626
+#, python-format
+msgid "Creating files in %s to simulate guest agent"
+msgstr ""
+
+#: cinder/tests/test_xenapi.py:637
+#, python-format
+msgid "Removing simulated guest agent files in %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/test_servers.py:2144
+#, python-format
+msgid "Quota exceeded: code=%(code)s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:57
+#, python-format
+msgid "_create: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:66
+#, python-format
+msgid "_delete: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:75
+#, python-format
+msgid "_get: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:85
+#, python-format
+msgid "_get_all: %s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:125
+#, python-format
+msgid "test_snapshot_create: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:134
+#, python-format
+msgid "test_snapshot_create: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:156
+#, python-format
+msgid "test_snapshot_create_force: param=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:165
+#, python-format
+msgid "test_snapshot_create_force: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:205
+#, python-format
+msgid "test_snapshot_show: resp=%s"
+msgstr ""
+
+#: cinder/tests/api/openstack/compute/contrib/test_snapshots.py:231
+#, python-format
+msgid "test_snapshot_detail: resp_dict=%s"
+msgstr ""
+
+#: cinder/tests/integrated/test_login.py:31
+#, python-format
+msgid "flavor: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:38
+#, python-format
+msgid ""
+"%(message)s\n"
+"Status Code: %(_status)s\n"
+"Body: %(_body)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:47
+msgid "Authentication error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:55
+msgid "Authorization error"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:63
+msgid "Item not found"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:105
+#, python-format
+msgid "Doing %(method)s on %(relative_url)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:107
+#, python-format
+msgid "Body: %s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:125
+#, python-format
+msgid "%(auth_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:151
+#, python-format
+msgid "%(relative_uri)s => code %(http_status)s"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:161
+msgid "Unexpected status code"
+msgstr ""
+
+#: cinder/tests/integrated/api/client.py:168
+#, python-format
+msgid "Decoding JSON: %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:133
+#, python-format
+msgid "Nested received %(queue)s, %(value)s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:142
+#, python-format
+msgid "Nested return %s"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:160
+msgid "RPC backend does not support timeouts"
+msgstr ""
+
+#: cinder/tests/rpc/common.py:227 cinder/tests/rpc/common.py:233
+#, python-format
+msgid "Received %s"
+msgstr ""
+
+#: cinder/virt/connection.py:85
+msgid "Failed to open connection to the hypervisor"
+msgstr ""
+
+#: cinder/virt/fake.py:270 cinder/virt/xenapi_conn.py:396
+#: cinder/virt/baremetal/proxy.py:716 cinder/virt/libvirt/connection.py:2045
+#, python-format
+msgid "Compute_service record created for %s "
+msgstr ""
+
+#: cinder/virt/fake.py:273 cinder/virt/xenapi_conn.py:399
+#: cinder/virt/baremetal/proxy.py:720 cinder/virt/libvirt/connection.py:2048
+#, python-format
+msgid "Compute_service record updated for %s "
+msgstr ""
+
+#: cinder/virt/firewall.py:130
+#, python-format
+msgid "Attempted to unfilter instance %s which is not filtered"
+msgstr ""
+
+#: cinder/virt/firewall.py:137
+#, python-format
+msgid "Filters added to instance %s"
+msgstr ""
+
+#: cinder/virt/firewall.py:139
+msgid "Provider Firewall Rules refreshed"
+msgstr ""
+
+#: cinder/virt/firewall.py:291
+#, python-format
+msgid "Adding security group rule: %r"
+msgstr ""
+
+#: cinder/virt/firewall.py:403 cinder/virt/xenapi/firewall.py:87
+#, python-format
+msgid "Adding provider rule: %s"
+msgstr ""
+
+#: cinder/virt/images.py:86
+msgid "'qemu-img info' parsing failed."
+msgstr ""
+
+#: cinder/virt/images.py:92
+#, python-format
+msgid "fmt=%(fmt)s backed by: %(backing_file)s"
+msgstr ""
+
+#: cinder/virt/images.py:104
+#, python-format
+msgid "Converted to raw, but format is now %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:105
+msgid ""
+"Must specify vmwareapi_host_ip,vmwareapi_host_username and "
+"vmwareapi_host_password to useconnection_type=vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:276
+#, python-format
+msgid "In vmwareapi:_create_session, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:359
+#, python-format
+msgid "In vmwareapi:_call_method, got this exception: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:398
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: success"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:404
+#, python-format
+msgid "Task [%(task_name)s] %(task_ref)s status: error %(error_info)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi_conn.py:409
+#, python-format
+msgid "In vmwareapi:_poll_task, Got this error %s"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:140
+msgid ""
+"Must specify xenapi_connection_url, xenapi_connection_username "
+"(optionally), and xenapi_connection_password to use "
+"connection_type=xenapi"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:329 cinder/virt/libvirt/connection.py:472
+msgid "Could not determine iscsi initiator name"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:460
+msgid "Host startup on XenServer is not supported."
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:489
+msgid "Unable to log in to XenAPI (is the Dom0 disk full?)"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:527
+msgid "Host is member of a pool, but DB says otherwise"
+msgstr ""
+
+#: cinder/virt/xenapi_conn.py:599 cinder/virt/xenapi_conn.py:612
+#, python-format
+msgid "Got exception: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:93
+msgid "No domains exist."
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:95
+#, python-format
+msgid "============= initial domains =========== : %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:99
+msgid "Building domain: to be removed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:103
+msgid "Not running domain: remove"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:111
+msgid "domain running on an unknown node: discarded"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:127
+#, python-format
+msgid "No such domain (%s)"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:134
+#, python-format
+msgid "Failed power down Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:143
+msgid "deactivate -> activate fails"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:153
+msgid "destroy_domain: no such domain"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:154
+#, python-format
+msgid "No such domain %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:161
+#, python-format
+msgid "Domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:163
+#, python-format
+msgid "Nodes: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:166
+#, python-format
+msgid "After storing domains: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:169
+msgid "deactivation/removing domain failed"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:176
+msgid "===== Domain is being created ====="
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:179
+msgid "Same domain name already exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:181
+msgid "create_domain: before get_idle_node"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:198
+#, python-format
+msgid "Created new domain: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:213
+#, python-format
+msgid "Failed to boot Bare-metal node %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:222
+msgid "No such domain exists"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:226
+#, python-format
+msgid "change_domain_state: to new state %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:233
+#, python-format
+msgid "Stored fake domains to the file: %s"
+msgstr ""
+
+#: cinder/virt/baremetal/dom.py:244
+msgid "domain does not exist"
+msgstr ""
+
+#: cinder/virt/baremetal/nodes.py:42
+#, python-format
+msgid "Unknown baremetal driver %(d)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:148
+#, python-format
+msgid "Error encountered when destroying instance '%(name)s': %(ex)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:162
+#, python-format
+msgid "instance %(instance_name)s: deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:189
+#, python-format
+msgid "instance %s: rebooted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:192
+msgid "_wait_for_reboot failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:222
+#, python-format
+msgid "instance %s: rescued"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:225
+msgid "_wait_for_rescue failed"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:242
+msgid "<============= spawn of baremetal =============>"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:255
+#, python-format
+msgid "instance %s: is building"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:260
+msgid "Key is injected but instance is not running yet"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:265
+#, python-format
+msgid "instance %s: booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:268
+#, python-format
+msgid "~~~~~~ current state = %s ~~~~~~"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:269
+#, python-format
+msgid "instance %s spawned successfully"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:272
+#, python-format
+msgid "instance %s:not booted"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:274
+msgid "Bremetal assignment is overcommitted."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:354
+#, python-format
+msgid "instance %s: Creating image"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:473
+#, python-format
+msgid "instance %(inst_name)s: injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:484
+#, python-format
+msgid ""
+"instance %(inst_name)s: ignoring error injecting data into image "
+"%(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:529
+#, python-format
+msgid "instance %s: starting toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:531
+#, python-format
+msgid "instance %s: finished toXML method"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:574 cinder/virt/libvirt/connection.py:1815
+msgid ""
+"Cannot get the number of cpu, because this function is not implemented "
+"for this platform. This error can be safely ignored for now."
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:714
+#, python-format
+msgid "#### RLK: cpu_arch = %s "
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:746
+msgid "Updating!"
+msgstr ""
+
+#: cinder/virt/baremetal/proxy.py:773 cinder/virt/libvirt/connection.py:2609
+#: cinder/virt/xenapi/host.py:129
+msgid "Updating host stats"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:185
+msgid "free_node...."
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:216
+#, python-format
+msgid "deactivate_node is called for node_id = %(id)s node_ip = %(ip)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:221
+msgid "status of node is set to 0"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:232
+msgid "rootfs is already removed"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:264
+msgid "Before ping to the bare-metal node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:275
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is ready"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:279
+#, python-format
+msgid "TILERA_BOARD_#%(node_id)s %(node_ip)s is not ready, out_msg=%(out_msg)s"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:292
+msgid "Noting to do for tilera nodes: vmlinux is in CF"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:316
+msgid "activate_node"
+msgstr ""
+
+#: cinder/virt/baremetal/tilera.py:330
+msgid "Node is unknown error state."
+msgstr ""
+
+#: cinder/virt/disk/api.py:165
+msgid "no capable image handler configured"
+msgstr ""
+
+#: cinder/virt/disk/api.py:178
+#, python-format
+msgid "unknown disk image handler: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:189
+msgid "image already mounted"
+msgstr ""
+
+#: cinder/virt/disk/api.py:276 cinder/virt/disk/guestfs.py:64
+#: cinder/virt/disk/guestfs.py:78 cinder/virt/disk/mount.py:100
+#, python-format
+msgid "Failed to mount filesystem: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:291
+#, python-format
+msgid "Failed to remove container: %s"
+msgstr ""
+
+#: cinder/virt/disk/api.py:441
+#, python-format
+msgid "User %(username)s not found in password file."
+msgstr ""
+
+#: cinder/virt/disk/api.py:457
+#, python-format
+msgid "User %(username)s not found in shadow file."
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:39
+#, python-format
+msgid "unsupported partition: %s"
+msgstr ""
+
+#: cinder/virt/disk/guestfs.py:77
+msgid "unknown guestmount error"
+msgstr ""
+
+#: cinder/virt/disk/loop.py:30
+#, python-format
+msgid "Could not attach image to loopback: %s"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:76
+msgid "no partitions found"
+msgstr ""
+
+#: cinder/virt/disk/mount.py:77
+#, python-format
+msgid "Failed to map partitions: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:58
+msgid "nbd unavailable: module not loaded"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:63
+msgid "No free nbd devices"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:81
+#, python-format
+msgid "qemu-nbd error: %s"
+msgstr ""
+
+#: cinder/virt/disk/nbd.py:93
+#, python-format
+msgid "nbd device %s did not show up"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:265
+#, python-format
+msgid "Connecting to libvirt: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:286
+msgid "Connection to libvirt broke"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:388
+#, python-format
+msgid "Error from libvirt during destroy. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:400
+#, python-format
+msgid ""
+"Error from libvirt during saved instance removal. Code=%(errcode)s "
+"Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:411
+#, python-format
+msgid "Error from libvirt during undefine. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:423
+msgid "Instance destroyed successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:435
+#, python-format
+msgid "Error from libvirt during unfilter. Code=%(errcode)s Error=%(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:461
+#, python-format
+msgid "Deleting instance files %(target)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:554
+msgid "attaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:567
+msgid "detaching LXC block device"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:692
+msgid "Instance soft rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:696
+msgid "Failed to soft reboot instance."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:725
+msgid "Instance shutdown successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:761 cinder/virt/libvirt/connection.py:905
+msgid "During reboot, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:766
+msgid "Instance rebooted successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:867 cinder/virt/xenapi/vmops.py:1358
+#, python-format
+msgid ""
+"Found %(migration_count)d unconfirmed migrations older than "
+"%(confirm_window)d seconds"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:871
+#, python-format
+msgid "Automatically confirming migration %d"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:896
+msgid "Instance is running"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:910
+msgid "Instance spawned successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:926
+#, python-format
+msgid "data: %(data)r, fpath: %(fpath)r"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:978
+#, fuzzy
+msgid "Guest does not have a console available"
+msgstr "使用者並沒有管理者權力"
+
+#: cinder/virt/libvirt/connection.py:1020
+#, python-format
+msgid "Path '%(path)s' supports direct I/O"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1024
+#, python-format
+msgid "Path '%(path)s' does not support direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1028 cinder/virt/libvirt/connection.py:1032
+#, python-format
+msgid "Error on '%(path)s' while checking direct I/O: '%(ex)s'"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1153
+msgid "Creating image"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1339
+#, python-format
+msgid "Injecting %(injection)s into image %(img_id)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1349
+#, python-format
+msgid "Ignoring error injecting data into image %(img_id)s (%(e)s)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1381
+#, python-format
+msgid "block_device_list %s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1658
+msgid "Starting toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1662
+msgid "Finished toXML method"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1679
+#, python-format
+msgid ""
+"Error from libvirt while looking up %(instance_name)s: [Error Code "
+"%(error_code)s] %(ex)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1920
+msgid "libvirt version is too old (does not support getVersion)"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1942
+#, python-format
+msgid "'<cpu>' must be 1, but %d\n"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:1969
+#, python-format
+msgid "topology (%(topology)s) must have %(ks)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2067
+#, python-format
+msgid ""
+"Instance launched has CPU info:\n"
+"%s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2079
+#, python-format
+msgid ""
+"CPU doesn't have compatibility.\n"
+"\n"
+"%(ret)s\n"
+"\n"
+"Refer to %(u)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2136
+#, python-format
+msgid "Timeout migrating for %s. nwfilter not found."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2352
+#, python-format
+msgid "skipping %(path)s since it looks like volume"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2407
+#, python-format
+msgid "Getting disk size of %(i_name)s: %(e)s"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2458
+#, python-format
+msgid "Instance %s: Starting migrate_disk_and_power_off"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2513
+msgid "During wait running, instance disappeared."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2518
+msgid "Instance running successfully."
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2525
+#, python-format
+msgid "Instance %s: Starting finish_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/connection.py:2565
+#, python-format
+msgid "Instance %s: Starting finish_revert_migration"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:42
+msgid ""
+"Libvirt module could not be loaded. NWFilterFirewall will not work "
+"correctly."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:93
+msgid "Called setup_basic_filtering in nwfilter"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:101
+msgid "Ensuring static filters"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:171
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:217
+#, python-format
+msgid "The nwfilter(%(instance_filter_name)s) for%(name)s is not found."
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:233
+msgid "iptables firewall: Setup Basic Filtering"
+msgstr ""
+
+#: cinder/virt/libvirt/firewall.py:252
+msgid "Attempted to unfilter instance which is not filtered"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:170
+#, python-format
+msgid "%s is a valid instance name"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:173
+#, python-format
+msgid "%s has a disk file"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:175
+#, python-format
+msgid "Instance %(instance)s is backed by %(backing)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:186
+#, python-format
+msgid ""
+"Instance %(instance)s is using a backing file %(backing)s which does not "
+"appear in the image service"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:237
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification failed"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:247
+#, python-format
+msgid "%(id)s (%(base_file)s): image verification skipped, no hash stored"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:266
+#, python-format
+msgid "Cannot remove %(base_file)s, it does not exist"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:278
+#, python-format
+msgid "Base file too young to remove: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:281
+#, python-format
+msgid "Removing base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:288
+#, python-format
+msgid "Failed to remove %(base_file)s, error was %(error)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:299
+#, python-format
+msgid "%(id)s (%(base_file)s): checking"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:318
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): in use: on this node %(local)d local, %(remote)d "
+"on other nodes"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:330
+#, python-format
+msgid ""
+"%(id)s (%(base_file)s): warning -- an absent base file is in use! "
+"instances: %(instance_list)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:338
+#, python-format
+msgid "%(id)s (%(base_file)s): in use on (%(remote)d on other nodes)"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:348
+#, python-format
+msgid "%(id)s (%(base_file)s): image is not in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:354
+#, python-format
+msgid "%(id)s (%(base_file)s): image is in use"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:377
+#, python-format
+msgid "Skipping verification, no base directory at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:381
+msgid "Verify base images"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:388
+#, python-format
+msgid "Image id %(id)s yields fingerprint %(fingerprint)s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:406
+#, python-format
+msgid "Unknown base file: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:411
+#, python-format
+msgid "Active base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:414
+#, python-format
+msgid "Corrupt base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:418
+#, python-format
+msgid "Removable base files: %s"
+msgstr ""
+
+#: cinder/virt/libvirt/imagecache.py:426
+msgid "Verification complete"
+msgstr ""
+
+#: cinder/virt/libvirt/utils.py:264
+msgid "Unable to find an open port"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:90
+#, python-format
+msgid "Ensuring vlan %(vlan)s and bridge %(bridge)s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:99
+#, python-format
+msgid "Ensuring bridge %s"
+msgstr ""
+
+#: cinder/virt/libvirt/vif.py:165 cinder/virt/libvirt/vif.py:220
+#, python-format
+msgid "Failed while unplugging vif of instance '%s'"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:163
+#, python-format
+msgid "iSCSI device not found at %s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:166
+#, python-format
+msgid ""
+"ISCSI volume not yet found at: %(mount_device)s. Will rescan & retry.  "
+"Try number: %(tries)s"
+msgstr ""
+
+#: cinder/virt/libvirt/volume.py:178
+#, python-format
+msgid "Found iSCSI node %(mount_device)s (after %(tries)s rescans)"
+msgstr ""
+
+#: cinder/virt/vmwareapi/error_util.py:93
+#, python-format
+msgid "Error(s) %s occurred in the call to RetrieveProperties"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:44 cinder/virt/xenapi/fake.py:77
+#, python-format
+msgid "%(text)s: _db_content => %(content)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:131
+#, python-format
+msgid "Property %(attr)s not set for the managed object %(objName)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:437
+msgid "There is no VM registered"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:439 cinder/virt/vmwareapi/fake.py:609
+#, python-format
+msgid "Virtual Machine with ref %s is not there"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:502
+#, python-format
+msgid "Logging out a session that is invalid or already logged out: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:517
+msgid "Session is faulty"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:520
+msgid "Session Invalid"
+msgstr ""
+
+#: cinder/virt/vmwareapi/fake.py:606
+msgid " No Virtual Machine has been registered yet"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:99
+#, python-format
+msgid "Glance image %s is in killed state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/io_util.py:107
+#, python-format
+msgid "Glance image %(image_id)s is in unknown state - %(state)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:128
+msgid ""
+"ESX SOAP server returned an empty port group for the host system in its "
+"response"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:155
+#, python-format
+msgid "Creating Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/network_utils.py:169
+#, python-format
+msgid "Created Port Group with name %s on the ESX host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/read_write_util.py:150
+#, python-format
+msgid "Exception during HTTP connection close in VMWareHTTpWrite. Exception is %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:84
+msgid "Unable to import suds."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:90
+msgid "Must specify vmwareapi_wsdl_loc"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:145
+#, python-format
+msgid "No such SOAP method '%s' provided by VI SDK"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:150
+#, python-format
+msgid "httplib error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:157
+#, python-format
+msgid "Socket error in %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:162
+#, python-format
+msgid "Type error in  %s: "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vim.py:166
+#, python-format
+msgid "Exception in %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:66
+msgid "Getting list of instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:82
+#, python-format
+msgid "Got total of %s instances"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:126
+msgid "Couldn't get a local Datastore reference"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:196
+#, python-format
+msgid "Creating VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:205
+#, python-format
+msgid "Created VM with the name %s on the ESX  host"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:234
+#, python-format
+msgid ""
+"Creating Virtual Disk of size  %(vmdk_file_size_in_kb)s KB and adapter "
+"type  %(adapter_type)s on the ESX host local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:251
+#, python-format
+msgid ""
+"Created Virtual Disk of size %(vmdk_file_size_in_kb)s KB on the ESX host "
+"local store %(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:260
+#, python-format
+msgid ""
+"Deleting the file %(flat_uploaded_vmdk_path)s on the ESX host localstore "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:272
+#, python-format
+msgid ""
+"Deleted the file %(flat_uploaded_vmdk_path)s on the ESX host local store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:283
+#, python-format
+msgid ""
+"Downloading image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:298
+#, python-format
+msgid ""
+"Downloaded image file data %(image_ref)s to the ESX data store "
+"%(data_store_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:315
+#, python-format
+msgid "Reconfiguring VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:322
+#, python-format
+msgid "Reconfigured VM instance %s to attach the image disk"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:329
+#, python-format
+msgid "Powering on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:335
+#, python-format
+msgid "Powered on the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:381
+#, python-format
+msgid "Creating Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:391
+#, python-format
+msgid "Created Snapshot of the VM instance %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:434
+#, python-format
+msgid "Copying disk data before snapshot of the VM  instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:447
+#, python-format
+msgid "Copied disk data before snapshot of the VM instance %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:456
+#, python-format
+msgid "Uploading image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:469
+#, python-format
+msgid "Uploaded image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:479
+#, python-format
+msgid "Deleting temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:488
+#, python-format
+msgid "Deleted temporary vmdk file %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:520
+msgid "instance is not powered on"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:527
+#, python-format
+msgid "Rebooting guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:530
+#, python-format
+msgid "Rebooted guest OS of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:532
+#, python-format
+msgid "Doing hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:536
+#, python-format
+msgid "Did hard reboot of VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:548
+#, python-format
+msgid "instance - %s not present"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:567
+#, python-format
+msgid "Powering off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:572
+#, python-format
+msgid "Powered off the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:576
+#, python-format
+msgid "Unregistering the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:579
+#, python-format
+msgid "Unregistered the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:581
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while un-registering the "
+"VM: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:592
+#, python-format
+msgid "Deleting contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:602
+#, python-format
+msgid "Deleted contents of the VM %(name)s from datastore %(datastore_name)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:607
+#, python-format
+msgid ""
+"In vmwareapi:vmops:destroy, got this exception while deleting the VM "
+"contents from the disk: %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:615
+msgid "pause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:619
+msgid "unpause not supported for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:633
+#, python-format
+msgid "Suspending the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:637
+#, python-format
+msgid "Suspended the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:640
+msgid "instance is powered off and can not be suspended."
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:643
+#, python-format
+msgid "VM %s was already in suspended state. So returning without doing anything"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:656
+#, python-format
+msgid "Resuming the VM %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:661
+#, python-format
+msgid "Resumed the VM %s "
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:663
+msgid "instance is not in a suspended state"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:699
+msgid "get_diagnostics not implemented for vmwareapi"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:757
+#, python-format
+msgid ""
+"Reconfiguring VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:765
+#, python-format
+msgid ""
+"Reconfigured VM instance %(name)s to set the machine id with ip - "
+"%(ip_addr)s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:802
+#, python-format
+msgid "Creating directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmops.py:806
+#, python-format
+msgid "Created directory with path %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:89
+#, python-format
+msgid "Downloading image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:103
+#, python-format
+msgid "Downloaded image %s from glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:108
+#, python-format
+msgid "Uploading image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:129
+#, python-format
+msgid "Uploaded image %s to the Glance image server"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:139
+#, python-format
+msgid "Getting image size for the image %s"
+msgstr ""
+
+#: cinder/virt/vmwareapi/vmware_images.py:143
+#, python-format
+msgid "Got image size of %(size)s for the image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:553 cinder/virt/xenapi/fake.py:652
+#: cinder/virt/xenapi/fake.py:670 cinder/virt/xenapi/fake.py:732
+msgid "Raising NotImplemented"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:555
+#, python-format
+msgid "xenapi.fake does not have an implementation for %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:589
+#, python-format
+msgid "Calling %(localname)s %(impl)s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:594
+#, python-format
+msgid "Calling getter %s"
+msgstr ""
+
+#: cinder/virt/xenapi/fake.py:654
+#, python-format
+msgid ""
+"xenapi.fake does not have an implementation for %s or it has been called "
+"with the wrong number of arguments"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:67
+#, python-format
+msgid ""
+"Instance %(name)s running on %(host)s could not be found in the database:"
+" assuming it is a worker VM and skipping migration to a new host"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:137
+#, python-format
+msgid "Unable to get SR for this host: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:169
+msgid "Unable to get updated status"
+msgstr ""
+
+#: cinder/virt/xenapi/host.py:172
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s."
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:37
+#, python-format
+msgid "Found non-unique network for name_label %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:55
+#, python-format
+msgid "Found non-unique network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/network_utils.py:58
+#, python-format
+msgid "Found no network for bridge %s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:111
+#, python-format
+msgid "Unable to eject %(host)s from the pool; pool not empty"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:126
+#, python-format
+msgid "Unable to eject %(host)s from the pool; No master found"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:143
+#, python-format
+msgid "Pool-Join failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:146
+#, python-format
+msgid "Unable to join %(host)s in the pool"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:162
+#, python-format
+msgid "Pool-eject failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/pool.py:174
+#, fuzzy, python-format
+msgid "Unable to set up pool: %(e)s."
+msgstr "無法卸載 Volume %s"
+
+#: cinder/virt/xenapi/pool.py:185
+#, python-format
+msgid "Pool-set_name_label failed: %(e)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:103
+#, python-format
+msgid "Found no PIF for device %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vif.py:122
+#, python-format
+msgid ""
+"PIF %(pif_rec['uuid'])s for network %(bridge)s has VLAN id %(pif_vlan)d. "
+"Expected %(vlan_num)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:218
+msgid "Created VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:245
+#, python-format
+msgid "VBD not found in instance %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:262
+#, python-format
+msgid "VBD %s already detached"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:265
+#, python-format
+msgid "VBD %(vbd_ref)s detach rejected, attempt %(num_attempt)d/%(max_attempts)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:270
+#, python-format
+msgid "Unable to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:275
+#, python-format
+msgid "Reached maximum number of retries trying to unplug VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:286
+#, python-format
+msgid "Unable to destroy VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:305
+#, python-format
+msgid "Creating %(vbd_type)s-type VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:308
+#, python-format
+msgid "Created VBD %(vbd_ref)s for VM %(vm_ref)s, VDI %(vdi_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:319
+#, python-format
+msgid "Unable to destroy VDI %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:336
+#, python-format
+msgid ""
+"Created VDI %(vdi_ref)s (%(name_label)s, %(virtual_size)s, %(read_only)s)"
+" on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:345
+#, python-format
+msgid "Copied VDI %(vdi_ref)s from VDI %(vdi_to_copy_ref)s on %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:353
+#, python-format
+msgid "Cloned VDI %(vdi_ref)s from VDI %(vdi_to_clone_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:372
+#, python-format
+msgid "No primary VDI found for %(vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:379
+#, python-format
+msgid "Snapshotting with label '%(label)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:392
+#, python-format
+msgid "Created snapshot %(template_vm_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:431
+#, python-format
+msgid "Asking xapi to upload %(vdi_uuids)s as ID %(image_id)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:583
+#, python-format
+msgid "Creating blank HD of size %(req_size)d gigs"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:634
+#, python-format
+msgid ""
+"Fast cloning is only supported on default local SR of type ext. SR on "
+"this system was found to be of type %(sr_type)s. Ignoring the cow flag."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:724
+#, python-format
+msgid ""
+"download_vhd %(image)s attempt %(attempt_num)d/%(max_attempts)d from "
+"%(glance_host)s:%(glance_port)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:734
+#, python-format
+msgid "download_vhd failed: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:750
+#, python-format
+msgid "Asking xapi to fetch vhd image %(image)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:760
+#, python-format
+msgid ""
+"xapi 'download_vhd' returned VDI of type '%(vdi_type)s' with UUID "
+"'%(vdi_uuid)s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:789
+#, python-format
+msgid "vdi_uuid=%(cur_vdi_uuid)s vdi_size_bytes=%(vdi_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:805
+#, python-format
+msgid "image_size_bytes=%(size_bytes)d, allowed_size_bytes=%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:809
+#, python-format
+msgid ""
+"Image size %(size_bytes)d exceeded instance_type allowed size "
+"%(allowed_size_bytes)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:831
+#, python-format
+msgid "Fetching image %(image)s, type %(image_type_str)"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:844
+#, python-format
+msgid "Size for image %(image)s: %(virtual_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:853
+#, python-format
+msgid ""
+"Kernel/Ramdisk image is too large: %(vdi_size)d bytes, max %(max_size)d "
+"bytes"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:870
+#, python-format
+msgid "Copying VDI %s to /boot/guest on dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:884
+#, python-format
+msgid "Kernel/Ramdisk VDI %s destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:895
+msgid "Failed to fetch glance image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:934
+#, python-format
+msgid "Detected %(image_type_str)s format for image %(image_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:955
+#, python-format
+msgid "Looking up vdi %s for PV kernel"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:973
+#, python-format
+msgid "Unknown image format %(disk_image_type)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1016
+#, python-format
+msgid "VDI %s is still available"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1059
+#, python-format
+msgid "(VM_UTILS) xenserver vm state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1061
+#, python-format
+msgid "(VM_UTILS) xenapi power_state -> |%s|"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1088
+#, python-format
+msgid "Unable to parse rrd of %(vm_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1108
+#, python-format
+msgid "Re-scanning SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1136
+#, python-format
+msgid "Flag sr_matching_filter '%s' does not respect formatting convention"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1154
+msgid ""
+"XenAPI is unable to find a Storage Repository to install guest instances "
+"on. Please check your configuration and/or configure the flag "
+"'sr_matching_filter'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1167
+msgid "Cannot find SR of content-type ISO"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1175
+#, python-format
+msgid "ISO: looking at SR %(sr_rec)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1177
+msgid "ISO: not iso content"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1180
+msgid "ISO: iso content_type, no 'i18n-key' key"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1183
+msgid "ISO: iso content_type, i18n-key value not 'local-storage-iso'"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1187
+msgid "ISO: SR MATCHing our criteria"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1189
+msgid "ISO: ISO, looking to see if it is host local"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1192
+#, python-format
+msgid "ISO: PBD %(pbd_ref)s disappeared"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1195
+#, python-format
+msgid "ISO: PBD matching, want %(pbd_rec)s, have %(host)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1198
+msgid "ISO: SR with local PBD"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1220
+#, python-format
+msgid ""
+"Unable to obtain RRD XML for VM %(vm_uuid)s with server details: "
+"%(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1236
+#, python-format
+msgid "Unable to obtain RRD XML updates with server details: %(server)s."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1290
+#, python-format
+msgid "Invalid statistics data from Xenserver: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1343
+#, python-format
+msgid "VHD %(vdi_uuid)s has parent %(parent_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1417
+#, python-format
+msgid ""
+"Parent %(parent_uuid)s doesn't match original parent "
+"%(original_parent_uuid)s, waiting for coalesce..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1427
+#, python-format
+msgid "VHD coalesce attempts exceeded (%(max_attempts)d), giving up..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1462
+#, python-format
+msgid "Timeout waiting for device %s to be created"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1473
+#, python-format
+msgid "Plugging VBD %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1476
+#, python-format
+msgid "Plugging VBD %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1478
+#, python-format
+msgid "VBD %(vbd_ref)s plugged as %(orig_dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1481
+#, python-format
+msgid "VBD %(vbd_ref)s plugged into wrong dev, remapping to %(dev)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1490
+#, python-format
+msgid "Destroying VBD for VDI %s ... "
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1498
+#, python-format
+msgid "Destroying VBD for VDI %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1511
+#, python-format
+msgid "Running pygrub against %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1518
+#, python-format
+msgid "Found Xen kernel %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1520
+msgid "No Xen kernel found.  Booting HVM."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1533
+msgid "Partitions:"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1539
+#, python-format
+msgid "  %(num)s: %(ptype)s %(size)d sectors"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1565
+#, python-format
+msgid ""
+"Writing partition table %(primary_first)d %(primary_last)d to "
+"%(dev_path)s..."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1578
+#, python-format
+msgid "Writing partition table %s done."
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1632
+#, python-format
+msgid ""
+"Starting sparse_copy src=%(src_path)s dst=%(dst_path)s "
+"virtual_size=%(virtual_size)d block_size=%(block_size)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1664
+#, python-format
+msgid ""
+"Finished sparse_copy in %(duration).2f secs, %(compression_pct).2f%% "
+"reduction in size"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1714
+msgid ""
+"XenServer tools installed in this image are capable of network injection."
+"  Networking files will not bemanipulated"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1722
+msgid ""
+"XenServer tools are present in this image but are not capable of network "
+"injection"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1726
+msgid "XenServer tools are not installed in this image"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1742
+msgid "Manipulating interface files directly"
+msgstr ""
+
+#: cinder/virt/xenapi/vm_utils.py:1751
+#, python-format
+msgid "Failed to mount filesystem (expected for non-linux instances): %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:131 cinder/virt/xenapi/vmops.py:722
+#, python-format
+msgid "Updating progress to %(progress)d"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:231
+#, python-format
+msgid "Attempted to power on non-existent instance bad instance id %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:233
+msgid "Starting instance"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:303
+msgid "Removing kernel/ramdisk files from dom0"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:358
+msgid "Failed to spawn, rolling back"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:443
+msgid "Detected ISO image type, creating blank VM for install"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:462
+msgid "Auto configuring disk, attempting to resize partition..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:515
+#, python-format
+msgid "Invalid value for injected_files: %r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:520
+#, python-format
+msgid "Injecting file path: '%s'"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:527
+msgid "Setting admin password"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:531
+msgid "Resetting network"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:538
+msgid "Setting VCPU weight"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:544
+msgid "Starting VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:551
+#, python-format
+msgid ""
+"Latest agent build for %(hypervisor)s/%(os)s/%(architecture)s is "
+"%(version)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:554
+#, python-format
+msgid "No agent build found for %(hypervisor)s/%(os)s/%(architecture)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:561
+msgid "Waiting for instance state to become running"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:573
+msgid "Querying agent version"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:576
+#, python-format
+msgid "Instance agent version: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:581
+#, python-format
+msgid "Updating Agent to %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:616
+#, python-format
+msgid "No opaque_ref could be determined for '%s'."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:670
+msgid "Finished snapshot and upload for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:677
+msgid "Starting snapshot for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:686
+#, fuzzy, python-format
+msgid "Unable to Snapshot instance: %(exc)s"
+msgstr "無法掛載Volume 到虛擬機器 %s"
+
+#: cinder/virt/xenapi/vmops.py:702
+msgid "Failed to transfer vhd to new host"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:770
+#, python-format
+msgid "Resizing down VDI %(cow_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:893
+#, python-format
+msgid "Resizing up VDI %(vdi_uuid)s from %(old_gb)dGB to %(new_gb)dGB"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:901
+msgid "Resize complete"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:928
+#, python-format
+msgid "Failed to query agent version: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:949
+#, python-format
+msgid "domid changed from %(domid)s to %(newdomid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:962
+#, python-format
+msgid "Failed to update agent: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:983
+#, python-format
+msgid "Failed to exchange keys: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:998
+#, python-format
+msgid "Failed to update password: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1023
+#, python-format
+msgid "Failed to inject file: %(resp)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1032
+msgid "VM already halted, skipping shutdown..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1036
+msgid "Shutting down VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1054
+msgid "Unable to find VBD for VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1097
+msgid "Using RAW or VHD, skipping kernel and ramdisk deletion"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1104
+msgid "instance has a kernel or ramdisk but not both"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1111
+msgid "kernel/ramdisk files removed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1121
+msgid "VM destroyed"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1147
+msgid "Destroying VM"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1169
+msgid "VM is not present, skipping destroy..."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1222
+#, python-format
+msgid "Instance is already in Rescue Mode: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1296
+#, python-format
+msgid "Found %(instance_count)d hung reboots older than %(timeout)d seconds"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1300
+msgid "Automatically hard rebooting"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1363
+#, python-format
+msgid "Setting migration %(migration_id)s to error: %(reason)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1374
+#, python-format
+msgid ""
+"Automatically confirming migration %(migration_id)s for instance "
+"%(instance_uuid)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1379
+#, python-format
+msgid "Instance %(instance_uuid)s not found"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1383
+msgid "In ERROR state"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1389
+#, python-format
+msgid "In %(task_state)s task_state, not RESIZE_VERIFY"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1396
+#, python-format
+msgid "Error auto-confirming resize: %(e)s. Will retry later."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1418
+msgid "Could not get bandwidth info."
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1469
+msgid "Injecting network info to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1483
+msgid "Creating vifs"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1492
+#, python-format
+msgid "Creating VIF for network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1495
+#, python-format
+msgid "Created VIF %(vif_ref)s, network %(network_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1520
+msgid "Injecting hostname to xenstore"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1545
+#, python-format
+msgid ""
+"The agent call to %(method)s returned an invalid response: %(ret)r. "
+"path=%(path)s; args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1566
+#, python-format
+msgid "TIMEOUT: The call to %(method)s timed out. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1570
+#, python-format
+msgid ""
+"NOT IMPLEMENTED: The call to %(method)s is not supported by the agent. "
+"args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1575
+#, python-format
+msgid "The call to %(method)s returned an error: %(e)s. args=%(args)r"
+msgstr ""
+
+#: cinder/virt/xenapi/vmops.py:1661
+#, python-format
+msgid "OpenSSL error: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:52
+msgid "creating sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:55 cinder/virt/xenapi/volume_utils.py:83
+#, python-format
+msgid "type is = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:58 cinder/virt/xenapi/volume_utils.py:86
+#, python-format
+msgid "name = %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:71
+#, python-format
+msgid "Created %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:76 cinder/virt/xenapi/volume_utils.py:174
+msgid "Unable to create Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:80
+msgid "introducing sr within volume_utils"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:103 cinder/virt/xenapi/volume_utils.py:170
+#: cinder/virt/xenapi/volumeops.py:156
+#, python-format
+msgid "Introduced %(label)s as %(sr_ref)s."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:106
+msgid "Creating pbd for SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:108
+msgid "Plugging SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:116 cinder/virt/xenapi/volumeops.py:160
+msgid "Unable to introduce Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:127 cinder/virt/xenapi/volumeops.py:50
+msgid "Unable to get SR using uuid"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:129
+#, python-format
+msgid "Forgetting SR %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:137
+msgid "Unable to forget Storage Repository"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:157
+#, python-format
+msgid "Introducing %s..."
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:186
+#, python-format
+msgid "Unable to find SR from VBD %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:204
+#, python-format
+msgid "Ignoring exception %(exc)s when getting PBDs for %(sr_ref)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:210
+#, python-format
+msgid "Ignoring exception %(exc)s when unplugging PBD %(pbd)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:234
+#, python-format
+msgid "Unable to introduce VDI on SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:242
+#, python-format
+msgid "Unable to get record of VDI %s on"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:264
+#, python-format
+msgid "Unable to introduce VDI for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:274
+#, python-format
+msgid "Error finding vdis in SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:281
+#, python-format
+msgid "Unable to find vbd for vdi %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:315
+#, python-format
+msgid "Unable to obtain target information %(data)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volume_utils.py:341
+#, python-format
+msgid "Mountpoint cannot be translated: %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:64
+msgid "Could not find VDI ref"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:69
+#, python-format
+msgid "Creating SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:73
+msgid "Could not create SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:76
+msgid "Could not retrieve SR record"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:81
+#, python-format
+msgid "Introducing SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:85
+msgid "SR found in xapi database. No need to introduce"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:90
+msgid "Could not introduce SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:94
+#, python-format
+msgid "Checking for SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:106
+#, python-format
+msgid "SR %s not found in the xapi database"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:112
+msgid "Could not forget SR"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:121
+#, python-format
+msgid "Attach_volume: %(connection_info)s, %(instance_name)s, %(mountpoint)s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:178
+#, python-format
+msgid "Unable to create VDI on SR %(sr_ref)s for instance %(instance_name)s"
+msgstr "無法替 instance實例 %(instance_name)s , 建立 VDI 在SR %(sr_ref)s"
+
+#: cinder/virt/xenapi/volumeops.py:189
+#, python-format
+msgid "Unable to use SR %(sr_ref)s for instance %(instance_name)s"
+msgstr "無法替 instance實例 %(instance_name)s ,  使用SR %(sr_ref)s"
+
+#: cinder/virt/xenapi/volumeops.py:197
+#, python-format
+msgid "Unable to attach volume to instance %s"
+msgstr "無法掛載Volume 到虛擬機器 %s"
+
+#: cinder/virt/xenapi/volumeops.py:200
+#, python-format
+msgid "Mountpoint %(mountpoint)s attached to instance %(instance_name)s"
+msgstr "掛載點 %(mountpoint)s 掛載到虛擬機器 %(instance_name)s"
+
+#: cinder/virt/xenapi/volumeops.py:210
+#, python-format
+msgid "Detach_volume: %(instance_name)s, %(mountpoint)s"
+msgstr "卸載_Volume: %(instance_name)s, %(mountpoint)s"
+
+#: cinder/virt/xenapi/volumeops.py:219
+#, python-format
+msgid "Unable to locate volume %s"
+msgstr "找不到Volume %s"
+
+#: cinder/virt/xenapi/volumeops.py:227
+#, python-format
+msgid "Unable to detach volume %s"
+msgstr "無法卸載 Volume %s"
+
+#: cinder/virt/xenapi/volumeops.py:232
+#, python-format
+msgid "Unable to destroy vbd %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:239
+#, python-format
+msgid "Error purging SR %s"
+msgstr ""
+
+#: cinder/virt/xenapi/volumeops.py:241
+#, python-format
+msgid "Mountpoint %(mountpoint)s detached from instance %(instance_name)s"
+msgstr "掛載點 %(mountpoint)s 從虛擬機器 %(instance_name)s 卸載"
+
+#: cinder/vnc/xvp_proxy.py:98 cinder/vnc/xvp_proxy.py:103
+#, python-format
+msgid "Error in handshake: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:119
+#, python-format
+msgid "Invalid request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:139
+#, python-format
+msgid "Request: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:142
+#, python-format
+msgid "Request made with missing token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:153
+#, python-format
+msgid "Request made with invalid token: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:160
+#, python-format
+msgid "Unexpected error: %s"
+msgstr ""
+
+#: cinder/vnc/xvp_proxy.py:180
+#, python-format
+msgid "Starting cinder-xvpvncproxy node (version %s)"
+msgstr ""
+
+#: cinder/volume/api.py:74 cinder/volume/api.py:220
+msgid "status must be available"
+msgstr ""
+
+#: cinder/volume/api.py:85
+#, python-format
+msgid "Quota exceeded for %(pid)s, tried to create %(size)sG volume"
+msgstr ""
+
+#: cinder/volume/api.py:137
+#, fuzzy
+msgid "Volume status must be available or error"
+msgstr "Volume 狀態需要可被使用"
+
+#: cinder/volume/api.py:142
+#, python-format
+msgid "Volume still has %d dependent snapshots"
+msgstr ""
+
+#: cinder/volume/api.py:223
+msgid "already attached"
+msgstr ""
+
+#: cinder/volume/api.py:230
+msgid "already detached"
+msgstr ""
+
+#: cinder/volume/api.py:292
+msgid "must be available"
+msgstr ""
+
+#: cinder/volume/api.py:325
+#, fuzzy
+msgid "Volume Snapshot status must be available or error"
+msgstr "Volume 狀態需要可被使用"
+
+#: cinder/volume/driver.py:96
+#, python-format
+msgid "Recovering from a failed execute.  Try number %s"
+msgstr ""
+
+#: cinder/volume/driver.py:106
+#, python-format
+msgid "volume group %s doesn't exist"
+msgstr ""
+
+#: cinder/volume/driver.py:270
+#, python-format
+msgid "Skipping ensure_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:318
+#, python-format
+msgid "Skipping remove_export. No iscsi_target provisioned for volume: %d"
+msgstr ""
+
+#: cinder/volume/driver.py:327
+#, python-format
+msgid ""
+"Skipping remove_export. No iscsi_target is presently exported for volume:"
+" %d"
+msgstr ""
+
+#: cinder/volume/driver.py:337
+msgid "ISCSI provider_location not stored, using discovery"
+msgstr ""
+
+#: cinder/volume/driver.py:384
+#, python-format
+msgid "Could not find iSCSI export  for volume %s"
+msgstr ""
+
+#: cinder/volume/driver.py:388
+#, python-format
+msgid "ISCSI Discovery: Found %s"
+msgstr ""
+
+#: cinder/volume/driver.py:466
+#, python-format
+msgid "Cannot confirm exported volume id:%(volume_id)s."
+msgstr ""
+
+#: cinder/volume/driver.py:493
+#, python-format
+msgid "FAKE ISCSI: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:505
+#, python-format
+msgid "rbd has no pool %s"
+msgstr ""
+
+#: cinder/volume/driver.py:579
+#, python-format
+msgid "Sheepdog is not working: %s"
+msgstr ""
+
+#: cinder/volume/driver.py:581
+msgid "Sheepdog is not working"
+msgstr ""
+
+#: cinder/volume/driver.py:680 cinder/volume/driver.py:685
+#, python-format
+msgid "LoggingVolumeDriver: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:96
+#, python-format
+msgid "Re-exporting %s volumes"
+msgstr ""
+
+#: cinder/volume/manager.py:101
+#, python-format
+msgid "volume %s: skipping export"
+msgstr ""
+
+#: cinder/volume/manager.py:107
+#, python-format
+msgid "volume %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:119
+#, python-format
+msgid "volume %(vol_name)s: creating lv of size %(vol_size)sG"
+msgstr ""
+
+#: cinder/volume/manager.py:131
+#, python-format
+msgid "volume %s: creating export"
+msgstr ""
+
+#: cinder/volume/manager.py:144
+#, python-format
+msgid "volume %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:153
+msgid "Volume is still attached"
+msgstr ""
+
+#: cinder/volume/manager.py:155
+msgid "Volume is not local to this node"
+msgstr ""
+
+#: cinder/volume/manager.py:159
+#, python-format
+msgid "volume %s: removing export"
+msgstr ""
+
+#: cinder/volume/manager.py:161
+#, python-format
+msgid "volume %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:164
+#, python-format
+msgid "volume %s: volume is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:176
+#, python-format
+msgid "volume %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:183
+#, python-format
+msgid "snapshot %s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:187
+#, python-format
+msgid "snapshot %(snap_name)s: creating"
+msgstr ""
+
+#: cinder/volume/manager.py:202
+#, python-format
+msgid "snapshot %s: created successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:211
+#, python-format
+msgid "snapshot %s: deleting"
+msgstr ""
+
+#: cinder/volume/manager.py:214
+#, python-format
+msgid "snapshot %s: snapshot is busy"
+msgstr ""
+
+#: cinder/volume/manager.py:226
+#, python-format
+msgid "snapshot %s: deleted successfully"
+msgstr ""
+
+#: cinder/volume/manager.py:310
+msgid "Checking volume capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:314
+#, python-format
+msgid "New capabilities found: %s"
+msgstr ""
+
+#: cinder/volume/manager.py:325
+msgid "Clear capabilities"
+msgstr ""
+
+#: cinder/volume/manager.py:329
+#, python-format
+msgid "Notification {%s} received"
+msgstr ""
+
+#: cinder/volume/netapp.py:79
+#, python-format
+msgid "API %(name)sfailed: %(reason)s"
+msgstr ""
+
+#: cinder/volume/netapp.py:109
+#, python-format
+msgid "%s is not set"
+msgstr ""
+
+#: cinder/volume/netapp.py:128
+msgid "Connected to DFM server"
+msgstr ""
+
+#: cinder/volume/netapp.py:159
+#, python-format
+msgid "Job failed: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:240
+msgid "Failed to provision dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:252
+msgid "No LUN was created by the provision job"
+msgstr ""
+
+#: cinder/volume/netapp.py:261 cinder/volume/netapp.py:433
+#, fuzzy, python-format
+msgid "Failed to find LUN ID for volume %s"
+msgstr "找不到Volume %s"
+
+#: cinder/volume/netapp.py:280
+msgid "Failed to remove and delete dataset member"
+msgstr ""
+
+#: cinder/volume/netapp.py:603 cinder/volume/netapp.py:657
+#, fuzzy, python-format
+msgid "No LUN ID for volume %s"
+msgstr "找不到Volume %s"
+
+#: cinder/volume/netapp.py:607 cinder/volume/netapp.py:661
+#, python-format
+msgid "Failed to get LUN details for LUN ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:614
+#, python-format
+msgid "Failed to get host details for host ID %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:620
+#, python-format
+msgid "Failed to get target portal for filer: %s"
+msgstr ""
+
+#: cinder/volume/netapp.py:625
+#, python-format
+msgid "Failed to get target IQN for filer: %s"
+msgstr ""
+
+#: cinder/volume/san.py:113 cinder/volume/san.py:151
+msgid "Specify san_password or san_private_key"
+msgstr ""
+
+#: cinder/volume/san.py:156
+msgid "san_ip must be set"
+msgstr ""
+
+#: cinder/volume/san.py:320
+#, python-format
+msgid "LUID not found for %(zfs_poolname)s. Output=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:452
+#, python-format
+msgid "CLIQ command returned %s"
+msgstr ""
+
+#: cinder/volume/san.py:458
+#, python-format
+msgid "Malformed response to CLIQ command %(verb)s %(cliq_args)s. Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:466
+#, python-format
+msgid "Error running CLIQ command %(verb)s %(cliq_args)s.  Result=%(out)s"
+msgstr ""
+
+#: cinder/volume/san.py:496
+#, python-format
+msgid ""
+"Unexpected number of virtual ips for cluster  %(cluster_name)s. "
+"Result=%(_xml)s"
+msgstr ""
+
+#: cinder/volume/san.py:549
+#, python-format
+msgid "Volume info: %(volume_name)s => %(volume_attributes)s"
+msgstr ""
+
+#: cinder/volume/san.py:594
+msgid "local_path not supported"
+msgstr ""
+
+#: cinder/volume/san.py:626
+#, python-format
+msgid "Could not determine project for volume %s, can't export"
+msgstr ""
+
+#: cinder/volume/san.py:696
+#, python-format
+msgid "Payload for SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:713
+#, python-format
+msgid "Call to json.loads() raised an exception: %s"
+msgstr ""
+
+#: cinder/volume/san.py:718
+#, python-format
+msgid "Results of SolidFire API call: %s"
+msgstr ""
+
+#: cinder/volume/san.py:732
+#, python-format
+msgid "Found solidfire account: %s"
+msgstr ""
+
+#: cinder/volume/san.py:746
+#, python-format
+msgid "solidfire account: %s does not exist, create it..."
+msgstr ""
+
+#: cinder/volume/san.py:804
+msgid "Enter SolidFire create_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:846
+msgid "Leaving SolidFire create_volume"
+msgstr ""
+
+#: cinder/volume/san.py:861
+msgid "Enter SolidFire delete_volume..."
+msgstr ""
+
+#: cinder/volume/san.py:880
+#, python-format
+msgid "Deleting volumeID: %s "
+msgstr ""
+
+#: cinder/volume/san.py:888
+msgid "Leaving SolidFire delete_volume"
+msgstr ""
+
+#: cinder/volume/san.py:891
+msgid "Executing SolidFire ensure_export..."
+msgstr ""
+
+#: cinder/volume/san.py:895
+msgid "Executing SolidFire create_export..."
+msgstr ""
+
+#: cinder/volume/volume_types.py:49 cinder/volume/volume_types.py:108
+msgid "name cannot be None"
+msgstr ""
+
+#: cinder/volume/volume_types.py:96
+msgid "id cannot be None"
+msgstr ""
+
+#: cinder/volume/xensm.py:55
+#, python-format
+msgid "SR name = %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:56
+#, python-format
+msgid "Params: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:60
+#, python-format
+msgid "Failed to create sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:62
+msgid "Create failed"
+msgstr ""
+
+#: cinder/volume/xensm.py:64
+#, python-format
+msgid "SR UUID of new SR is: %s"
+msgstr ""
+
+#: cinder/volume/xensm.py:71
+msgid "Failed to update db"
+msgstr ""
+
+#: cinder/volume/xensm.py:80
+#, python-format
+msgid "Failed to introduce sr %s...continuing"
+msgstr ""
+
+#: cinder/volume/xensm.py:91
+#, python-format
+msgid "Failed to reach backend %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:100
+msgid "XenSMDriver requires xenapi connection"
+msgstr ""
+
+#: cinder/volume/xensm.py:110
+msgid "Failed to initiate session"
+msgstr ""
+
+#: cinder/volume/xensm.py:142
+#, python-format
+msgid "Volume will be created in backend - %d"
+msgstr ""
+
+#: cinder/volume/xensm.py:154
+msgid "Failed to update volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:157
+msgid "Unable to create volume"
+msgstr ""
+
+#: cinder/volume/xensm.py:171
+msgid "Failed to delete vdi"
+msgstr ""
+
+#: cinder/volume/xensm.py:177
+msgid "Failed to delete volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:210
+msgid "Failed to find volume in db"
+msgstr ""
+
+#: cinder/volume/xensm.py:221
+msgid "Failed to find backend in db"
+msgstr ""
+
+#: cinder/volume/nexenta/__init__.py:27
+msgid "Nexenta SA returned the error"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:64
+#, python-format
+msgid "Sending JSON data: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:69
+#, python-format
+msgid "Auto switching to HTTPS connection to %s"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:75
+msgid "No headers in server response"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:76
+msgid "Bad response from server"
+msgstr ""
+
+#: cinder/volume/nexenta/jsonrpc.py:79
+#, python-format
+msgid "Got response: %s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:96
+#, python-format
+msgid "Volume %s does not exist in Nexenta SA"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:180
+msgid ""
+"Call to local_path should not happen. Verify that use_local_volumes flag "
+"is turned off."
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:202
+#, python-format
+msgid "Ignored target creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:210
+#, python-format
+msgid "Ignored target group creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:219
+#, python-format
+msgid "Ignored target group member addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:227
+#, python-format
+msgid "Ignored LU creation error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:237
+#, python-format
+msgid "Ignored LUN mapping entry addition error \"%s\" while ensuring export"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:273
+#, python-format
+msgid ""
+"Got error trying to destroy target group %(target_group)s, assuming it is"
+" already gone: %(exc)s"
+msgstr ""
+
+#: cinder/volume/nexenta/volume.py:280
+#, python-format
+msgid ""
+"Got error trying to delete target %(target)s, assuming it is already "
+"gone: %(exc)s"
+msgstr ""
+
+#~ msgid "Unable to locate account %(account_name) on Solidfire device"
+#~ msgstr ""
+
+#~ msgid "Zone %(zone_id)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Cinder access parameters were not specified."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(id)d could not be found."
+#~ msgstr ""
+
+#~ msgid "Virtual Storage Array %(name)s could not be found."
+#~ msgstr ""
+
+#~ msgid "Detected more than one volume with name %(vol_name)"
+#~ msgstr ""
+
+#~ msgid "Detected existing vlan with id %(vlan)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab semaphore \"%(lock)s\" "
+#~ "for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got semaphore \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Attempting to grab file lock "
+#~ "\"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Got file lock \"%(lock)s\" for method \"%(method)s\"...lock"
+#~ msgstr ""
+
+#~ msgid "Parent group id and group id cannot be same"
+#~ msgstr ""
+
+#~ msgid "No body provided"
+#~ msgstr ""
+
+#~ msgid "Create VSA %(display_name)s of type %(vc_type)s"
+#~ msgstr ""
+
+#~ msgid "Delete VSA with id: %s"
+#~ msgstr ""
+
+#~ msgid "Associate address %(ip)s to VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "Disassociate address from VSA %(id)s"
+#~ msgstr ""
+
+#~ msgid "%(obj)s with ID %(id)s not found"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(obj)s with ID %(id)s belongs to "
+#~ "VSA %(own_vsa_id)s and not to VSA "
+#~ "%(vsa_id)s."
+#~ msgstr ""
+
+#~ msgid "Index. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Detail. vsa_id=%(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Create. vsa_id=%(vsa_id)s, body=%(body)s"
+#~ msgstr ""
+
+#~ msgid "Create volume of %(size)s GB from VSA ID %(vsa_id)s"
+#~ msgstr ""
+
+#~ msgid "Update %(obj)s with id: %(id)s, changes: %(changes)s"
+#~ msgstr ""
+
+#~ msgid "Delete. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Show. vsa_id=%(vsa_id)s, id=%(id)s"
+#~ msgstr ""
+
+#~ msgid "Index instances for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Quota exceeded for %(pid)s, tried to run %(min_count)s instances"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You cannot run"
+#~ " any more instances of this type."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance quota exceeded. You can only"
+#~ " run %s more instances of this "
+#~ "type."
+#~ msgstr ""
+
+#~ msgid "Going to try to soft delete %s"
+#~ msgstr ""
+
+#~ msgid "No host for instance %s, deleting immediately"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to stop %s"
+#~ msgstr ""
+
+#~ msgid "Going to try to start %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Going to force the deletion of the"
+#~ " vm %(instance_uuid)s, even if it is"
+#~ " deleted"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s did not exist "
+#~ "in the DB, but I will shut "
+#~ "it down anyway using a special "
+#~ "context"
+#~ msgstr ""
+
+#~ msgid "exception terminating the instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "trying to destroy already destroyed instance: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(name)s found in database but"
+#~ " not known by hypervisor. Setting "
+#~ "power state to NOSTATE"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Detected instance  with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Destroying instance with name label "
+#~ "'%(name_label)s' which is marked as "
+#~ "DELETED but still present on host."
+#~ msgstr ""
+
+#~ msgid "SQL connection failed (%(connstring)s). %(attempts)d attempts left."
+#~ msgstr ""
+
+#~ msgid "Can't downgrade without losing data"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_id)s not found"
+#~ msgstr ""
+
+#~ msgid "Network %s has active ports, cannot delete"
+#~ msgstr ""
+
+#~ msgid "No fixed IPs to deallocate for vif %sid"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "AMQP server on %(fl_host)s:%(fl_port)d is "
+#~ "unreachable: %(e)s. Trying again in "
+#~ "%(fl_intv)d seconds."
+#~ msgstr ""
+
+#~ msgid "Unable to connect to AMQP server after %(tries)d tries. Shutting down."
+#~ msgstr ""
+
+#~ msgid "Reconnected to queue"
+#~ msgstr ""
+
+#~ msgid "Failed to fetch message from queue: %s"
+#~ msgstr ""
+
+#~ msgid "Initing the Adapter Consumer for %s"
+#~ msgstr ""
+
+#~ msgid "Created \"%(exchange)s\" fanout exchange with \"%(key)s\" routing key"
+#~ msgstr ""
+
+#~ msgid "Exception while processing consumer"
+#~ msgstr ""
+
+#~ msgid "Creating \"%(exchange)s\" fanout exchange"
+#~ msgstr ""
+
+#~ msgid "response %s"
+#~ msgstr ""
+
+#~ msgid "topic is %s"
+#~ msgstr ""
+
+#~ msgid "message %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Cannot confirm tmpfile at %(ipath)s is"
+#~ " on same shared storage between "
+#~ "%(src)s and %(dest)s."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of memory(host:%(avail)s <= "
+#~ "instance:%(mem_inst)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Unable to migrate %(instance_id)s to "
+#~ "%(dest)s: Lack of disk(host:%(available)s <="
+#~ " instance:%(necessary)s)"
+#~ msgstr ""
+
+#~ msgid "Driver Method %(driver_method)s missing: %(e)s.Reverting to schedule()"
+#~ msgstr ""
+
+#~ msgid "Setting instance %(instance_uuid)s to ERROR state."
+#~ msgstr ""
+
+#~ msgid "_filter_hosts: %(request_spec)s"
+#~ msgstr ""
+
+#~ msgid "Filter hosts for drive type %s"
+#~ msgstr ""
+
+#~ msgid "Host %s has no free capacity. Skip"
+#~ msgstr ""
+
+#~ msgid "Filter hosts: %s"
+#~ msgstr ""
+
+#~ msgid "Must implement host selection mechanism"
+#~ msgstr ""
+
+#~ msgid "Maximum number of hosts selected (%d)"
+#~ msgstr ""
+
+#~ msgid "Selected excessive host %(host)s"
+#~ msgstr ""
+
+#~ msgid "Provision volume %(name)s of size %(size)s GB on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "volume_params %(volume_params)s"
+#~ msgstr ""
+
+#~ msgid "%(i)d: Volume %(name)s"
+#~ msgstr ""
+
+#~ msgid "Attempting to spawn %(num_volumes)d volume(s)"
+#~ msgstr ""
+
+#~ msgid "Error creating volumes"
+#~ msgstr ""
+
+#~ msgid "Non-VSA volume %d"
+#~ msgstr ""
+
+#~ msgid "Spawning volume %(volume_id)s with drive type %(drive_type)s"
+#~ msgstr ""
+
+#~ msgid "Error creating volume"
+#~ msgstr ""
+
+#~ msgid "No capability selected for volume of size %(size)s"
+#~ msgstr ""
+
+#~ msgid "Host %s:"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\tDrive %(qosgrp)-25s: total %(total)2s, "
+#~ "used %(used)2s, free %(free)2s. Available "
+#~ "capacity %(avail)-5s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t LeastUsedHost: Best host: %(best_host)s."
+#~ " (used capacity %(min_used)s)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "\t MostAvailCap: Best host: %(best_host)s. "
+#~ "(available %(max_avail)s %(type_str)s)"
+#~ msgstr ""
+
+#~ msgid "(%(nm)s) publish (key: %(routing_key)s) %(message)s"
+#~ msgstr ""
+
+#~ msgid "Publishing to route %s"
+#~ msgstr ""
+
+#~ msgid "Declaring queue %s"
+#~ msgstr ""
+
+#~ msgid "Declaring exchange %s"
+#~ msgstr ""
+
+#~ msgid "Binding %(queue)s to %(exchange)s with key %(routing_key)s"
+#~ msgstr ""
+
+#~ msgid "Getting from %(queue)s: %(message)s"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate wrong VSA name. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: Emulate DB error. Raise"
+#~ msgstr ""
+
+#~ msgid "Test: user_data = %s"
+#~ msgstr ""
+
+#~ msgid "_create: param=%s"
+#~ msgstr ""
+
+#~ msgid "Host %s"
+#~ msgstr ""
+
+#~ msgid "Test: provision vol %(name)s on host %(host)s"
+#~ msgstr ""
+
+#~ msgid "\t vol=%(vol)s"
+#~ msgstr ""
+
+#~ msgid "Test: VSA update request: vsa_id=%(vsa_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume create: %s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get request: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume update request: id=%(volume_id)s values=%(values)s"
+#~ msgstr ""
+
+#~ msgid "Test: Volume get: id=%(volume_id)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: success    %(result)s"
+#~ msgstr ""
+
+#~ msgid "Task [%(name)s] %(task)s status: %(status)s    %(error_info)s"
+#~ msgstr ""
+
+#~ msgid "Unable to get updated status: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "deactivate_node is called for                "
+#~ "node_id = %(id)s node_ip = %(ip)s"
+#~ msgstr ""
+
+#~ msgid "virsh said: %r"
+#~ msgstr ""
+
+#~ msgid "cool, it's a device"
+#~ msgstr ""
+
+#~ msgid "Unable to read LXC console"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "to xml...\n"
+#~ ":%s "
+#~ msgstr ""
+
+#~ msgid "During wait running, %s disappeared."
+#~ msgstr ""
+
+#~ msgid "Instance %s running successfully."
+#~ msgstr ""
+
+#~ msgid "The nwfilter(%(instance_secgroup_filter_name)s) is not found."
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image verification failed"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): image "
+#~ "verification skipped, no hash stored"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): checking"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in use:"
+#~ " on this node %(local)d local, "
+#~ "%(remote)d on other nodes"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): warning "
+#~ "-- an absent base file is in "
+#~ "use! instances: %(instance_list)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "%(container_format)s-%(id)s (%(base_file)s): in: on"
+#~ " other nodes (%(remote)d on other "
+#~ "nodes)"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is not in use"
+#~ msgstr ""
+
+#~ msgid "%(container_format)s-%(id)s (%(base_file)s): image is in use"
+#~ msgstr ""
+
+#~ msgid "Created VM %s..."
+#~ msgstr ""
+
+#~ msgid "Created VM %(instance_name)s as %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Creating a CDROM-specific VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Created a CDROM-specific VBD %(vbd_ref)s"
+#~ "  for VM %(vm_ref)s, VDI %(vdi_ref)s."
+#~ msgstr ""
+
+#~ msgid "No primary VDI found for%(vm_ref)s"
+#~ msgstr ""
+
+#~ msgid "Snapshotting VM %(vm_ref)s with label '%(label)s'..."
+#~ msgstr ""
+
+#~ msgid "Created snapshot %(template_vm_ref)s from VM %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Fetching image %(image)s"
+#~ msgstr ""
+
+#~ msgid "Image Type: %s"
+#~ msgstr ""
+
+#~ msgid "ISO: Found sr possibly containing the ISO image"
+#~ msgstr ""
+
+#~ msgid "Size for image %(image)s:%(virtual_size)d"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to fetch glance image"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s ... "
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VDI %s done."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful first time."
+#~ msgstr ""
+
+#~ msgid "VBD.unplug rejected: retrying..."
+#~ msgstr ""
+
+#~ msgid "Not sleeping anymore!"
+#~ msgstr ""
+
+#~ msgid "VBD.unplug successful eventually."
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure in VBD.unplug: %s"
+#~ msgstr ""
+
+#~ msgid "Ignoring XenAPI.Failure %s"
+#~ msgstr ""
+
+#~ msgid "Starting instance %s"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn"
+#~ msgstr ""
+
+#~ msgid "Instance %s failed to spawn - performing clean-up"
+#~ msgstr ""
+
+#~ msgid "instance %s: Failed to spawn - Unable to create VM"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Auto configuring disk for instance "
+#~ "%(instance_uuid)s, attempting to resize "
+#~ "partition..."
+#~ msgstr ""
+
+#~ msgid "Invalid value for injected_files: '%s'"
+#~ msgstr ""
+
+#~ msgid "Starting VM %s..."
+#~ msgstr ""
+
+#~ msgid "Spawning VM %(instance_uuid)s created %(vm_ref)s."
+#~ msgstr ""
+
+#~ msgid "Instance %s: waiting for running"
+#~ msgstr ""
+
+#~ msgid "Instance %s: running"
+#~ msgstr ""
+
+#~ msgid "Resources to remove:%s"
+#~ msgstr ""
+
+#~ msgid "Removing VDI %(vdi_ref)s(uuid:%(vdi_to_remove)s)"
+#~ msgstr ""
+
+#~ msgid "Skipping VDI destroy for %s"
+#~ msgstr ""
+
+#~ msgid "Finished snapshot and upload for VM %s"
+#~ msgstr ""
+
+#~ msgid "Starting snapshot for VM %s"
+#~ msgstr ""
+
+#~ msgid "Unable to Snapshot instance %(instance_uuid)s: %(exc)s"
+#~ msgstr ""
+
+#~ msgid "Updating instance '%(instance_uuid)s' progress to %(progress)d"
+#~ msgstr ""
+
+#~ msgid "Resize instance %s complete"
+#~ msgstr ""
+
+#~ msgid "domid changed from %(olddomid)s to %(newdomid)s"
+#~ msgstr ""
+
+#~ msgid "VM %(instance_uuid)s already halted,skipping shutdown..."
+#~ msgstr ""
+
+#~ msgid "Shutting down VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Destroying VDIs for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "Instance %(instance_uuid)s using RAW or "
+#~ "VHD, skipping kernel and ramdisk "
+#~ "deletion"
+#~ msgstr ""
+
+#~ msgid "Instance %(instance_uuid)s VM destroyed"
+#~ msgstr ""
+
+#~ msgid "Destroying VM for Instance %(instance_uuid)s"
+#~ msgstr ""
+
+#~ msgid "Automatically hard rebooting %d"
+#~ msgstr ""
+
+#~ msgid "Instance for migration %d not found, skipping"
+#~ msgstr ""
+
+#~ msgid "injecting network info to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "creating vif(s) for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid "Creating VIF for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr ""
+
+#~ msgid "Created VIF %(vif_ref)s for VM %(vm_ref)s, network %(network_ref)s."
+#~ msgstr ""
+
+#~ msgid "injecting hostname to xs for vm: |%s|"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The agent call to %(method)s returned"
+#~ " an invalid response: %(ret)r. VM "
+#~ "id=%(instance_uuid)s; path=%(path)s; args=%(addl_args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "TIMEOUT: The call to %(method)s timed"
+#~ " out. VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "NOT IMPLEMENTED: The call to %(method)s"
+#~ " is not supported by the agent. "
+#~ "VM id=%(instance_uuid)s; args=%(args)r"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "The call to %(method)s returned an "
+#~ "error: %(e)s. VM id=%(instance_uuid)s; "
+#~ "args=%(args)r"
+#~ msgstr ""
+
+#~ msgid "Creating VBD for VM %(vm_ref)s, VDI %(vdi_ref)s ... "
+#~ msgstr ""
+
+#~ msgid "Error destroying VDI"
+#~ msgstr ""
+
+#~ msgid "\tVolume %s is NOT VSA volume"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s creation - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE create_volume for %s succeeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s deletion - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s failed"
+#~ msgstr ""
+
+#~ msgid "VSA BE delete_volume for %s suceeded"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s local path call - call discover"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s ensure export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s create export - do nothing"
+#~ msgstr ""
+
+#~ msgid "\tFE VSA Volume %s remove export - do nothing"
+#~ msgstr ""
+
+#~ msgid "VSA BE remove_export for %s failed"
+#~ msgstr ""
+
+#~ msgid "Failed to retrieve QoS info"
+#~ msgstr ""
+
+#~ msgid "invalid drive data"
+#~ msgstr ""
+
+#~ msgid "drive_name not defined"
+#~ msgstr ""
+
+#~ msgid "invalid drive type name %s"
+#~ msgstr ""
+
+#~ msgid "*** Experimental VSA code ***"
+#~ msgstr ""
+
+#~ msgid "Requested number of VCs (%d) is too high. Setting to default"
+#~ msgstr ""
+
+#~ msgid "Creating VSA: %s"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d %(vsa_name)s: Create "
+#~ "volume %(vol_name)s, %(vol_size)d GB, type "
+#~ "%(vol_type_id)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA status to %(status)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Update VSA call"
+#~ msgstr ""
+
+#~ msgid "Adding %(add_cnt)s VCs to VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "Deleting %(del_cnt)s VCs from VSA %(vsa_name)s."
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Deleting %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Unable to delete volume %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Forced delete. %(direction)s volume %(vol_name)s"
+#~ msgstr ""
+
+#~ msgid "Going to try to terminate VSA ID %s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Delete instance %(name)s"
+#~ msgstr ""
+
+#~ msgid "Create call received for VSA %s"
+#~ msgstr ""
+
+#~ msgid "Failed to find VSA %(vsa_id)d"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)s: Drive %(vol_id)s created. Status %(status)s"
+#~ msgstr ""
+
+#~ msgid "Drive %(vol_name)s (%(vol_disp_name)s) still in creating phase - wait"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Not all volumes "
+#~ "are created (%(cvol_real)d of %(cvol_exp)d)"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "VSA ID %(vsa_id)d: Drive %(vol_name)s "
+#~ "(%(vol_disp_name)s) is in %(status)s state"
+#~ msgstr ""
+
+#~ msgid "Failed to update attach status for volume %(vol_name)s. %(ex)s"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Delete all BE volumes"
+#~ msgstr ""
+
+#~ msgid "VSA ID %(vsa_id)d: Start %(vc_count)d instances"
+#~ msgstr ""
+
diff --git a/cinder/log.py b/cinder/log.py
new file mode 100644
index 000000000..2e458659e
--- /dev/null
+++ b/cinder/log.py
@@ -0,0 +1,416 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Cinder logging handler.
+
+This module adds to logging functionality by adding the option to specify
+a context object when calling the various log methods.  If the context object
+is not specified, default formatting is used. Additionally, an instance uuid
+may be passed as part of the log message, which is intended to make it easier
+for admins to find messages related to a specific instance.
+
+It also allows setting of formatting information through flags.
+
+"""
+
+import cStringIO
+import inspect
+import itertools
+import json
+import logging
+import logging.config
+import logging.handlers
+import os
+import stat
+import sys
+import traceback
+
+import cinder
+from cinder import flags
+from cinder.openstack.common import cfg
+from cinder.openstack.common import local
+from cinder import version
+
+
+log_opts = [
+    cfg.StrOpt('logging_context_format_string',
+               default='%(asctime)s %(levelname)s %(name)s [%(request_id)s '
+                       '%(user_id)s %(project_id)s] %(instance)s'
+                       '%(message)s',
+               help='format string to use for log messages with context'),
+    cfg.StrOpt('logging_default_format_string',
+               default='%(asctime)s %(levelname)s %(name)s [-] %(instance)s'
+                       '%(message)s',
+               help='format string to use for log messages without context'),
+    cfg.StrOpt('logging_debug_format_suffix',
+               default='from (pid=%(process)d) %(funcName)s '
+                       '%(pathname)s:%(lineno)d',
+               help='data to append to log format when level is DEBUG'),
+    cfg.StrOpt('logging_exception_prefix',
+               default='%(asctime)s TRACE %(name)s %(instance)s',
+               help='prefix each line of exception output with this format'),
+    cfg.ListOpt('default_log_levels',
+                default=[
+                  'amqplib=WARN',
+                  'sqlalchemy=WARN',
+                  'boto=WARN',
+                  'suds=INFO',
+                  'eventlet.wsgi.server=WARN'
+                  ],
+                help='list of logger=LEVEL pairs'),
+    cfg.BoolOpt('publish_errors',
+                default=False,
+                help='publish error events'),
+
+    # NOTE(mikal): there are two options here because sometimes we are handed
+    # a full instance (and could include more information), and other times we
+    # are just handed a UUID for the instance.
+    cfg.StrOpt('instance_format',
+               default='[instance: %(uuid)s] ',
+               help='If an instance is passed with the log message, format '
+                    'it like this'),
+    cfg.StrOpt('instance_uuid_format',
+               default='[instance: %(uuid)s] ',
+               help='If an instance UUID is passed with the log message, '
+                    'format it like this'),
+    ]
+
+FLAGS = flags.FLAGS
+FLAGS.register_opts(log_opts)
+
+# our new audit level
+# NOTE(jkoelker) Since we synthesized an audit level, make the logging
+#                module aware of it so it acts like other levels.
+logging.AUDIT = logging.INFO + 1
+logging.addLevelName(logging.AUDIT, 'AUDIT')
+
+
+try:
+    NullHandler = logging.NullHandler
+except AttributeError:  # NOTE(jkoelker) NullHandler added in Python 2.7
+    class NullHandler(logging.Handler):
+        def handle(self, record):
+            pass
+
+        def emit(self, record):
+            pass
+
+        def createLock(self):
+            self.lock = None
+
+
+def _dictify_context(context):
+    if context is None:
+        return None
+    if not isinstance(context, dict) and getattr(context, 'to_dict', None):
+        context = context.to_dict()
+    return context
+
+
+def _get_binary_name():
+    return os.path.basename(inspect.stack()[-1][1])
+
+
+def _get_log_file_path(binary=None):
+    logfile = FLAGS.log_file or FLAGS.logfile
+    logdir = FLAGS.log_dir or FLAGS.logdir
+
+    if logfile and not logdir:
+        return logfile
+
+    if logfile and logdir:
+        return os.path.join(logdir, logfile)
+
+    if logdir:
+        binary = binary or _get_binary_name()
+        return '%s.log' % (os.path.join(logdir, binary),)
+
+
+class CinderContextAdapter(logging.LoggerAdapter):
+    warn = logging.LoggerAdapter.warning
+
+    def __init__(self, logger):
+        self.logger = logger
+
+    def audit(self, msg, *args, **kwargs):
+        self.log(logging.AUDIT, msg, *args, **kwargs)
+
+    def process(self, msg, kwargs):
+        if 'extra' not in kwargs:
+            kwargs['extra'] = {}
+        extra = kwargs['extra']
+
+        context = kwargs.pop('context', None)
+        if not context:
+            context = getattr(local.store, 'context', None)
+        if context:
+            extra.update(_dictify_context(context))
+
+        instance = kwargs.pop('instance', None)
+        instance_extra = ''
+        if instance:
+            instance_extra = FLAGS.instance_format % instance
+        else:
+            instance_uuid = kwargs.pop('instance_uuid', None)
+            if instance_uuid:
+                instance_extra = (FLAGS.instance_uuid_format
+                                  % {'uuid': instance_uuid})
+        extra.update({'instance': instance_extra})
+
+        extra.update({"cinder_version": version.version_string_with_vcs()})
+        extra['extra'] = extra.copy()
+        return msg, kwargs
+
+
+class JSONFormatter(logging.Formatter):
+    def __init__(self, fmt=None, datefmt=None):
+        # NOTE(jkoelker) we ignore the fmt argument, but its still there
+        #                since logging.config.fileConfig passes it.
+        self.datefmt = datefmt
+
+    def formatException(self, ei, strip_newlines=True):
+        lines = traceback.format_exception(*ei)
+        if strip_newlines:
+            lines = [itertools.ifilter(lambda x: x,
+                                      line.rstrip().splitlines())
+                    for line in lines]
+            lines = list(itertools.chain(*lines))
+        return lines
+
+    def format(self, record):
+        message = {'message': record.getMessage(),
+                   'asctime': self.formatTime(record, self.datefmt),
+                   'name': record.name,
+                   'msg': record.msg,
+                   'args': record.args,
+                   'levelname': record.levelname,
+                   'levelno': record.levelno,
+                   'pathname': record.pathname,
+                   'filename': record.filename,
+                   'module': record.module,
+                   'lineno': record.lineno,
+                   'funcname': record.funcName,
+                   'created': record.created,
+                   'msecs': record.msecs,
+                   'relative_created': record.relativeCreated,
+                   'thread': record.thread,
+                   'thread_name': record.threadName,
+                   'process_name': record.processName,
+                   'process': record.process,
+                   'traceback': None}
+
+        if hasattr(record, 'extra'):
+            message['extra'] = record.extra
+
+        if record.exc_info:
+            message['traceback'] = self.formatException(record.exc_info)
+
+        return json.dumps(message)
+
+
+class LegacyCinderFormatter(logging.Formatter):
+    """A cinder.context.RequestContext aware formatter configured via flags.
+
+    The flags used to set format strings are: logging_context_format_string
+    and logging_default_format_string.  You can also specify
+    logging_debug_format_suffix to append extra formatting if the log level is
+    debug.
+
+    For information about what variables are available for the formatter see:
+    http://docs.python.org/library/logging.html#formatter
+
+    """
+
+    def format(self, record):
+        """Uses contextstring if request_id is set, otherwise default."""
+        if 'instance' not in record.__dict__:
+            record.__dict__['instance'] = ''
+
+        if record.__dict__.get('request_id', None):
+            self._fmt = FLAGS.logging_context_format_string
+        else:
+            self._fmt = FLAGS.logging_default_format_string
+
+        if (record.levelno == logging.DEBUG and
+            FLAGS.logging_debug_format_suffix):
+            self._fmt += " " + FLAGS.logging_debug_format_suffix
+
+        # Cache this on the record, Logger will respect our formated copy
+        if record.exc_info:
+            record.exc_text = self.formatException(record.exc_info, record)
+        return logging.Formatter.format(self, record)
+
+    def formatException(self, exc_info, record=None):
+        """Format exception output with FLAGS.logging_exception_prefix."""
+        if not record:
+            return logging.Formatter.formatException(self, exc_info)
+
+        stringbuffer = cStringIO.StringIO()
+        traceback.print_exception(exc_info[0], exc_info[1], exc_info[2],
+                                  None, stringbuffer)
+        lines = stringbuffer.getvalue().split('\n')
+        stringbuffer.close()
+
+        if FLAGS.logging_exception_prefix.find('%(asctime)') != -1:
+            record.asctime = self.formatTime(record, self.datefmt)
+
+        formatted_lines = []
+        for line in lines:
+            pl = FLAGS.logging_exception_prefix % record.__dict__
+            fl = '%s%s' % (pl, line)
+            formatted_lines.append(fl)
+        return '\n'.join(formatted_lines)
+
+
+class PublishErrorsHandler(logging.Handler):
+    def emit(self, record):
+        if 'list_notifier_drivers' in FLAGS:
+            if 'cinder.notifier.log_notifier' in FLAGS.list_notifier_drivers:
+                return
+        cinder.notifier.api.notify('cinder.error.publisher',
+                'error_notification',
+                cinder.notifier.api.ERROR,
+                dict(error=record.msg))
+
+
+def handle_exception(type, value, tb):
+    extra = {}
+    if FLAGS.verbose:
+        extra['exc_info'] = (type, value, tb)
+    getLogger().critical(str(value), **extra)
+
+
+def setup():
+    """Setup cinder logging."""
+    sys.excepthook = handle_exception
+
+    if FLAGS.log_config:
+        try:
+            logging.config.fileConfig(FLAGS.log_config)
+        except Exception:
+            traceback.print_exc()
+            raise
+    else:
+        _setup_logging_from_flags()
+
+
+def _find_facility_from_flags():
+    facility_names = logging.handlers.SysLogHandler.facility_names
+    facility = getattr(logging.handlers.SysLogHandler,
+                       FLAGS.syslog_log_facility,
+                       None)
+
+    if facility is None and FLAGS.syslog_log_facility in facility_names:
+        facility = facility_names.get(FLAGS.syslog_log_facility)
+
+    if facility is None:
+        valid_facilities = facility_names.keys()
+        consts = ['LOG_AUTH', 'LOG_AUTHPRIV', 'LOG_CRON', 'LOG_DAEMON',
+                  'LOG_FTP', 'LOG_KERN', 'LOG_LPR', 'LOG_MAIL', 'LOG_NEWS',
+                  'LOG_AUTH', 'LOG_SYSLOG', 'LOG_USER', 'LOG_UUCP',
+                  'LOG_LOCAL0', 'LOG_LOCAL1', 'LOG_LOCAL2', 'LOG_LOCAL3',
+                  'LOG_LOCAL4', 'LOG_LOCAL5', 'LOG_LOCAL6', 'LOG_LOCAL7']
+        valid_facilities.extend(consts)
+        raise TypeError(_('syslog facility must be one of: %s') %
+                        ', '.join("'%s'" % fac
+                                  for fac in valid_facilities))
+
+    return facility
+
+
+def _setup_logging_from_flags():
+    cinder_root = getLogger().logger
+    for handler in cinder_root.handlers:
+        cinder_root.removeHandler(handler)
+
+    if FLAGS.use_syslog:
+        facility = _find_facility_from_flags()
+        syslog = logging.handlers.SysLogHandler(address='/dev/log',
+                                                facility=facility)
+        cinder_root.addHandler(syslog)
+
+    logpath = _get_log_file_path()
+    if logpath:
+        filelog = logging.handlers.WatchedFileHandler(logpath)
+        cinder_root.addHandler(filelog)
+
+        mode = int(FLAGS.logfile_mode, 8)
+        st = os.stat(logpath)
+        if st.st_mode != (stat.S_IFREG | mode):
+            os.chmod(logpath, mode)
+
+    if FLAGS.use_stderr:
+        streamlog = logging.StreamHandler()
+        cinder_root.addHandler(streamlog)
+
+    elif not FLAGS.log_file:
+        streamlog = logging.StreamHandler(stream=sys.stdout)
+        cinder_root.addHandler(streamlog)
+
+    if FLAGS.publish_errors:
+        cinder_root.addHandler(PublishErrorsHandler(logging.ERROR))
+
+    for handler in cinder_root.handlers:
+        datefmt = FLAGS.log_date_format
+        if FLAGS.log_format:
+            handler.setFormatter(logging.Formatter(fmt=FLAGS.log_format,
+                                                   datefmt=datefmt))
+        handler.setFormatter(LegacyCinderFormatter(datefmt=datefmt))
+
+    if FLAGS.verbose or FLAGS.debug:
+        cinder_root.setLevel(logging.DEBUG)
+    else:
+        cinder_root.setLevel(logging.INFO)
+
+    level = logging.NOTSET
+    for pair in FLAGS.default_log_levels:
+        mod, _sep, level_name = pair.partition('=')
+        level = logging.getLevelName(level_name)
+        logger = logging.getLogger(mod)
+        logger.setLevel(level)
+
+    # NOTE(jkoelker) Clear the handlers for the root logger that was setup
+    #                by basicConfig in cinder/__init__.py and install the
+    #                NullHandler.
+    root = logging.getLogger()
+    for handler in root.handlers:
+        root.removeHandler(handler)
+    handler = NullHandler()
+    handler.setFormatter(logging.Formatter())
+    root.addHandler(handler)
+
+
+_loggers = {}
+
+
+def getLogger(name='cinder'):
+    if name not in _loggers:
+        _loggers[name] = CinderContextAdapter(logging.getLogger(name))
+    return _loggers[name]
+
+
+class WritableLogger(object):
+    """A thin wrapper that responds to `write` and logs."""
+
+    def __init__(self, logger, level=logging.INFO):
+        self.logger = logger
+        self.level = level
+
+    def write(self, msg):
+        self.logger.log(self.level, msg)
diff --git a/cinder/manager.py b/cinder/manager.py
new file mode 100644
index 000000000..9609e3906
--- /dev/null
+++ b/cinder/manager.py
@@ -0,0 +1,205 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Base Manager class.
+
+Managers are responsible for a certain aspect of the system.  It is a logical
+grouping of code relating to a portion of the system.  In general other
+components should be using the manager to make changes to the components that
+it is responsible for.
+
+For example, other components that need to deal with volumes in some way,
+should do so by calling methods on the VolumeManager instead of directly
+changing fields in the database.  This allows us to keep all of the code
+relating to volumes in the same place.
+
+We have adopted a basic strategy of Smart managers and dumb data, which means
+rather than attaching methods to data objects, components should call manager
+methods that act on the data.
+
+Methods on managers that can be executed locally should be called directly. If
+a particular method must execute on a remote host, this should be done via rpc
+to the service that wraps the manager
+
+Managers should be responsible for most of the db access, and
+non-implementation specific data.  Anything implementation specific that can't
+be generalized should be done by the Driver.
+
+In general, we prefer to have one manager with multiple drivers for different
+implementations, but sometimes it makes sense to have multiple managers.  You
+can think of it this way: Abstract different overall strategies at the manager
+level(FlatNetwork vs VlanNetwork), and different implementations at the driver
+level(LinuxNetDriver vs CiscoNetDriver).
+
+Managers will often provide methods for initial setup of a host or periodic
+tasks to a wrapping service.
+
+This module provides Manager, a base class for managers.
+
+"""
+
+from cinder.db import base
+from cinder import flags
+from cinder import log as logging
+from cinder.scheduler import api
+from cinder import version
+
+
+FLAGS = flags.FLAGS
+
+
+LOG = logging.getLogger(__name__)
+
+
+def periodic_task(*args, **kwargs):
+    """Decorator to indicate that a method is a periodic task.
+
+    This decorator can be used in two ways:
+
+        1. Without arguments '@periodic_task', this will be run on every tick
+           of the periodic scheduler.
+
+        2. With arguments, @periodic_task(ticks_between_runs=N), this will be
+           run on every N ticks of the periodic scheduler.
+    """
+    def decorator(f):
+        f._periodic_task = True
+        f._ticks_between_runs = kwargs.pop('ticks_between_runs', 0)
+        return f
+
+    # NOTE(sirp): The `if` is necessary to allow the decorator to be used with
+    # and without parens.
+    #
+    # In the 'with-parens' case (with kwargs present), this function needs to
+    # return a decorator function since the interpreter will invoke it like:
+    #
+    #   periodic_task(*args, **kwargs)(f)
+    #
+    # In the 'without-parens' case, the original function will be passed
+    # in as the first argument, like:
+    #
+    #   periodic_task(f)
+    if kwargs:
+        return decorator
+    else:
+        return decorator(args[0])
+
+
+class ManagerMeta(type):
+    def __init__(cls, names, bases, dict_):
+        """Metaclass that allows us to collect decorated periodic tasks."""
+        super(ManagerMeta, cls).__init__(names, bases, dict_)
+
+        # NOTE(sirp): if the attribute is not present then we must be the base
+        # class, so, go ahead an initialize it. If the attribute is present,
+        # then we're a subclass so make a copy of it so we don't step on our
+        # parent's toes.
+        try:
+            cls._periodic_tasks = cls._periodic_tasks[:]
+        except AttributeError:
+            cls._periodic_tasks = []
+
+        try:
+            cls._ticks_to_skip = cls._ticks_to_skip.copy()
+        except AttributeError:
+            cls._ticks_to_skip = {}
+
+        for value in cls.__dict__.values():
+            if getattr(value, '_periodic_task', False):
+                task = value
+                name = task.__name__
+                cls._periodic_tasks.append((name, task))
+                cls._ticks_to_skip[name] = task._ticks_between_runs
+
+
+class Manager(base.Base):
+    __metaclass__ = ManagerMeta
+
+    def __init__(self, host=None, db_driver=None):
+        if not host:
+            host = FLAGS.host
+        self.host = host
+        super(Manager, self).__init__(db_driver)
+
+    def periodic_tasks(self, context, raise_on_error=False):
+        """Tasks to be run at a periodic interval."""
+        for task_name, task in self._periodic_tasks:
+            full_task_name = '.'.join([self.__class__.__name__, task_name])
+
+            ticks_to_skip = self._ticks_to_skip[task_name]
+            if ticks_to_skip > 0:
+                LOG.debug(_("Skipping %(full_task_name)s, %(ticks_to_skip)s"
+                            " ticks left until next run"), locals())
+                self._ticks_to_skip[task_name] -= 1
+                continue
+
+            self._ticks_to_skip[task_name] = task._ticks_between_runs
+            LOG.debug(_("Running periodic task %(full_task_name)s"), locals())
+
+            try:
+                task(self, context)
+            except Exception as e:
+                if raise_on_error:
+                    raise
+                LOG.exception(_("Error during %(full_task_name)s: %(e)s"),
+                              locals())
+
+    def init_host(self):
+        """Handle initialization if this is a standalone service.
+
+        Child classes should override this method.
+
+        """
+        pass
+
+    def service_version(self, context):
+        return version.version_string()
+
+    def service_config(self, context):
+        config = {}
+        for key in FLAGS:
+            config[key] = FLAGS.get(key, None)
+        return config
+
+
+class SchedulerDependentManager(Manager):
+    """Periodically send capability updates to the Scheduler services.
+
+    Services that need to update the Scheduler of their capabilities
+    should derive from this class. Otherwise they can derive from
+    manager.Manager directly. Updates are only sent after
+    update_service_capabilities is called with non-None values.
+
+    """
+
+    def __init__(self, host=None, db_driver=None, service_name='undefined'):
+        self.last_capabilities = None
+        self.service_name = service_name
+        super(SchedulerDependentManager, self).__init__(host, db_driver)
+
+    def update_service_capabilities(self, capabilities):
+        """Remember these capabilities to send on next periodic update."""
+        self.last_capabilities = capabilities
+
+    @periodic_task
+    def _publish_service_capabilities(self, context):
+        """Pass data back to the scheduler at a periodic interval."""
+        if self.last_capabilities:
+            LOG.debug(_('Notifying Schedulers of capabilities ...'))
+            api.update_service_capabilities(context, self.service_name,
+                                self.host, self.last_capabilities)
diff --git a/cinder/notifier/__init__.py b/cinder/notifier/__init__.py
new file mode 100644
index 000000000..482d54e4f
--- /dev/null
+++ b/cinder/notifier/__init__.py
@@ -0,0 +1,14 @@
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
diff --git a/cinder/notifier/api.py b/cinder/notifier/api.py
new file mode 100644
index 000000000..27c9e8421
--- /dev/null
+++ b/cinder/notifier/api.py
@@ -0,0 +1,133 @@
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import uuid
+
+from cinder import flags
+from cinder import utils
+from cinder import log as logging
+from cinder.openstack.common import cfg
+from cinder.openstack.common import importutils
+
+
+LOG = logging.getLogger(__name__)
+
+notifier_opts = [
+    cfg.StrOpt('default_notification_level',
+               default='INFO',
+               help='Default notification level for outgoing notifications'),
+    cfg.StrOpt('default_publisher_id',
+               default='$host',
+               help='Default publisher_id for outgoing notifications'),
+    ]
+
+FLAGS = flags.FLAGS
+FLAGS.register_opts(notifier_opts)
+
+WARN = 'WARN'
+INFO = 'INFO'
+ERROR = 'ERROR'
+CRITICAL = 'CRITICAL'
+DEBUG = 'DEBUG'
+
+log_levels = (DEBUG, WARN, INFO, ERROR, CRITICAL)
+
+
+class BadPriorityException(Exception):
+    pass
+
+
+def notify_decorator(name, fn):
+    """ decorator for notify which is used from utils.monkey_patch()
+
+        :param name: name of the function
+        :param function: - object of the function
+        :returns: function -- decorated function
+
+    """
+    def wrapped_func(*args, **kwarg):
+        body = {}
+        body['args'] = []
+        body['kwarg'] = {}
+        for arg in args:
+            body['args'].append(arg)
+        for key in kwarg:
+            body['kwarg'][key] = kwarg[key]
+        notify(FLAGS.default_publisher_id,
+                            name,
+                            FLAGS.default_notification_level,
+                            body)
+        return fn(*args, **kwarg)
+    return wrapped_func
+
+
+def publisher_id(service, host=None):
+    if not host:
+        host = FLAGS.host
+    return "%s.%s" % (service, host)
+
+
+def notify(publisher_id, event_type, priority, payload):
+    """Sends a notification using the specified driver
+
+    :param publisher_id: the source worker_type.host of the message
+    :param event_type:   the literal type of event (ex. Instance Creation)
+    :param priority:     patterned after the enumeration of Python logging
+                         levels in the set (DEBUG, WARN, INFO, ERROR, CRITICAL)
+    :param payload:       A python dictionary of attributes
+
+    Outgoing message format includes the above parameters, and appends the
+    following:
+
+    message_id
+      a UUID representing the id for this notification
+
+    timestamp
+      the GMT timestamp the notification was sent at
+
+    The composite message will be constructed as a dictionary of the above
+    attributes, which will then be sent via the transport mechanism defined
+    by the driver.
+
+    Message example::
+
+        {'message_id': str(uuid.uuid4()),
+         'publisher_id': 'compute.host1',
+         'timestamp': utils.utcnow(),
+         'priority': 'WARN',
+         'event_type': 'compute.create_instance',
+         'payload': {'instance_id': 12, ... }}
+
+    """
+    if priority not in log_levels:
+        raise BadPriorityException(
+                 _('%s not in valid priorities') % priority)
+
+    # Ensure everything is JSON serializable.
+    payload = utils.to_primitive(payload, convert_instances=True)
+
+    driver = importutils.import_module(FLAGS.notification_driver)
+    msg = dict(message_id=str(uuid.uuid4()),
+                   publisher_id=publisher_id,
+                   event_type=event_type,
+                   priority=priority,
+                   payload=payload,
+                   timestamp=str(utils.utcnow()))
+    try:
+        driver.notify(msg)
+    except Exception, e:
+        LOG.exception(_("Problem '%(e)s' attempting to "
+                        "send to notification system. Payload=%(payload)s") %
+                        locals())
diff --git a/cinder/notifier/capacity_notifier.py b/cinder/notifier/capacity_notifier.py
new file mode 100644
index 000000000..9cdbb72d0
--- /dev/null
+++ b/cinder/notifier/capacity_notifier.py
@@ -0,0 +1,81 @@
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from cinder import context
+from cinder import db
+from cinder import log as logging
+
+
+LOG = logging.getLogger(__name__)
+
+
+def notify(message):
+    """Look for specific compute manager events and interprete them
+    so as to keep the Capacity table up to date.
+
+    NOTE: the True/False return codes are only for testing.
+    """
+
+    # The event_type must start with 'compute.instance.'
+    event_type = message.get('event_type', None)
+    preamble = 'compute.instance.'
+    if not event_type or not event_type.startswith(preamble):
+        return False
+
+    # Events we're interested in end with .start and .end
+    event = event_type[len(preamble):]
+    parts = event.split('.')
+    suffix = parts[-1].lower()
+    event = event[:(-len(suffix) - 1)]
+
+    if suffix not in ['start', 'end']:
+        return False
+    started = suffix == 'start'
+    ended = suffix == 'end'
+
+    if started and event == 'create':
+        # We've already updated this stuff in the scheduler. Don't redo the
+        # work here.
+        return False
+
+    work = 1 if started else -1
+
+    # Extract the host name from the publisher id ...
+    publisher_preamble = 'compute.'
+    publisher = message.get('publisher_id', None)
+    if not publisher or not publisher.startswith(publisher_preamble):
+        return False
+    host = publisher[len(publisher_preamble):]
+
+    # If we deleted an instance, make sure we reclaim the resources.
+    # We may need to do something explicit for rebuild/migrate.
+    free_ram_mb = 0
+    free_disk_gb = 0
+    vms = 0
+    if ended and event == 'delete':
+        vms = -1
+        payload = message.get('payload', {})
+        free_ram_mb = payload.get('memory_mb', 0)
+        free_disk_gb = payload.get('disk_gb', 0)
+
+    LOG.debug("EventType=%(event_type)s -> host %(host)s: "
+              "ram %(free_ram_mb)d, disk %(free_disk_gb)d, "
+              "work %(work)d, vms%(vms)d" % locals())
+
+    db.api.compute_node_utilization_update(context.get_admin_context(), host,
+        free_ram_mb_delta=free_ram_mb, free_disk_gb_delta=free_disk_gb,
+        work_delta=work, vm_delta=vms)
+
+    return True
diff --git a/cinder/notifier/list_notifier.py b/cinder/notifier/list_notifier.py
new file mode 100644
index 000000000..665fad262
--- /dev/null
+++ b/cinder/notifier/list_notifier.py
@@ -0,0 +1,71 @@
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from cinder import flags
+from cinder import log as logging
+from cinder.openstack.common import cfg
+from cinder.openstack.common import exception as common_exception
+from cinder.openstack.common import importutils
+
+
+list_notifier_drivers_opt = cfg.MultiStrOpt('list_notifier_drivers',
+        default=['cinder.notifier.no_op_notifier'],
+        help='List of drivers to send notifications')
+
+FLAGS = flags.FLAGS
+FLAGS.register_opt(list_notifier_drivers_opt)
+
+LOG = logging.getLogger(__name__)
+
+drivers = None
+
+
+class ImportFailureNotifier(object):
+    """Noisily re-raises some exception over-and-over when notify is called."""
+
+    def __init__(self, exception):
+        self.exception = exception
+
+    def notify(self, message):
+        raise self.exception
+
+
+def _get_drivers():
+    """Instantiates and returns drivers based on the flag values."""
+    global drivers
+    if not drivers:
+        drivers = []
+        for notification_driver in FLAGS.list_notifier_drivers:
+            try:
+                drivers.append(importutils.import_module(notification_driver))
+            except ImportError as e:
+                drivers.append(ImportFailureNotifier(e))
+    return drivers
+
+
+def notify(message):
+    """Passes notification to multiple notifiers in a list."""
+    for driver in _get_drivers():
+        try:
+            driver.notify(message)
+        except Exception as e:
+            LOG.exception(_("Problem '%(e)s' attempting to send to "
+                            "notification driver %(driver)s."), locals())
+
+
+def _reset_drivers():
+    """Used by unit tests to reset the drivers."""
+    global drivers
+    drivers = None
diff --git a/cinder/notifier/log_notifier.py b/cinder/notifier/log_notifier.py
new file mode 100644
index 000000000..8bd78c016
--- /dev/null
+++ b/cinder/notifier/log_notifier.py
@@ -0,0 +1,34 @@
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import json
+
+from cinder import flags
+from cinder import log as logging
+
+
+FLAGS = flags.FLAGS
+
+
+def notify(message):
+    """Notifies the recipient of the desired event given the model.
+    Log notifications using cinder's default logging system"""
+
+    priority = message.get('priority',
+                           FLAGS.default_notification_level)
+    priority = priority.lower()
+    logger = logging.getLogger(
+            'cinder.notification.%s' % message['event_type'])
+    getattr(logger, priority)(json.dumps(message))
diff --git a/cinder/notifier/no_op_notifier.py b/cinder/notifier/no_op_notifier.py
new file mode 100644
index 000000000..029710505
--- /dev/null
+++ b/cinder/notifier/no_op_notifier.py
@@ -0,0 +1,19 @@
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+
+def notify(message):
+    """Notifies the recipient of the desired event given the model"""
+    pass
diff --git a/cinder/notifier/rabbit_notifier.py b/cinder/notifier/rabbit_notifier.py
new file mode 100644
index 000000000..0b2942a28
--- /dev/null
+++ b/cinder/notifier/rabbit_notifier.py
@@ -0,0 +1,46 @@
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+
+import cinder.context
+
+from cinder import flags
+from cinder import log as logging
+from cinder.openstack.common import cfg
+from cinder import rpc
+
+LOG = logging.getLogger(__name__)
+
+notification_topic_opt = cfg.ListOpt('notification_topics',
+        default=['notifications', ],
+        help='AMQP topic used for Cinder notifications')
+
+FLAGS = flags.FLAGS
+FLAGS.register_opt(notification_topic_opt)
+
+
+def notify(message):
+    """Sends a notification to the RabbitMQ"""
+    context = cinder.context.get_admin_context()
+    priority = message.get('priority',
+                           FLAGS.default_notification_level)
+    priority = priority.lower()
+    for topic in FLAGS.notification_topics:
+        topic = '%s.%s' % (topic, priority)
+        try:
+            rpc.notify(context, topic, message)
+        except Exception, e:
+            LOG.exception(_("Could not send notification to %(topic)s. "
+                            "Payload=%(message)s"), locals())
diff --git a/cinder/notifier/test_notifier.py b/cinder/notifier/test_notifier.py
new file mode 100644
index 000000000..6624a90aa
--- /dev/null
+++ b/cinder/notifier/test_notifier.py
@@ -0,0 +1,25 @@
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from cinder import flags
+
+FLAGS = flags.FLAGS
+
+NOTIFICATIONS = []
+
+
+def notify(message):
+    """Test notifier, stores notifications in memory for unittests."""
+    NOTIFICATIONS.append(message)
diff --git a/cinder/openstack/__init__.py b/cinder/openstack/__init__.py
new file mode 100644
index 000000000..0a3b98867
--- /dev/null
+++ b/cinder/openstack/__init__.py
@@ -0,0 +1,15 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 Red Hat, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
diff --git a/cinder/openstack/common/README b/cinder/openstack/common/README
new file mode 100644
index 000000000..def4a172a
--- /dev/null
+++ b/cinder/openstack/common/README
@@ -0,0 +1,13 @@
+openstack-common
+----------------
+
+A number of modules from openstack-common are imported into this project.
+
+These modules are "incubating" in openstack-common and are kept in sync
+with the help of openstack-common's update.py script. See:
+
+  http://wiki.openstack.org/CommonLibrary#Incubation
+
+The copy of the code should never be directly modified here. Please
+always update openstack-common first and then run the script to copy
+the changes across.
diff --git a/cinder/openstack/common/__init__.py b/cinder/openstack/common/__init__.py
new file mode 100644
index 000000000..0a3b98867
--- /dev/null
+++ b/cinder/openstack/common/__init__.py
@@ -0,0 +1,15 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 Red Hat, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
diff --git a/cinder/openstack/common/cfg.py b/cinder/openstack/common/cfg.py
new file mode 100644
index 000000000..85aafec9e
--- /dev/null
+++ b/cinder/openstack/common/cfg.py
@@ -0,0 +1,1298 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 Red Hat, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+r"""
+Configuration options which may be set on the command line or in config files.
+
+The schema for each option is defined using the Opt sub-classes, e.g.:
+
+::
+
+    common_opts = [
+        cfg.StrOpt('bind_host',
+                   default='0.0.0.0',
+                   help='IP address to listen on'),
+        cfg.IntOpt('bind_port',
+                   default=9292,
+                   help='Port number to listen on')
+    ]
+
+Options can be strings, integers, floats, booleans, lists or 'multi strings'::
+
+    enabled_apis_opt = cfg.ListOpt('enabled_apis',
+                                   default=['ec2', 'osapi_compute'],
+                                   help='List of APIs to enable by default')
+
+    DEFAULT_EXTENSIONS = [
+        'cinder.api.openstack.compute.contrib.standard_extensions'
+    ]
+    osapi_compute_extension_opt = cfg.MultiStrOpt('osapi_compute_extension',
+                                                  default=DEFAULT_EXTENSIONS)
+
+Option schemas are registered with with the config manager at runtime, but
+before the option is referenced::
+
+    class ExtensionManager(object):
+
+        enabled_apis_opt = cfg.ListOpt(...)
+
+        def __init__(self, conf):
+            self.conf = conf
+            self.conf.register_opt(enabled_apis_opt)
+            ...
+
+        def _load_extensions(self):
+            for ext_factory in self.conf.osapi_compute_extension:
+                ....
+
+A common usage pattern is for each option schema to be defined in the module or
+class which uses the option::
+
+    opts = ...
+
+    def add_common_opts(conf):
+        conf.register_opts(opts)
+
+    def get_bind_host(conf):
+        return conf.bind_host
+
+    def get_bind_port(conf):
+        return conf.bind_port
+
+An option may optionally be made available via the command line. Such options
+must registered with the config manager before the command line is parsed (for
+the purposes of --help and CLI arg validation)::
+
+    cli_opts = [
+        cfg.BoolOpt('verbose',
+                    short='v',
+                    default=False,
+                    help='Print more verbose output'),
+        cfg.BoolOpt('debug',
+                    short='d',
+                    default=False,
+                    help='Print debugging output'),
+    ]
+
+    def add_common_opts(conf):
+        conf.register_cli_opts(cli_opts)
+
+The config manager has a single CLI option defined by default, --config-file::
+
+    class ConfigOpts(object):
+
+        config_file_opt = MultiStrOpt('config-file',
+                                      ...
+
+        def __init__(self, ...):
+            ...
+            self.register_cli_opt(self.config_file_opt)
+
+Option values are parsed from any supplied config files using
+openstack.common.iniparser. If none are specified, a default set is used
+e.g. glance-api.conf and glance-common.conf::
+
+    glance-api.conf:
+      [DEFAULT]
+      bind_port = 9292
+
+    glance-common.conf:
+      [DEFAULT]
+      bind_host = 0.0.0.0
+
+Option values in config files override those on the command line. Config files
+are parsed in order, with values in later files overriding those in earlier
+files.
+
+The parsing of CLI args and config files is initiated by invoking the config
+manager e.g.::
+
+    conf = ConfigOpts()
+    conf.register_opt(BoolOpt('verbose', ...))
+    conf(sys.argv[1:])
+    if conf.verbose:
+        ...
+
+Options can be registered as belonging to a group::
+
+    rabbit_group = cfg.OptGroup(name='rabbit',
+                                title='RabbitMQ options')
+
+    rabbit_host_opt = cfg.StrOpt('host',
+                                 default='localhost',
+                                 help='IP/hostname to listen on'),
+    rabbit_port_opt = cfg.IntOpt('port',
+                                 default=5672,
+                                 help='Port number to listen on')
+
+    def register_rabbit_opts(conf):
+        conf.register_group(rabbit_group)
+        # options can be registered under a group in either of these ways:
+        conf.register_opt(rabbit_host_opt, group=rabbit_group)
+        conf.register_opt(rabbit_port_opt, group='rabbit')
+
+If no group is specified, options belong to the 'DEFAULT' section of config
+files::
+
+    glance-api.conf:
+      [DEFAULT]
+      bind_port = 9292
+      ...
+
+      [rabbit]
+      host = localhost
+      port = 5672
+      use_ssl = False
+      userid = guest
+      password = guest
+      virtual_host = /
+
+Command-line options in a group are automatically prefixed with the
+group name::
+
+    --rabbit-host localhost --rabbit-port 9999
+
+Option values in the default group are referenced as attributes/properties on
+the config manager; groups are also attributes on the config manager, with
+attributes for each of the options associated with the group::
+
+    server.start(app, conf.bind_port, conf.bind_host, conf)
+
+    self.connection = kombu.connection.BrokerConnection(
+        hostname=conf.rabbit.host,
+        port=conf.rabbit.port,
+        ...)
+
+Option values may reference other values using PEP 292 string substitution::
+
+    opts = [
+        cfg.StrOpt('state_path',
+                   default=os.path.join(os.path.dirname(__file__), '../'),
+                   help='Top-level directory for maintaining cinder state'),
+        cfg.StrOpt('sqlite_db',
+                   default='cinder.sqlite',
+                   help='file name for sqlite'),
+        cfg.StrOpt('sql_connection',
+                   default='sqlite:///$state_path/$sqlite_db',
+                   help='connection string for sql database'),
+    ]
+
+Note that interpolation can be avoided by using '$$'.
+
+For command line utilities that dispatch to other command line utilities, the
+disable_interspersed_args() method is available. If this this method is called,
+then parsing e.g.::
+
+  script --verbose cmd --debug /tmp/mything
+
+will no longer return::
+
+  ['cmd', '/tmp/mything']
+
+as the leftover arguments, but will instead return::
+
+  ['cmd', '--debug', '/tmp/mything']
+
+i.e. argument parsing is stopped at the first non-option argument.
+
+Options may be declared as secret so that their values are not leaked into
+log files:
+
+     opts = [
+        cfg.StrOpt('s3_store_access_key', secret=True),
+        cfg.StrOpt('s3_store_secret_key', secret=True),
+        ...
+     ]
+
+"""
+
+import collections
+import copy
+import optparse
+import os
+import string
+import sys
+
+from cinder.openstack.common import iniparser
+
+
+class Error(Exception):
+    """Base class for cfg exceptions."""
+
+    def __init__(self, msg=None):
+        self.msg = msg
+
+    def __str__(self):
+        return self.msg
+
+
+class ArgsAlreadyParsedError(Error):
+    """Raised if a CLI opt is registered after parsing."""
+
+    def __str__(self):
+        ret = "arguments already parsed"
+        if self.msg:
+            ret += ": " + self.msg
+        return ret
+
+
+class NoSuchOptError(Error, AttributeError):
+    """Raised if an opt which doesn't exist is referenced."""
+
+    def __init__(self, opt_name, group=None):
+        self.opt_name = opt_name
+        self.group = group
+
+    def __str__(self):
+        if self.group is None:
+            return "no such option: %s" % self.opt_name
+        else:
+            return "no such option in group %s: %s" % (self.group.name,
+                                                       self.opt_name)
+
+
+class NoSuchGroupError(Error):
+    """Raised if a group which doesn't exist is referenced."""
+
+    def __init__(self, group_name):
+        self.group_name = group_name
+
+    def __str__(self):
+        return "no such group: %s" % self.group_name
+
+
+class DuplicateOptError(Error):
+    """Raised if multiple opts with the same name are registered."""
+
+    def __init__(self, opt_name):
+        self.opt_name = opt_name
+
+    def __str__(self):
+        return "duplicate option: %s" % self.opt_name
+
+
+class TemplateSubstitutionError(Error):
+    """Raised if an error occurs substituting a variable in an opt value."""
+
+    def __str__(self):
+        return "template substitution error: %s" % self.msg
+
+
+class ConfigFilesNotFoundError(Error):
+    """Raised if one or more config files are not found."""
+
+    def __init__(self, config_files):
+        self.config_files = config_files
+
+    def __str__(self):
+        return ('Failed to read some config files: %s' %
+                string.join(self.config_files, ','))
+
+
+class ConfigFileParseError(Error):
+    """Raised if there is an error parsing a config file."""
+
+    def __init__(self, config_file, msg):
+        self.config_file = config_file
+        self.msg = msg
+
+    def __str__(self):
+        return 'Failed to parse %s: %s' % (self.config_file, self.msg)
+
+
+class ConfigFileValueError(Error):
+    """Raised if a config file value does not match its opt type."""
+    pass
+
+
+def find_config_files(project=None, prog=None):
+    """Return a list of default configuration files.
+
+    :param project: an optional project name
+    :param prog: the program name, defaulting to the basename of sys.argv[0]
+
+    We default to two config files: [${project}.conf, ${prog}.conf]
+
+    And we look for those config files in the following directories::
+
+      ~/.${project}/
+      ~/
+      /etc/${project}/
+      /etc/
+
+    We return an absolute path for (at most) one of each the default config
+    files, for the topmost directory it exists in.
+
+    For example, if project=foo, prog=bar and /etc/foo/foo.conf, /etc/bar.conf
+    and ~/.foo/bar.conf all exist, then we return ['/etc/foo/foo.conf',
+    '~/.foo/bar.conf']
+
+    If no project name is supplied, we only look for ${prog.conf}.
+    """
+    if prog is None:
+        prog = os.path.basename(sys.argv[0])
+
+    fix_path = lambda p: os.path.abspath(os.path.expanduser(p))
+
+    cfg_dirs = [
+        fix_path(os.path.join('~', '.' + project)) if project else None,
+        fix_path('~'),
+        os.path.join('/etc', project) if project else None,
+        '/etc'
+        ]
+    cfg_dirs = filter(bool, cfg_dirs)
+
+    def search_dirs(dirs, basename):
+        for d in dirs:
+            path = os.path.join(d, basename)
+            if os.path.exists(path):
+                return path
+
+    config_files = []
+    if project:
+        config_files.append(search_dirs(cfg_dirs, '%s.conf' % project))
+    config_files.append(search_dirs(cfg_dirs, '%s.conf' % prog))
+
+    return filter(bool, config_files)
+
+
+def _is_opt_registered(opts, opt):
+    """Check whether an opt with the same name is already registered.
+
+    The same opt may be registered multiple times, with only the first
+    registration having any effect. However, it is an error to attempt
+    to register a different opt with the same name.
+
+    :param opts: the set of opts already registered
+    :param opt: the opt to be registered
+    :returns: True if the opt was previously registered, False otherwise
+    :raises: DuplicateOptError if a naming conflict is detected
+    """
+    if opt.dest in opts:
+        if opts[opt.dest]['opt'] is not opt:
+            raise DuplicateOptError(opt.name)
+        return True
+    else:
+        return False
+
+
+class Opt(object):
+
+    """Base class for all configuration options.
+
+    An Opt object has no public methods, but has a number of public string
+    properties:
+
+      name:
+        the name of the option, which may include hyphens
+      dest:
+        the (hyphen-less) ConfigOpts property which contains the option value
+      short:
+        a single character CLI option name
+      default:
+        the default value of the option
+      metavar:
+        the name shown as the argument to a CLI option in --help output
+      help:
+        an string explaining how the options value is used
+    """
+    multi = False
+
+    def __init__(self, name, dest=None, short=None, default=None,
+                 metavar=None, help=None, secret=False):
+        """Construct an Opt object.
+
+        The only required parameter is the option's name. However, it is
+        common to also supply a default and help string for all options.
+
+        :param name: the option's name
+        :param dest: the name of the corresponding ConfigOpts property
+        :param short: a single character CLI option name
+        :param default: the default value of the option
+        :param metavar: the option argument to show in --help
+        :param help: an explanation of how the option is used
+        :param secret: true iff the value should be obfuscated in log output
+        """
+        self.name = name
+        if dest is None:
+            self.dest = self.name.replace('-', '_')
+        else:
+            self.dest = dest
+        self.short = short
+        self.default = default
+        self.metavar = metavar
+        self.help = help
+        self.secret = secret
+
+    def _get_from_config_parser(self, cparser, section):
+        """Retrieves the option value from a MultiConfigParser object.
+
+        This is the method ConfigOpts uses to look up the option value from
+        config files. Most opt types override this method in order to perform
+        type appropriate conversion of the returned value.
+
+        :param cparser: a ConfigParser object
+        :param section: a section name
+        """
+        return cparser.get(section, self.dest)
+
+    def _add_to_cli(self, parser, group=None):
+        """Makes the option available in the command line interface.
+
+        This is the method ConfigOpts uses to add the opt to the CLI interface
+        as appropriate for the opt type. Some opt types may extend this method,
+        others may just extend the helper methods it uses.
+
+        :param parser: the CLI option parser
+        :param group: an optional OptGroup object
+        """
+        container = self._get_optparse_container(parser, group)
+        kwargs = self._get_optparse_kwargs(group)
+        prefix = self._get_optparse_prefix('', group)
+        self._add_to_optparse(container, self.name, self.short, kwargs, prefix)
+
+    def _add_to_optparse(self, container, name, short, kwargs, prefix=''):
+        """Add an option to an optparse parser or group.
+
+        :param container: an optparse.OptionContainer object
+        :param name: the opt name
+        :param short: the short opt name
+        :param kwargs: the keyword arguments for add_option()
+        :param prefix: an optional prefix to prepend to the opt name
+        :raises: DuplicateOptError if a naming confict is detected
+        """
+        args = ['--' + prefix + name]
+        if short:
+            args += ['-' + short]
+        for a in args:
+            if container.has_option(a):
+                raise DuplicateOptError(a)
+        container.add_option(*args, **kwargs)
+
+    def _get_optparse_container(self, parser, group):
+        """Returns an optparse.OptionContainer.
+
+        :param parser: an optparse.OptionParser
+        :param group: an (optional) OptGroup object
+        :returns: an optparse.OptionGroup if a group is given, else the parser
+        """
+        if group is not None:
+            return group._get_optparse_group(parser)
+        else:
+            return parser
+
+    def _get_optparse_kwargs(self, group, **kwargs):
+        """Build a dict of keyword arguments for optparse's add_option().
+
+        Most opt types extend this method to customize the behaviour of the
+        options added to optparse.
+
+        :param group: an optional group
+        :param kwargs: optional keyword arguments to add to
+        :returns: a dict of keyword arguments
+        """
+        dest = self.dest
+        if group is not None:
+            dest = group.name + '_' + dest
+        kwargs.update({
+                'dest': dest,
+                'metavar': self.metavar,
+                'help': self.help,
+                })
+        return kwargs
+
+    def _get_optparse_prefix(self, prefix, group):
+        """Build a prefix for the CLI option name, if required.
+
+        CLI options in a group are prefixed with the group's name in order
+        to avoid conflicts between similarly named options in different
+        groups.
+
+        :param prefix: an existing prefix to append to (e.g. 'no' or '')
+        :param group: an optional OptGroup object
+        :returns: a CLI option prefix including the group name, if appropriate
+        """
+        if group is not None:
+            return group.name + '-' + prefix
+        else:
+            return prefix
+
+
+class StrOpt(Opt):
+    """
+    String opts do not have their values transformed and are returned as
+    str objects.
+    """
+    pass
+
+
+class BoolOpt(Opt):
+
+    """
+    Bool opts are set to True or False on the command line using --optname or
+    --noopttname respectively.
+
+    In config files, boolean values are case insensitive and can be set using
+    1/0, yes/no, true/false or on/off.
+    """
+
+    _boolean_states = {'1': True, 'yes': True, 'true': True, 'on': True,
+                       '0': False, 'no': False, 'false': False, 'off': False}
+
+    def _get_from_config_parser(self, cparser, section):
+        """Retrieve the opt value as a boolean from ConfigParser."""
+        def convert_bool(v):
+            value = self._boolean_states.get(v.lower())
+            if value is None:
+                raise ValueError('Unexpected boolean value %r' % v)
+
+            return value
+
+        return [convert_bool(v) for v in cparser.get(section, self.dest)]
+
+    def _add_to_cli(self, parser, group=None):
+        """Extends the base class method to add the --nooptname option."""
+        super(BoolOpt, self)._add_to_cli(parser, group)
+        self._add_inverse_to_optparse(parser, group)
+
+    def _add_inverse_to_optparse(self, parser, group):
+        """Add the --nooptname option to the option parser."""
+        container = self._get_optparse_container(parser, group)
+        kwargs = self._get_optparse_kwargs(group, action='store_false')
+        prefix = self._get_optparse_prefix('no', group)
+        kwargs["help"] = "The inverse of --" + self.name
+        self._add_to_optparse(container, self.name, None, kwargs, prefix)
+
+    def _get_optparse_kwargs(self, group, action='store_true', **kwargs):
+        """Extends the base optparse keyword dict for boolean options."""
+        return super(BoolOpt,
+                     self)._get_optparse_kwargs(group, action=action, **kwargs)
+
+
+class IntOpt(Opt):
+
+    """Int opt values are converted to integers using the int() builtin."""
+
+    def _get_from_config_parser(self, cparser, section):
+        """Retrieve the opt value as a integer from ConfigParser."""
+        return [int(v) for v in cparser.get(section, self.dest)]
+
+    def _get_optparse_kwargs(self, group, **kwargs):
+        """Extends the base optparse keyword dict for integer options."""
+        return super(IntOpt,
+                     self)._get_optparse_kwargs(group, type='int', **kwargs)
+
+
+class FloatOpt(Opt):
+
+    """Float opt values are converted to floats using the float() builtin."""
+
+    def _get_from_config_parser(self, cparser, section):
+        """Retrieve the opt value as a float from ConfigParser."""
+        return [float(v) for v in cparser.get(section, self.dest)]
+
+    def _get_optparse_kwargs(self, group, **kwargs):
+        """Extends the base optparse keyword dict for float options."""
+        return super(FloatOpt,
+                     self)._get_optparse_kwargs(group, type='float', **kwargs)
+
+
+class ListOpt(Opt):
+
+    """
+    List opt values are simple string values separated by commas. The opt value
+    is a list containing these strings.
+    """
+
+    def _get_from_config_parser(self, cparser, section):
+        """Retrieve the opt value as a list from ConfigParser."""
+        return [v.split(',') for v in cparser.get(section, self.dest)]
+
+    def _get_optparse_kwargs(self, group, **kwargs):
+        """Extends the base optparse keyword dict for list options."""
+        return super(ListOpt,
+                     self)._get_optparse_kwargs(group,
+                                                type='string',
+                                                action='callback',
+                                                callback=self._parse_list,
+                                                **kwargs)
+
+    def _parse_list(self, option, opt, value, parser):
+        """An optparse callback for parsing an option value into a list."""
+        setattr(parser.values, self.dest, value.split(','))
+
+
+class MultiStrOpt(Opt):
+
+    """
+    Multistr opt values are string opts which may be specified multiple times.
+    The opt value is a list containing all the string values specified.
+    """
+    multi = True
+
+    def _get_optparse_kwargs(self, group, **kwargs):
+        """Extends the base optparse keyword dict for multi str options."""
+        return super(MultiStrOpt,
+                     self)._get_optparse_kwargs(group, action='append')
+
+
+class OptGroup(object):
+
+    """
+    Represents a group of opts.
+
+    CLI opts in the group are automatically prefixed with the group name.
+
+    Each group corresponds to a section in config files.
+
+    An OptGroup object has no public methods, but has a number of public string
+    properties:
+
+      name:
+        the name of the group
+      title:
+        the group title as displayed in --help
+      help:
+        the group description as displayed in --help
+    """
+
+    def __init__(self, name, title=None, help=None):
+        """Constructs an OptGroup object.
+
+        :param name: the group name
+        :param title: the group title for --help
+        :param help: the group description for --help
+        """
+        self.name = name
+        if title is None:
+            self.title = "%s options" % title
+        else:
+            self.title = title
+        self.help = help
+
+        self._opts = {}  # dict of dicts of (opt:, override:, default:)
+        self._optparse_group = None
+
+    def _register_opt(self, opt):
+        """Add an opt to this group.
+
+        :param opt: an Opt object
+        :returns: False if previously registered, True otherwise
+        :raises: DuplicateOptError if a naming conflict is detected
+        """
+        if _is_opt_registered(self._opts, opt):
+            return False
+
+        self._opts[opt.dest] = {'opt': opt, 'override': None, 'default': None}
+
+        return True
+
+    def _get_optparse_group(self, parser):
+        """Build an optparse.OptionGroup for this group."""
+        if self._optparse_group is None:
+            self._optparse_group = optparse.OptionGroup(parser, self.title,
+                                                        self.help)
+        return self._optparse_group
+
+
+class ParseError(iniparser.ParseError):
+    def __init__(self, msg, lineno, line, filename):
+        super(ParseError, self).__init__(msg, lineno, line)
+        self.filename = filename
+
+    def __str__(self):
+        return 'at %s:%d, %s: %r' % (self.filename, self.lineno,
+                                     self.msg, self.line)
+
+
+class ConfigParser(iniparser.BaseParser):
+    def __init__(self, filename, sections):
+        super(ConfigParser, self).__init__()
+        self.filename = filename
+        self.sections = sections
+        self.section = None
+
+    def parse(self):
+        with open(self.filename) as f:
+            return super(ConfigParser, self).parse(f)
+
+    def new_section(self, section):
+        self.section = section
+        self.sections.setdefault(self.section, {})
+
+    def assignment(self, key, value):
+        if not self.section:
+            raise self.error_no_section()
+
+        self.sections[self.section].setdefault(key, [])
+        self.sections[self.section][key].append('\n'.join(value))
+
+    def parse_exc(self, msg, lineno, line=None):
+        return ParseError(msg, lineno, line, self.filename)
+
+    def error_no_section(self):
+        return self.parse_exc('Section must be started before assignment',
+                              self.lineno)
+
+
+class MultiConfigParser(object):
+    def __init__(self):
+        self.sections = {}
+
+    def read(self, config_files):
+        read_ok = []
+
+        for filename in config_files:
+            parser = ConfigParser(filename, self.sections)
+
+            try:
+                parser.parse()
+            except IOError:
+                continue
+
+            read_ok.append(filename)
+
+        return read_ok
+
+    def get(self, section, name):
+        return self.sections[section][name]
+
+
+class ConfigOpts(collections.Mapping):
+
+    """
+    Config options which may be set on the command line or in config files.
+
+    ConfigOpts is a configuration option manager with APIs for registering
+    option schemas, grouping options, parsing option values and retrieving
+    the values of options.
+    """
+
+    def __init__(self,
+                 project=None,
+                 prog=None,
+                 version=None,
+                 usage=None,
+                 default_config_files=None):
+        """Construct a ConfigOpts object.
+
+        Automatically registers the --config-file option with either a supplied
+        list of default config files, or a list from find_config_files().
+
+        :param project: the toplevel project name, used to locate config files
+        :param prog: the name of the program (defaults to sys.argv[0] basename)
+        :param version: the program version (for --version)
+        :param usage: a usage string (%prog will be expanded)
+        :param default_config_files: config files to use by default
+        """
+        if prog is None:
+            prog = os.path.basename(sys.argv[0])
+
+        if default_config_files is None:
+            default_config_files = find_config_files(project, prog)
+
+        self.project = project
+        self.prog = prog
+        self.version = version
+        self.usage = usage
+        self.default_config_files = default_config_files
+
+        self._opts = {}  # dict of dicts of (opt:, override:, default:)
+        self._groups = {}
+
+        self._args = None
+        self._cli_values = {}
+
+        self._oparser = optparse.OptionParser(prog=self.prog,
+                                              version=self.version,
+                                              usage=self.usage)
+        self._cparser = None
+
+        self.register_cli_opt(
+            MultiStrOpt('config-file',
+                        default=self.default_config_files,
+                        metavar='PATH',
+                        help='Path to a config file to use. Multiple config '
+                             'files can be specified, with values in later '
+                             'files taking precedence. The default files used '
+                             'are: %s' % (self.default_config_files, )))
+
+    def __call__(self, args=None):
+        """Parse command line arguments and config files.
+
+        Calling a ConfigOpts object causes the supplied command line arguments
+        and config files to be parsed, causing opt values to be made available
+        as attributes of the object.
+
+        The object may be called multiple times, each time causing the previous
+        set of values to be overwritten.
+
+        :params args: command line arguments (defaults to sys.argv[1:])
+        :returns: the list of arguments left over after parsing options
+        :raises: SystemExit, ConfigFilesNotFoundError, ConfigFileParseError
+        """
+        self.reset()
+
+        self._args = args
+
+        (values, args) = self._oparser.parse_args(self._args)
+
+        self._cli_values = vars(values)
+
+        if self.config_file:
+            self._parse_config_files(self.config_file)
+
+        return args
+
+    def __getattr__(self, name):
+        """Look up an option value and perform string substitution.
+
+        :param name: the opt name (or 'dest', more precisely)
+        :returns: the option value (after string subsititution) or a GroupAttr
+        :raises: NoSuchOptError,ConfigFileValueError,TemplateSubstitutionError
+        """
+        return self._substitute(self._get(name))
+
+    def __getitem__(self, key):
+        """Look up an option value and perform string substitution."""
+        return self.__getattr__(key)
+
+    def __contains__(self, key):
+        """Return True if key is the name of a registered opt or group."""
+        return key in self._opts or key in self._groups
+
+    def __iter__(self):
+        """Iterate over all registered opt and group names."""
+        for key in self._opts.keys() + self._groups.keys():
+            yield key
+
+    def __len__(self):
+        """Return the number of options and option groups."""
+        return len(self._opts) + len(self._groups)
+
+    def reset(self):
+        """Reset the state of the object to before it was called."""
+        self._args = None
+        self._cli_values = None
+        self._cparser = None
+
+    def register_opt(self, opt, group=None):
+        """Register an option schema.
+
+        Registering an option schema makes any option value which is previously
+        or subsequently parsed from the command line or config files available
+        as an attribute of this object.
+
+        :param opt: an instance of an Opt sub-class
+        :param group: an optional OptGroup object or group name
+        :return: False if the opt was already register, True otherwise
+        :raises: DuplicateOptError
+        """
+        if group is not None:
+            return self._get_group(group)._register_opt(opt)
+
+        if _is_opt_registered(self._opts, opt):
+            return False
+
+        self._opts[opt.dest] = {'opt': opt, 'override': None, 'default': None}
+
+        return True
+
+    def register_opts(self, opts, group=None):
+        """Register multiple option schemas at once."""
+        for opt in opts:
+            self.register_opt(opt, group)
+
+    def register_cli_opt(self, opt, group=None):
+        """Register a CLI option schema.
+
+        CLI option schemas must be registered before the command line and
+        config files are parsed. This is to ensure that all CLI options are
+        show in --help and option validation works as expected.
+
+        :param opt: an instance of an Opt sub-class
+        :param group: an optional OptGroup object or group name
+        :return: False if the opt was already register, True otherwise
+        :raises: DuplicateOptError, ArgsAlreadyParsedError
+        """
+        if self._args is not None:
+            raise ArgsAlreadyParsedError("cannot register CLI option")
+
+        if not self.register_opt(opt, group):
+            return False
+
+        if group is not None:
+            group = self._get_group(group)
+
+        opt._add_to_cli(self._oparser, group)
+
+        return True
+
+    def register_cli_opts(self, opts, group=None):
+        """Register multiple CLI option schemas at once."""
+        for opt in opts:
+            self.register_cli_opt(opt, group)
+
+    def register_group(self, group):
+        """Register an option group.
+
+        An option group must be registered before options can be registered
+        with the group.
+
+        :param group: an OptGroup object
+        """
+        if group.name in self._groups:
+            return
+
+        self._groups[group.name] = copy.copy(group)
+
+    def set_override(self, name, override, group=None):
+        """Override an opt value.
+
+        Override the command line, config file and default values of a
+        given option.
+
+        :param name: the name/dest of the opt
+        :param override: the override value
+        :param group: an option OptGroup object or group name
+        :raises: NoSuchOptError, NoSuchGroupError
+        """
+        opt_info = self._get_opt_info(name, group)
+        opt_info['override'] = override
+
+    def set_default(self, name, default, group=None):
+        """Override an opt's default value.
+
+        Override the default value of given option. A command line or
+        config file value will still take precedence over this default.
+
+        :param name: the name/dest of the opt
+        :param default: the default value
+        :param group: an option OptGroup object or group name
+        :raises: NoSuchOptError, NoSuchGroupError
+        """
+        opt_info = self._get_opt_info(name, group)
+        opt_info['default'] = default
+
+    def disable_interspersed_args(self):
+        """Set parsing to stop on the first non-option.
+
+        If this this method is called, then parsing e.g.
+
+          script --verbose cmd --debug /tmp/mything
+
+        will no longer return:
+
+          ['cmd', '/tmp/mything']
+
+        as the leftover arguments, but will instead return:
+
+          ['cmd', '--debug', '/tmp/mything']
+
+        i.e. argument parsing is stopped at the first non-option argument.
+        """
+        self._oparser.disable_interspersed_args()
+
+    def enable_interspersed_args(self):
+        """Set parsing to not stop on the first non-option.
+
+        This it the default behaviour."""
+        self._oparser.enable_interspersed_args()
+
+    def log_opt_values(self, logger, lvl):
+        """Log the value of all registered opts.
+
+        It's often useful for an app to log its configuration to a log file at
+        startup for debugging. This method dumps to the entire config state to
+        the supplied logger at a given log level.
+
+        :param logger: a logging.Logger object
+        :param lvl: the log level (e.g. logging.DEBUG) arg to logger.log()
+        """
+        logger.log(lvl, "*" * 80)
+        logger.log(lvl, "Configuration options gathered from:")
+        logger.log(lvl, "command line args: %s", self._args)
+        logger.log(lvl, "config files: %s", self.config_file)
+        logger.log(lvl, "=" * 80)
+
+        def _sanitize(opt, value):
+            """Obfuscate values of options declared secret"""
+            return value if not opt.secret else '*' * len(str(value))
+
+        for opt_name in sorted(self._opts):
+            opt = self._get_opt_info(opt_name)['opt']
+            logger.log(lvl, "%-30s = %s", opt_name,
+                       _sanitize(opt, getattr(self, opt_name)))
+
+        for group_name in self._groups:
+            group_attr = self.GroupAttr(self, self._get_group(group_name))
+            for opt_name in sorted(self._groups[group_name]._opts):
+                opt = self._get_opt_info(opt_name, group_name)['opt']
+                logger.log(lvl, "%-30s = %s",
+                           "%s.%s" % (group_name, opt_name),
+                           _sanitize(opt, getattr(group_attr, opt_name)))
+
+        logger.log(lvl, "*" * 80)
+
+    def print_usage(self, file=None):
+        """Print the usage message for the current program."""
+        self._oparser.print_usage(file)
+
+    def print_help(self, file=None):
+        """Print the help message for the current program."""
+        self._oparser.print_help(file)
+
+    def _get(self, name, group=None):
+        """Look up an option value.
+
+        :param name: the opt name (or 'dest', more precisely)
+        :param group: an OptGroup
+        :returns: the option value, or a GroupAttr object
+        :raises: NoSuchOptError, NoSuchGroupError, ConfigFileValueError,
+                 TemplateSubstitutionError
+        """
+        if group is None and name in self._groups:
+            return self.GroupAttr(self, self._get_group(name))
+
+        info = self._get_opt_info(name, group)
+        default, opt, override = map(lambda k: info[k], sorted(info.keys()))
+
+        if override is not None:
+            return override
+
+        values = []
+        if self._cparser is not None:
+            section = group.name if group is not None else 'DEFAULT'
+            try:
+                value = opt._get_from_config_parser(self._cparser, section)
+            except KeyError:
+                pass
+            except ValueError as ve:
+                raise ConfigFileValueError(str(ve))
+            else:
+                if not opt.multi:
+                    # No need to continue since the last value wins
+                    return value[-1]
+                values.extend(value)
+
+        name = name if group is None else group.name + '_' + name
+        value = self._cli_values.get(name)
+        if value is not None:
+            if not opt.multi:
+                return value
+
+            return value + values
+
+        if values:
+            return values
+
+        if default is not None:
+            return default
+
+        return opt.default
+
+    def _substitute(self, value):
+        """Perform string template substitution.
+
+        Substititue any template variables (e.g. $foo, ${bar}) in the supplied
+        string value(s) with opt values.
+
+        :param value: the string value, or list of string values
+        :returns: the substituted string(s)
+        """
+        if isinstance(value, list):
+            return [self._substitute(i) for i in value]
+        elif isinstance(value, str):
+            tmpl = string.Template(value)
+            return tmpl.safe_substitute(self.StrSubWrapper(self))
+        else:
+            return value
+
+    def _get_group(self, group_or_name):
+        """Looks up a OptGroup object.
+
+        Helper function to return an OptGroup given a parameter which can
+        either be the group's name or an OptGroup object.
+
+        The OptGroup object returned is from the internal dict of OptGroup
+        objects, which will be a copy of any OptGroup object that users of
+        the API have access to.
+
+        :param group_or_name: the group's name or the OptGroup object itself
+        :raises: NoSuchGroupError
+        """
+        if isinstance(group_or_name, OptGroup):
+            group_name = group_or_name.name
+        else:
+            group_name = group_or_name
+
+        if not group_name in self._groups:
+            raise NoSuchGroupError(group_name)
+
+        return self._groups[group_name]
+
+    def _get_opt_info(self, opt_name, group=None):
+        """Return the (opt, override, default) dict for an opt.
+
+        :param opt_name: an opt name/dest
+        :param group: an optional group name or OptGroup object
+        :raises: NoSuchOptError, NoSuchGroupError
+        """
+        if group is None:
+            opts = self._opts
+        else:
+            group = self._get_group(group)
+            opts = group._opts
+
+        if not opt_name in opts:
+            raise NoSuchOptError(opt_name, group)
+
+        return opts[opt_name]
+
+    def _parse_config_files(self, config_files):
+        """Parse the supplied configuration files.
+
+        :raises: ConfigFilesNotFoundError, ConfigFileParseError
+        """
+        self._cparser = MultiConfigParser()
+
+        try:
+            read_ok = self._cparser.read(config_files)
+        except iniparser.ParseError as pe:
+            raise ConfigFileParseError(pe.filename, str(pe))
+
+        if read_ok != config_files:
+            not_read_ok = filter(lambda f: f not in read_ok, config_files)
+            raise ConfigFilesNotFoundError(not_read_ok)
+
+    class GroupAttr(collections.Mapping):
+
+        """
+        A helper class representing the option values of a group as a mapping
+        and attributes.
+        """
+
+        def __init__(self, conf, group):
+            """Construct a GroupAttr object.
+
+            :param conf: a ConfigOpts object
+            :param group: an OptGroup object
+            """
+            self.conf = conf
+            self.group = group
+
+        def __getattr__(self, name):
+            """Look up an option value and perform template substitution."""
+            return self.conf._substitute(self.conf._get(name, self.group))
+
+        def __getitem__(self, key):
+            """Look up an option value and perform string substitution."""
+            return self.__getattr__(key)
+
+        def __contains__(self, key):
+            """Return True if key is the name of a registered opt or group."""
+            return key in self.group._opts
+
+        def __iter__(self):
+            """Iterate over all registered opt and group names."""
+            for key in self.group._opts.keys():
+                yield key
+
+        def __len__(self):
+            """Return the number of options and option groups."""
+            return len(self.group._opts)
+
+    class StrSubWrapper(object):
+
+        """
+        A helper class exposing opt values as a dict for string substitution.
+        """
+
+        def __init__(self, conf):
+            """Construct a StrSubWrapper object.
+
+            :param conf: a ConfigOpts object
+            """
+            self.conf = conf
+
+        def __getitem__(self, key):
+            """Look up an opt value from the ConfigOpts object.
+
+            :param key: an opt name
+            :returns: an opt value
+            :raises: TemplateSubstitutionError if attribute is a group
+            """
+            value = getattr(self.conf, key)
+            if isinstance(value, self.conf.GroupAttr):
+                raise TemplateSubstitutionError(
+                    'substituting group %s not supported' % key)
+            return value
+
+
+class CommonConfigOpts(ConfigOpts):
+
+    DEFAULT_LOG_FORMAT = "%(asctime)s %(levelname)8s [%(name)s] %(message)s"
+    DEFAULT_LOG_DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
+
+    common_cli_opts = [
+        BoolOpt('debug',
+                short='d',
+                default=False,
+                help='Print debugging output'),
+        BoolOpt('verbose',
+                short='v',
+                default=False,
+                help='Print more verbose output'),
+        ]
+
+    logging_cli_opts = [
+        StrOpt('log-config',
+               metavar='PATH',
+               help='If this option is specified, the logging configuration '
+                    'file specified is used and overrides any other logging '
+                    'options specified. Please see the Python logging module '
+                    'documentation for details on logging configuration '
+                    'files.'),
+        StrOpt('log-format',
+               default=DEFAULT_LOG_FORMAT,
+               metavar='FORMAT',
+               help='A logging.Formatter log message format string which may '
+                    'use any of the available logging.LogRecord attributes. '
+                    'Default: %default'),
+        StrOpt('log-date-format',
+               default=DEFAULT_LOG_DATE_FORMAT,
+               metavar='DATE_FORMAT',
+               help='Format string for %(asctime)s in log records. '
+                    'Default: %default'),
+        StrOpt('log-file',
+               metavar='PATH',
+               help='(Optional) Name of log file to output to. '
+                    'If not set, logging will go to stdout.'),
+        StrOpt('log-dir',
+               help='(Optional) The directory to keep log files in '
+                    '(will be prepended to --logfile)'),
+        BoolOpt('use-syslog',
+                default=False,
+                help='Use syslog for logging.'),
+        StrOpt('syslog-log-facility',
+               default='LOG_USER',
+               help='syslog facility to receive log lines')
+        ]
+
+    def __init__(self, **kwargs):
+        super(CommonConfigOpts, self).__init__(**kwargs)
+        self.register_cli_opts(self.common_cli_opts)
+        self.register_cli_opts(self.logging_cli_opts)
diff --git a/cinder/openstack/common/exception.py b/cinder/openstack/common/exception.py
new file mode 100644
index 000000000..ba32da550
--- /dev/null
+++ b/cinder/openstack/common/exception.py
@@ -0,0 +1,147 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+Exceptions common to OpenStack projects
+"""
+
+import logging
+
+
+class ProcessExecutionError(IOError):
+    def __init__(self, stdout=None, stderr=None, exit_code=None, cmd=None,
+                 description=None):
+        if description is None:
+            description = "Unexpected error while running command."
+        if exit_code is None:
+            exit_code = '-'
+        message = "%s\nCommand: %s\nExit code: %s\nStdout: %r\nStderr: %r" % (
+                  description, cmd, exit_code, stdout, stderr)
+        IOError.__init__(self, message)
+
+
+class Error(Exception):
+    def __init__(self, message=None):
+        super(Error, self).__init__(message)
+
+
+class ApiError(Error):
+    def __init__(self, message='Unknown', code='Unknown'):
+        self.message = message
+        self.code = code
+        super(ApiError, self).__init__('%s: %s' % (code, message))
+
+
+class NotFound(Error):
+    pass
+
+
+class UnknownScheme(Error):
+
+    msg = "Unknown scheme '%s' found in URI"
+
+    def __init__(self, scheme):
+        msg = self.__class__.msg % scheme
+        super(UnknownScheme, self).__init__(msg)
+
+
+class BadStoreUri(Error):
+
+    msg = "The Store URI %s was malformed. Reason: %s"
+
+    def __init__(self, uri, reason):
+        msg = self.__class__.msg % (uri, reason)
+        super(BadStoreUri, self).__init__(msg)
+
+
+class Duplicate(Error):
+    pass
+
+
+class NotAuthorized(Error):
+    pass
+
+
+class NotEmpty(Error):
+    pass
+
+
+class Invalid(Error):
+    pass
+
+
+class BadInputError(Exception):
+    """Error resulting from a client sending bad input to a server"""
+    pass
+
+
+class MissingArgumentError(Error):
+    pass
+
+
+class DatabaseMigrationError(Error):
+    pass
+
+
+class ClientConnectionError(Exception):
+    """Error resulting from a client connecting to a server"""
+    pass
+
+
+def wrap_exception(f):
+    def _wrap(*args, **kw):
+        try:
+            return f(*args, **kw)
+        except Exception, e:
+            if not isinstance(e, Error):
+                #exc_type, exc_value, exc_traceback = sys.exc_info()
+                logging.exception('Uncaught exception')
+                #logging.error(traceback.extract_stack(exc_traceback))
+                raise Error(str(e))
+            raise
+    _wrap.func_name = f.func_name
+    return _wrap
+
+
+class OpenstackException(Exception):
+    """
+    Base Exception
+
+    To correctly use this class, inherit from it and define
+    a 'message' property. That message will get printf'd
+    with the keyword arguments provided to the constructor.
+    """
+    message = "An unknown exception occurred"
+
+    def __init__(self, **kwargs):
+        try:
+            self._error_string = self.message % kwargs
+
+        except Exception:
+            # at least get the core message out if something happened
+            self._error_string = self.message
+
+    def __str__(self):
+        return self._error_string
+
+
+class MalformedRequestBody(OpenstackException):
+    message = "Malformed message body: %(reason)s"
+
+
+class InvalidContentType(OpenstackException):
+    message = "Invalid content type %(content_type)s"
diff --git a/cinder/openstack/common/importutils.py b/cinder/openstack/common/importutils.py
new file mode 100644
index 000000000..9c0815c72
--- /dev/null
+++ b/cinder/openstack/common/importutils.py
@@ -0,0 +1,45 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+Import related utilities and helper functions.
+"""
+
+import sys
+
+from cinder.openstack.common import exception
+
+
+def import_class(import_str):
+    """Returns a class from a string including module and class"""
+    mod_str, _sep, class_str = import_str.rpartition('.')
+    try:
+        __import__(mod_str)
+        return getattr(sys.modules[mod_str], class_str)
+    except (ImportError, ValueError, AttributeError):
+        raise exception.NotFound('Class %s cannot be found' % class_str)
+
+
+def import_object(import_str, *args, **kwargs):
+    """Import a class and return an instance of it."""
+    return import_class(import_str)(*args, **kwargs)
+
+
+def import_module(import_str):
+    """Import a module."""
+    __import__(import_str)
+    return sys.modules[import_str]
diff --git a/cinder/openstack/common/iniparser.py b/cinder/openstack/common/iniparser.py
new file mode 100644
index 000000000..53ca02334
--- /dev/null
+++ b/cinder/openstack/common/iniparser.py
@@ -0,0 +1,126 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 OpenStack LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+
+class ParseError(Exception):
+    def __init__(self, message, lineno, line):
+        self.msg = message
+        self.line = line
+        self.lineno = lineno
+
+    def __str__(self):
+        return 'at line %d, %s: %r' % (self.lineno, self.msg, self.line)
+
+
+class BaseParser(object):
+    lineno = 0
+    parse_exc = ParseError
+
+    def _assignment(self, key, value):
+        self.assignment(key, value)
+        return None, []
+
+    def _get_section(self, line):
+        if line[-1] != ']':
+            return self.error_no_section_end_bracket(line)
+        if len(line) <= 2:
+            return self.error_no_section_name(line)
+
+        return line[1:-1]
+
+    def _split_key_value(self, line):
+        colon = line.find(':')
+        equal = line.find('=')
+        if colon < 0 and equal < 0:
+            return self.error_invalid_assignment(line)
+
+        if colon < 0 or (equal >= 0 and equal < colon):
+            key, value = line[:equal], line[equal + 1:]
+        else:
+            key, value = line[:colon], line[colon + 1:]
+
+        return key.strip(), [value.strip()]
+
+    def parse(self, lineiter):
+        key = None
+        value = []
+
+        for line in lineiter:
+            self.lineno += 1
+
+            line = line.rstrip()
+            if not line:
+                # Blank line, ends multi-line values
+                if key:
+                    key, value = self._assignment(key, value)
+                continue
+            elif line[0] in (' ', '\t'):
+                # Continuation of previous assignment
+                if key is None:
+                    self.error_unexpected_continuation(line)
+                else:
+                    value.append(line.lstrip())
+                continue
+
+            if key:
+                # Flush previous assignment, if any
+                key, value = self._assignment(key, value)
+
+            if line[0] == '[':
+                # Section start
+                section = self._get_section(line)
+                if section:
+                    self.new_section(section)
+            elif line[0] in '#;':
+                self.comment(line[1:].lstrip())
+            else:
+                key, value = self._split_key_value(line)
+                if not key:
+                    return self.error_empty_key(line)
+
+        if key:
+            # Flush previous assignment, if any
+            self._assignment(key, value)
+
+    def assignment(self, key, value):
+        """Called when a full assignment is parsed"""
+        raise NotImplementedError()
+
+    def new_section(self, section):
+        """Called when a new section is started"""
+        raise NotImplementedError()
+
+    def comment(self, comment):
+        """Called when a comment is parsed"""
+        pass
+
+    def error_invalid_assignment(self, line):
+        raise self.parse_exc("No ':' or '=' found in assignment",
+                             self.lineno, line)
+
+    def error_empty_key(self, line):
+        raise self.parse_exc('Key cannot be empty', self.lineno, line)
+
+    def error_unexpected_continuation(self, line):
+        raise self.parse_exc('Unexpected continuation line',
+                             self.lineno, line)
+
+    def error_no_section_end_bracket(self, line):
+        raise self.parse_exc('Invalid section (must end with ])',
+                             self.lineno, line)
+
+    def error_no_section_name(self, line):
+        raise self.parse_exc('Empty section name', self.lineno, line)
diff --git a/cinder/openstack/common/local.py b/cinder/openstack/common/local.py
new file mode 100644
index 000000000..19d962732
--- /dev/null
+++ b/cinder/openstack/common/local.py
@@ -0,0 +1,37 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Greenthread local storage of variables using weak references"""
+
+import weakref
+
+from eventlet import corolocal
+
+
+class WeakLocal(corolocal.local):
+    def __getattribute__(self, attr):
+        rval = corolocal.local.__getattribute__(self, attr)
+        if rval:
+            rval = rval()
+        return rval
+
+    def __setattr__(self, attr, value):
+        value = weakref.ref(value)
+        return corolocal.local.__setattr__(self, attr, value)
+
+
+store = WeakLocal()
diff --git a/cinder/policy.py b/cinder/policy.py
new file mode 100644
index 000000000..646530385
--- /dev/null
+++ b/cinder/policy.py
@@ -0,0 +1,90 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 OpenStack, LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Policy Engine For Cinder"""
+
+from cinder.common import policy
+from cinder import exception
+from cinder import flags
+from cinder.openstack.common import cfg
+from cinder import utils
+
+
+policy_opts = [
+    cfg.StrOpt('policy_file',
+               default='policy.json',
+               help=_('JSON file representing policy')),
+    cfg.StrOpt('policy_default_rule',
+               default='default',
+               help=_('Rule checked when requested rule is not found')),
+    ]
+
+FLAGS = flags.FLAGS
+FLAGS.register_opts(policy_opts)
+
+_POLICY_PATH = None
+_POLICY_CACHE = {}
+
+
+def reset():
+    global _POLICY_PATH
+    global _POLICY_CACHE
+    _POLICY_PATH = None
+    _POLICY_CACHE = {}
+    policy.reset()
+
+
+def init():
+    global _POLICY_PATH
+    global _POLICY_CACHE
+    if not _POLICY_PATH:
+        _POLICY_PATH = utils.find_config(FLAGS.policy_file)
+    utils.read_cached_file(_POLICY_PATH, _POLICY_CACHE,
+                           reload_func=_set_brain)
+
+
+def _set_brain(data):
+    default_rule = FLAGS.policy_default_rule
+    policy.set_brain(policy.HttpBrain.load_json(data, default_rule))
+
+
+def enforce(context, action, target):
+    """Verifies that the action is valid on the target in this context.
+
+       :param context: cinder context
+       :param action: string representing the action to be checked
+           this should be colon separated for clarity.
+           i.e. ``compute:create_instance``,
+           ``compute:attach_volume``,
+           ``volume:attach_volume``
+
+       :param object: dictionary representing the object of the action
+           for object creation this should be a dictionary representing the
+           location of the object e.g. ``{'project_id': context.project_id}``
+
+       :raises cinder.exception.PolicyNotAllowed: if verification fails.
+
+    """
+    init()
+
+    match_list = ('rule:%s' % action,)
+    credentials = context.to_dict()
+
+    try:
+        policy.enforce(match_list, target, credentials)
+    except policy.NotAuthorized:
+        raise exception.PolicyNotAuthorized(action=action)
diff --git a/cinder/quota.py b/cinder/quota.py
new file mode 100644
index 000000000..2df6c89a4
--- /dev/null
+++ b/cinder/quota.py
@@ -0,0 +1,234 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Quotas for instances, volumes, and floating ips."""
+
+from cinder import db
+from cinder.openstack.common import cfg
+from cinder import flags
+
+
+quota_opts = [
+    cfg.IntOpt('quota_instances',
+               default=10,
+               help='number of instances allowed per project'),
+    cfg.IntOpt('quota_cores',
+               default=20,
+               help='number of instance cores allowed per project'),
+    cfg.IntOpt('quota_ram',
+               default=50 * 1024,
+               help='megabytes of instance ram allowed per project'),
+    cfg.IntOpt('quota_volumes',
+               default=10,
+               help='number of volumes allowed per project'),
+    cfg.IntOpt('quota_gigabytes',
+               default=1000,
+               help='number of volume gigabytes allowed per project'),
+    cfg.IntOpt('quota_floating_ips',
+               default=10,
+               help='number of floating ips allowed per project'),
+    cfg.IntOpt('quota_metadata_items',
+               default=128,
+               help='number of metadata items allowed per instance'),
+    cfg.IntOpt('quota_injected_files',
+               default=5,
+               help='number of injected files allowed'),
+    cfg.IntOpt('quota_injected_file_content_bytes',
+               default=10 * 1024,
+               help='number of bytes allowed per injected file'),
+    cfg.IntOpt('quota_injected_file_path_bytes',
+               default=255,
+               help='number of bytes allowed per injected file path'),
+    cfg.IntOpt('quota_security_groups',
+               default=10,
+               help='number of security groups per project'),
+    cfg.IntOpt('quota_security_group_rules',
+               default=20,
+               help='number of security rules per security group'),
+    ]
+
+FLAGS = flags.FLAGS
+FLAGS.register_opts(quota_opts)
+
+
+quota_resources = ['metadata_items', 'injected_file_content_bytes',
+        'volumes', 'gigabytes', 'ram', 'floating_ips', 'instances',
+        'injected_files', 'cores', 'security_groups', 'security_group_rules']
+
+
+def _get_default_quotas():
+    defaults = {
+        'instances': FLAGS.quota_instances,
+        'cores': FLAGS.quota_cores,
+        'ram': FLAGS.quota_ram,
+        'volumes': FLAGS.quota_volumes,
+        'gigabytes': FLAGS.quota_gigabytes,
+        'floating_ips': FLAGS.quota_floating_ips,
+        'metadata_items': FLAGS.quota_metadata_items,
+        'injected_files': FLAGS.quota_injected_files,
+        'injected_file_content_bytes':
+            FLAGS.quota_injected_file_content_bytes,
+        'security_groups': FLAGS.quota_security_groups,
+        'security_group_rules': FLAGS.quota_security_group_rules,
+    }
+    # -1 in the quota flags means unlimited
+    return defaults
+
+
+def get_class_quotas(context, quota_class, defaults=None):
+    """Update defaults with the quota class values."""
+
+    if not defaults:
+        defaults = _get_default_quotas()
+
+    quota = db.quota_class_get_all_by_name(context, quota_class)
+    for key in defaults.keys():
+        if key in quota:
+            defaults[key] = quota[key]
+
+    return defaults
+
+
+def get_project_quotas(context, project_id):
+    defaults = _get_default_quotas()
+    if context.quota_class:
+        get_class_quotas(context, context.quota_class, defaults)
+    quota = db.quota_get_all_by_project(context, project_id)
+    for key in defaults.keys():
+        if key in quota:
+            defaults[key] = quota[key]
+    return defaults
+
+
+def _get_request_allotment(requested, used, quota):
+    if quota == -1:
+        return requested
+    return quota - used
+
+
+def allowed_instances(context, requested_instances, instance_type):
+    """Check quota and return min(requested_instances, allowed_instances)."""
+    project_id = context.project_id
+    context = context.elevated()
+    requested_cores = requested_instances * instance_type['vcpus']
+    requested_ram = requested_instances * instance_type['memory_mb']
+    usage = db.instance_data_get_for_project(context, project_id)
+    used_instances, used_cores, used_ram = usage
+    quota = get_project_quotas(context, project_id)
+    allowed_instances = _get_request_allotment(requested_instances,
+                                               used_instances,
+                                               quota['instances'])
+    allowed_cores = _get_request_allotment(requested_cores, used_cores,
+                                           quota['cores'])
+    allowed_ram = _get_request_allotment(requested_ram, used_ram, quota['ram'])
+    if instance_type['vcpus']:
+        allowed_instances = min(allowed_instances,
+                                allowed_cores // instance_type['vcpus'])
+    if instance_type['memory_mb']:
+        allowed_instances = min(allowed_instances,
+                                allowed_ram // instance_type['memory_mb'])
+
+    return min(requested_instances, allowed_instances)
+
+
+def allowed_volumes(context, requested_volumes, size):
+    """Check quota and return min(requested_volumes, allowed_volumes)."""
+    project_id = context.project_id
+    context = context.elevated()
+    size = int(size)
+    requested_gigabytes = requested_volumes * size
+    used_volumes, used_gigabytes = db.volume_data_get_for_project(context,
+                                                                  project_id)
+    quota = get_project_quotas(context, project_id)
+    allowed_volumes = _get_request_allotment(requested_volumes, used_volumes,
+                                             quota['volumes'])
+    allowed_gigabytes = _get_request_allotment(requested_gigabytes,
+                                               used_gigabytes,
+                                               quota['gigabytes'])
+    if size != 0:
+        allowed_volumes = min(allowed_volumes,
+                              int(allowed_gigabytes // size))
+    return min(requested_volumes, allowed_volumes)
+
+
+def allowed_floating_ips(context, requested_floating_ips):
+    """Check quota and return min(requested, allowed) floating ips."""
+    project_id = context.project_id
+    context = context.elevated()
+    used_floating_ips = db.floating_ip_count_by_project(context, project_id)
+    quota = get_project_quotas(context, project_id)
+    allowed_floating_ips = _get_request_allotment(requested_floating_ips,
+                                                  used_floating_ips,
+                                                  quota['floating_ips'])
+    return min(requested_floating_ips, allowed_floating_ips)
+
+
+def allowed_security_groups(context, requested_security_groups):
+    """Check quota and return min(requested, allowed) security groups."""
+    project_id = context.project_id
+    context = context.elevated()
+    used_sec_groups = db.security_group_count_by_project(context, project_id)
+    quota = get_project_quotas(context, project_id)
+    allowed_sec_groups = _get_request_allotment(requested_security_groups,
+                                                  used_sec_groups,
+                                                  quota['security_groups'])
+    return min(requested_security_groups, allowed_sec_groups)
+
+
+def allowed_security_group_rules(context, security_group_id,
+        requested_rules):
+    """Check quota and return min(requested, allowed) sec group rules."""
+    project_id = context.project_id
+    context = context.elevated()
+    used_rules = db.security_group_rule_count_by_group(context,
+                                                            security_group_id)
+    quota = get_project_quotas(context, project_id)
+    allowed_rules = _get_request_allotment(requested_rules,
+                                              used_rules,
+                                              quota['security_group_rules'])
+    return min(requested_rules, allowed_rules)
+
+
+def _calculate_simple_quota(context, resource, requested):
+    """Check quota for resource; return min(requested, allowed)."""
+    quota = get_project_quotas(context, context.project_id)
+    allowed = _get_request_allotment(requested, 0, quota[resource])
+    return min(requested, allowed)
+
+
+def allowed_metadata_items(context, requested_metadata_items):
+    """Return the number of metadata items allowed."""
+    return _calculate_simple_quota(context, 'metadata_items',
+                                   requested_metadata_items)
+
+
+def allowed_injected_files(context, requested_injected_files):
+    """Return the number of injected files allowed."""
+    return _calculate_simple_quota(context, 'injected_files',
+                                   requested_injected_files)
+
+
+def allowed_injected_file_content_bytes(context, requested_bytes):
+    """Return the number of bytes allowed per injected file content."""
+    resource = 'injected_file_content_bytes'
+    return _calculate_simple_quota(context, resource, requested_bytes)
+
+
+def allowed_injected_file_path_bytes(context):
+    """Return the number of bytes allowed in an injected file path."""
+    return FLAGS.quota_injected_file_path_bytes
diff --git a/cinder/rootwrap/__init__.py b/cinder/rootwrap/__init__.py
new file mode 100755
index 000000000..671d3c173
--- /dev/null
+++ b/cinder/rootwrap/__init__.py
@@ -0,0 +1,16 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 OpenStack, LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
diff --git a/cinder/rootwrap/filters.py b/cinder/rootwrap/filters.py
new file mode 100755
index 000000000..a51ecae3d
--- /dev/null
+++ b/cinder/rootwrap/filters.py
@@ -0,0 +1,147 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 OpenStack, LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+
+import os
+import re
+
+
+class CommandFilter(object):
+    """Command filter only checking that the 1st argument matches exec_path"""
+
+    def __init__(self, exec_path, run_as, *args):
+        self.exec_path = exec_path
+        self.run_as = run_as
+        self.args = args
+
+    def match(self, userargs):
+        """Only check that the first argument (command) matches exec_path"""
+        if (os.path.basename(self.exec_path) == userargs[0]):
+            return True
+        return False
+
+    def get_command(self, userargs):
+        """Returns command to execute (with sudo -u if run_as != root)."""
+        if (self.run_as != 'root'):
+            # Used to run commands at lesser privileges
+            return ['sudo', '-u', self.run_as, self.exec_path] + userargs[1:]
+        return [self.exec_path] + userargs[1:]
+
+    def get_environment(self, userargs):
+        """Returns specific environment to set, None if none"""
+        return None
+
+
+class RegExpFilter(CommandFilter):
+    """Command filter doing regexp matching for every argument"""
+
+    def match(self, userargs):
+        # Early skip if command or number of args don't match
+        if (len(self.args) != len(userargs)):
+            # DENY: argument numbers don't match
+            return False
+        # Compare each arg (anchoring pattern explicitly at end of string)
+        for (pattern, arg) in zip(self.args, userargs):
+            try:
+                if not re.match(pattern + '$', arg):
+                    break
+            except re.error:
+                # DENY: Badly-formed filter
+                return False
+        else:
+            # ALLOW: All arguments matched
+            return True
+
+        # DENY: Some arguments did not match
+        return False
+
+
+class DnsmasqFilter(CommandFilter):
+    """Specific filter for the dnsmasq call (which includes env)"""
+
+    def match(self, userargs):
+        if (userargs[0].startswith("FLAGFILE=") and
+            userargs[1].startswith("NETWORK_ID=") and
+            userargs[2] == "dnsmasq"):
+            return True
+        return False
+
+    def get_command(self, userargs):
+        return [self.exec_path] + userargs[3:]
+
+    def get_environment(self, userargs):
+        env = os.environ.copy()
+        env['FLAGFILE'] = userargs[0].split('=')[-1]
+        env['NETWORK_ID'] = userargs[1].split('=')[-1]
+        return env
+
+
+class KillFilter(CommandFilter):
+    """Specific filter for the kill calls.
+       1st argument is a list of accepted signals (emptystring means no signal)
+       2nd argument is a list of accepted affected executables.
+
+       This filter relies on /proc to accurately determine affected
+       executable, so it will only work on procfs-capable systems (not OSX).
+    """
+
+    def match(self, userargs):
+        if userargs[0] != "kill":
+            return False
+        args = list(userargs)
+        if len(args) == 3:
+            signal = args.pop(1)
+            if signal not in self.args[0]:
+                # Requested signal not in accepted list
+                return False
+        else:
+            if len(args) != 2:
+                # Incorrect number of arguments
+                return False
+            if '' not in self.args[0]:
+                # No signal, but list doesn't include empty string
+                return False
+        try:
+            command = os.readlink("/proc/%d/exe" % int(args[1]))
+            # NOTE(dprince): /proc/PID/exe may have ' (deleted)' on
+            # the end if an executable is updated or deleted
+            if command.endswith(" (deleted)"):
+                command = command[:command.rindex(" ")]
+            if command not in self.args[1]:
+                # Affected executable not in accepted list
+                return False
+        except (ValueError, OSError):
+            # Incorrect PID
+            return False
+        return True
+
+
+class ReadFileFilter(CommandFilter):
+    """Specific filter for the utils.read_file_as_root call"""
+
+    def __init__(self, file_path, *args):
+        self.file_path = file_path
+        super(ReadFileFilter, self).__init__("/bin/cat", "root", *args)
+
+    def match(self, userargs):
+        if userargs[0] != 'cat':
+            return False
+        if userargs[1] != self.file_path:
+            return False
+        if len(userargs) != 2:
+            return False
+        return True
diff --git a/cinder/rootwrap/volume.py b/cinder/rootwrap/volume.py
new file mode 100755
index 000000000..8d96f4600
--- /dev/null
+++ b/cinder/rootwrap/volume.py
@@ -0,0 +1,45 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 OpenStack, LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+
+from cinder.rootwrap import filters
+
+filterlist = [
+    # cinder/volume/iscsi.py: iscsi_helper '--op' ...
+    filters.CommandFilter("/usr/sbin/ietadm", "root"),
+    filters.CommandFilter("/usr/sbin/tgtadm", "root"),
+
+    # cinder/volume/driver.py: 'vgs', '--noheadings', '-o', 'name'
+    filters.CommandFilter("/sbin/vgs", "root"),
+
+    # cinder/volume/driver.py: 'lvcreate', '-L', sizestr, '-n', volume_name,..
+    # cinder/volume/driver.py: 'lvcreate', '-L', ...
+    filters.CommandFilter("/sbin/lvcreate", "root"),
+
+    # cinder/volume/driver.py: 'dd', 'if=%s' % srcstr, 'of=%s' % deststr,...
+    filters.CommandFilter("/bin/dd", "root"),
+
+    # cinder/volume/driver.py: 'lvremove', '-f', "%s/%s" % ...
+    filters.CommandFilter("/sbin/lvremove", "root"),
+
+    # cinder/volume/driver.py: 'lvdisplay','--noheading','-C','-o','Attr',..
+    filters.CommandFilter("/sbin/lvdisplay", "root"),
+
+    # cinder/volume/driver.py: 'iscsiadm', '-m', 'discovery', '-t',...
+    # cinder/volume/driver.py: 'iscsiadm', '-m', 'node', '-T', ...
+    filters.CommandFilter("/sbin/iscsiadm", "root"),
+    ]
diff --git a/cinder/rootwrap/wrapper.py b/cinder/rootwrap/wrapper.py
new file mode 100755
index 000000000..683224e31
--- /dev/null
+++ b/cinder/rootwrap/wrapper.py
@@ -0,0 +1,60 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 OpenStack, LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+
+import os
+import sys
+
+
+FILTERS_MODULES = ['cinder.rootwrap.volume']
+
+
+def load_filters():
+    """Load filters from modules present in cinder.rootwrap."""
+    filters = []
+    for modulename in FILTERS_MODULES:
+        try:
+            __import__(modulename)
+            module = sys.modules[modulename]
+            filters = filters + module.filterlist
+        except ImportError:
+            # It's OK to have missing filters, since filter modules are
+            # shipped with specific nodes rather than with python-cinder
+            pass
+    return filters
+
+
+def match_filter(filters, userargs):
+    """
+    Checks user command and arguments through command filters and
+    returns the first matching filter, or None is none matched.
+    """
+
+    found_filter = None
+
+    for f in filters:
+        if f.match(userargs):
+            # Try other filters if executable is absent
+            if not os.access(f.exec_path, os.X_OK):
+                if not found_filter:
+                    found_filter = f
+                continue
+            # Otherwise return matching filter for execution
+            return f
+
+    # No filter matched or first missing executable
+    return found_filter
diff --git a/cinder/rpc/__init__.py b/cinder/rpc/__init__.py
new file mode 100644
index 000000000..0340116f6
--- /dev/null
+++ b/cinder/rpc/__init__.py
@@ -0,0 +1,227 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+# Copyright 2011 Red Hat, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from cinder.openstack.common import cfg
+from cinder.openstack.common import importutils
+
+
+rpc_opts = [
+    cfg.StrOpt('rpc_backend',
+               default='cinder.rpc.impl_kombu',
+               help="The messaging module to use, defaults to kombu."),
+    cfg.IntOpt('rpc_thread_pool_size',
+               default=64,
+               help='Size of RPC thread pool'),
+    cfg.IntOpt('rpc_conn_pool_size',
+               default=30,
+               help='Size of RPC connection pool'),
+    cfg.IntOpt('rpc_response_timeout',
+               default=60,
+               help='Seconds to wait for a response from call or multicall'),
+    cfg.IntOpt('allowed_rpc_exception_modules',
+               default=['cinder.exception'],
+               help='Modules of exceptions that are permitted to be recreated'
+                    'upon receiving exception data from an rpc call.'),
+    ]
+
+_CONF = None
+
+
+def register_opts(conf):
+    global _CONF
+    _CONF = conf
+    _CONF.register_opts(rpc_opts)
+    _get_impl().register_opts(_CONF)
+
+
+def create_connection(new=True):
+    """Create a connection to the message bus used for rpc.
+
+    For some example usage of creating a connection and some consumers on that
+    connection, see cinder.service.
+
+    :param new: Whether or not to create a new connection.  A new connection
+                will be created by default.  If new is False, the
+                implementation is free to return an existing connection from a
+                pool.
+
+    :returns: An instance of cinder.rpc.common.Connection
+    """
+    return _get_impl().create_connection(_CONF, new=new)
+
+
+def call(context, topic, msg, timeout=None):
+    """Invoke a remote method that returns something.
+
+    :param context: Information that identifies the user that has made this
+                    request.
+    :param topic: The topic to send the rpc message to.  This correlates to the
+                  topic argument of
+                  cinder.rpc.common.Connection.create_consumer()
+                  and only applies when the consumer was created
+                  with fanout=False.
+    :param msg: This is a dict in the form { "method" : "method_to_invoke",
+                                             "args" : dict_of_kwargs }
+    :param timeout: int, number of seconds to use for a response timeout.
+                    If set, this overrides the rpc_response_timeout option.
+
+    :returns: A dict from the remote method.
+
+    :raises: cinder.rpc.common.Timeout if a complete response is not received
+             before the timeout is reached.
+    """
+    return _get_impl().call(_CONF, context, topic, msg, timeout)
+
+
+def cast(context, topic, msg):
+    """Invoke a remote method that does not return anything.
+
+    :param context: Information that identifies the user that has made this
+                    request.
+    :param topic: The topic to send the rpc message to.  This correlates to the
+                  topic argument of
+                  cinder.rpc.common.Connection.create_consumer()
+                  and only applies when the consumer was created
+                  with fanout=False.
+    :param msg: This is a dict in the form { "method" : "method_to_invoke",
+                                             "args" : dict_of_kwargs }
+
+    :returns: None
+    """
+    return _get_impl().cast(_CONF, context, topic, msg)
+
+
+def fanout_cast(context, topic, msg):
+    """Broadcast a remote method invocation with no return.
+
+    This method will get invoked on all consumers that were set up with this
+    topic name and fanout=True.
+
+    :param context: Information that identifies the user that has made this
+                    request.
+    :param topic: The topic to send the rpc message to.  This correlates to the
+                  topic argument of
+                  cinder.rpc.common.Connection.create_consumer()
+                  and only applies when the consumer was created
+                  with fanout=True.
+    :param msg: This is a dict in the form { "method" : "method_to_invoke",
+                                             "args" : dict_of_kwargs }
+
+    :returns: None
+    """
+    return _get_impl().fanout_cast(_CONF, context, topic, msg)
+
+
+def multicall(context, topic, msg, timeout=None):
+    """Invoke a remote method and get back an iterator.
+
+    In this case, the remote method will be returning multiple values in
+    separate messages, so the return values can be processed as the come in via
+    an iterator.
+
+    :param context: Information that identifies the user that has made this
+                    request.
+    :param topic: The topic to send the rpc message to.  This correlates to the
+                  topic argument of
+                  cinder.rpc.common.Connection.create_consumer()
+                  and only applies when the consumer was created
+                  with fanout=False.
+    :param msg: This is a dict in the form { "method" : "method_to_invoke",
+                                             "args" : dict_of_kwargs }
+    :param timeout: int, number of seconds to use for a response timeout.
+                    If set, this overrides the rpc_response_timeout option.
+
+    :returns: An iterator.  The iterator will yield a tuple (N, X) where N is
+              an index that starts at 0 and increases by one for each value
+              returned and X is the Nth value that was returned by the remote
+              method.
+
+    :raises: cinder.rpc.common.Timeout if a complete response is not received
+             before the timeout is reached.
+    """
+    return _get_impl().multicall(_CONF, context, topic, msg, timeout)
+
+
+def notify(context, topic, msg):
+    """Send notification event.
+
+    :param context: Information that identifies the user that has made this
+                    request.
+    :param topic: The topic to send the notification to.
+    :param msg: This is a dict of content of event.
+
+    :returns: None
+    """
+    return _get_impl().notify(_CONF, context, topic, msg)
+
+
+def cleanup():
+    """Clean up resoruces in use by implementation.
+
+    Clean up any resources that have been allocated by the RPC implementation.
+    This is typically open connections to a messaging service.  This function
+    would get called before an application using this API exits to allow
+    connections to get torn down cleanly.
+
+    :returns: None
+    """
+    return _get_impl().cleanup()
+
+
+def cast_to_server(context, server_params, topic, msg):
+    """Invoke a remote method that does not return anything.
+
+    :param context: Information that identifies the user that has made this
+                    request.
+    :param server_params: Connection information
+    :param topic: The topic to send the notification to.
+    :param msg: This is a dict in the form { "method" : "method_to_invoke",
+                                             "args" : dict_of_kwargs }
+
+    :returns: None
+    """
+    return _get_impl().cast_to_server(_CONF, context, server_params, topic,
+                                      msg)
+
+
+def fanout_cast_to_server(context, server_params, topic, msg):
+    """Broadcast to a remote method invocation with no return.
+
+    :param context: Information that identifies the user that has made this
+                    request.
+    :param server_params: Connection information
+    :param topic: The topic to send the notification to.
+    :param msg: This is a dict in the form { "method" : "method_to_invoke",
+                                             "args" : dict_of_kwargs }
+
+    :returns: None
+    """
+    return _get_impl().fanout_cast_to_server(_CONF, context, server_params,
+                                             topic, msg)
+
+
+_RPCIMPL = None
+
+
+def _get_impl():
+    """Delay import of rpc_backend until configuration is loaded."""
+    global _RPCIMPL
+    if _RPCIMPL is None:
+        _RPCIMPL = importutils.import_module(_CONF.rpc_backend)
+    return _RPCIMPL
diff --git a/cinder/rpc/amqp.py b/cinder/rpc/amqp.py
new file mode 100644
index 000000000..b559ca78d
--- /dev/null
+++ b/cinder/rpc/amqp.py
@@ -0,0 +1,405 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+# Copyright 2011 - 2012, Red Hat, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+Shared code between AMQP based cinder.rpc implementations.
+
+The code in this module is shared between the rpc implemenations based on AMQP.
+Specifically, this includes impl_kombu and impl_qpid.  impl_carrot also uses
+AMQP, but is deprecated and predates this code.
+"""
+
+import inspect
+import sys
+import uuid
+
+from eventlet import greenpool
+from eventlet import pools
+from eventlet import semaphore
+
+from cinder import context
+from cinder import exception
+from cinder import log as logging
+from cinder.openstack.common import local
+import cinder.rpc.common as rpc_common
+from cinder import utils
+
+LOG = logging.getLogger(__name__)
+
+
+class Pool(pools.Pool):
+    """Class that implements a Pool of Connections."""
+    def __init__(self, conf, connection_cls, *args, **kwargs):
+        self.connection_cls = connection_cls
+        self.conf = conf
+        kwargs.setdefault("max_size", self.conf.rpc_conn_pool_size)
+        kwargs.setdefault("order_as_stack", True)
+        super(Pool, self).__init__(*args, **kwargs)
+
+    # TODO(comstud): Timeout connections not used in a while
+    def create(self):
+        LOG.debug('Pool creating new connection')
+        return self.connection_cls(self.conf)
+
+    def empty(self):
+        while self.free_items:
+            self.get().close()
+
+
+_pool_create_sem = semaphore.Semaphore()
+
+
+def get_connection_pool(conf, connection_cls):
+    with _pool_create_sem:
+        # Make sure only one thread tries to create the connection pool.
+        if not connection_cls.pool:
+            connection_cls.pool = Pool(conf, connection_cls)
+    return connection_cls.pool
+
+
+class ConnectionContext(rpc_common.Connection):
+    """The class that is actually returned to the caller of
+    create_connection().  This is a essentially a wrapper around
+    Connection that supports 'with' and can return a new Connection or
+    one from a pool.  It will also catch when an instance of this class
+    is to be deleted so that we can return Connections to the pool on
+    exceptions and so forth without making the caller be responsible for
+    catching all exceptions and making sure to return a connection to
+    the pool.
+    """
+
+    def __init__(self, conf, connection_pool, pooled=True, server_params=None):
+        """Create a new connection, or get one from the pool"""
+        self.connection = None
+        self.conf = conf
+        self.connection_pool = connection_pool
+        if pooled:
+            self.connection = connection_pool.get()
+        else:
+            self.connection = connection_pool.connection_cls(conf,
+                    server_params=server_params)
+        self.pooled = pooled
+
+    def __enter__(self):
+        """When with ConnectionContext() is used, return self"""
+        return self
+
+    def _done(self):
+        """If the connection came from a pool, clean it up and put it back.
+        If it did not come from a pool, close it.
+        """
+        if self.connection:
+            if self.pooled:
+                # Reset the connection so it's ready for the next caller
+                # to grab from the pool
+                self.connection.reset()
+                self.connection_pool.put(self.connection)
+            else:
+                try:
+                    self.connection.close()
+                except Exception:
+                    pass
+            self.connection = None
+
+    def __exit__(self, exc_type, exc_value, tb):
+        """End of 'with' statement.  We're done here."""
+        self._done()
+
+    def __del__(self):
+        """Caller is done with this connection.  Make sure we cleaned up."""
+        self._done()
+
+    def close(self):
+        """Caller is done with this connection."""
+        self._done()
+
+    def create_consumer(self, topic, proxy, fanout=False):
+        self.connection.create_consumer(topic, proxy, fanout)
+
+    def consume_in_thread(self):
+        self.connection.consume_in_thread()
+
+    def __getattr__(self, key):
+        """Proxy all other calls to the Connection instance"""
+        if self.connection:
+            return getattr(self.connection, key)
+        else:
+            raise exception.InvalidRPCConnectionReuse()
+
+
+def msg_reply(conf, msg_id, connection_pool, reply=None, failure=None,
+              ending=False):
+    """Sends a reply or an error on the channel signified by msg_id.
+
+    Failure should be a sys.exc_info() tuple.
+
+    """
+    with ConnectionContext(conf, connection_pool) as conn:
+        if failure:
+            failure = rpc_common.serialize_remote_exception(failure)
+
+        try:
+            msg = {'result': reply, 'failure': failure}
+        except TypeError:
+            msg = {'result': dict((k, repr(v))
+                            for k, v in reply.__dict__.iteritems()),
+                    'failure': failure}
+        if ending:
+            msg['ending'] = True
+        conn.direct_send(msg_id, msg)
+
+
+class RpcContext(context.RequestContext):
+    """Context that supports replying to a rpc.call"""
+    def __init__(self, *args, **kwargs):
+        self.msg_id = kwargs.pop('msg_id', None)
+        self.conf = kwargs.pop('conf')
+        super(RpcContext, self).__init__(*args, **kwargs)
+
+    def reply(self, reply=None, failure=None, ending=False,
+              connection_pool=None):
+        if self.msg_id:
+            msg_reply(self.conf, self.msg_id, connection_pool, reply, failure,
+                      ending)
+            if ending:
+                self.msg_id = None
+
+
+def unpack_context(conf, msg):
+    """Unpack context from msg."""
+    context_dict = {}
+    for key in list(msg.keys()):
+        # NOTE(vish): Some versions of python don't like unicode keys
+        #             in kwargs.
+        key = str(key)
+        if key.startswith('_context_'):
+            value = msg.pop(key)
+            context_dict[key[9:]] = value
+    context_dict['msg_id'] = msg.pop('_msg_id', None)
+    context_dict['conf'] = conf
+    ctx = RpcContext.from_dict(context_dict)
+    rpc_common._safe_log(LOG.debug, _('unpacked context: %s'), ctx.to_dict())
+    return ctx
+
+
+def pack_context(msg, context):
+    """Pack context into msg.
+
+    Values for message keys need to be less than 255 chars, so we pull
+    context out into a bunch of separate keys. If we want to support
+    more arguments in rabbit messages, we may want to do the same
+    for args at some point.
+
+    """
+    context_d = dict([('_context_%s' % key, value)
+                      for (key, value) in context.to_dict().iteritems()])
+    msg.update(context_d)
+
+
+class ProxyCallback(object):
+    """Calls methods on a proxy object based on method and args."""
+
+    def __init__(self, conf, proxy, connection_pool):
+        self.proxy = proxy
+        self.pool = greenpool.GreenPool(conf.rpc_thread_pool_size)
+        self.connection_pool = connection_pool
+        self.conf = conf
+
+    def __call__(self, message_data):
+        """Consumer callback to call a method on a proxy object.
+
+        Parses the message for validity and fires off a thread to call the
+        proxy object method.
+
+        Message data should be a dictionary with two keys:
+            method: string representing the method to call
+            args: dictionary of arg: value
+
+        Example: {'method': 'echo', 'args': {'value': 42}}
+
+        """
+        # It is important to clear the context here, because at this point
+        # the previous context is stored in local.store.context
+        if hasattr(local.store, 'context'):
+            del local.store.context
+        rpc_common._safe_log(LOG.debug, _('received %s'), message_data)
+        ctxt = unpack_context(self.conf, message_data)
+        method = message_data.get('method')
+        args = message_data.get('args', {})
+        if not method:
+            LOG.warn(_('no method for message: %s') % message_data)
+            ctxt.reply(_('No method for message: %s') % message_data,
+                       connection_pool=self.connection_pool)
+            return
+        self.pool.spawn_n(self._process_data, ctxt, method, args)
+
+    @exception.wrap_exception()
+    def _process_data(self, ctxt, method, args):
+        """Thread that magically looks for a method on the proxy
+        object and calls it.
+        """
+        ctxt.update_store()
+        try:
+            node_func = getattr(self.proxy, str(method))
+            node_args = dict((str(k), v) for k, v in args.iteritems())
+            # NOTE(vish): magic is fun!
+            rval = node_func(context=ctxt, **node_args)
+            # Check if the result was a generator
+            if inspect.isgenerator(rval):
+                for x in rval:
+                    ctxt.reply(x, None, connection_pool=self.connection_pool)
+            else:
+                ctxt.reply(rval, None, connection_pool=self.connection_pool)
+            # This final None tells multicall that it is done.
+            ctxt.reply(ending=True, connection_pool=self.connection_pool)
+        except Exception as e:
+            LOG.exception('Exception during message handling')
+            ctxt.reply(None, sys.exc_info(),
+                       connection_pool=self.connection_pool)
+
+
+class MulticallWaiter(object):
+    def __init__(self, conf, connection, timeout):
+        self._connection = connection
+        self._iterator = connection.iterconsume(
+                                timeout=timeout or conf.rpc_response_timeout)
+        self._result = None
+        self._done = False
+        self._got_ending = False
+        self._conf = conf
+
+    def done(self):
+        if self._done:
+            return
+        self._done = True
+        self._iterator.close()
+        self._iterator = None
+        self._connection.close()
+
+    def __call__(self, data):
+        """The consume() callback will call this.  Store the result."""
+        if data['failure']:
+            failure = data['failure']
+            self._result = rpc_common.deserialize_remote_exception(self._conf,
+                    failure)
+
+        elif data.get('ending', False):
+            self._got_ending = True
+        else:
+            self._result = data['result']
+
+    def __iter__(self):
+        """Return a result until we get a 'None' response from consumer"""
+        if self._done:
+            raise StopIteration
+        while True:
+            try:
+                self._iterator.next()
+            except Exception:
+                with utils.save_and_reraise_exception():
+                    self.done()
+            if self._got_ending:
+                self.done()
+                raise StopIteration
+            result = self._result
+            if isinstance(result, Exception):
+                self.done()
+                raise result
+            yield result
+
+
+def create_connection(conf, new, connection_pool):
+    """Create a connection"""
+    return ConnectionContext(conf, connection_pool, pooled=not new)
+
+
+def multicall(conf, context, topic, msg, timeout, connection_pool):
+    """Make a call that returns multiple times."""
+    # Can't use 'with' for multicall, as it returns an iterator
+    # that will continue to use the connection.  When it's done,
+    # connection.close() will get called which will put it back into
+    # the pool
+    LOG.debug(_('Making asynchronous call on %s ...'), topic)
+    msg_id = uuid.uuid4().hex
+    msg.update({'_msg_id': msg_id})
+    LOG.debug(_('MSG_ID is %s') % (msg_id))
+    pack_context(msg, context)
+
+    conn = ConnectionContext(conf, connection_pool)
+    wait_msg = MulticallWaiter(conf, conn, timeout)
+    conn.declare_direct_consumer(msg_id, wait_msg)
+    conn.topic_send(topic, msg)
+    return wait_msg
+
+
+def call(conf, context, topic, msg, timeout, connection_pool):
+    """Sends a message on a topic and wait for a response."""
+    rv = multicall(conf, context, topic, msg, timeout, connection_pool)
+    # NOTE(vish): return the last result from the multicall
+    rv = list(rv)
+    if not rv:
+        return
+    return rv[-1]
+
+
+def cast(conf, context, topic, msg, connection_pool):
+    """Sends a message on a topic without waiting for a response."""
+    LOG.debug(_('Making asynchronous cast on %s...'), topic)
+    pack_context(msg, context)
+    with ConnectionContext(conf, connection_pool) as conn:
+        conn.topic_send(topic, msg)
+
+
+def fanout_cast(conf, context, topic, msg, connection_pool):
+    """Sends a message on a fanout exchange without waiting for a response."""
+    LOG.debug(_('Making asynchronous fanout cast...'))
+    pack_context(msg, context)
+    with ConnectionContext(conf, connection_pool) as conn:
+        conn.fanout_send(topic, msg)
+
+
+def cast_to_server(conf, context, server_params, topic, msg, connection_pool):
+    """Sends a message on a topic to a specific server."""
+    pack_context(msg, context)
+    with ConnectionContext(conf, connection_pool, pooled=False,
+            server_params=server_params) as conn:
+        conn.topic_send(topic, msg)
+
+
+def fanout_cast_to_server(conf, context, server_params, topic, msg,
+        connection_pool):
+    """Sends a message on a fanout exchange to a specific server."""
+    pack_context(msg, context)
+    with ConnectionContext(conf, connection_pool, pooled=False,
+            server_params=server_params) as conn:
+        conn.fanout_send(topic, msg)
+
+
+def notify(conf, context, topic, msg, connection_pool):
+    """Sends a notification event on a topic."""
+    event_type = msg.get('event_type')
+    LOG.debug(_('Sending %(event_type)s on %(topic)s'), locals())
+    pack_context(msg, context)
+    with ConnectionContext(conf, connection_pool) as conn:
+        conn.notify_send(topic, msg)
+
+
+def cleanup(connection_pool):
+    if connection_pool:
+        connection_pool.empty()
diff --git a/cinder/rpc/common.py b/cinder/rpc/common.py
new file mode 100644
index 000000000..4dfaa3f76
--- /dev/null
+++ b/cinder/rpc/common.py
@@ -0,0 +1,220 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+# Copyright 2011 Red Hat, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import copy
+import sys
+import traceback
+
+from cinder import exception
+from cinder import log as logging
+from cinder.openstack.common import cfg
+from cinder.openstack.common import importutils
+from cinder import utils
+
+
+LOG = logging.getLogger(__name__)
+
+
+class RemoteError(exception.CinderException):
+    """Signifies that a remote class has raised an exception.
+
+    Contains a string representation of the type of the original exception,
+    the value of the original exception, and the traceback.  These are
+    sent to the parent as a joined string so printing the exception
+    contains all of the relevant info.
+
+    """
+    message = _("Remote error: %(exc_type)s %(value)s\n%(traceback)s.")
+
+    def __init__(self, exc_type=None, value=None, traceback=None):
+        self.exc_type = exc_type
+        self.value = value
+        self.traceback = traceback
+        super(RemoteError, self).__init__(exc_type=exc_type,
+                                          value=value,
+                                          traceback=traceback)
+
+
+class Timeout(exception.CinderException):
+    """Signifies that a timeout has occurred.
+
+    This exception is raised if the rpc_response_timeout is reached while
+    waiting for a response from the remote side.
+    """
+    message = _("Timeout while waiting on RPC response.")
+
+
+class Connection(object):
+    """A connection, returned by rpc.create_connection().
+
+    This class represents a connection to the message bus used for rpc.
+    An instance of this class should never be created by users of the rpc API.
+    Use rpc.create_connection() instead.
+    """
+    def close(self):
+        """Close the connection.
+
+        This method must be called when the connection will no longer be used.
+        It will ensure that any resources associated with the connection, such
+        as a network connection, and cleaned up.
+        """
+        raise NotImplementedError()
+
+    def create_consumer(self, conf, topic, proxy, fanout=False):
+        """Create a consumer on this connection.
+
+        A consumer is associated with a message queue on the backend message
+        bus.  The consumer will read messages from the queue, unpack them, and
+        dispatch them to the proxy object.  The contents of the message pulled
+        off of the queue will determine which method gets called on the proxy
+        object.
+
+        :param conf:  An openstack.common.cfg configuration object.
+        :param topic: This is a name associated with what to consume from.
+                      Multiple instances of a service may consume from the same
+                      topic. For example, all instances of cinder-compute
+                      consume from a queue called "compute".  In that case, the
+                      messages will get distributed amongst the consumers in a
+                      round-robin fashion if fanout=False.  If fanout=True,
+                      every consumer associated with this topic will get a
+                      copy of every message.
+        :param proxy: The object that will handle all incoming messages.
+        :param fanout: Whether or not this is a fanout topic.  See the
+                       documentation for the topic parameter for some
+                       additional comments on this.
+        """
+        raise NotImplementedError()
+
+    def consume_in_thread(self):
+        """Spawn a thread to handle incoming messages.
+
+        Spawn a thread that will be responsible for handling all incoming
+        messages for consumers that were set up on this connection.
+
+        Message dispatching inside of this is expected to be implemented in a
+        non-blocking manner.  An example implementation would be having this
+        thread pull messages in for all of the consumers, but utilize a thread
+        pool for dispatching the messages to the proxy objects.
+        """
+        raise NotImplementedError()
+
+
+def _safe_log(log_func, msg, msg_data):
+    """Sanitizes the msg_data field before logging."""
+    SANITIZE = {
+                'set_admin_password': ('new_pass',),
+                'run_instance': ('admin_password',),
+               }
+
+    has_method = 'method' in msg_data and msg_data['method'] in SANITIZE
+    has_context_token = '_context_auth_token' in msg_data
+    has_token = 'auth_token' in msg_data
+
+    if not any([has_method, has_context_token, has_token]):
+        return log_func(msg, msg_data)
+
+    msg_data = copy.deepcopy(msg_data)
+
+    if has_method:
+        method = msg_data['method']
+        if method in SANITIZE:
+            args_to_sanitize = SANITIZE[method]
+            for arg in args_to_sanitize:
+                try:
+                    msg_data['args'][arg] = "<SANITIZED>"
+                except KeyError:
+                    pass
+
+    if has_context_token:
+        msg_data['_context_auth_token'] = '<SANITIZED>'
+
+    if has_token:
+        msg_data['auth_token'] = '<SANITIZED>'
+
+    return log_func(msg, msg_data)
+
+
+def serialize_remote_exception(failure_info):
+    """Prepares exception data to be sent over rpc.
+
+    Failure_info should be a sys.exc_info() tuple.
+
+    """
+    tb = traceback.format_exception(*failure_info)
+    failure = failure_info[1]
+    LOG.error(_("Returning exception %s to caller"), unicode(failure))
+    LOG.error(tb)
+
+    kwargs = {}
+    if hasattr(failure, 'kwargs'):
+        kwargs = failure.kwargs
+
+    data = {
+        'class': str(failure.__class__.__name__),
+        'module': str(failure.__class__.__module__),
+        'message': unicode(failure),
+        'tb': tb,
+        'args': failure.args,
+        'kwargs': kwargs
+    }
+
+    json_data = utils.dumps(data)
+
+    return json_data
+
+
+def deserialize_remote_exception(conf, data):
+    failure = utils.loads(str(data))
+
+    trace = failure.get('tb', [])
+    message = failure.get('message', "") + "\n" + "\n".join(trace)
+    name = failure.get('class')
+    module = failure.get('module')
+
+    # NOTE(ameade): We DO NOT want to allow just any module to be imported, in
+    # order to prevent arbitrary code execution.
+    if not module in conf.allowed_rpc_exception_modules:
+        return RemoteError(name, failure.get('message'), trace)
+
+    try:
+        mod = importutils.import_module(module)
+        klass = getattr(mod, name)
+        if not issubclass(klass, Exception):
+            raise TypeError("Can only deserialize Exceptions")
+
+        failure = klass(**failure.get('kwargs', {}))
+    except (AttributeError, TypeError, ImportError):
+        return RemoteError(name, failure.get('message'), trace)
+
+    ex_type = type(failure)
+    str_override = lambda self: message
+    new_ex_type = type(ex_type.__name__ + "_Remote", (ex_type,),
+                       {'__str__': str_override})
+    try:
+        # NOTE(ameade): Dynamically create a new exception type and swap it in
+        # as the new type for the exception. This only works on user defined
+        # Exceptions and not core python exceptions. This is important because
+        # we cannot necessarily change an exception message so we must override
+        # the __str__ method.
+        failure.__class__ = new_ex_type
+    except TypeError as e:
+        # NOTE(ameade): If a core exception then just add the traceback to the
+        # first exception argument.
+        failure.args = (message,) + failure.args[1:]
+    return failure
diff --git a/cinder/rpc/impl_fake.py b/cinder/rpc/impl_fake.py
new file mode 100644
index 000000000..dc3b00eca
--- /dev/null
+++ b/cinder/rpc/impl_fake.py
@@ -0,0 +1,185 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+#    Copyright 2011 OpenStack LLC
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""Fake RPC implementation which calls proxy methods directly with no
+queues.  Casts will block, but this is very useful for tests.
+"""
+
+import inspect
+import json
+import signal
+import sys
+import time
+import traceback
+
+import eventlet
+
+from cinder import context
+from cinder.rpc import common as rpc_common
+
+CONSUMERS = {}
+
+
+class RpcContext(context.RequestContext):
+    def __init__(self, *args, **kwargs):
+        super(RpcContext, self).__init__(*args, **kwargs)
+        self._response = []
+        self._done = False
+
+    def reply(self, reply=None, failure=None, ending=False):
+        if ending:
+            self._done = True
+        if not self._done:
+            self._response.append((reply, failure))
+
+
+class Consumer(object):
+    def __init__(self, topic, proxy):
+        self.topic = topic
+        self.proxy = proxy
+
+    def call(self, context, method, args, timeout):
+        node_func = getattr(self.proxy, method)
+        node_args = dict((str(k), v) for k, v in args.iteritems())
+        done = eventlet.event.Event()
+
+        def _inner():
+            ctxt = RpcContext.from_dict(context.to_dict())
+            try:
+                rval = node_func(context=ctxt, **node_args)
+                res = []
+                # Caller might have called ctxt.reply() manually
+                for (reply, failure) in ctxt._response:
+                    if failure:
+                        raise failure[0], failure[1], failure[2]
+                    res.append(reply)
+                # if ending not 'sent'...we might have more data to
+                # return from the function itself
+                if not ctxt._done:
+                    if inspect.isgenerator(rval):
+                        for val in rval:
+                            res.append(val)
+                    else:
+                        res.append(rval)
+                done.send(res)
+            except Exception as e:
+                done.send_exception(e)
+
+        thread = eventlet.greenthread.spawn(_inner)
+
+        if timeout:
+            start_time = time.time()
+            while not done.ready():
+                eventlet.greenthread.sleep(1)
+                cur_time = time.time()
+                if (cur_time - start_time) > timeout:
+                    thread.kill()
+                    raise rpc_common.Timeout()
+
+        return done.wait()
+
+
+class Connection(object):
+    """Connection object."""
+
+    def __init__(self):
+        self.consumers = []
+
+    def create_consumer(self, topic, proxy, fanout=False):
+        consumer = Consumer(topic, proxy)
+        self.consumers.append(consumer)
+        if topic not in CONSUMERS:
+            CONSUMERS[topic] = []
+        CONSUMERS[topic].append(consumer)
+
+    def close(self):
+        for consumer in self.consumers:
+            CONSUMERS[consumer.topic].remove(consumer)
+        self.consumers = []
+
+    def consume_in_thread(self):
+        pass
+
+
+def create_connection(conf, new=True):
+    """Create a connection"""
+    return Connection()
+
+
+def check_serialize(msg):
+    """Make sure a message intended for rpc can be serialized."""
+    json.dumps(msg)
+
+
+def multicall(conf, context, topic, msg, timeout=None):
+    """Make a call that returns multiple times."""
+
+    check_serialize(msg)
+
+    method = msg.get('method')
+    if not method:
+        return
+    args = msg.get('args', {})
+
+    try:
+        consumer = CONSUMERS[topic][0]
+    except (KeyError, IndexError):
+        return iter([None])
+    else:
+        return consumer.call(context, method, args, timeout)
+
+
+def call(conf, context, topic, msg, timeout=None):
+    """Sends a message on a topic and wait for a response."""
+    rv = multicall(conf, context, topic, msg, timeout)
+    # NOTE(vish): return the last result from the multicall
+    rv = list(rv)
+    if not rv:
+        return
+    return rv[-1]
+
+
+def cast(conf, context, topic, msg):
+    try:
+        call(conf, context, topic, msg)
+    except Exception:
+        pass
+
+
+def notify(conf, context, topic, msg):
+    check_serialize(msg)
+
+
+def cleanup():
+    pass
+
+
+def fanout_cast(conf, context, topic, msg):
+    """Cast to all consumers of a topic"""
+    check_serialize(msg)
+    method = msg.get('method')
+    if not method:
+        return
+    args = msg.get('args', {})
+
+    for consumer in CONSUMERS.get(topic, []):
+        try:
+            consumer.call(context, method, args, None)
+        except Exception:
+            pass
+
+
+def register_opts(conf):
+    pass
diff --git a/cinder/rpc/impl_kombu.py b/cinder/rpc/impl_kombu.py
new file mode 100644
index 000000000..c64356cf8
--- /dev/null
+++ b/cinder/rpc/impl_kombu.py
@@ -0,0 +1,713 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+#    Copyright 2011 OpenStack LLC
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import itertools
+import socket
+import ssl
+import sys
+import time
+import uuid
+
+import eventlet
+import greenlet
+import kombu
+import kombu.entity
+import kombu.messaging
+import kombu.connection
+
+from cinder.openstack.common import cfg
+from cinder.rpc import amqp as rpc_amqp
+from cinder.rpc import common as rpc_common
+
+kombu_opts = [
+    cfg.StrOpt('kombu_ssl_version',
+               default='',
+               help='SSL version to use (valid only if SSL enabled)'),
+    cfg.StrOpt('kombu_ssl_keyfile',
+               default='',
+               help='SSL key file (valid only if SSL enabled)'),
+    cfg.StrOpt('kombu_ssl_certfile',
+               default='',
+               help='SSL cert file (valid only if SSL enabled)'),
+    cfg.StrOpt('kombu_ssl_ca_certs',
+               default='',
+               help=('SSL certification authority file '
+                    '(valid only if SSL enabled)')),
+    ]
+
+LOG = rpc_common.LOG
+
+
+class ConsumerBase(object):
+    """Consumer base class."""
+
+    def __init__(self, channel, callback, tag, **kwargs):
+        """Declare a queue on an amqp channel.
+
+        'channel' is the amqp channel to use
+        'callback' is the callback to call when messages are received
+        'tag' is a unique ID for the consumer on the channel
+
+        queue name, exchange name, and other kombu options are
+        passed in here as a dictionary.
+        """
+        self.callback = callback
+        self.tag = str(tag)
+        self.kwargs = kwargs
+        self.queue = None
+        self.reconnect(channel)
+
+    def reconnect(self, channel):
+        """Re-declare the queue after a rabbit reconnect"""
+        self.channel = channel
+        self.kwargs['channel'] = channel
+        self.queue = kombu.entity.Queue(**self.kwargs)
+        self.queue.declare()
+
+    def consume(self, *args, **kwargs):
+        """Actually declare the consumer on the amqp channel.  This will
+        start the flow of messages from the queue.  Using the
+        Connection.iterconsume() iterator will process the messages,
+        calling the appropriate callback.
+
+        If a callback is specified in kwargs, use that.  Otherwise,
+        use the callback passed during __init__()
+
+        If kwargs['nowait'] is True, then this call will block until
+        a message is read.
+
+        Messages will automatically be acked if the callback doesn't
+        raise an exception
+        """
+
+        options = {'consumer_tag': self.tag}
+        options['nowait'] = kwargs.get('nowait', False)
+        callback = kwargs.get('callback', self.callback)
+        if not callback:
+            raise ValueError("No callback defined")
+
+        def _callback(raw_message):
+            message = self.channel.message_to_python(raw_message)
+            try:
+                callback(message.payload)
+                message.ack()
+            except Exception:
+                LOG.exception(_("Failed to process message... skipping it."))
+
+        self.queue.consume(*args, callback=_callback, **options)
+
+    def cancel(self):
+        """Cancel the consuming from the queue, if it has started"""
+        try:
+            self.queue.cancel(self.tag)
+        except KeyError, e:
+            # NOTE(comstud): Kludge to get around a amqplib bug
+            if str(e) != "u'%s'" % self.tag:
+                raise
+        self.queue = None
+
+
+class DirectConsumer(ConsumerBase):
+    """Queue/consumer class for 'direct'"""
+
+    def __init__(self, conf, channel, msg_id, callback, tag, **kwargs):
+        """Init a 'direct' queue.
+
+        'channel' is the amqp channel to use
+        'msg_id' is the msg_id to listen on
+        'callback' is the callback to call when messages are received
+        'tag' is a unique ID for the consumer on the channel
+
+        Other kombu options may be passed
+        """
+        # Default options
+        options = {'durable': False,
+                'auto_delete': True,
+                'exclusive': True}
+        options.update(kwargs)
+        exchange = kombu.entity.Exchange(
+                name=msg_id,
+                type='direct',
+                durable=options['durable'],
+                auto_delete=options['auto_delete'])
+        super(DirectConsumer, self).__init__(
+                channel,
+                callback,
+                tag,
+                name=msg_id,
+                exchange=exchange,
+                routing_key=msg_id,
+                **options)
+
+
+class TopicConsumer(ConsumerBase):
+    """Consumer class for 'topic'"""
+
+    def __init__(self, conf, channel, topic, callback, tag, **kwargs):
+        """Init a 'topic' queue.
+
+        'channel' is the amqp channel to use
+        'topic' is the topic to listen on
+        'callback' is the callback to call when messages are received
+        'tag' is a unique ID for the consumer on the channel
+
+        Other kombu options may be passed
+        """
+        # Default options
+        options = {'durable': conf.rabbit_durable_queues,
+                'auto_delete': False,
+                'exclusive': False}
+        options.update(kwargs)
+        exchange = kombu.entity.Exchange(
+                name=conf.control_exchange,
+                type='topic',
+                durable=options['durable'],
+                auto_delete=options['auto_delete'])
+        super(TopicConsumer, self).__init__(
+                channel,
+                callback,
+                tag,
+                name=topic,
+                exchange=exchange,
+                routing_key=topic,
+                **options)
+
+
+class FanoutConsumer(ConsumerBase):
+    """Consumer class for 'fanout'"""
+
+    def __init__(self, conf, channel, topic, callback, tag, **kwargs):
+        """Init a 'fanout' queue.
+
+        'channel' is the amqp channel to use
+        'topic' is the topic to listen on
+        'callback' is the callback to call when messages are received
+        'tag' is a unique ID for the consumer on the channel
+
+        Other kombu options may be passed
+        """
+        unique = uuid.uuid4().hex
+        exchange_name = '%s_fanout' % topic
+        queue_name = '%s_fanout_%s' % (topic, unique)
+
+        # Default options
+        options = {'durable': False,
+                'auto_delete': True,
+                'exclusive': True}
+        options.update(kwargs)
+        exchange = kombu.entity.Exchange(
+                name=exchange_name,
+                type='fanout',
+                durable=options['durable'],
+                auto_delete=options['auto_delete'])
+        super(FanoutConsumer, self).__init__(
+                channel,
+                callback,
+                tag,
+                name=queue_name,
+                exchange=exchange,
+                routing_key=topic,
+                **options)
+
+
+class Publisher(object):
+    """Base Publisher class"""
+
+    def __init__(self, channel, exchange_name, routing_key, **kwargs):
+        """Init the Publisher class with the exchange_name, routing_key,
+        and other options
+        """
+        self.exchange_name = exchange_name
+        self.routing_key = routing_key
+        self.kwargs = kwargs
+        self.reconnect(channel)
+
+    def reconnect(self, channel):
+        """Re-establish the Producer after a rabbit reconnection"""
+        self.exchange = kombu.entity.Exchange(name=self.exchange_name,
+                **self.kwargs)
+        self.producer = kombu.messaging.Producer(exchange=self.exchange,
+                channel=channel, routing_key=self.routing_key)
+
+    def send(self, msg):
+        """Send a message"""
+        self.producer.publish(msg)
+
+
+class DirectPublisher(Publisher):
+    """Publisher class for 'direct'"""
+    def __init__(self, conf, channel, msg_id, **kwargs):
+        """init a 'direct' publisher.
+
+        Kombu options may be passed as keyword args to override defaults
+        """
+
+        options = {'durable': False,
+                'auto_delete': True,
+                'exclusive': True}
+        options.update(kwargs)
+        super(DirectPublisher, self).__init__(channel,
+                msg_id,
+                msg_id,
+                type='direct',
+                **options)
+
+
+class TopicPublisher(Publisher):
+    """Publisher class for 'topic'"""
+    def __init__(self, conf, channel, topic, **kwargs):
+        """init a 'topic' publisher.
+
+        Kombu options may be passed as keyword args to override defaults
+        """
+        options = {'durable': conf.rabbit_durable_queues,
+                'auto_delete': False,
+                'exclusive': False}
+        options.update(kwargs)
+        super(TopicPublisher, self).__init__(channel,
+                conf.control_exchange,
+                topic,
+                type='topic',
+                **options)
+
+
+class FanoutPublisher(Publisher):
+    """Publisher class for 'fanout'"""
+    def __init__(self, conf, channel, topic, **kwargs):
+        """init a 'fanout' publisher.
+
+        Kombu options may be passed as keyword args to override defaults
+        """
+        options = {'durable': False,
+                'auto_delete': True,
+                'exclusive': True}
+        options.update(kwargs)
+        super(FanoutPublisher, self).__init__(channel,
+                '%s_fanout' % topic,
+                None,
+                type='fanout',
+                **options)
+
+
+class NotifyPublisher(TopicPublisher):
+    """Publisher class for 'notify'"""
+
+    def __init__(self, conf, channel, topic, **kwargs):
+        self.durable = kwargs.pop('durable', conf.rabbit_durable_queues)
+        super(NotifyPublisher, self).__init__(conf, channel, topic, **kwargs)
+
+    def reconnect(self, channel):
+        super(NotifyPublisher, self).reconnect(channel)
+
+        # NOTE(jerdfelt): Normally the consumer would create the queue, but
+        # we do this to ensure that messages don't get dropped if the
+        # consumer is started after we do
+        queue = kombu.entity.Queue(channel=channel,
+                exchange=self.exchange,
+                durable=self.durable,
+                name=self.routing_key,
+                routing_key=self.routing_key)
+        queue.declare()
+
+
+class Connection(object):
+    """Connection object."""
+
+    pool = None
+
+    def __init__(self, conf, server_params=None):
+        self.consumers = []
+        self.consumer_thread = None
+        self.conf = conf
+        self.max_retries = self.conf.rabbit_max_retries
+        # Try forever?
+        if self.max_retries <= 0:
+            self.max_retries = None
+        self.interval_start = self.conf.rabbit_retry_interval
+        self.interval_stepping = self.conf.rabbit_retry_backoff
+        # max retry-interval = 30 seconds
+        self.interval_max = 30
+        self.memory_transport = False
+
+        if server_params is None:
+            server_params = {}
+
+        # Keys to translate from server_params to kombu params
+        server_params_to_kombu_params = {'username': 'userid'}
+
+        params = {}
+        for sp_key, value in server_params.iteritems():
+            p_key = server_params_to_kombu_params.get(sp_key, sp_key)
+            params[p_key] = value
+
+        params.setdefault('hostname', self.conf.rabbit_host)
+        params.setdefault('port', self.conf.rabbit_port)
+        params.setdefault('userid', self.conf.rabbit_userid)
+        params.setdefault('password', self.conf.rabbit_password)
+        params.setdefault('virtual_host', self.conf.rabbit_virtual_host)
+
+        self.params = params
+
+        if self.conf.fake_rabbit:
+            self.params['transport'] = 'memory'
+            self.memory_transport = True
+        else:
+            self.memory_transport = False
+
+        if self.conf.rabbit_use_ssl:
+            self.params['ssl'] = self._fetch_ssl_params()
+
+        self.connection = None
+        self.reconnect()
+
+    def _fetch_ssl_params(self):
+        """Handles fetching what ssl params
+        should be used for the connection (if any)"""
+        ssl_params = dict()
+
+        # http://docs.python.org/library/ssl.html - ssl.wrap_socket
+        if self.conf.kombu_ssl_version:
+            ssl_params['ssl_version'] = self.conf.kombu_ssl_version
+        if self.conf.kombu_ssl_keyfile:
+            ssl_params['keyfile'] = self.conf.kombu_ssl_keyfile
+        if self.conf.kombu_ssl_certfile:
+            ssl_params['certfile'] = self.conf.kombu_ssl_certfile
+        if self.conf.kombu_ssl_ca_certs:
+            ssl_params['ca_certs'] = self.conf.kombu_ssl_ca_certs
+            # We might want to allow variations in the
+            # future with this?
+            ssl_params['cert_reqs'] = ssl.CERT_REQUIRED
+
+        if not ssl_params:
+            # Just have the default behavior
+            return True
+        else:
+            # Return the extended behavior
+            return ssl_params
+
+    def _connect(self):
+        """Connect to rabbit.  Re-establish any queues that may have
+        been declared before if we are reconnecting.  Exceptions should
+        be handled by the caller.
+        """
+        if self.connection:
+            LOG.info(_("Reconnecting to AMQP server on "
+                    "%(hostname)s:%(port)d") % self.params)
+            try:
+                self.connection.close()
+            except self.connection_errors:
+                pass
+            # Setting this in case the next statement fails, though
+            # it shouldn't be doing any network operations, yet.
+            self.connection = None
+        self.connection = kombu.connection.BrokerConnection(
+                **self.params)
+        self.connection_errors = self.connection.connection_errors
+        if self.memory_transport:
+            # Kludge to speed up tests.
+            self.connection.transport.polling_interval = 0.0
+        self.consumer_num = itertools.count(1)
+        self.connection.connect()
+        self.channel = self.connection.channel()
+        # work around 'memory' transport bug in 1.1.3
+        if self.memory_transport:
+            self.channel._new_queue('ae.undeliver')
+        for consumer in self.consumers:
+            consumer.reconnect(self.channel)
+        LOG.info(_('Connected to AMQP server on %(hostname)s:%(port)d'),
+                 self.params)
+
+    def reconnect(self):
+        """Handles reconnecting and re-establishing queues.
+        Will retry up to self.max_retries number of times.
+        self.max_retries = 0 means to retry forever.
+        Sleep between tries, starting at self.interval_start
+        seconds, backing off self.interval_stepping number of seconds
+        each attempt.
+        """
+
+        attempt = 0
+        while True:
+            attempt += 1
+            try:
+                self._connect()
+                return
+            except (self.connection_errors, IOError), e:
+                pass
+            except Exception, e:
+                # NOTE(comstud): Unfortunately it's possible for amqplib
+                # to return an error not covered by its transport
+                # connection_errors in the case of a timeout waiting for
+                # a protocol response.  (See paste link in LP888621)
+                # So, we check all exceptions for 'timeout' in them
+                # and try to reconnect in this case.
+                if 'timeout' not in str(e):
+                    raise
+
+            log_info = {}
+            log_info['err_str'] = str(e)
+            log_info['max_retries'] = self.max_retries
+            log_info.update(self.params)
+
+            if self.max_retries and attempt == self.max_retries:
+                LOG.exception(_('Unable to connect to AMQP server on '
+                        '%(hostname)s:%(port)d after %(max_retries)d '
+                        'tries: %(err_str)s') % log_info)
+                # NOTE(comstud): Copied from original code.  There's
+                # really no better recourse because if this was a queue we
+                # need to consume on, we have no way to consume anymore.
+                sys.exit(1)
+
+            if attempt == 1:
+                sleep_time = self.interval_start or 1
+            elif attempt > 1:
+                sleep_time += self.interval_stepping
+            if self.interval_max:
+                sleep_time = min(sleep_time, self.interval_max)
+
+            log_info['sleep_time'] = sleep_time
+            LOG.exception(_('AMQP server on %(hostname)s:%(port)d is'
+                    ' unreachable: %(err_str)s. Trying again in '
+                    '%(sleep_time)d seconds.') % log_info)
+            time.sleep(sleep_time)
+
+    def ensure(self, error_callback, method, *args, **kwargs):
+        while True:
+            try:
+                return method(*args, **kwargs)
+            except (self.connection_errors, socket.timeout, IOError), e:
+                pass
+            except Exception, e:
+                # NOTE(comstud): Unfortunately it's possible for amqplib
+                # to return an error not covered by its transport
+                # connection_errors in the case of a timeout waiting for
+                # a protocol response.  (See paste link in LP888621)
+                # So, we check all exceptions for 'timeout' in them
+                # and try to reconnect in this case.
+                if 'timeout' not in str(e):
+                    raise
+            if error_callback:
+                error_callback(e)
+            self.reconnect()
+
+    def get_channel(self):
+        """Convenience call for bin/clear_rabbit_queues"""
+        return self.channel
+
+    def close(self):
+        """Close/release this connection"""
+        self.cancel_consumer_thread()
+        self.connection.release()
+        self.connection = None
+
+    def reset(self):
+        """Reset a connection so it can be used again"""
+        self.cancel_consumer_thread()
+        self.channel.close()
+        self.channel = self.connection.channel()
+        # work around 'memory' transport bug in 1.1.3
+        if self.memory_transport:
+            self.channel._new_queue('ae.undeliver')
+        self.consumers = []
+
+    def declare_consumer(self, consumer_cls, topic, callback):
+        """Create a Consumer using the class that was passed in and
+        add it to our list of consumers
+        """
+
+        def _connect_error(exc):
+            log_info = {'topic': topic, 'err_str': str(exc)}
+            LOG.error(_("Failed to declare consumer for topic '%(topic)s': "
+                "%(err_str)s") % log_info)
+
+        def _declare_consumer():
+            consumer = consumer_cls(self.conf, self.channel, topic, callback,
+                    self.consumer_num.next())
+            self.consumers.append(consumer)
+            return consumer
+
+        return self.ensure(_connect_error, _declare_consumer)
+
+    def iterconsume(self, limit=None, timeout=None):
+        """Return an iterator that will consume from all queues/consumers"""
+
+        info = {'do_consume': True}
+
+        def _error_callback(exc):
+            if isinstance(exc, socket.timeout):
+                LOG.exception(_('Timed out waiting for RPC response: %s') %
+                        str(exc))
+                raise rpc_common.Timeout()
+            else:
+                LOG.exception(_('Failed to consume message from queue: %s') %
+                        str(exc))
+                info['do_consume'] = True
+
+        def _consume():
+            if info['do_consume']:
+                queues_head = self.consumers[:-1]
+                queues_tail = self.consumers[-1]
+                for queue in queues_head:
+                    queue.consume(nowait=True)
+                queues_tail.consume(nowait=False)
+                info['do_consume'] = False
+            return self.connection.drain_events(timeout=timeout)
+
+        for iteration in itertools.count(0):
+            if limit and iteration >= limit:
+                raise StopIteration
+            yield self.ensure(_error_callback, _consume)
+
+    def cancel_consumer_thread(self):
+        """Cancel a consumer thread"""
+        if self.consumer_thread is not None:
+            self.consumer_thread.kill()
+            try:
+                self.consumer_thread.wait()
+            except greenlet.GreenletExit:
+                pass
+            self.consumer_thread = None
+
+    def publisher_send(self, cls, topic, msg, **kwargs):
+        """Send to a publisher based on the publisher class"""
+
+        def _error_callback(exc):
+            log_info = {'topic': topic, 'err_str': str(exc)}
+            LOG.exception(_("Failed to publish message to topic "
+                "'%(topic)s': %(err_str)s") % log_info)
+
+        def _publish():
+            publisher = cls(self.conf, self.channel, topic, **kwargs)
+            publisher.send(msg)
+
+        self.ensure(_error_callback, _publish)
+
+    def declare_direct_consumer(self, topic, callback):
+        """Create a 'direct' queue.
+        In cinder's use, this is generally a msg_id queue used for
+        responses for call/multicall
+        """
+        self.declare_consumer(DirectConsumer, topic, callback)
+
+    def declare_topic_consumer(self, topic, callback=None):
+        """Create a 'topic' consumer."""
+        self.declare_consumer(TopicConsumer, topic, callback)
+
+    def declare_fanout_consumer(self, topic, callback):
+        """Create a 'fanout' consumer"""
+        self.declare_consumer(FanoutConsumer, topic, callback)
+
+    def direct_send(self, msg_id, msg):
+        """Send a 'direct' message"""
+        self.publisher_send(DirectPublisher, msg_id, msg)
+
+    def topic_send(self, topic, msg):
+        """Send a 'topic' message"""
+        self.publisher_send(TopicPublisher, topic, msg)
+
+    def fanout_send(self, topic, msg):
+        """Send a 'fanout' message"""
+        self.publisher_send(FanoutPublisher, topic, msg)
+
+    def notify_send(self, topic, msg, **kwargs):
+        """Send a notify message on a topic"""
+        self.publisher_send(NotifyPublisher, topic, msg, **kwargs)
+
+    def consume(self, limit=None):
+        """Consume from all queues/consumers"""
+        it = self.iterconsume(limit=limit)
+        while True:
+            try:
+                it.next()
+            except StopIteration:
+                return
+
+    def consume_in_thread(self):
+        """Consumer from all queues/consumers in a greenthread"""
+        def _consumer_thread():
+            try:
+                self.consume()
+            except greenlet.GreenletExit:
+                return
+        if self.consumer_thread is None:
+            self.consumer_thread = eventlet.spawn(_consumer_thread)
+        return self.consumer_thread
+
+    def create_consumer(self, topic, proxy, fanout=False):
+        """Create a consumer that calls a method in a proxy object"""
+        proxy_cb = rpc_amqp.ProxyCallback(self.conf, proxy,
+                rpc_amqp.get_connection_pool(self, Connection))
+
+        if fanout:
+            self.declare_fanout_consumer(topic, proxy_cb)
+        else:
+            self.declare_topic_consumer(topic, proxy_cb)
+
+
+def create_connection(conf, new=True):
+    """Create a connection"""
+    return rpc_amqp.create_connection(conf, new,
+            rpc_amqp.get_connection_pool(conf, Connection))
+
+
+def multicall(conf, context, topic, msg, timeout=None):
+    """Make a call that returns multiple times."""
+    return rpc_amqp.multicall(conf, context, topic, msg, timeout,
+            rpc_amqp.get_connection_pool(conf, Connection))
+
+
+def call(conf, context, topic, msg, timeout=None):
+    """Sends a message on a topic and wait for a response."""
+    return rpc_amqp.call(conf, context, topic, msg, timeout,
+            rpc_amqp.get_connection_pool(conf, Connection))
+
+
+def cast(conf, context, topic, msg):
+    """Sends a message on a topic without waiting for a response."""
+    return rpc_amqp.cast(conf, context, topic, msg,
+            rpc_amqp.get_connection_pool(conf, Connection))
+
+
+def fanout_cast(conf, context, topic, msg):
+    """Sends a message on a fanout exchange without waiting for a response."""
+    return rpc_amqp.fanout_cast(conf, context, topic, msg,
+            rpc_amqp.get_connection_pool(conf, Connection))
+
+
+def cast_to_server(conf, context, server_params, topic, msg):
+    """Sends a message on a topic to a specific server."""
+    return rpc_amqp.cast_to_server(conf, context, server_params, topic, msg,
+            rpc_amqp.get_connection_pool(conf, Connection))
+
+
+def fanout_cast_to_server(conf, context, server_params, topic, msg):
+    """Sends a message on a fanout exchange to a specific server."""
+    return rpc_amqp.cast_to_server(conf, context, server_params, topic, msg,
+            rpc_amqp.get_connection_pool(conf, Connection))
+
+
+def notify(conf, context, topic, msg):
+    """Sends a notification event on a topic."""
+    return rpc_amqp.notify(conf, context, topic, msg,
+            rpc_amqp.get_connection_pool(conf, Connection))
+
+
+def cleanup():
+    return rpc_amqp.cleanup(Connection.pool)
+
+
+def register_opts(conf):
+    conf.register_opts(kombu_opts)
diff --git a/cinder/rpc/impl_qpid.py b/cinder/rpc/impl_qpid.py
new file mode 100644
index 000000000..95ab00741
--- /dev/null
+++ b/cinder/rpc/impl_qpid.py
@@ -0,0 +1,563 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+#    Copyright 2011 OpenStack LLC
+#    Copyright 2011 - 2012, Red Hat, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import itertools
+import time
+import uuid
+import json
+
+import eventlet
+import greenlet
+import qpid.messaging
+import qpid.messaging.exceptions
+
+from cinder import log as logging
+from cinder.openstack.common import cfg
+from cinder.rpc import amqp as rpc_amqp
+from cinder.rpc import common as rpc_common
+
+LOG = logging.getLogger(__name__)
+
+qpid_opts = [
+    cfg.StrOpt('qpid_hostname',
+               default='localhost',
+               help='Qpid broker hostname'),
+    cfg.StrOpt('qpid_port',
+               default='5672',
+               help='Qpid broker port'),
+    cfg.StrOpt('qpid_username',
+               default='',
+               help='Username for qpid connection'),
+    cfg.StrOpt('qpid_password',
+               default='',
+               help='Password for qpid connection'),
+    cfg.StrOpt('qpid_sasl_mechanisms',
+               default='',
+               help='Space separated list of SASL mechanisms to use for auth'),
+    cfg.BoolOpt('qpid_reconnect',
+                default=True,
+                help='Automatically reconnect'),
+    cfg.IntOpt('qpid_reconnect_timeout',
+               default=0,
+               help='Reconnection timeout in seconds'),
+    cfg.IntOpt('qpid_reconnect_limit',
+               default=0,
+               help='Max reconnections before giving up'),
+    cfg.IntOpt('qpid_reconnect_interval_min',
+               default=0,
+               help='Minimum seconds between reconnection attempts'),
+    cfg.IntOpt('qpid_reconnect_interval_max',
+               default=0,
+               help='Maximum seconds between reconnection attempts'),
+    cfg.IntOpt('qpid_reconnect_interval',
+               default=0,
+               help='Equivalent to setting max and min to the same value'),
+    cfg.IntOpt('qpid_heartbeat',
+               default=5,
+               help='Seconds between connection keepalive heartbeats'),
+    cfg.StrOpt('qpid_protocol',
+               default='tcp',
+               help="Transport to use, either 'tcp' or 'ssl'"),
+    cfg.BoolOpt('qpid_tcp_nodelay',
+                default=True,
+                help='Disable Nagle algorithm'),
+    ]
+
+
+class ConsumerBase(object):
+    """Consumer base class."""
+
+    def __init__(self, session, callback, node_name, node_opts,
+                 link_name, link_opts):
+        """Declare a queue on an amqp session.
+
+        'session' is the amqp session to use
+        'callback' is the callback to call when messages are received
+        'node_name' is the first part of the Qpid address string, before ';'
+        'node_opts' will be applied to the "x-declare" section of "node"
+                    in the address string.
+        'link_name' goes into the "name" field of the "link" in the address
+                    string
+        'link_opts' will be applied to the "x-declare" section of "link"
+                    in the address string.
+        """
+        self.callback = callback
+        self.receiver = None
+        self.session = None
+
+        addr_opts = {
+            "create": "always",
+            "node": {
+                "type": "topic",
+                "x-declare": {
+                    "durable": True,
+                    "auto-delete": True,
+                },
+            },
+            "link": {
+                "name": link_name,
+                "durable": True,
+                "x-declare": {
+                    "durable": False,
+                    "auto-delete": True,
+                    "exclusive": False,
+                },
+            },
+        }
+        addr_opts["node"]["x-declare"].update(node_opts)
+        addr_opts["link"]["x-declare"].update(link_opts)
+
+        self.address = "%s ; %s" % (node_name, json.dumps(addr_opts))
+
+        self.reconnect(session)
+
+    def reconnect(self, session):
+        """Re-declare the receiver after a qpid reconnect"""
+        self.session = session
+        self.receiver = session.receiver(self.address)
+        self.receiver.capacity = 1
+
+    def consume(self):
+        """Fetch the message and pass it to the callback object"""
+        message = self.receiver.fetch()
+        self.callback(message.content)
+
+    def get_receiver(self):
+        return self.receiver
+
+
+class DirectConsumer(ConsumerBase):
+    """Queue/consumer class for 'direct'"""
+
+    def __init__(self, conf, session, msg_id, callback):
+        """Init a 'direct' queue.
+
+        'session' is the amqp session to use
+        'msg_id' is the msg_id to listen on
+        'callback' is the callback to call when messages are received
+        """
+
+        super(DirectConsumer, self).__init__(session, callback,
+                        "%s/%s" % (msg_id, msg_id),
+                        {"type": "direct"},
+                        msg_id,
+                        {"exclusive": True})
+
+
+class TopicConsumer(ConsumerBase):
+    """Consumer class for 'topic'"""
+
+    def __init__(self, conf, session, topic, callback):
+        """Init a 'topic' queue.
+
+        'session' is the amqp session to use
+        'topic' is the topic to listen on
+        'callback' is the callback to call when messages are received
+        """
+
+        super(TopicConsumer, self).__init__(session, callback,
+                        "%s/%s" % (conf.control_exchange, topic), {},
+                        topic, {})
+
+
+class FanoutConsumer(ConsumerBase):
+    """Consumer class for 'fanout'"""
+
+    def __init__(self, conf, session, topic, callback):
+        """Init a 'fanout' queue.
+
+        'session' is the amqp session to use
+        'topic' is the topic to listen on
+        'callback' is the callback to call when messages are received
+        """
+
+        super(FanoutConsumer, self).__init__(session, callback,
+                        "%s_fanout" % topic,
+                        {"durable": False, "type": "fanout"},
+                        "%s_fanout_%s" % (topic, uuid.uuid4().hex),
+                        {"exclusive": True})
+
+
+class Publisher(object):
+    """Base Publisher class"""
+
+    def __init__(self, session, node_name, node_opts=None):
+        """Init the Publisher class with the exchange_name, routing_key,
+        and other options
+        """
+        self.sender = None
+        self.session = session
+
+        addr_opts = {
+            "create": "always",
+            "node": {
+                "type": "topic",
+                "x-declare": {
+                    "durable": False,
+                    # auto-delete isn't implemented for exchanges in qpid,
+                    # but put in here anyway
+                    "auto-delete": True,
+                },
+            },
+        }
+        if node_opts:
+            addr_opts["node"]["x-declare"].update(node_opts)
+
+        self.address = "%s ; %s" % (node_name, json.dumps(addr_opts))
+
+        self.reconnect(session)
+
+    def reconnect(self, session):
+        """Re-establish the Sender after a reconnection"""
+        self.sender = session.sender(self.address)
+
+    def send(self, msg):
+        """Send a message"""
+        self.sender.send(msg)
+
+
+class DirectPublisher(Publisher):
+    """Publisher class for 'direct'"""
+    def __init__(self, conf, session, msg_id):
+        """Init a 'direct' publisher."""
+        super(DirectPublisher, self).__init__(session, msg_id,
+                                              {"type": "Direct"})
+
+
+class TopicPublisher(Publisher):
+    """Publisher class for 'topic'"""
+    def __init__(self, conf, session, topic):
+        """init a 'topic' publisher.
+        """
+        super(TopicPublisher, self).__init__(session,
+                                "%s/%s" % (conf.control_exchange, topic))
+
+
+class FanoutPublisher(Publisher):
+    """Publisher class for 'fanout'"""
+    def __init__(self, conf, session, topic):
+        """init a 'fanout' publisher.
+        """
+        super(FanoutPublisher, self).__init__(session,
+                                "%s_fanout" % topic, {"type": "fanout"})
+
+
+class NotifyPublisher(Publisher):
+    """Publisher class for notifications"""
+    def __init__(self, conf, session, topic):
+        """init a 'topic' publisher.
+        """
+        super(NotifyPublisher, self).__init__(session,
+                                "%s/%s" % (conf.control_exchange, topic),
+                                {"durable": True})
+
+
+class Connection(object):
+    """Connection object."""
+
+    pool = None
+
+    def __init__(self, conf, server_params=None):
+        self.session = None
+        self.consumers = {}
+        self.consumer_thread = None
+        self.conf = conf
+
+        if server_params is None:
+            server_params = {}
+
+        default_params = dict(hostname=self.conf.qpid_hostname,
+                port=self.conf.qpid_port,
+                username=self.conf.qpid_username,
+                password=self.conf.qpid_password)
+
+        params = server_params
+        for key in default_params.keys():
+            params.setdefault(key, default_params[key])
+
+        self.broker = params['hostname'] + ":" + str(params['port'])
+        # Create the connection - this does not open the connection
+        self.connection = qpid.messaging.Connection(self.broker)
+
+        # Check if flags are set and if so set them for the connection
+        # before we call open
+        self.connection.username = params['username']
+        self.connection.password = params['password']
+        self.connection.sasl_mechanisms = self.conf.qpid_sasl_mechanisms
+        self.connection.reconnect = self.conf.qpid_reconnect
+        if self.conf.qpid_reconnect_timeout:
+            self.connection.reconnect_timeout = (
+                    self.conf.qpid_reconnect_timeout)
+        if self.conf.qpid_reconnect_limit:
+            self.connection.reconnect_limit = self.conf.qpid_reconnect_limit
+        if self.conf.qpid_reconnect_interval_max:
+            self.connection.reconnect_interval_max = (
+                    self.conf.qpid_reconnect_interval_max)
+        if self.conf.qpid_reconnect_interval_min:
+            self.connection.reconnect_interval_min = (
+                    self.conf.qpid_reconnect_interval_min)
+        if self.conf.qpid_reconnect_interval:
+            self.connection.reconnect_interval = (
+                    self.conf.qpid_reconnect_interval)
+        self.connection.hearbeat = self.conf.qpid_heartbeat
+        self.connection.protocol = self.conf.qpid_protocol
+        self.connection.tcp_nodelay = self.conf.qpid_tcp_nodelay
+
+        # Open is part of reconnect -
+        # NOTE(WGH) not sure we need this with the reconnect flags
+        self.reconnect()
+
+    def _register_consumer(self, consumer):
+        self.consumers[str(consumer.get_receiver())] = consumer
+
+    def _lookup_consumer(self, receiver):
+        return self.consumers[str(receiver)]
+
+    def reconnect(self):
+        """Handles reconnecting and re-establishing sessions and queues"""
+        if self.connection.opened():
+            try:
+                self.connection.close()
+            except qpid.messaging.exceptions.ConnectionError:
+                pass
+
+        while True:
+            try:
+                self.connection.open()
+            except qpid.messaging.exceptions.ConnectionError, e:
+                LOG.error(_('Unable to connect to AMQP server: %s'), e)
+                time.sleep(self.conf.qpid_reconnect_interval or 1)
+            else:
+                break
+
+        LOG.info(_('Connected to AMQP server on %s'), self.broker)
+
+        self.session = self.connection.session()
+
+        for consumer in self.consumers.itervalues():
+            consumer.reconnect(self.session)
+
+        if self.consumers:
+            LOG.debug(_("Re-established AMQP queues"))
+
+    def ensure(self, error_callback, method, *args, **kwargs):
+        while True:
+            try:
+                return method(*args, **kwargs)
+            except (qpid.messaging.exceptions.Empty,
+                    qpid.messaging.exceptions.ConnectionError), e:
+                if error_callback:
+                    error_callback(e)
+                self.reconnect()
+
+    def close(self):
+        """Close/release this connection"""
+        self.cancel_consumer_thread()
+        self.connection.close()
+        self.connection = None
+
+    def reset(self):
+        """Reset a connection so it can be used again"""
+        self.cancel_consumer_thread()
+        self.session.close()
+        self.session = self.connection.session()
+        self.consumers = {}
+
+    def declare_consumer(self, consumer_cls, topic, callback):
+        """Create a Consumer using the class that was passed in and
+        add it to our list of consumers
+        """
+        def _connect_error(exc):
+            log_info = {'topic': topic, 'err_str': str(exc)}
+            LOG.error(_("Failed to declare consumer for topic '%(topic)s': "
+                "%(err_str)s") % log_info)
+
+        def _declare_consumer():
+            consumer = consumer_cls(self.conf, self.session, topic, callback)
+            self._register_consumer(consumer)
+            return consumer
+
+        return self.ensure(_connect_error, _declare_consumer)
+
+    def iterconsume(self, limit=None, timeout=None):
+        """Return an iterator that will consume from all queues/consumers"""
+
+        def _error_callback(exc):
+            if isinstance(exc, qpid.messaging.exceptions.Empty):
+                LOG.exception(_('Timed out waiting for RPC response: %s') %
+                        str(exc))
+                raise rpc_common.Timeout()
+            else:
+                LOG.exception(_('Failed to consume message from queue: %s') %
+                        str(exc))
+
+        def _consume():
+            nxt_receiver = self.session.next_receiver(timeout=timeout)
+            try:
+                self._lookup_consumer(nxt_receiver).consume()
+            except Exception:
+                LOG.exception(_("Error processing message.  Skipping it."))
+
+        for iteration in itertools.count(0):
+            if limit and iteration >= limit:
+                raise StopIteration
+            yield self.ensure(_error_callback, _consume)
+
+    def cancel_consumer_thread(self):
+        """Cancel a consumer thread"""
+        if self.consumer_thread is not None:
+            self.consumer_thread.kill()
+            try:
+                self.consumer_thread.wait()
+            except greenlet.GreenletExit:
+                pass
+            self.consumer_thread = None
+
+    def publisher_send(self, cls, topic, msg):
+        """Send to a publisher based on the publisher class"""
+
+        def _connect_error(exc):
+            log_info = {'topic': topic, 'err_str': str(exc)}
+            LOG.exception(_("Failed to publish message to topic "
+                "'%(topic)s': %(err_str)s") % log_info)
+
+        def _publisher_send():
+            publisher = cls(self.conf, self.session, topic)
+            publisher.send(msg)
+
+        return self.ensure(_connect_error, _publisher_send)
+
+    def declare_direct_consumer(self, topic, callback):
+        """Create a 'direct' queue.
+        In cinder's use, this is generally a msg_id queue used for
+        responses for call/multicall
+        """
+        self.declare_consumer(DirectConsumer, topic, callback)
+
+    def declare_topic_consumer(self, topic, callback=None):
+        """Create a 'topic' consumer."""
+        self.declare_consumer(TopicConsumer, topic, callback)
+
+    def declare_fanout_consumer(self, topic, callback):
+        """Create a 'fanout' consumer"""
+        self.declare_consumer(FanoutConsumer, topic, callback)
+
+    def direct_send(self, msg_id, msg):
+        """Send a 'direct' message"""
+        self.publisher_send(DirectPublisher, msg_id, msg)
+
+    def topic_send(self, topic, msg):
+        """Send a 'topic' message"""
+        self.publisher_send(TopicPublisher, topic, msg)
+
+    def fanout_send(self, topic, msg):
+        """Send a 'fanout' message"""
+        self.publisher_send(FanoutPublisher, topic, msg)
+
+    def notify_send(self, topic, msg, **kwargs):
+        """Send a notify message on a topic"""
+        self.publisher_send(NotifyPublisher, topic, msg)
+
+    def consume(self, limit=None):
+        """Consume from all queues/consumers"""
+        it = self.iterconsume(limit=limit)
+        while True:
+            try:
+                it.next()
+            except StopIteration:
+                return
+
+    def consume_in_thread(self):
+        """Consumer from all queues/consumers in a greenthread"""
+        def _consumer_thread():
+            try:
+                self.consume()
+            except greenlet.GreenletExit:
+                return
+        if self.consumer_thread is None:
+            self.consumer_thread = eventlet.spawn(_consumer_thread)
+        return self.consumer_thread
+
+    def create_consumer(self, topic, proxy, fanout=False):
+        """Create a consumer that calls a method in a proxy object"""
+        proxy_cb = rpc_amqp.ProxyCallback(self.conf, proxy,
+                rpc_amqp.get_connection_pool(self, Connection))
+
+        if fanout:
+            consumer = FanoutConsumer(self.conf, self.session, topic, proxy_cb)
+        else:
+            consumer = TopicConsumer(self.conf, self.session, topic, proxy_cb)
+
+        self._register_consumer(consumer)
+
+        return consumer
+
+
+def create_connection(conf, new=True):
+    """Create a connection"""
+    return rpc_amqp.create_connection(conf, new,
+            rpc_amqp.get_connection_pool(conf, Connection))
+
+
+def multicall(conf, context, topic, msg, timeout=None):
+    """Make a call that returns multiple times."""
+    return rpc_amqp.multicall(conf, context, topic, msg, timeout,
+            rpc_amqp.get_connection_pool(conf, Connection))
+
+
+def call(conf, context, topic, msg, timeout=None):
+    """Sends a message on a topic and wait for a response."""
+    return rpc_amqp.call(conf, context, topic, msg, timeout,
+            rpc_amqp.get_connection_pool(conf, Connection))
+
+
+def cast(conf, context, topic, msg):
+    """Sends a message on a topic without waiting for a response."""
+    return rpc_amqp.cast(conf, context, topic, msg,
+            rpc_amqp.get_connection_pool(conf, Connection))
+
+
+def fanout_cast(conf, context, topic, msg):
+    """Sends a message on a fanout exchange without waiting for a response."""
+    return rpc_amqp.fanout_cast(conf, context, topic, msg,
+            rpc_amqp.get_connection_pool(conf, Connection))
+
+
+def cast_to_server(conf, context, server_params, topic, msg):
+    """Sends a message on a topic to a specific server."""
+    return rpc_amqp.cast_to_server(conf, context, server_params, topic, msg,
+            rpc_amqp.get_connection_pool(conf, Connection))
+
+
+def fanout_cast_to_server(conf, context, server_params, topic, msg):
+    """Sends a message on a fanout exchange to a specific server."""
+    return rpc_amqp.fanout_cast_to_server(conf, context, server_params, topic,
+            msg, rpc_amqp.get_connection_pool(conf, Connection))
+
+
+def notify(conf, context, topic, msg):
+    """Sends a notification event on a topic."""
+    return rpc_amqp.notify(conf, context, topic, msg,
+            rpc_amqp.get_connection_pool(conf, Connection))
+
+
+def cleanup():
+    return rpc_amqp.cleanup(Connection.pool)
+
+
+def register_opts(conf):
+    conf.register_opts(qpid_opts)
diff --git a/cinder/scheduler/__init__.py b/cinder/scheduler/__init__.py
new file mode 100644
index 000000000..ecc937ab1
--- /dev/null
+++ b/cinder/scheduler/__init__.py
@@ -0,0 +1,27 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2010 OpenStack, LLC.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+:mod:`cinder.scheduler` -- Scheduler Nodes
+=====================================================
+
+.. automodule:: cinder.scheduler
+   :platform: Unix
+   :synopsis: Module that picks a compute node to run a VM instance.
+.. moduleauthor:: Sandy Walsh <sandy.walsh@rackspace.com>
+.. moduleauthor:: Ed Leafe <ed@leafe.com>
+.. moduleauthor:: Chris Behrens <cbehrens@codestud.com>
+"""
diff --git a/cinder/scheduler/api.py b/cinder/scheduler/api.py
new file mode 100644
index 000000000..c7065c5cc
--- /dev/null
+++ b/cinder/scheduler/api.py
@@ -0,0 +1,72 @@
+# Copyright (c) 2011 OpenStack, LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+Handles all requests relating to schedulers.
+"""
+
+from cinder import flags
+from cinder import log as logging
+from cinder import rpc
+
+FLAGS = flags.FLAGS
+LOG = logging.getLogger(__name__)
+
+
+def _call_scheduler(method, context, params=None):
+    """Generic handler for RPC calls to the scheduler.
+
+    :param params: Optional dictionary of arguments to be passed to the
+                   scheduler worker
+
+    :retval: Result returned by scheduler worker
+    """
+    if not params:
+        params = {}
+    queue = FLAGS.scheduler_topic
+    kwargs = {'method': method, 'args': params}
+    return rpc.call(context, queue, kwargs)
+
+
+def get_host_list(context):
+    """Return a list of hosts associated with this zone."""
+    return _call_scheduler('get_host_list', context)
+
+
+def get_service_capabilities(context):
+    """Return aggregated capabilities for all services."""
+    return _call_scheduler('get_service_capabilities', context)
+
+
+def update_service_capabilities(context, service_name, host, capabilities):
+    """Send an update to all the scheduler services informing them
+       of the capabilities of this service."""
+    kwargs = dict(method='update_service_capabilities',
+                  args=dict(service_name=service_name, host=host,
+                            capabilities=capabilities))
+    return rpc.fanout_cast(context, 'scheduler', kwargs)
+
+
+def live_migration(context, block_migration, disk_over_commit,
+                   instance_id, dest, topic):
+    """Migrate a server to a new host"""
+    params = {"instance_id": instance_id,
+              "dest": dest,
+              "topic": topic,
+              "block_migration": block_migration,
+              "disk_over_commit": disk_over_commit}
+    # NOTE(comstud): Call vs cast so we can get exceptions back, otherwise
+    # this call in the scheduler driver doesn't return anything.
+    _call_scheduler("live_migration", context=context, params=params)
diff --git a/cinder/scheduler/chance.py b/cinder/scheduler/chance.py
new file mode 100644
index 000000000..064c44a91
--- /dev/null
+++ b/cinder/scheduler/chance.py
@@ -0,0 +1,83 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2010 OpenStack, LLC.
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+Chance (Random) Scheduler implementation
+"""
+
+import random
+
+from cinder import exception
+from cinder.scheduler import driver
+
+
+class ChanceScheduler(driver.Scheduler):
+    """Implements Scheduler as a random node selector."""
+
+    def _filter_hosts(self, request_spec, hosts, **kwargs):
+        """Filter a list of hosts based on request_spec."""
+
+        filter_properties = kwargs.get('filter_properties', {})
+        ignore_hosts = filter_properties.get('ignore_hosts', [])
+        hosts = [host for host in hosts if host not in ignore_hosts]
+        return hosts
+
+    def _schedule(self, context, topic, request_spec, **kwargs):
+        """Picks a host that is up at random."""
+
+        elevated = context.elevated()
+        hosts = self.hosts_up(elevated, topic)
+        if not hosts:
+            msg = _("Is the appropriate service running?")
+            raise exception.NoValidHost(reason=msg)
+
+        hosts = self._filter_hosts(request_spec, hosts, **kwargs)
+        if not hosts:
+            msg = _("Could not find another compute")
+            raise exception.NoValidHost(reason=msg)
+
+        return hosts[int(random.random() * len(hosts))]
+
+    def schedule(self, context, topic, method, *_args, **kwargs):
+        """Picks a host that is up at random."""
+
+        host = self._schedule(context, topic, None, **kwargs)
+        driver.cast_to_host(context, topic, host, method, **kwargs)
+
+    def schedule_run_instance(self, context, request_spec, *_args, **kwargs):
+        """Create and run an instance or instances"""
+        num_instances = request_spec.get('num_instances', 1)
+        instances = []
+        for num in xrange(num_instances):
+            host = self._schedule(context, 'compute', request_spec, **kwargs)
+            request_spec['instance_properties']['launch_index'] = num
+            instance = self.create_instance_db_entry(context, request_spec)
+            driver.cast_to_compute_host(context, host,
+                    'run_instance', instance_uuid=instance['uuid'], **kwargs)
+            instances.append(driver.encode_instance(instance))
+            # So if we loop around, create_instance_db_entry will actually
+            # create a new entry, instead of assume it's been created
+            # already
+            del request_spec['instance_properties']['uuid']
+        return instances
+
+    def schedule_prep_resize(self, context, request_spec, *args, **kwargs):
+        """Select a target for resize."""
+        host = self._schedule(context, 'compute', request_spec, **kwargs)
+        driver.cast_to_compute_host(context, host, 'prep_resize', **kwargs)
diff --git a/cinder/scheduler/driver.py b/cinder/scheduler/driver.py
new file mode 100644
index 000000000..d84893ee6
--- /dev/null
+++ b/cinder/scheduler/driver.py
@@ -0,0 +1,164 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2010 OpenStack, LLC.
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+Scheduler base class that all Schedulers should inherit from
+"""
+
+from cinder import db
+from cinder import flags
+from cinder import log as logging
+from cinder.openstack.common import cfg
+from cinder.openstack.common import importutils
+from cinder import rpc
+from cinder.rpc import common as rpc_common
+from cinder import utils
+
+
+LOG = logging.getLogger(__name__)
+
+scheduler_driver_opts = [
+    cfg.StrOpt('scheduler_host_manager',
+               default='cinder.scheduler.host_manager.HostManager',
+               help='The scheduler host manager class to use'),
+    ]
+
+FLAGS = flags.FLAGS
+FLAGS.register_opts(scheduler_driver_opts)
+
+
+def cast_to_volume_host(context, host, method, update_db=True, **kwargs):
+    """Cast request to a volume host queue"""
+
+    if update_db:
+        volume_id = kwargs.get('volume_id', None)
+        if volume_id is not None:
+            now = utils.utcnow()
+            db.volume_update(context, volume_id,
+                    {'host': host, 'scheduled_at': now})
+    rpc.cast(context,
+            db.queue_get_for(context, 'volume', host),
+            {"method": method, "args": kwargs})
+    LOG.debug(_("Casted '%(method)s' to volume '%(host)s'") % locals())
+
+
+def cast_to_host(context, topic, host, method, update_db=True, **kwargs):
+    """Generic cast to host"""
+
+    topic_mapping = {
+            "volume": cast_to_volume_host}
+
+    func = topic_mapping.get(topic)
+    if func:
+        func(context, host, method, update_db=update_db, **kwargs)
+    else:
+        rpc.cast(context,
+            db.queue_get_for(context, topic, host),
+                {"method": method, "args": kwargs})
+        LOG.debug(_("Casted '%(method)s' to %(topic)s '%(host)s'")
+                % locals())
+
+
+def encode_instance(instance, local=True):
+    """Encode locally created instance for return via RPC"""
+    # TODO(comstud): I would love to be able to return the full
+    # instance information here, but we'll need some modifications
+    # to the RPC code to handle datetime conversions with the
+    # json encoding/decoding.  We should be able to set a default
+    # json handler somehow to do it.
+    #
+    # For now, I'll just return the instance ID and let the caller
+    # do a DB lookup :-/
+    if local:
+        return dict(id=instance['id'], _is_precooked=False)
+    else:
+        inst = dict(instance)
+        inst['_is_precooked'] = True
+        return inst
+
+
+class Scheduler(object):
+    """The base class that all Scheduler classes should inherit from."""
+
+    def __init__(self):
+        self.host_manager = importutils.import_object(
+                FLAGS.scheduler_host_manager)
+
+    def get_host_list(self):
+        """Get a list of hosts from the HostManager."""
+        return self.host_manager.get_host_list()
+
+    def get_service_capabilities(self):
+        """Get the normalized set of capabilities for the services.
+        """
+        return self.host_manager.get_service_capabilities()
+
+    def update_service_capabilities(self, service_name, host, capabilities):
+        """Process a capability update from a service node."""
+        self.host_manager.update_service_capabilities(service_name,
+                host, capabilities)
+
+    def hosts_up(self, context, topic):
+        """Return the list of hosts that have a running service for topic."""
+
+        services = db.service_get_all_by_topic(context, topic)
+        return [service['host']
+                for service in services
+                if utils.service_is_up(service)]
+
+    def schedule(self, context, topic, method, *_args, **_kwargs):
+        """Must override schedule method for scheduler to work."""
+        raise NotImplementedError(_("Must implement a fallback schedule"))
+
+    def schedule_prep_resize(self, context, request_spec, *_args, **_kwargs):
+        """Must override schedule_prep_resize method for scheduler to work."""
+        msg = _("Driver must implement schedule_prep_resize")
+        raise NotImplementedError(msg)
+
+    def mounted_on_same_shared_storage(self, context, instance_ref, dest):
+        """Check if the src and dest host mount same shared storage.
+
+        At first, dest host creates temp file, and src host can see
+        it if they mounts same shared storage. Then src host erase it.
+
+        :param context: security context
+        :param instance_ref: cinder.db.sqlalchemy.models.Instance object
+        :param dest: destination host
+
+        """
+
+        src = instance_ref['host']
+        dst_t = db.queue_get_for(context, FLAGS.compute_topic, dest)
+        src_t = db.queue_get_for(context, FLAGS.compute_topic, src)
+
+        filename = rpc.call(context, dst_t,
+                            {"method": 'create_shared_storage_test_file'})
+
+        try:
+            # make sure existence at src host.
+            ret = rpc.call(context, src_t,
+                        {"method": 'check_shared_storage_test_file',
+                        "args": {'filename': filename}})
+
+        finally:
+            rpc.cast(context, dst_t,
+                    {"method": 'cleanup_shared_storage_test_file',
+                    "args": {'filename': filename}})
+
+        return ret
diff --git a/cinder/scheduler/host_manager.py b/cinder/scheduler/host_manager.py
new file mode 100644
index 000000000..99632bc86
--- /dev/null
+++ b/cinder/scheduler/host_manager.py
@@ -0,0 +1,36 @@
+# Copyright (c) 2011 OpenStack, LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+Manage hosts in the current zone.
+"""
+
+# FIXME(ja): this code was written only for compute. re-implement for volumes
+
+
+class HostState(object):
+    pass
+
+
+class HostManager(object):
+
+    def get_host_list(self, *args):
+        pass
+
+    def update_service_capabilities(self, *args):
+        pass
+
+    def get_service_capabilities(self, *args):
+        pass
diff --git a/cinder/scheduler/manager.py b/cinder/scheduler/manager.py
new file mode 100644
index 000000000..35e73db46
--- /dev/null
+++ b/cinder/scheduler/manager.py
@@ -0,0 +1,204 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2010 OpenStack, LLC.
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+Scheduler Service
+"""
+
+import functools
+
+from cinder import db
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+from cinder import manager
+from cinder.notifier import api as notifier
+from cinder.openstack.common import cfg
+from cinder.openstack.common import importutils
+from cinder import utils
+
+
+LOG = logging.getLogger(__name__)
+
+scheduler_driver_opt = cfg.StrOpt('scheduler_driver',
+        default='cinder.scheduler.simple.SimpleScheduler',
+        help='Default driver to use for the scheduler')
+
+FLAGS = flags.FLAGS
+FLAGS.register_opt(scheduler_driver_opt)
+
+
+class SchedulerManager(manager.Manager):
+    """Chooses a host to run instances on."""
+
+    def __init__(self, scheduler_driver=None, *args, **kwargs):
+        if not scheduler_driver:
+            scheduler_driver = FLAGS.scheduler_driver
+        self.driver = importutils.import_object(scheduler_driver)
+        super(SchedulerManager, self).__init__(*args, **kwargs)
+
+    def __getattr__(self, key):
+        """Converts all method calls to use the schedule method"""
+        return functools.partial(self._schedule, key)
+
+    def get_host_list(self, context):
+        """Get a list of hosts from the HostManager."""
+        return self.driver.get_host_list()
+
+    def get_service_capabilities(self, context):
+        """Get the normalized set of capabilities for this zone."""
+        return self.driver.get_service_capabilities()
+
+    def update_service_capabilities(self, context, service_name=None,
+            host=None, capabilities=None, **kwargs):
+        """Process a capability update from a service node."""
+        if capabilities is None:
+            capabilities = {}
+        self.driver.update_service_capabilities(service_name, host,
+                capabilities)
+
+    def _schedule(self, method, context, topic, *args, **kwargs):
+        """Tries to call schedule_* method on the driver to retrieve host.
+        Falls back to schedule(context, topic) if method doesn't exist.
+        """
+        driver_method_name = 'schedule_%s' % method
+        try:
+            driver_method = getattr(self.driver, driver_method_name)
+            args = (context,) + args
+        except AttributeError, e:
+            LOG.warning(_("Driver Method %(driver_method_name)s missing: "
+                       "%(e)s. Reverting to schedule()") % locals())
+            driver_method = self.driver.schedule
+            args = (context, topic, method) + args
+
+        # Scheduler methods are responsible for casting.
+        try:
+            return driver_method(*args, **kwargs)
+        except Exception as ex:
+            with utils.save_and_reraise_exception():
+                self._set_vm_state_and_notify(method,
+                                             {'vm_state': vm_states.ERROR},
+                                             context, ex, *args, **kwargs)
+
+    def run_instance(self, context, topic, *args, **kwargs):
+        """Tries to call schedule_run_instance on the driver.
+        Sets instance vm_state to ERROR on exceptions
+        """
+        args = (context,) + args
+        try:
+            return self.driver.schedule_run_instance(*args, **kwargs)
+        except exception.NoValidHost as ex:
+            # don't reraise
+            self._set_vm_state_and_notify('run_instance',
+                                         {'vm_state': vm_states.ERROR},
+                                          context, ex, *args, **kwargs)
+        except Exception as ex:
+            with utils.save_and_reraise_exception():
+                self._set_vm_state_and_notify('run_instance',
+                                             {'vm_state': vm_states.ERROR},
+                                             context, ex, *args, **kwargs)
+
+    def prep_resize(self, context, topic, *args, **kwargs):
+        """Tries to call schedule_prep_resize on the driver.
+        Sets instance vm_state to ACTIVE on NoHostFound
+        Sets vm_state to ERROR on other exceptions
+        """
+        args = (context,) + args
+        try:
+            return self.driver.schedule_prep_resize(*args, **kwargs)
+        except exception.NoValidHost as ex:
+            self._set_vm_state_and_notify('prep_resize',
+                                         {'vm_state': vm_states.ACTIVE,
+                                          'task_state': None},
+                                         context, ex, *args, **kwargs)
+        except Exception as ex:
+            with utils.save_and_reraise_exception():
+                self._set_vm_state_and_notify('prep_resize',
+                                             {'vm_state': vm_states.ERROR},
+                                             context, ex, *args, **kwargs)
+
+    def _set_vm_state_and_notify(self, method, updates, context, ex,
+                                *args, **kwargs):
+        """changes VM state and notifies"""
+        # FIXME(comstud): Re-factor this somehow. Not sure this belongs in the
+        # scheduler manager like this. We should make this easier.
+        # run_instance only sends a request_spec, and an instance may or may
+        # not have been created in the API (or scheduler) already. If it was
+        # created, there's a 'uuid' set in the instance_properties of the
+        # request_spec.
+        # (littleidea): I refactored this a bit, and I agree
+        # it should be easier :)
+        # The refactoring could go further but trying to minimize changes
+        # for essex timeframe
+
+        LOG.warning(_("Failed to schedule_%(method)s: %(ex)s") % locals())
+
+        vm_state = updates['vm_state']
+        request_spec = kwargs.get('request_spec', {})
+        properties = request_spec.get('instance_properties', {})
+        instance_uuid = properties.get('uuid', {})
+
+        if instance_uuid:
+            state = vm_state.upper()
+            LOG.warning(_('Setting instance to %(state)s state.'), locals(),
+                        instance_uuid=instance_uuid)
+            db.instance_update(context, instance_uuid, updates)
+
+        payload = dict(request_spec=request_spec,
+                       instance_properties=properties,
+                       instance_id=instance_uuid,
+                       state=vm_state,
+                       method=method,
+                       reason=ex)
+
+        notifier.notify(notifier.publisher_id("scheduler"),
+                        'scheduler.' + method, notifier.ERROR, payload)
+
+    # NOTE (masumotok) : This method should be moved to cinder.api.ec2.admin.
+    # Based on bexar design summit discussion,
+    # just put this here for bexar release.
+    def show_host_resources(self, context, host):
+        """Shows the physical/usage resource given by hosts.
+
+        :param context: security context
+        :param host: hostname
+        :returns:
+            example format is below::
+
+                {'resource':D, 'usage':{proj_id1:D, proj_id2:D}}
+                D: {'vcpus': 3, 'memory_mb': 2048, 'local_gb': 2048,
+                    'vcpus_used': 12, 'memory_mb_used': 10240,
+                    'local_gb_used': 64}
+
+        """
+        # Getting compute node info and related instances info
+        compute_ref = db.service_get_all_compute_by_host(context, host)
+        compute_ref = compute_ref[0]
+
+        # Getting total available/used resource
+        compute_ref = compute_ref['compute_node'][0]
+        resource = {'vcpus': compute_ref['vcpus'],
+                    'memory_mb': compute_ref['memory_mb'],
+                    'local_gb': compute_ref['local_gb'],
+                    'vcpus_used': compute_ref['vcpus_used'],
+                    'memory_mb_used': compute_ref['memory_mb_used'],
+                    'local_gb_used': compute_ref['local_gb_used']}
+        usage = dict()
+
+        return {'resource': resource, 'usage': usage}
diff --git a/cinder/scheduler/simple.py b/cinder/scheduler/simple.py
new file mode 100644
index 000000000..8849696f3
--- /dev/null
+++ b/cinder/scheduler/simple.py
@@ -0,0 +1,144 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2010 OpenStack, LLC.
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+Simple Scheduler
+"""
+
+from cinder import db
+from cinder import exception
+from cinder import flags
+from cinder.openstack.common import cfg
+from cinder.scheduler import chance
+from cinder.scheduler import driver
+from cinder import utils
+
+
+simple_scheduler_opts = [
+    cfg.IntOpt("max_cores",
+               default=16,
+               help="maximum number of instance cores to allow per host"),
+    cfg.IntOpt("max_gigabytes",
+               default=10000,
+               help="maximum number of volume gigabytes to allow per host"),
+    cfg.IntOpt("max_networks",
+               default=1000,
+               help="maximum number of networks to allow per host"),
+    cfg.BoolOpt('skip_isolated_core_check',
+                default=True,
+                help='Allow overcommitting vcpus on isolated hosts'),
+    ]
+
+FLAGS = flags.FLAGS
+FLAGS.register_opts(simple_scheduler_opts)
+
+
+class SimpleScheduler(chance.ChanceScheduler):
+    """Implements Naive Scheduler that tries to find least loaded host."""
+
+    def _schedule_instance(self, context, instance_opts, *_args, **_kwargs):
+        """Picks a host that is up and has the fewest running instances."""
+        elevated = context.elevated()
+
+        availability_zone = instance_opts.get('availability_zone')
+
+        zone, host = FLAGS.default_schedule_zone, None
+        if availability_zone:
+            zone, _x, host = availability_zone.partition(':')
+
+        if host and context.is_admin:
+            service = db.service_get_by_args(elevated, host, 'cinder-compute')
+            if not utils.service_is_up(service):
+                raise exception.WillNotSchedule(host=host)
+            return host
+
+        results = db.service_get_all_compute_sorted(elevated)
+        in_isolation = instance_opts['image_ref'] in FLAGS.isolated_images
+        check_cores = not in_isolation or not FLAGS.skip_isolated_core_check
+        if zone:
+            results = [(service, cores) for (service, cores) in results
+                       if service['availability_zone'] == zone]
+        for result in results:
+            (service, instance_cores) = result
+            if in_isolation and service['host'] not in FLAGS.isolated_hosts:
+                # isloated images run on isolated hosts
+                continue
+            if service['host'] in FLAGS.isolated_hosts and not in_isolation:
+                # images that aren't isolated only run on general hosts
+                continue
+            if (check_cores and
+                instance_cores + instance_opts['vcpus'] > FLAGS.max_cores):
+                msg = _("Not enough allocatable CPU cores remaining")
+                raise exception.NoValidHost(reason=msg)
+            if utils.service_is_up(service) and not service['disabled']:
+                return service['host']
+        msg = _("Is the appropriate service running?")
+        raise exception.NoValidHost(reason=msg)
+
+    def schedule_run_instance(self, context, request_spec, *_args, **_kwargs):
+        num_instances = request_spec.get('num_instances', 1)
+        instances = []
+        for num in xrange(num_instances):
+            host = self._schedule_instance(context,
+                    request_spec['instance_properties'], *_args, **_kwargs)
+            request_spec['instance_properties']['launch_index'] = num
+            instance_ref = self.create_instance_db_entry(context,
+                    request_spec)
+            driver.cast_to_compute_host(context, host, 'run_instance',
+                    instance_uuid=instance_ref['uuid'], **_kwargs)
+            instances.append(driver.encode_instance(instance_ref))
+            # So if we loop around, create_instance_db_entry will actually
+            # create a new entry, instead of assume it's been created
+            # already
+            del request_spec['instance_properties']['uuid']
+        return instances
+
+    def schedule_create_volume(self, context, volume_id, *_args, **_kwargs):
+        """Picks a host that is up and has the fewest volumes."""
+        elevated = context.elevated()
+
+        volume_ref = db.volume_get(context, volume_id)
+        availability_zone = volume_ref.get('availability_zone')
+
+        zone, host = None, None
+        if availability_zone:
+            zone, _x, host = availability_zone.partition(':')
+        if host and context.is_admin:
+            service = db.service_get_by_args(elevated, host, 'cinder-volume')
+            if not utils.service_is_up(service):
+                raise exception.WillNotSchedule(host=host)
+            driver.cast_to_volume_host(context, host, 'create_volume',
+                    volume_id=volume_id, **_kwargs)
+            return None
+
+        results = db.service_get_all_volume_sorted(elevated)
+        if zone:
+            results = [(service, gigs) for (service, gigs) in results
+                       if service['availability_zone'] == zone]
+        for result in results:
+            (service, volume_gigabytes) = result
+            if volume_gigabytes + volume_ref['size'] > FLAGS.max_gigabytes:
+                msg = _("Not enough allocatable volume gigabytes remaining")
+                raise exception.NoValidHost(reason=msg)
+            if utils.service_is_up(service) and not service['disabled']:
+                driver.cast_to_volume_host(context, service['host'],
+                        'create_volume', volume_id=volume_id, **_kwargs)
+                return None
+        msg = _("Is the appropriate service running?")
+        raise exception.NoValidHost(reason=msg)
diff --git a/cinder/service.py b/cinder/service.py
new file mode 100644
index 000000000..363b3d967
--- /dev/null
+++ b/cinder/service.py
@@ -0,0 +1,429 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# Copyright 2011 Justin Santa Barbara
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Generic Node base class for all workers that run on hosts."""
+
+import inspect
+import os
+import random
+import signal
+
+import eventlet
+import greenlet
+
+from cinder import context
+from cinder import db
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+from cinder.openstack.common import cfg
+from cinder.openstack.common import importutils
+from cinder import rpc
+from cinder import utils
+from cinder import version
+from cinder import wsgi
+
+
+LOG = logging.getLogger(__name__)
+
+service_opts = [
+    cfg.IntOpt('report_interval',
+               default=10,
+               help='seconds between nodes reporting state to datastore'),
+    cfg.IntOpt('periodic_interval',
+               default=60,
+               help='seconds between running periodic tasks'),
+    cfg.IntOpt('periodic_fuzzy_delay',
+               default=60,
+               help='range of seconds to randomly delay when starting the'
+                    ' periodic task scheduler to reduce stampeding.'
+                    ' (Disable by setting to 0)'),
+    cfg.StrOpt('osapi_volume_listen',
+               default="0.0.0.0",
+               help='IP address for OpenStack Volume API to listen'),
+    cfg.IntOpt('osapi_volume_listen_port',
+               default=8776,
+               help='port for os volume api to listen'),
+    ]
+
+FLAGS = flags.FLAGS
+FLAGS.register_opts(service_opts)
+
+
+class Launcher(object):
+    """Launch one or more services and wait for them to complete."""
+
+    def __init__(self):
+        """Initialize the service launcher.
+
+        :returns: None
+
+        """
+        self._services = []
+
+    @staticmethod
+    def run_server(server):
+        """Start and wait for a server to finish.
+
+        :param service: Server to run and wait for.
+        :returns: None
+
+        """
+        server.start()
+        server.wait()
+
+    def launch_server(self, server):
+        """Load and start the given server.
+
+        :param server: The server you would like to start.
+        :returns: None
+
+        """
+        gt = eventlet.spawn(self.run_server, server)
+        self._services.append(gt)
+
+    def stop(self):
+        """Stop all services which are currently running.
+
+        :returns: None
+
+        """
+        for service in self._services:
+            service.kill()
+
+    def wait(self):
+        """Waits until all services have been stopped, and then returns.
+
+        :returns: None
+
+        """
+        def sigterm(sig, frame):
+            LOG.audit(_("SIGTERM received"))
+            # NOTE(jk0): Raise a ^C which is caught by the caller and cleanly
+            # shuts down the service. This does not yet handle eventlet
+            # threads.
+            raise KeyboardInterrupt
+
+        signal.signal(signal.SIGTERM, sigterm)
+
+        for service in self._services:
+            try:
+                service.wait()
+            except greenlet.GreenletExit:
+                pass
+
+
+class Service(object):
+    """Service object for binaries running on hosts.
+
+    A service takes a manager and enables rpc by listening to queues based
+    on topic. It also periodically runs tasks on the manager and reports
+    it state to the database services table."""
+
+    def __init__(self, host, binary, topic, manager, report_interval=None,
+                 periodic_interval=None, periodic_fuzzy_delay=None,
+                 *args, **kwargs):
+        self.host = host
+        self.binary = binary
+        self.topic = topic
+        self.manager_class_name = manager
+        manager_class = importutils.import_class(self.manager_class_name)
+        self.manager = manager_class(host=self.host, *args, **kwargs)
+        self.report_interval = report_interval
+        self.periodic_interval = periodic_interval
+        self.periodic_fuzzy_delay = periodic_fuzzy_delay
+        super(Service, self).__init__(*args, **kwargs)
+        self.saved_args, self.saved_kwargs = args, kwargs
+        self.timers = []
+
+    def start(self):
+        vcs_string = version.version_string_with_vcs()
+        LOG.audit(_('Starting %(topic)s node (version %(vcs_string)s)'),
+                  {'topic': self.topic, 'vcs_string': vcs_string})
+        utils.cleanup_file_locks()
+        rpc.register_opts(FLAGS)
+        self.manager.init_host()
+        self.model_disconnected = False
+        ctxt = context.get_admin_context()
+        try:
+            service_ref = db.service_get_by_args(ctxt,
+                                                 self.host,
+                                                 self.binary)
+            self.service_id = service_ref['id']
+        except exception.NotFound:
+            self._create_service_ref(ctxt)
+
+        if 'cinder-compute' == self.binary:
+            self.manager.update_available_resource(ctxt)
+
+        self.conn = rpc.create_connection(new=True)
+        LOG.debug(_("Creating Consumer connection for Service %s") %
+                  self.topic)
+
+        # Share this same connection for these Consumers
+        self.conn.create_consumer(self.topic, self, fanout=False)
+
+        node_topic = '%s.%s' % (self.topic, self.host)
+        self.conn.create_consumer(node_topic, self, fanout=False)
+
+        self.conn.create_consumer(self.topic, self, fanout=True)
+
+        # Consume from all consumers in a thread
+        self.conn.consume_in_thread()
+
+        if self.report_interval:
+            pulse = utils.LoopingCall(self.report_state)
+            pulse.start(interval=self.report_interval,
+                        initial_delay=self.report_interval)
+            self.timers.append(pulse)
+
+        if self.periodic_interval:
+            if self.periodic_fuzzy_delay:
+                initial_delay = random.randint(0, self.periodic_fuzzy_delay)
+            else:
+                initial_delay = None
+
+            periodic = utils.LoopingCall(self.periodic_tasks)
+            periodic.start(interval=self.periodic_interval,
+                           initial_delay=initial_delay)
+            self.timers.append(periodic)
+
+    def _create_service_ref(self, context):
+        zone = FLAGS.node_availability_zone
+        service_ref = db.service_create(context,
+                                        {'host': self.host,
+                                         'binary': self.binary,
+                                         'topic': self.topic,
+                                         'report_count': 0,
+                                         'availability_zone': zone})
+        self.service_id = service_ref['id']
+
+    def __getattr__(self, key):
+        manager = self.__dict__.get('manager', None)
+        return getattr(manager, key)
+
+    @classmethod
+    def create(cls, host=None, binary=None, topic=None, manager=None,
+               report_interval=None, periodic_interval=None,
+               periodic_fuzzy_delay=None):
+        """Instantiates class and passes back application object.
+
+        :param host: defaults to FLAGS.host
+        :param binary: defaults to basename of executable
+        :param topic: defaults to bin_name - 'cinder-' part
+        :param manager: defaults to FLAGS.<topic>_manager
+        :param report_interval: defaults to FLAGS.report_interval
+        :param periodic_interval: defaults to FLAGS.periodic_interval
+        :param periodic_fuzzy_delay: defaults to FLAGS.periodic_fuzzy_delay
+
+        """
+        if not host:
+            host = FLAGS.host
+        if not binary:
+            binary = os.path.basename(inspect.stack()[-1][1])
+        if not topic:
+            topic = binary.rpartition('cinder-')[2]
+        if not manager:
+            manager = FLAGS.get('%s_manager' % topic, None)
+        if report_interval is None:
+            report_interval = FLAGS.report_interval
+        if periodic_interval is None:
+            periodic_interval = FLAGS.periodic_interval
+        if periodic_fuzzy_delay is None:
+            periodic_fuzzy_delay = FLAGS.periodic_fuzzy_delay
+        service_obj = cls(host, binary, topic, manager,
+                          report_interval=report_interval,
+                          periodic_interval=periodic_interval,
+                          periodic_fuzzy_delay=periodic_fuzzy_delay)
+
+        return service_obj
+
+    def kill(self):
+        """Destroy the service object in the datastore."""
+        self.stop()
+        try:
+            db.service_destroy(context.get_admin_context(), self.service_id)
+        except exception.NotFound:
+            LOG.warn(_('Service killed that has no database entry'))
+
+    def stop(self):
+        # Try to shut the connection down, but if we get any sort of
+        # errors, go ahead and ignore them.. as we're shutting down anyway
+        try:
+            self.conn.close()
+        except Exception:
+            pass
+        for x in self.timers:
+            try:
+                x.stop()
+            except Exception:
+                pass
+        self.timers = []
+
+    def wait(self):
+        for x in self.timers:
+            try:
+                x.wait()
+            except Exception:
+                pass
+
+    def periodic_tasks(self, raise_on_error=False):
+        """Tasks to be run at a periodic interval."""
+        ctxt = context.get_admin_context()
+        self.manager.periodic_tasks(ctxt, raise_on_error=raise_on_error)
+
+    def report_state(self):
+        """Update the state of this service in the datastore."""
+        ctxt = context.get_admin_context()
+        zone = FLAGS.node_availability_zone
+        state_catalog = {}
+        try:
+            try:
+                service_ref = db.service_get(ctxt, self.service_id)
+            except exception.NotFound:
+                LOG.debug(_('The service database object disappeared, '
+                            'Recreating it.'))
+                self._create_service_ref(ctxt)
+                service_ref = db.service_get(ctxt, self.service_id)
+
+            state_catalog['report_count'] = service_ref['report_count'] + 1
+            if zone != service_ref['availability_zone']:
+                state_catalog['availability_zone'] = zone
+
+            db.service_update(ctxt,
+                             self.service_id, state_catalog)
+
+            # TODO(termie): make this pattern be more elegant.
+            if getattr(self, 'model_disconnected', False):
+                self.model_disconnected = False
+                LOG.error(_('Recovered model server connection!'))
+
+        # TODO(vish): this should probably only catch connection errors
+        except Exception:  # pylint: disable=W0702
+            if not getattr(self, 'model_disconnected', False):
+                self.model_disconnected = True
+                LOG.exception(_('model server went away'))
+
+
+class WSGIService(object):
+    """Provides ability to launch API from a 'paste' configuration."""
+
+    def __init__(self, name, loader=None):
+        """Initialize, but do not start the WSGI server.
+
+        :param name: The name of the WSGI server given to the loader.
+        :param loader: Loads the WSGI application using the given name.
+        :returns: None
+
+        """
+        self.name = name
+        self.manager = self._get_manager()
+        self.loader = loader or wsgi.Loader()
+        self.app = self.loader.load_app(name)
+        self.host = getattr(FLAGS, '%s_listen' % name, "0.0.0.0")
+        self.port = getattr(FLAGS, '%s_listen_port' % name, 0)
+        self.server = wsgi.Server(name,
+                                  self.app,
+                                  host=self.host,
+                                  port=self.port)
+
+    def _get_manager(self):
+        """Initialize a Manager object appropriate for this service.
+
+        Use the service name to look up a Manager subclass from the
+        configuration and initialize an instance. If no class name
+        is configured, just return None.
+
+        :returns: a Manager instance, or None.
+
+        """
+        fl = '%s_manager' % self.name
+        if not fl in FLAGS:
+            return None
+
+        manager_class_name = FLAGS.get(fl, None)
+        if not manager_class_name:
+            return None
+
+        manager_class = importutils.import_class(manager_class_name)
+        return manager_class()
+
+    def start(self):
+        """Start serving this service using loaded configuration.
+
+        Also, retrieve updated port number in case '0' was passed in, which
+        indicates a random port should be used.
+
+        :returns: None
+
+        """
+        utils.cleanup_file_locks()
+        rpc.register_opts(FLAGS)
+        if self.manager:
+            self.manager.init_host()
+        self.server.start()
+        self.port = self.server.port
+
+    def stop(self):
+        """Stop serving this API.
+
+        :returns: None
+
+        """
+        self.server.stop()
+
+    def wait(self):
+        """Wait for the service to stop serving this API.
+
+        :returns: None
+
+        """
+        self.server.wait()
+
+
+# NOTE(vish): the global launcher is to maintain the existing
+#             functionality of calling service.serve +
+#             service.wait
+_launcher = None
+
+
+def serve(*servers):
+    global _launcher
+    if not _launcher:
+        _launcher = Launcher()
+    for server in servers:
+        _launcher.launch_server(server)
+
+
+def wait():
+    LOG.debug(_('Full set of FLAGS:'))
+    for flag in FLAGS:
+        flag_get = FLAGS.get(flag, None)
+        # hide flag contents from log if contains a password
+        # should use secret flag when switch over to openstack-common
+        if ("_password" in flag or "_key" in flag or
+                (flag == "sql_connection" and "mysql:" in flag_get)):
+            LOG.debug(_('%(flag)s : FLAG SET ') % locals())
+        else:
+            LOG.debug('%(flag)s : %(flag_get)s' % locals())
+    try:
+        _launcher.wait()
+    except KeyboardInterrupt:
+        _launcher.stop()
+    rpc.cleanup()
diff --git a/cinder/test.py b/cinder/test.py
new file mode 100644
index 000000000..434a7c6b9
--- /dev/null
+++ b/cinder/test.py
@@ -0,0 +1,295 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Base classes for our unit tests.
+
+Allows overriding of flags for use of fakes, and some black magic for
+inline callbacks.
+
+"""
+
+import functools
+import os
+import shutil
+import uuid
+import unittest
+
+import mox
+import nose.plugins.skip
+import stubout
+
+from cinder import flags
+from cinder import log as logging
+from cinder.openstack.common import cfg
+from cinder import utils
+from cinder import service
+from cinder import tests
+
+
+test_opts = [
+    cfg.StrOpt('sqlite_clean_db',
+               default='clean.sqlite',
+               help='File name of clean sqlite db'),
+    cfg.BoolOpt('fake_tests',
+                default=True,
+                help='should we use everything for testing'),
+    ]
+
+FLAGS = flags.FLAGS
+FLAGS.register_opts(test_opts)
+
+LOG = logging.getLogger(__name__)
+
+
+class skip_test(object):
+    """Decorator that skips a test."""
+    # TODO(tr3buchet): remember forever what comstud did here
+    def __init__(self, msg):
+        self.message = msg
+
+    def __call__(self, func):
+        @functools.wraps(func)
+        def _skipper(*args, **kw):
+            """Wrapped skipper function."""
+            raise nose.SkipTest(self.message)
+        return _skipper
+
+
+class skip_if(object):
+    """Decorator that skips a test if condition is true."""
+    def __init__(self, condition, msg):
+        self.condition = condition
+        self.message = msg
+
+    def __call__(self, func):
+        @functools.wraps(func)
+        def _skipper(*args, **kw):
+            """Wrapped skipper function."""
+            if self.condition:
+                raise nose.SkipTest(self.message)
+            func(*args, **kw)
+        return _skipper
+
+
+class skip_unless(object):
+    """Decorator that skips a test if condition is not true."""
+    def __init__(self, condition, msg):
+        self.condition = condition
+        self.message = msg
+
+    def __call__(self, func):
+        @functools.wraps(func)
+        def _skipper(*args, **kw):
+            """Wrapped skipper function."""
+            if not self.condition:
+                raise nose.SkipTest(self.message)
+            func(*args, **kw)
+        return _skipper
+
+
+def skip_if_fake(func):
+    """Decorator that skips a test if running in fake mode."""
+    def _skipper(*args, **kw):
+        """Wrapped skipper function."""
+        if FLAGS.fake_tests:
+            raise unittest.SkipTest('Test cannot be run in fake mode')
+        else:
+            return func(*args, **kw)
+    return _skipper
+
+
+class TestingException(Exception):
+    pass
+
+
+class TestCase(unittest.TestCase):
+    """Test case base class for all unit tests."""
+
+    def setUp(self):
+        """Run before each test method to initialize test environment."""
+        super(TestCase, self).setUp()
+        # NOTE(vish): We need a better method for creating fixtures for tests
+        #             now that we have some required db setup for the system
+        #             to work properly.
+        self.start = utils.utcnow()
+        tests.reset_db()
+
+        # emulate some of the mox stuff, we can't use the metaclass
+        # because it screws with our generators
+        self.mox = mox.Mox()
+        self.stubs = stubout.StubOutForTesting()
+        self.injected = []
+        self._services = []
+        self._overridden_opts = []
+
+    def tearDown(self):
+        """Runs after each test method to tear down test environment."""
+        try:
+            self.mox.UnsetStubs()
+            self.stubs.UnsetAll()
+            self.stubs.SmartUnsetAll()
+            self.mox.VerifyAll()
+            super(TestCase, self).tearDown()
+        finally:
+            # Reset any overridden flags
+            self.reset_flags()
+
+            # Stop any timers
+            for x in self.injected:
+                try:
+                    x.stop()
+                except AssertionError:
+                    pass
+
+            # Kill any services
+            for x in self._services:
+                try:
+                    x.kill()
+                except Exception:
+                    pass
+
+            # Delete attributes that don't start with _ so they don't pin
+            # memory around unnecessarily for the duration of the test
+            # suite
+            for key in [k for k in self.__dict__.keys() if k[0] != '_']:
+                del self.__dict__[key]
+
+    def flags(self, **kw):
+        """Override flag variables for a test."""
+        for k, v in kw.iteritems():
+            FLAGS.set_override(k, v)
+            self._overridden_opts.append(k)
+
+    def reset_flags(self):
+        """Resets all flag variables for the test.
+
+        Runs after each test.
+
+        """
+        for k in self._overridden_opts:
+            FLAGS.set_override(k, None)
+        self._overridden_opts = []
+
+    def start_service(self, name, host=None, **kwargs):
+        host = host and host or uuid.uuid4().hex
+        kwargs.setdefault('host', host)
+        kwargs.setdefault('binary', 'cinder-%s' % name)
+        svc = service.Service.create(**kwargs)
+        svc.start()
+        self._services.append(svc)
+        return svc
+
+    # Useful assertions
+    def assertDictMatch(self, d1, d2, approx_equal=False, tolerance=0.001):
+        """Assert two dicts are equivalent.
+
+        This is a 'deep' match in the sense that it handles nested
+        dictionaries appropriately.
+
+        NOTE:
+
+            If you don't care (or don't know) a given value, you can specify
+            the string DONTCARE as the value. This will cause that dict-item
+            to be skipped.
+
+        """
+        def raise_assertion(msg):
+            d1str = str(d1)
+            d2str = str(d2)
+            base_msg = ('Dictionaries do not match. %(msg)s d1: %(d1str)s '
+                        'd2: %(d2str)s' % locals())
+            raise AssertionError(base_msg)
+
+        d1keys = set(d1.keys())
+        d2keys = set(d2.keys())
+        if d1keys != d2keys:
+            d1only = d1keys - d2keys
+            d2only = d2keys - d1keys
+            raise_assertion('Keys in d1 and not d2: %(d1only)s. '
+                            'Keys in d2 and not d1: %(d2only)s' % locals())
+
+        for key in d1keys:
+            d1value = d1[key]
+            d2value = d2[key]
+            try:
+                error = abs(float(d1value) - float(d2value))
+                within_tolerance = error <= tolerance
+            except (ValueError, TypeError):
+                # If both values aren't convertable to float, just ignore
+                # ValueError if arg is a str, TypeError if it's something else
+                # (like None)
+                within_tolerance = False
+
+            if hasattr(d1value, 'keys') and hasattr(d2value, 'keys'):
+                self.assertDictMatch(d1value, d2value)
+            elif 'DONTCARE' in (d1value, d2value):
+                continue
+            elif approx_equal and within_tolerance:
+                continue
+            elif d1value != d2value:
+                raise_assertion("d1['%(key)s']=%(d1value)s != "
+                                "d2['%(key)s']=%(d2value)s" % locals())
+
+    def assertDictListMatch(self, L1, L2, approx_equal=False, tolerance=0.001):
+        """Assert a list of dicts are equivalent."""
+        def raise_assertion(msg):
+            L1str = str(L1)
+            L2str = str(L2)
+            base_msg = ('List of dictionaries do not match: %(msg)s '
+                        'L1: %(L1str)s L2: %(L2str)s' % locals())
+            raise AssertionError(base_msg)
+
+        L1count = len(L1)
+        L2count = len(L2)
+        if L1count != L2count:
+            raise_assertion('Length mismatch: len(L1)=%(L1count)d != '
+                            'len(L2)=%(L2count)d' % locals())
+
+        for d1, d2 in zip(L1, L2):
+            self.assertDictMatch(d1, d2, approx_equal=approx_equal,
+                                 tolerance=tolerance)
+
+    def assertSubDictMatch(self, sub_dict, super_dict):
+        """Assert a sub_dict is subset of super_dict."""
+        self.assertTrue(set(sub_dict.keys()).issubset(set(super_dict.keys())))
+        for k, sub_value in sub_dict.items():
+            super_value = super_dict[k]
+            if isinstance(sub_value, dict):
+                self.assertSubDictMatch(sub_value, super_value)
+            elif 'DONTCARE' in (sub_value, super_value):
+                continue
+            else:
+                self.assertEqual(sub_value, super_value)
+
+    def assertIn(self, a, b, *args, **kwargs):
+        """Python < v2.7 compatibility.  Assert 'a' in 'b'"""
+        try:
+            f = super(TestCase, self).assertIn
+        except AttributeError:
+            self.assertTrue(a in b, *args, **kwargs)
+        else:
+            f(a, b, *args, **kwargs)
+
+    def assertNotIn(self, a, b, *args, **kwargs):
+        """Python < v2.7 compatibility.  Assert 'a' NOT in 'b'"""
+        try:
+            f = super(TestCase, self).assertNotIn
+        except AttributeError:
+            self.assertFalse(a in b, *args, **kwargs)
+        else:
+            f(a, b, *args, **kwargs)
diff --git a/cinder/testing/README.rst b/cinder/testing/README.rst
new file mode 100644
index 000000000..3d15e5cec
--- /dev/null
+++ b/cinder/testing/README.rst
@@ -0,0 +1,66 @@
+=====================================
+OpenStack Cinder Testing Infrastructure
+=====================================
+
+A note of clarification is in order, to help those who are new to testing in
+OpenStack cinder:
+
+- actual unit tests are created in the "tests" directory;
+- the "testing" directory is used to house the infrastructure needed to support
+  testing in OpenStack Cinder.
+
+This README file attempts to provide current and prospective contributors with
+everything they need to know in order to start creating unit tests and
+utilizing the convenience code provided in cinder.testing.
+
+Note: the content for the rest of this file will be added as the work items in
+the following blueprint are completed:
+  https://blueprints.launchpad.net/cinder/+spec/consolidate-testing-infrastructure
+
+
+Test Types: Unit vs. Functional vs. Integration
+-----------------------------------------------
+
+TBD
+
+Writing Unit Tests
+------------------
+
+TBD
+
+Using Fakes
+~~~~~~~~~~~
+
+TBD
+
+test.TestCase
+-------------
+The TestCase class from cinder.test (generally imported as test) will
+automatically manage self.stubs using the stubout module and self.mox
+using the mox module during the setUp step. They will automatically
+verify and clean up during the tearDown step.
+
+If using test.TestCase, calling the super class setUp is required and
+calling the super class tearDown is required to be last if tearDown
+is overriden.
+
+Writing Functional Tests
+------------------------
+
+TBD
+
+Writing Integration Tests
+-------------------------
+
+TBD
+
+Tests and assertRaises
+----------------------
+When asserting that a test should raise an exception, test against the
+most specific exception possible. An overly broad exception type (like
+Exception) can mask errors in the unit test itself.
+
+Example::
+
+    self.assertRaises(exception.InstanceNotFound, db.instance_get_by_uuid,
+                      elevated, instance_uuid)
diff --git a/cinder/testing/__init__.py b/cinder/testing/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/cinder/testing/fake/__init__.py b/cinder/testing/fake/__init__.py
new file mode 100644
index 000000000..5cdad4717
--- /dev/null
+++ b/cinder/testing/fake/__init__.py
@@ -0,0 +1 @@
+import rabbit
diff --git a/cinder/testing/runner.py b/cinder/testing/runner.py
new file mode 100644
index 000000000..77b7701ad
--- /dev/null
+++ b/cinder/testing/runner.py
@@ -0,0 +1,372 @@
+#!/usr/bin/env python
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License");
+#    you may not use this file except in compliance with the License.
+#    You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS,
+#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    See the License for the specific language governing permissions and
+#    limitations under the License.
+
+# Colorizer Code is borrowed from Twisted:
+# Copyright (c) 2001-2010 Twisted Matrix Laboratories.
+#
+#    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.
+"""Unittest runner for Cinder.
+
+To run all tests
+    python cinder/testing/runner.py
+
+To run a single test module:
+    python cinder/testing/runner.py test_compute
+
+    or
+
+    python cinder/testing/runner.py api.test_wsgi
+
+To run a single test:
+    python cinder/testing/runner.py
+        test_compute:ComputeTestCase.test_run_terminate
+
+"""
+
+import gettext
+import heapq
+import os
+import unittest
+import sys
+import time
+
+import eventlet
+from nose import config
+from nose import core
+from nose import result
+
+gettext.install('cinder', unicode=1)
+reldir = os.path.join(os.path.dirname(__file__), '..', '..')
+absdir = os.path.abspath(reldir)
+sys.path.insert(0, absdir)
+
+from cinder import flags
+from cinder import log as logging
+from cinder.openstack.common import cfg
+
+
+class _AnsiColorizer(object):
+    """
+    A colorizer is an object that loosely wraps around a stream, allowing
+    callers to write text to the stream in a particular color.
+
+    Colorizer classes must implement C{supported()} and C{write(text, color)}.
+    """
+    _colors = dict(black=30, red=31, green=32, yellow=33,
+                   blue=34, magenta=35, cyan=36, white=37)
+
+    def __init__(self, stream):
+        self.stream = stream
+
+    def supported(cls, stream=sys.stdout):
+        """
+        A class method that returns True if the current platform supports
+        coloring terminal output using this method. Returns False otherwise.
+        """
+        if not stream.isatty():
+            return False  # auto color only on TTYs
+        try:
+            import curses
+        except ImportError:
+            return False
+        else:
+            try:
+                try:
+                    return curses.tigetnum("colors") > 2
+                except curses.error:
+                    curses.setupterm()
+                    return curses.tigetnum("colors") > 2
+            except Exception:
+                raise
+                # guess false in case of error
+                return False
+    supported = classmethod(supported)
+
+    def write(self, text, color):
+        """
+        Write the given text to the stream in the given color.
+
+        @param text: Text to be written to the stream.
+
+        @param color: A string label for a color. e.g. 'red', 'white'.
+        """
+        color = self._colors[color]
+        self.stream.write('\x1b[%s;1m%s\x1b[0m' % (color, text))
+
+
+class _Win32Colorizer(object):
+    """
+    See _AnsiColorizer docstring.
+    """
+    def __init__(self, stream):
+        import win32console as win
+        red, green, blue, bold = (win.FOREGROUND_RED, win.FOREGROUND_GREEN,
+                                 win.FOREGROUND_BLUE, win.FOREGROUND_INTENSITY)
+        self.stream = stream
+        self.screenBuffer = win.GetStdHandle(win.STD_OUT_HANDLE)
+        self._colors = {
+            'normal': red | green | blue,
+            'red': red | bold,
+            'green': green | bold,
+            'blue': blue | bold,
+            'yellow': red | green | bold,
+            'magenta': red | blue | bold,
+            'cyan': green | blue | bold,
+            'white': red | green | blue | bold
+            }
+
+    def supported(cls, stream=sys.stdout):
+        try:
+            import win32console
+            screenBuffer = win32console.GetStdHandle(
+                win32console.STD_OUT_HANDLE)
+        except ImportError:
+            return False
+        import pywintypes
+        try:
+            screenBuffer.SetConsoleTextAttribute(
+                win32console.FOREGROUND_RED |
+                win32console.FOREGROUND_GREEN |
+                win32console.FOREGROUND_BLUE)
+        except pywintypes.error:
+            return False
+        else:
+            return True
+    supported = classmethod(supported)
+
+    def write(self, text, color):
+        color = self._colors[color]
+        self.screenBuffer.SetConsoleTextAttribute(color)
+        self.stream.write(text)
+        self.screenBuffer.SetConsoleTextAttribute(self._colors['normal'])
+
+
+class _NullColorizer(object):
+    """
+    See _AnsiColorizer docstring.
+    """
+    def __init__(self, stream):
+        self.stream = stream
+
+    def supported(cls, stream=sys.stdout):
+        return True
+    supported = classmethod(supported)
+
+    def write(self, text, color):
+        self.stream.write(text)
+
+
+def get_elapsed_time_color(elapsed_time):
+    if elapsed_time > 1.0:
+        return 'red'
+    elif elapsed_time > 0.25:
+        return 'yellow'
+    else:
+        return 'green'
+
+
+class CinderTestResult(result.TextTestResult):
+    def __init__(self, *args, **kw):
+        self.show_elapsed = kw.pop('show_elapsed')
+        result.TextTestResult.__init__(self, *args, **kw)
+        self.num_slow_tests = 5
+        self.slow_tests = []  # this is a fixed-sized heap
+        self._last_case = None
+        self.colorizer = None
+        # NOTE(vish): reset stdout for the terminal check
+        stdout = sys.stdout
+        sys.stdout = sys.__stdout__
+        for colorizer in [_Win32Colorizer, _AnsiColorizer, _NullColorizer]:
+            if colorizer.supported():
+                self.colorizer = colorizer(self.stream)
+                break
+        sys.stdout = stdout
+
+        # NOTE(lorinh): Initialize start_time in case a sqlalchemy-migrate
+        # error results in it failing to be initialized later. Otherwise,
+        # _handleElapsedTime will fail, causing the wrong error message to
+        # be outputted.
+        self.start_time = time.time()
+
+    def getDescription(self, test):
+        return str(test)
+
+    def _handleElapsedTime(self, test):
+        self.elapsed_time = time.time() - self.start_time
+        item = (self.elapsed_time, test)
+        # Record only the n-slowest tests using heap
+        if len(self.slow_tests) >= self.num_slow_tests:
+            heapq.heappushpop(self.slow_tests, item)
+        else:
+            heapq.heappush(self.slow_tests, item)
+
+    def _writeElapsedTime(self, test):
+        color = get_elapsed_time_color(self.elapsed_time)
+        self.colorizer.write("  %.2f" % self.elapsed_time, color)
+
+    def _writeResult(self, test, long_result, color, short_result, success):
+        if self.showAll:
+            self.colorizer.write(long_result, color)
+            if self.show_elapsed and success:
+                self._writeElapsedTime(test)
+            self.stream.writeln()
+        elif self.dots:
+            self.stream.write(short_result)
+            self.stream.flush()
+
+    # NOTE(vish): copied from unittest with edit to add color
+    def addSuccess(self, test):
+        unittest.TestResult.addSuccess(self, test)
+        self._handleElapsedTime(test)
+        self._writeResult(test, 'OK', 'green', '.', True)
+
+    # NOTE(vish): copied from unittest with edit to add color
+    def addFailure(self, test, err):
+        unittest.TestResult.addFailure(self, test, err)
+        self._handleElapsedTime(test)
+        self._writeResult(test, 'FAIL', 'red', 'F', False)
+
+    # NOTE(vish): copied from nose with edit to add color
+    def addError(self, test, err):
+        """Overrides normal addError to add support for
+        errorClasses. If the exception is a registered class, the
+        error will be added to the list for that class, not errors.
+        """
+        self._handleElapsedTime(test)
+        stream = getattr(self, 'stream', None)
+        ec, ev, tb = err
+        try:
+            exc_info = self._exc_info_to_string(err, test)
+        except TypeError:
+            # 2.3 compat
+            exc_info = self._exc_info_to_string(err)
+        for cls, (storage, label, isfail) in self.errorClasses.items():
+            if result.isclass(ec) and issubclass(ec, cls):
+                if isfail:
+                    test.passed = False
+                storage.append((test, exc_info))
+                # Might get patched into a streamless result
+                if stream is not None:
+                    if self.showAll:
+                        message = [label]
+                        detail = result._exception_detail(err[1])
+                        if detail:
+                            message.append(detail)
+                        stream.writeln(": ".join(message))
+                    elif self.dots:
+                        stream.write(label[:1])
+                return
+        self.errors.append((test, exc_info))
+        test.passed = False
+        if stream is not None:
+            self._writeResult(test, 'ERROR', 'red', 'E', False)
+
+    def startTest(self, test):
+        unittest.TestResult.startTest(self, test)
+        self.start_time = time.time()
+        current_case = test.test.__class__.__name__
+
+        if self.showAll:
+            if current_case != self._last_case:
+                self.stream.writeln(current_case)
+                self._last_case = current_case
+
+            self.stream.write(
+                '    %s' % str(test.test._testMethodName).ljust(60))
+            self.stream.flush()
+
+
+class CinderTestRunner(core.TextTestRunner):
+    def __init__(self, *args, **kwargs):
+        self.show_elapsed = kwargs.pop('show_elapsed')
+        core.TextTestRunner.__init__(self, *args, **kwargs)
+
+    def _makeResult(self):
+        return CinderTestResult(self.stream,
+                              self.descriptions,
+                              self.verbosity,
+                              self.config,
+                              show_elapsed=self.show_elapsed)
+
+    def _writeSlowTests(self, result_):
+        # Pare out 'fast' tests
+        slow_tests = [item for item in result_.slow_tests
+                      if get_elapsed_time_color(item[0]) != 'green']
+        if slow_tests:
+            slow_total_time = sum(item[0] for item in slow_tests)
+            self.stream.writeln("Slowest %i tests took %.2f secs:"
+                                % (len(slow_tests), slow_total_time))
+            for elapsed_time, test in sorted(slow_tests, reverse=True):
+                time_str = "%.2f" % elapsed_time
+                self.stream.writeln("    %s %s" % (time_str.ljust(10), test))
+
+    def run(self, test):
+        result_ = core.TextTestRunner.run(self, test)
+        if self.show_elapsed:
+            self._writeSlowTests(result_)
+        return result_
+
+
+def run():
+    # This is a fix to allow the --hide-elapsed flag while accepting
+    # arbitrary nosetest flags as well
+    argv = [x for x in sys.argv if x != '--hide-elapsed']
+    hide_elapsed = argv != sys.argv
+    logging.setup()
+
+    # If any argument looks like a test name but doesn't have "cinder.tests" in
+    # front of it, automatically add that so we don't have to type as much
+    for i, arg in enumerate(argv):
+        if arg.startswith('test_'):
+            argv[i] = 'cinder.tests.%s' % arg
+
+    testdir = os.path.abspath(os.path.join("cinder", "tests"))
+    c = config.Config(stream=sys.stdout,
+                      env=os.environ,
+                      verbosity=3,
+                      workingDir=testdir,
+                      plugins=core.DefaultPluginManager())
+
+    runner = CinderTestRunner(stream=c.stream,
+                            verbosity=c.verbosity,
+                            config=c,
+                            show_elapsed=not hide_elapsed)
+    sys.exit(not core.run(config=c, testRunner=runner, argv=argv))
+
+
+if __name__ == '__main__':
+    eventlet.monkey_patch()
+    run()
diff --git a/cinder/tests/__init__.py b/cinder/tests/__init__.py
new file mode 100644
index 000000000..82532bf04
--- /dev/null
+++ b/cinder/tests/__init__.py
@@ -0,0 +1,84 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+:mod:`cinder.tests` -- Cinder Unittests
+=====================================================
+
+.. automodule:: cinder.tests
+   :platform: Unix
+.. moduleauthor:: Jesse Andrews <jesse@ansolabs.com>
+.. moduleauthor:: Devin Carlen <devin.carlen@gmail.com>
+.. moduleauthor:: Vishvananda Ishaya <vishvananda@gmail.com>
+.. moduleauthor:: Joshua McKenty <joshua@cognition.ca>
+.. moduleauthor:: Manish Singh <yosh@gimp.org>
+.. moduleauthor:: Andy Smith <andy@anarkystic.com>
+"""
+
+# See http://code.google.com/p/python-nose/issues/detail?id=373
+# The code below enables nosetests to work with i18n _() blocks
+import __builtin__
+setattr(__builtin__, '_', lambda x: x)
+import os
+import shutil
+
+from cinder.db.sqlalchemy.session import get_engine
+from cinder import flags
+
+FLAGS = flags.FLAGS
+
+_DB = None
+
+
+def reset_db():
+    if FLAGS.sql_connection == "sqlite://":
+        engine = get_engine()
+        engine.dispose()
+        conn = engine.connect()
+        conn.connection.executescript(_DB)
+    else:
+        shutil.copyfile(os.path.join(FLAGS.state_path, FLAGS.sqlite_clean_db),
+                        os.path.join(FLAGS.state_path, FLAGS.sqlite_db))
+
+
+def setup():
+    import mox  # Fail fast if you don't have mox. Workaround for bug 810424
+
+    from cinder import rpc  # Register rpc_backend before fake_flags sets it
+    FLAGS.register_opts(rpc.rpc_opts)
+
+    from cinder.db import migration
+    from cinder.tests import fake_flags
+
+    if FLAGS.sql_connection == "sqlite://":
+        if migration.db_version() > 1:
+            return
+    else:
+        testdb = os.path.join(FLAGS.state_path, FLAGS.sqlite_db)
+        if os.path.exists(testdb):
+            return
+    migration.db_sync()
+
+    if FLAGS.sql_connection == "sqlite://":
+        global _DB
+        engine = get_engine()
+        conn = engine.connect()
+        _DB = "".join(line for line in conn.connection.iterdump())
+    else:
+        cleandb = os.path.join(FLAGS.state_path, FLAGS.sqlite_clean_db)
+        shutil.copyfile(testdb, cleandb)
diff --git a/cinder/tests/api/__init__.py b/cinder/tests/api/__init__.py
new file mode 100644
index 000000000..3be5ce944
--- /dev/null
+++ b/cinder/tests/api/__init__.py
@@ -0,0 +1,19 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+# NOTE(vish): this forces the fixtures from tests/__init.py:setup() to work
+from cinder.tests import *
diff --git a/cinder/tests/api/openstack/__init__.py b/cinder/tests/api/openstack/__init__.py
new file mode 100644
index 000000000..3be5ce944
--- /dev/null
+++ b/cinder/tests/api/openstack/__init__.py
@@ -0,0 +1,19 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+# NOTE(vish): this forces the fixtures from tests/__init.py:setup() to work
+from cinder.tests import *
diff --git a/cinder/tests/api/openstack/common.py b/cinder/tests/api/openstack/common.py
new file mode 100644
index 000000000..19515ca67
--- /dev/null
+++ b/cinder/tests/api/openstack/common.py
@@ -0,0 +1,58 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import json
+
+import webob
+
+
+def webob_factory(url):
+    """Factory for removing duplicate webob code from tests"""
+
+    base_url = url
+
+    def web_request(url, method=None, body=None):
+        req = webob.Request.blank("%s%s" % (base_url, url))
+        if method:
+            req.content_type = "application/json"
+            req.method = method
+        if body:
+            req.body = json.dumps(body)
+        return req
+    return web_request
+
+
+def compare_links(actual, expected):
+    """Compare xml atom links."""
+
+    return compare_tree_to_dict(actual, expected, ('rel', 'href', 'type'))
+
+
+def compare_media_types(actual, expected):
+    """Compare xml media types."""
+
+    return compare_tree_to_dict(actual, expected, ('base', 'type'))
+
+
+def compare_tree_to_dict(actual, expected, keys):
+    """Compare parts of lxml.etree objects to dicts."""
+
+    for elem, data in zip(actual, expected):
+        for key in keys:
+            if elem.get(key) != data.get(key):
+                return False
+    return True
diff --git a/cinder/tests/api/openstack/fakes.py b/cinder/tests/api/openstack/fakes.py
new file mode 100644
index 000000000..8d97fca89
--- /dev/null
+++ b/cinder/tests/api/openstack/fakes.py
@@ -0,0 +1,234 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import datetime
+
+import routes
+import webob
+import webob.dec
+import webob.request
+
+from cinder.api import auth as api_auth
+from cinder.api import openstack as openstack_api
+from cinder.api.openstack import auth
+from cinder.api.openstack import urlmap
+from cinder.api.openstack.compute import versions
+from cinder.api.openstack import wsgi as os_wsgi
+from cinder import context
+from cinder.db.sqlalchemy import models
+from cinder import exception as exc
+from cinder import utils
+from cinder import wsgi
+
+
+FAKE_UUID = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'
+FAKE_UUIDS = {}
+
+
+class Context(object):
+    pass
+
+
+class FakeRouter(wsgi.Router):
+    def __init__(self, ext_mgr=None):
+        pass
+
+    @webob.dec.wsgify
+    def __call__(self, req):
+        res = webob.Response()
+        res.status = '200'
+        res.headers['X-Test-Success'] = 'True'
+        return res
+
+
+@webob.dec.wsgify
+def fake_wsgi(self, req):
+    return self.application
+
+
+def wsgi_app(inner_app_v2=None, fake_auth=True, fake_auth_context=None,
+        use_no_auth=False, ext_mgr=None):
+    if not inner_app_v2:
+        inner_app_v2 = compute.APIRouter(ext_mgr)
+
+    if fake_auth:
+        if fake_auth_context is not None:
+            ctxt = fake_auth_context
+        else:
+            ctxt = context.RequestContext('fake', 'fake', auth_token=True)
+        api_v2 = openstack_api.FaultWrapper(api_auth.InjectContext(ctxt,
+              limits.RateLimitingMiddleware(inner_app_v2)))
+    elif use_no_auth:
+        api_v2 = openstack_api.FaultWrapper(auth.NoAuthMiddleware(
+              limits.RateLimitingMiddleware(inner_app_v2)))
+    else:
+        api_v2 = openstack_api.FaultWrapper(auth.AuthMiddleware(
+              limits.RateLimitingMiddleware(inner_app_v2)))
+
+    mapper = urlmap.URLMap()
+    mapper['/v2'] = api_v2
+    mapper['/v1.1'] = api_v2
+    mapper['/'] = openstack_api.FaultWrapper(versions.Versions())
+    return mapper
+
+
+def stub_out_rate_limiting(stubs):
+    def fake_rate_init(self, app):
+        # super(limits.RateLimitingMiddleware, self).__init__(app)
+        self.application = app
+
+    # FIXME(ja): unsure about limits in volumes
+    # stubs.Set(cinder.api.openstack.compute.limits.RateLimitingMiddleware,
+    #     '__init__', fake_rate_init)
+
+    # stubs.Set(cinder.api.openstack.compute.limits.RateLimitingMiddleware,
+    #     '__call__', fake_wsgi)
+
+
+class FakeToken(object):
+    id_count = 0
+
+    def __getitem__(self, key):
+        return getattr(self, key)
+
+    def __init__(self, **kwargs):
+        FakeToken.id_count += 1
+        self.id = FakeToken.id_count
+        for k, v in kwargs.iteritems():
+            setattr(self, k, v)
+
+
+class FakeRequestContext(context.RequestContext):
+    def __init__(self, *args, **kwargs):
+        kwargs['auth_token'] = kwargs.get('auth_token', 'fake_auth_token')
+        return super(FakeRequestContext, self).__init__(*args, **kwargs)
+
+
+class HTTPRequest(webob.Request):
+
+    @classmethod
+    def blank(cls, *args, **kwargs):
+        kwargs['base_url'] = 'http://localhost/v2'
+        use_admin_context = kwargs.pop('use_admin_context', False)
+        out = webob.Request.blank(*args, **kwargs)
+        out.environ['cinder.context'] = FakeRequestContext('fake_user', 'fake',
+                is_admin=use_admin_context)
+        return out
+
+
+class TestRouter(wsgi.Router):
+    def __init__(self, controller):
+        mapper = routes.Mapper()
+        mapper.resource("test", "tests",
+                        controller=os_wsgi.Resource(controller))
+        super(TestRouter, self).__init__(mapper)
+
+
+class FakeAuthDatabase(object):
+    data = {}
+
+    @staticmethod
+    def auth_token_get(context, token_hash):
+        return FakeAuthDatabase.data.get(token_hash, None)
+
+    @staticmethod
+    def auth_token_create(context, token):
+        fake_token = FakeToken(created_at=utils.utcnow(), **token)
+        FakeAuthDatabase.data[fake_token.token_hash] = fake_token
+        FakeAuthDatabase.data['id_%i' % fake_token.id] = fake_token
+        return fake_token
+
+    @staticmethod
+    def auth_token_destroy(context, token_id):
+        token = FakeAuthDatabase.data.get('id_%i' % token_id)
+        if token and token.token_hash in FakeAuthDatabase.data:
+            del FakeAuthDatabase.data[token.token_hash]
+            del FakeAuthDatabase.data['id_%i' % token_id]
+
+
+class FakeRateLimiter(object):
+    def __init__(self, application):
+        self.application = application
+
+    @webob.dec.wsgify
+    def __call__(self, req):
+        return self.application
+
+
+def get_fake_uuid(token=0):
+    if not token in FAKE_UUIDS:
+        FAKE_UUIDS[token] = str(utils.gen_uuid())
+    return FAKE_UUIDS[token]
+
+
+def stub_volume(id, **kwargs):
+    volume = {
+        'id': id,
+        'user_id': 'fakeuser',
+        'project_id': 'fakeproject',
+        'host': 'fakehost',
+        'size': 1,
+        'availability_zone': 'fakeaz',
+        'instance': {'uuid': 'fakeuuid'},
+        'mountpoint': '/',
+        'status': 'fakestatus',
+        'attach_status': 'attached',
+        'name': 'vol name',
+        'display_name': 'displayname',
+        'display_description': 'displaydesc',
+        'created_at': datetime.datetime(1, 1, 1, 1, 1, 1),
+        'snapshot_id': None,
+        'volume_type_id': 'fakevoltype',
+        'volume_metadata': [],
+        'volume_type': {'name': 'vol_type_name'}}
+
+    volume.update(kwargs)
+    return volume
+
+
+def stub_volume_create(self, context, size, name, description, snapshot,
+                       **param):
+    vol = stub_volume(1)
+    vol['size'] = size
+    vol['display_name'] = name
+    vol['display_description'] = description
+    try:
+        vol['snapshot_id'] = snapshot['id']
+    except (KeyError, TypeError):
+        vol['snapshot_id'] = None
+    vol['availability_zone'] = param.get('availability_zone', 'fakeaz')
+    return vol
+
+
+def stub_volume_update(self, context, *args, **param):
+    pass
+
+
+def stub_volume_delete(self, context, *args, **param):
+    pass
+
+
+def stub_volume_get(self, context, volume_id):
+    return stub_volume(volume_id)
+
+
+def stub_volume_get_notfound(self, context, volume_id):
+    raise exc.NotFound
+
+
+def stub_volume_get_all(self, context, search_opts=None):
+    return [stub_volume_get(self, context, 1)]
diff --git a/cinder/tests/api/openstack/test_common.py b/cinder/tests/api/openstack/test_common.py
new file mode 100644
index 000000000..22ccbd77c
--- /dev/null
+++ b/cinder/tests/api/openstack/test_common.py
@@ -0,0 +1,526 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+Test suites for 'common' code used throughout the OpenStack HTTP API.
+"""
+
+from lxml import etree
+import webob
+import webob.exc
+import xml.dom.minidom as minidom
+
+from cinder import exception
+from cinder import test
+from cinder.api.openstack import common
+from cinder.api.openstack import xmlutil
+
+
+NS = "{http://docs.openstack.org/compute/api/v1.1}"
+ATOMNS = "{http://www.w3.org/2005/Atom}"
+
+
+class LimiterTest(test.TestCase):
+    """
+    Unit tests for the `cinder.api.openstack.common.limited` method which takes
+    in a list of items and, depending on the 'offset' and 'limit' GET params,
+    returns a subset or complete set of the given items.
+    """
+
+    def setUp(self):
+        """ Run before each test. """
+        super(LimiterTest, self).setUp()
+        self.tiny = range(1)
+        self.small = range(10)
+        self.medium = range(1000)
+        self.large = range(10000)
+
+    def test_limiter_offset_zero(self):
+        """ Test offset key works with 0. """
+        req = webob.Request.blank('/?offset=0')
+        self.assertEqual(common.limited(self.tiny, req), self.tiny)
+        self.assertEqual(common.limited(self.small, req), self.small)
+        self.assertEqual(common.limited(self.medium, req), self.medium)
+        self.assertEqual(common.limited(self.large, req), self.large[:1000])
+
+    def test_limiter_offset_medium(self):
+        """ Test offset key works with a medium sized number. """
+        req = webob.Request.blank('/?offset=10')
+        self.assertEqual(common.limited(self.tiny, req), [])
+        self.assertEqual(common.limited(self.small, req), self.small[10:])
+        self.assertEqual(common.limited(self.medium, req), self.medium[10:])
+        self.assertEqual(common.limited(self.large, req), self.large[10:1010])
+
+    def test_limiter_offset_over_max(self):
+        """ Test offset key works with a number over 1000 (max_limit). """
+        req = webob.Request.blank('/?offset=1001')
+        self.assertEqual(common.limited(self.tiny, req), [])
+        self.assertEqual(common.limited(self.small, req), [])
+        self.assertEqual(common.limited(self.medium, req), [])
+        self.assertEqual(
+            common.limited(self.large, req), self.large[1001:2001])
+
+    def test_limiter_offset_blank(self):
+        """ Test offset key works with a blank offset. """
+        req = webob.Request.blank('/?offset=')
+        self.assertRaises(
+            webob.exc.HTTPBadRequest, common.limited, self.tiny, req)
+
+    def test_limiter_offset_bad(self):
+        """ Test offset key works with a BAD offset. """
+        req = webob.Request.blank(u'/?offset=\u0020aa')
+        self.assertRaises(
+            webob.exc.HTTPBadRequest, common.limited, self.tiny, req)
+
+    def test_limiter_nothing(self):
+        """ Test request with no offset or limit """
+        req = webob.Request.blank('/')
+        self.assertEqual(common.limited(self.tiny, req), self.tiny)
+        self.assertEqual(common.limited(self.small, req), self.small)
+        self.assertEqual(common.limited(self.medium, req), self.medium)
+        self.assertEqual(common.limited(self.large, req), self.large[:1000])
+
+    def test_limiter_limit_zero(self):
+        """ Test limit of zero. """
+        req = webob.Request.blank('/?limit=0')
+        self.assertEqual(common.limited(self.tiny, req), self.tiny)
+        self.assertEqual(common.limited(self.small, req), self.small)
+        self.assertEqual(common.limited(self.medium, req), self.medium)
+        self.assertEqual(common.limited(self.large, req), self.large[:1000])
+
+    def test_limiter_limit_medium(self):
+        """ Test limit of 10. """
+        req = webob.Request.blank('/?limit=10')
+        self.assertEqual(common.limited(self.tiny, req), self.tiny)
+        self.assertEqual(common.limited(self.small, req), self.small)
+        self.assertEqual(common.limited(self.medium, req), self.medium[:10])
+        self.assertEqual(common.limited(self.large, req), self.large[:10])
+
+    def test_limiter_limit_over_max(self):
+        """ Test limit of 3000. """
+        req = webob.Request.blank('/?limit=3000')
+        self.assertEqual(common.limited(self.tiny, req), self.tiny)
+        self.assertEqual(common.limited(self.small, req), self.small)
+        self.assertEqual(common.limited(self.medium, req), self.medium)
+        self.assertEqual(common.limited(self.large, req), self.large[:1000])
+
+    def test_limiter_limit_and_offset(self):
+        """ Test request with both limit and offset. """
+        items = range(2000)
+        req = webob.Request.blank('/?offset=1&limit=3')
+        self.assertEqual(common.limited(items, req), items[1:4])
+        req = webob.Request.blank('/?offset=3&limit=0')
+        self.assertEqual(common.limited(items, req), items[3:1003])
+        req = webob.Request.blank('/?offset=3&limit=1500')
+        self.assertEqual(common.limited(items, req), items[3:1003])
+        req = webob.Request.blank('/?offset=3000&limit=10')
+        self.assertEqual(common.limited(items, req), [])
+
+    def test_limiter_custom_max_limit(self):
+        """ Test a max_limit other than 1000. """
+        items = range(2000)
+        req = webob.Request.blank('/?offset=1&limit=3')
+        self.assertEqual(
+            common.limited(items, req, max_limit=2000), items[1:4])
+        req = webob.Request.blank('/?offset=3&limit=0')
+        self.assertEqual(
+            common.limited(items, req, max_limit=2000), items[3:])
+        req = webob.Request.blank('/?offset=3&limit=2500')
+        self.assertEqual(
+            common.limited(items, req, max_limit=2000), items[3:])
+        req = webob.Request.blank('/?offset=3000&limit=10')
+        self.assertEqual(common.limited(items, req, max_limit=2000), [])
+
+    def test_limiter_negative_limit(self):
+        """ Test a negative limit. """
+        req = webob.Request.blank('/?limit=-3000')
+        self.assertRaises(
+            webob.exc.HTTPBadRequest, common.limited, self.tiny, req)
+
+    def test_limiter_negative_offset(self):
+        """ Test a negative offset. """
+        req = webob.Request.blank('/?offset=-30')
+        self.assertRaises(
+            webob.exc.HTTPBadRequest, common.limited, self.tiny, req)
+
+
+class PaginationParamsTest(test.TestCase):
+    """
+    Unit tests for the `cinder.api.openstack.common.get_pagination_params`
+    method which takes in a request object and returns 'marker' and 'limit'
+    GET params.
+    """
+
+    def test_no_params(self):
+        """ Test no params. """
+        req = webob.Request.blank('/')
+        self.assertEqual(common.get_pagination_params(req), {})
+
+    def test_valid_marker(self):
+        """ Test valid marker param. """
+        req = webob.Request.blank(
+                '/?marker=263abb28-1de6-412f-b00b-f0ee0c4333c2')
+        self.assertEqual(common.get_pagination_params(req),
+                         {'marker': '263abb28-1de6-412f-b00b-f0ee0c4333c2'})
+
+    def test_valid_limit(self):
+        """ Test valid limit param. """
+        req = webob.Request.blank('/?limit=10')
+        self.assertEqual(common.get_pagination_params(req), {'limit': 10})
+
+    def test_invalid_limit(self):
+        """ Test invalid limit param. """
+        req = webob.Request.blank('/?limit=-2')
+        self.assertRaises(
+            webob.exc.HTTPBadRequest, common.get_pagination_params, req)
+
+    def test_valid_limit_and_marker(self):
+        """ Test valid limit and marker parameters. """
+        marker = '263abb28-1de6-412f-b00b-f0ee0c4333c2'
+        req = webob.Request.blank('/?limit=20&marker=%s' % marker)
+        self.assertEqual(common.get_pagination_params(req),
+                         {'marker': marker, 'limit': 20})
+
+
+class MiscFunctionsTest(test.TestCase):
+
+    def test_remove_major_version_from_href(self):
+        fixture = 'http://www.testsite.com/v1/images'
+        expected = 'http://www.testsite.com/images'
+        actual = common.remove_version_from_href(fixture)
+        self.assertEqual(actual, expected)
+
+    def test_remove_version_from_href(self):
+        fixture = 'http://www.testsite.com/v1.1/images'
+        expected = 'http://www.testsite.com/images'
+        actual = common.remove_version_from_href(fixture)
+        self.assertEqual(actual, expected)
+
+    def test_remove_version_from_href_2(self):
+        fixture = 'http://www.testsite.com/v1.1/'
+        expected = 'http://www.testsite.com/'
+        actual = common.remove_version_from_href(fixture)
+        self.assertEqual(actual, expected)
+
+    def test_remove_version_from_href_3(self):
+        fixture = 'http://www.testsite.com/v10.10'
+        expected = 'http://www.testsite.com'
+        actual = common.remove_version_from_href(fixture)
+        self.assertEqual(actual, expected)
+
+    def test_remove_version_from_href_4(self):
+        fixture = 'http://www.testsite.com/v1.1/images/v10.5'
+        expected = 'http://www.testsite.com/images/v10.5'
+        actual = common.remove_version_from_href(fixture)
+        self.assertEqual(actual, expected)
+
+    def test_remove_version_from_href_bad_request(self):
+        fixture = 'http://www.testsite.com/1.1/images'
+        self.assertRaises(ValueError,
+                          common.remove_version_from_href,
+                          fixture)
+
+    def test_remove_version_from_href_bad_request_2(self):
+        fixture = 'http://www.testsite.com/v/images'
+        self.assertRaises(ValueError,
+                          common.remove_version_from_href,
+                          fixture)
+
+    def test_remove_version_from_href_bad_request_3(self):
+        fixture = 'http://www.testsite.com/v1.1images'
+        self.assertRaises(ValueError,
+                          common.remove_version_from_href,
+                          fixture)
+
+    def test_get_id_from_href_with_int_url(self):
+        fixture = 'http://www.testsite.com/dir/45'
+        actual = common.get_id_from_href(fixture)
+        expected = '45'
+        self.assertEqual(actual, expected)
+
+    def test_get_id_from_href_with_int(self):
+        fixture = '45'
+        actual = common.get_id_from_href(fixture)
+        expected = '45'
+        self.assertEqual(actual, expected)
+
+    def test_get_id_from_href_with_int_url_query(self):
+        fixture = 'http://www.testsite.com/dir/45?asdf=jkl'
+        actual = common.get_id_from_href(fixture)
+        expected = '45'
+        self.assertEqual(actual, expected)
+
+    def test_get_id_from_href_with_uuid_url(self):
+        fixture = 'http://www.testsite.com/dir/abc123'
+        actual = common.get_id_from_href(fixture)
+        expected = "abc123"
+        self.assertEqual(actual, expected)
+
+    def test_get_id_from_href_with_uuid_url_query(self):
+        fixture = 'http://www.testsite.com/dir/abc123?asdf=jkl'
+        actual = common.get_id_from_href(fixture)
+        expected = "abc123"
+        self.assertEqual(actual, expected)
+
+    def test_get_id_from_href_with_uuid(self):
+        fixture = 'abc123'
+        actual = common.get_id_from_href(fixture)
+        expected = 'abc123'
+        self.assertEqual(actual, expected)
+
+    def test_get_version_from_href(self):
+        fixture = 'http://www.testsite.com/v1.1/images'
+        expected = '1.1'
+        actual = common.get_version_from_href(fixture)
+        self.assertEqual(actual, expected)
+
+    def test_get_version_from_href_2(self):
+        fixture = 'http://www.testsite.com/v1.1'
+        expected = '1.1'
+        actual = common.get_version_from_href(fixture)
+        self.assertEqual(actual, expected)
+
+    def test_get_version_from_href_default(self):
+        fixture = 'http://www.testsite.com/images'
+        expected = '2'
+        actual = common.get_version_from_href(fixture)
+        self.assertEqual(actual, expected)
+
+    def test_raise_http_conflict_for_instance_invalid_state(self):
+        # Correct args
+        exc = exception.InstanceInvalidState(attr='fake_attr',
+                state='fake_state', method='fake_method')
+        try:
+            common.raise_http_conflict_for_instance_invalid_state(exc,
+                    'meow')
+        except Exception, e:
+            self.assertTrue(isinstance(e, webob.exc.HTTPConflict))
+            msg = str(e)
+            self.assertEqual(msg,
+                "Cannot 'meow' while instance is in fake_attr fake_state")
+        else:
+            self.fail("webob.exc.HTTPConflict was not raised")
+
+        # Incorrect args
+        exc = exception.InstanceInvalidState()
+        try:
+            common.raise_http_conflict_for_instance_invalid_state(exc,
+                    'meow')
+        except Exception, e:
+            self.assertTrue(isinstance(e, webob.exc.HTTPConflict))
+            msg = str(e)
+            self.assertEqual(msg,
+                "Instance is in an invalid state for 'meow'")
+        else:
+            self.fail("webob.exc.HTTPConflict was not raised")
+
+
+class MetadataXMLDeserializationTest(test.TestCase):
+
+    deserializer = common.MetadataXMLDeserializer()
+
+    def test_create(self):
+        request_body = """
+        <metadata xmlns="http://docs.openstack.org/compute/api/v1.1">
+            <meta key='123'>asdf</meta>
+            <meta key='567'>jkl;</meta>
+        </metadata>"""
+        output = self.deserializer.deserialize(request_body, 'create')
+        expected = {"body": {"metadata": {"123": "asdf", "567": "jkl;"}}}
+        self.assertEquals(output, expected)
+
+    def test_create_empty(self):
+        request_body = """
+        <metadata xmlns="http://docs.openstack.org/compute/api/v1.1"/>"""
+        output = self.deserializer.deserialize(request_body, 'create')
+        expected = {"body": {"metadata": {}}}
+        self.assertEquals(output, expected)
+
+    def test_update_all(self):
+        request_body = """
+        <metadata xmlns="http://docs.openstack.org/compute/api/v1.1">
+            <meta key='123'>asdf</meta>
+            <meta key='567'>jkl;</meta>
+        </metadata>"""
+        output = self.deserializer.deserialize(request_body, 'update_all')
+        expected = {"body": {"metadata": {"123": "asdf", "567": "jkl;"}}}
+        self.assertEquals(output, expected)
+
+    def test_update(self):
+        request_body = """
+        <meta xmlns="http://docs.openstack.org/compute/api/v1.1"
+              key='123'>asdf</meta>"""
+        output = self.deserializer.deserialize(request_body, 'update')
+        expected = {"body": {"meta": {"123": "asdf"}}}
+        self.assertEquals(output, expected)
+
+
+class MetadataXMLSerializationTest(test.TestCase):
+
+    def test_xml_declaration(self):
+        serializer = common.MetadataTemplate()
+        fixture = {
+            'metadata': {
+                'one': 'two',
+                'three': 'four',
+            },
+        }
+
+        output = serializer.serialize(fixture)
+        print output
+        has_dec = output.startswith("<?xml version='1.0' encoding='UTF-8'?>")
+        self.assertTrue(has_dec)
+
+    def test_index(self):
+        serializer = common.MetadataTemplate()
+        fixture = {
+            'metadata': {
+                'one': 'two',
+                'three': 'four',
+            },
+        }
+        output = serializer.serialize(fixture)
+        print output
+        root = etree.XML(output)
+        xmlutil.validate_schema(root, 'metadata')
+        metadata_dict = fixture['metadata']
+        metadata_elems = root.findall('{0}meta'.format(NS))
+        self.assertEqual(len(metadata_elems), 2)
+        for i, metadata_elem in enumerate(metadata_elems):
+            (meta_key, meta_value) = metadata_dict.items()[i]
+            self.assertEqual(str(metadata_elem.get('key')), str(meta_key))
+            self.assertEqual(str(metadata_elem.text).strip(), str(meta_value))
+
+    def test_index_null(self):
+        serializer = common.MetadataTemplate()
+        fixture = {
+            'metadata': {
+                None: None,
+            },
+        }
+        output = serializer.serialize(fixture)
+        print output
+        root = etree.XML(output)
+        xmlutil.validate_schema(root, 'metadata')
+        metadata_dict = fixture['metadata']
+        metadata_elems = root.findall('{0}meta'.format(NS))
+        self.assertEqual(len(metadata_elems), 1)
+        for i, metadata_elem in enumerate(metadata_elems):
+            (meta_key, meta_value) = metadata_dict.items()[i]
+            self.assertEqual(str(metadata_elem.get('key')), str(meta_key))
+            self.assertEqual(str(metadata_elem.text).strip(), str(meta_value))
+
+    def test_index_unicode(self):
+        serializer = common.MetadataTemplate()
+        fixture = {
+            'metadata': {
+                u'three': u'Jos\xe9',
+            },
+        }
+        output = serializer.serialize(fixture)
+        print output
+        root = etree.XML(output)
+        xmlutil.validate_schema(root, 'metadata')
+        metadata_dict = fixture['metadata']
+        metadata_elems = root.findall('{0}meta'.format(NS))
+        self.assertEqual(len(metadata_elems), 1)
+        for i, metadata_elem in enumerate(metadata_elems):
+            (meta_key, meta_value) = metadata_dict.items()[i]
+            self.assertEqual(str(metadata_elem.get('key')), str(meta_key))
+            self.assertEqual(metadata_elem.text.strip(), meta_value)
+
+    def test_show(self):
+        serializer = common.MetaItemTemplate()
+        fixture = {
+            'meta': {
+                'one': 'two',
+            },
+        }
+        output = serializer.serialize(fixture)
+        print output
+        root = etree.XML(output)
+        meta_dict = fixture['meta']
+        (meta_key, meta_value) = meta_dict.items()[0]
+        self.assertEqual(str(root.get('key')), str(meta_key))
+        self.assertEqual(root.text.strip(), meta_value)
+
+    def test_update_all(self):
+        serializer = common.MetadataTemplate()
+        fixture = {
+            'metadata': {
+                'key6': 'value6',
+                'key4': 'value4',
+            },
+        }
+        output = serializer.serialize(fixture)
+        print output
+        root = etree.XML(output)
+        xmlutil.validate_schema(root, 'metadata')
+        metadata_dict = fixture['metadata']
+        metadata_elems = root.findall('{0}meta'.format(NS))
+        self.assertEqual(len(metadata_elems), 2)
+        for i, metadata_elem in enumerate(metadata_elems):
+            (meta_key, meta_value) = metadata_dict.items()[i]
+            self.assertEqual(str(metadata_elem.get('key')), str(meta_key))
+            self.assertEqual(str(metadata_elem.text).strip(), str(meta_value))
+
+    def test_update_item(self):
+        serializer = common.MetaItemTemplate()
+        fixture = {
+            'meta': {
+                'one': 'two',
+            },
+        }
+        output = serializer.serialize(fixture)
+        print output
+        root = etree.XML(output)
+        meta_dict = fixture['meta']
+        (meta_key, meta_value) = meta_dict.items()[0]
+        self.assertEqual(str(root.get('key')), str(meta_key))
+        self.assertEqual(root.text.strip(), meta_value)
+
+    def test_create(self):
+        serializer = common.MetadataTemplate()
+        fixture = {
+            'metadata': {
+                'key9': 'value9',
+                'key2': 'value2',
+                'key1': 'value1',
+            },
+        }
+        output = serializer.serialize(fixture)
+        print output
+        root = etree.XML(output)
+        xmlutil.validate_schema(root, 'metadata')
+        metadata_dict = fixture['metadata']
+        metadata_elems = root.findall('{0}meta'.format(NS))
+        self.assertEqual(len(metadata_elems), 3)
+        for i, metadata_elem in enumerate(metadata_elems):
+            (meta_key, meta_value) = metadata_dict.items()[i]
+            self.assertEqual(str(metadata_elem.get('key')), str(meta_key))
+            self.assertEqual(str(metadata_elem.text).strip(), str(meta_value))
+        actual = minidom.parseString(output.replace("  ", ""))
+
+        expected = minidom.parseString("""
+            <metadata xmlns="http://docs.openstack.org/compute/api/v1.1">
+                <meta key="key2">value2</meta>
+                <meta key="key9">value9</meta>
+                <meta key="key1">value1</meta>
+            </metadata>
+        """.replace("  ", "").replace("\n", ""))
+
+        self.assertEqual(expected.toxml(), actual.toxml())
diff --git a/cinder/tests/api/openstack/test_faults.py b/cinder/tests/api/openstack/test_faults.py
new file mode 100644
index 000000000..9d85a14f4
--- /dev/null
+++ b/cinder/tests/api/openstack/test_faults.py
@@ -0,0 +1,208 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import json
+from xml.dom import minidom
+
+import webob
+import webob.dec
+import webob.exc
+
+from cinder import test
+from cinder.api.openstack import common
+from cinder.api.openstack import wsgi
+
+
+class TestFaults(test.TestCase):
+    """Tests covering `cinder.api.openstack.faults:Fault` class."""
+
+    def _prepare_xml(self, xml_string):
+        """Remove characters from string which hinder XML equality testing."""
+        xml_string = xml_string.replace("  ", "")
+        xml_string = xml_string.replace("\n", "")
+        xml_string = xml_string.replace("\t", "")
+        return xml_string
+
+    def test_400_fault_json(self):
+        """Test fault serialized to JSON via file-extension and/or header."""
+        requests = [
+            webob.Request.blank('/.json'),
+            webob.Request.blank('/', headers={"Accept": "application/json"}),
+        ]
+
+        for request in requests:
+            fault = wsgi.Fault(webob.exc.HTTPBadRequest(explanation='scram'))
+            response = request.get_response(fault)
+
+            expected = {
+                "badRequest": {
+                    "message": "scram",
+                    "code": 400,
+                },
+            }
+            actual = json.loads(response.body)
+
+            self.assertEqual(response.content_type, "application/json")
+            self.assertEqual(expected, actual)
+
+    def test_413_fault_json(self):
+        """Test fault serialized to JSON via file-extension and/or header."""
+        requests = [
+            webob.Request.blank('/.json'),
+            webob.Request.blank('/', headers={"Accept": "application/json"}),
+        ]
+
+        for request in requests:
+            exc = webob.exc.HTTPRequestEntityTooLarge
+            fault = wsgi.Fault(exc(explanation='sorry',
+                        headers={'Retry-After': 4}))
+            response = request.get_response(fault)
+
+            expected = {
+                "overLimit": {
+                    "message": "sorry",
+                    "code": 413,
+                    "retryAfter": 4,
+                },
+            }
+            actual = json.loads(response.body)
+
+            self.assertEqual(response.content_type, "application/json")
+            self.assertEqual(expected, actual)
+
+    def test_raise(self):
+        """Ensure the ability to raise :class:`Fault` in WSGI-ified methods."""
+        @webob.dec.wsgify
+        def raiser(req):
+            raise wsgi.Fault(webob.exc.HTTPNotFound(explanation='whut?'))
+
+        req = webob.Request.blank('/.xml')
+        resp = req.get_response(raiser)
+        self.assertEqual(resp.content_type, "application/xml")
+        self.assertEqual(resp.status_int, 404)
+        self.assertTrue('whut?' in resp.body)
+
+    def test_raise_403(self):
+        """Ensure the ability to raise :class:`Fault` in WSGI-ified methods."""
+        @webob.dec.wsgify
+        def raiser(req):
+            raise wsgi.Fault(webob.exc.HTTPForbidden(explanation='whut?'))
+
+        req = webob.Request.blank('/.xml')
+        resp = req.get_response(raiser)
+        self.assertEqual(resp.content_type, "application/xml")
+        self.assertEqual(resp.status_int, 403)
+        self.assertTrue('resizeNotAllowed' not in resp.body)
+        self.assertTrue('forbidden' in resp.body)
+
+    def test_fault_has_status_int(self):
+        """Ensure the status_int is set correctly on faults"""
+        fault = wsgi.Fault(webob.exc.HTTPBadRequest(explanation='what?'))
+        self.assertEqual(fault.status_int, 400)
+
+    def test_xml_serializer(self):
+        """Ensure that a v1.1 request responds with a v1 xmlns"""
+        request = webob.Request.blank('/v1',
+                                      headers={"Accept": "application/xml"})
+
+        fault = wsgi.Fault(webob.exc.HTTPBadRequest(explanation='scram'))
+        response = request.get_response(fault)
+
+        self.assertTrue(common.XML_NS_V1 in response.body)
+        self.assertEqual(response.content_type, "application/xml")
+        self.assertEqual(response.status_int, 400)
+
+
+class FaultsXMLSerializationTestV11(test.TestCase):
+    """Tests covering `cinder.api.openstack.faults:Fault` class."""
+
+    def _prepare_xml(self, xml_string):
+        xml_string = xml_string.replace("  ", "")
+        xml_string = xml_string.replace("\n", "")
+        xml_string = xml_string.replace("\t", "")
+        return xml_string
+
+    def test_400_fault(self):
+        metadata = {'attributes': {"badRequest": 'code'}}
+        serializer = wsgi.XMLDictSerializer(metadata=metadata,
+                                            xmlns=common.XML_NS_V1)
+
+        fixture = {
+            "badRequest": {
+                "message": "scram",
+                "code": 400,
+            },
+        }
+
+        output = serializer.serialize(fixture)
+        actual = minidom.parseString(self._prepare_xml(output))
+
+        expected = minidom.parseString(self._prepare_xml("""
+                <badRequest code="400" xmlns="%s">
+                    <message>scram</message>
+                </badRequest>
+            """) % common.XML_NS_V1)
+
+        self.assertEqual(expected.toxml(), actual.toxml())
+
+    def test_413_fault(self):
+        metadata = {'attributes': {"overLimit": 'code'}}
+        serializer = wsgi.XMLDictSerializer(metadata=metadata,
+                                            xmlns=common.XML_NS_V1)
+
+        fixture = {
+            "overLimit": {
+                "message": "sorry",
+                "code": 413,
+                "retryAfter": 4,
+            },
+        }
+
+        output = serializer.serialize(fixture)
+        actual = minidom.parseString(self._prepare_xml(output))
+
+        expected = minidom.parseString(self._prepare_xml("""
+                <overLimit code="413" xmlns="%s">
+                    <message>sorry</message>
+                    <retryAfter>4</retryAfter>
+                </overLimit>
+            """) % common.XML_NS_V1)
+
+        self.assertEqual(expected.toxml(), actual.toxml())
+
+    def test_404_fault(self):
+        metadata = {'attributes': {"itemNotFound": 'code'}}
+        serializer = wsgi.XMLDictSerializer(metadata=metadata,
+                                            xmlns=common.XML_NS_V1)
+
+        fixture = {
+            "itemNotFound": {
+                "message": "sorry",
+                "code": 404,
+            },
+        }
+
+        output = serializer.serialize(fixture)
+        actual = minidom.parseString(self._prepare_xml(output))
+
+        expected = minidom.parseString(self._prepare_xml("""
+                <itemNotFound code="404" xmlns="%s">
+                    <message>sorry</message>
+                </itemNotFound>
+            """) % common.XML_NS_V1)
+
+        self.assertEqual(expected.toxml(), actual.toxml())
diff --git a/cinder/tests/api/openstack/test_wsgi.py b/cinder/tests/api/openstack/test_wsgi.py
new file mode 100644
index 000000000..f9a4a1c92
--- /dev/null
+++ b/cinder/tests/api/openstack/test_wsgi.py
@@ -0,0 +1,833 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+import inspect
+import json
+import webob
+
+from cinder import exception
+from cinder import test
+from cinder import utils
+from cinder.api.openstack import wsgi
+from cinder.tests.api.openstack import fakes
+import cinder.context
+
+
+class RequestTest(test.TestCase):
+    def test_content_type_missing(self):
+        request = wsgi.Request.blank('/tests/123', method='POST')
+        request.body = "<body />"
+        self.assertEqual(None, request.get_content_type())
+
+    def test_content_type_unsupported(self):
+        request = wsgi.Request.blank('/tests/123', method='POST')
+        request.headers["Content-Type"] = "text/html"
+        request.body = "asdf<br />"
+        self.assertRaises(exception.InvalidContentType,
+                          request.get_content_type)
+
+    def test_content_type_with_charset(self):
+        request = wsgi.Request.blank('/tests/123')
+        request.headers["Content-Type"] = "application/json; charset=UTF-8"
+        result = request.get_content_type()
+        self.assertEqual(result, "application/json")
+
+    def test_content_type_from_accept(self):
+        for content_type in ('application/xml',
+                             'application/vnd.openstack.volume+xml',
+                             'application/json',
+                             'application/vnd.openstack.volume+json'):
+            request = wsgi.Request.blank('/tests/123')
+            request.headers["Accept"] = content_type
+            result = request.best_match_content_type()
+            self.assertEqual(result, content_type)
+
+    def test_content_type_from_accept_best(self):
+        request = wsgi.Request.blank('/tests/123')
+        request.headers["Accept"] = "application/xml, application/json"
+        result = request.best_match_content_type()
+        self.assertEqual(result, "application/json")
+
+        request = wsgi.Request.blank('/tests/123')
+        request.headers["Accept"] = ("application/json; q=0.3, "
+                                     "application/xml; q=0.9")
+        result = request.best_match_content_type()
+        self.assertEqual(result, "application/xml")
+
+    def test_content_type_from_query_extension(self):
+        request = wsgi.Request.blank('/tests/123.xml')
+        result = request.best_match_content_type()
+        self.assertEqual(result, "application/xml")
+
+        request = wsgi.Request.blank('/tests/123.json')
+        result = request.best_match_content_type()
+        self.assertEqual(result, "application/json")
+
+        request = wsgi.Request.blank('/tests/123.invalid')
+        result = request.best_match_content_type()
+        self.assertEqual(result, "application/json")
+
+    def test_content_type_accept_and_query_extension(self):
+        request = wsgi.Request.blank('/tests/123.xml')
+        request.headers["Accept"] = "application/json"
+        result = request.best_match_content_type()
+        self.assertEqual(result, "application/xml")
+
+    def test_content_type_accept_default(self):
+        request = wsgi.Request.blank('/tests/123.unsupported')
+        request.headers["Accept"] = "application/unsupported1"
+        result = request.best_match_content_type()
+        self.assertEqual(result, "application/json")
+
+
+class ActionDispatcherTest(test.TestCase):
+    def test_dispatch(self):
+        serializer = wsgi.ActionDispatcher()
+        serializer.create = lambda x: 'pants'
+        self.assertEqual(serializer.dispatch({}, action='create'), 'pants')
+
+    def test_dispatch_action_None(self):
+        serializer = wsgi.ActionDispatcher()
+        serializer.create = lambda x: 'pants'
+        serializer.default = lambda x: 'trousers'
+        self.assertEqual(serializer.dispatch({}, action=None), 'trousers')
+
+    def test_dispatch_default(self):
+        serializer = wsgi.ActionDispatcher()
+        serializer.create = lambda x: 'pants'
+        serializer.default = lambda x: 'trousers'
+        self.assertEqual(serializer.dispatch({}, action='update'), 'trousers')
+
+
+class DictSerializerTest(test.TestCase):
+    def test_dispatch_default(self):
+        serializer = wsgi.DictSerializer()
+        self.assertEqual(serializer.serialize({}, 'update'), '')
+
+
+class XMLDictSerializerTest(test.TestCase):
+    def test_xml(self):
+        input_dict = dict(servers=dict(a=(2, 3)))
+        expected_xml = '<serversxmlns="asdf"><a>(2,3)</a></servers>'
+        serializer = wsgi.XMLDictSerializer(xmlns="asdf")
+        result = serializer.serialize(input_dict)
+        result = result.replace('\n', '').replace(' ', '')
+        self.assertEqual(result, expected_xml)
+
+
+class JSONDictSerializerTest(test.TestCase):
+    def test_json(self):
+        input_dict = dict(servers=dict(a=(2, 3)))
+        expected_json = '{"servers":{"a":[2,3]}}'
+        serializer = wsgi.JSONDictSerializer()
+        result = serializer.serialize(input_dict)
+        result = result.replace('\n', '').replace(' ', '')
+        self.assertEqual(result, expected_json)
+
+
+class TextDeserializerTest(test.TestCase):
+    def test_dispatch_default(self):
+        deserializer = wsgi.TextDeserializer()
+        self.assertEqual(deserializer.deserialize({}, 'update'), {})
+
+
+class JSONDeserializerTest(test.TestCase):
+    def test_json(self):
+        data = """{"a": {
+                "a1": "1",
+                "a2": "2",
+                "bs": ["1", "2", "3", {"c": {"c1": "1"}}],
+                "d": {"e": "1"},
+                "f": "1"}}"""
+        as_dict = {
+            'body': {
+                'a': {
+                    'a1': '1',
+                    'a2': '2',
+                    'bs': ['1', '2', '3', {'c': {'c1': '1'}}],
+                    'd': {'e': '1'},
+                    'f': '1',
+                },
+            },
+        }
+        deserializer = wsgi.JSONDeserializer()
+        self.assertEqual(deserializer.deserialize(data), as_dict)
+
+
+class XMLDeserializerTest(test.TestCase):
+    def test_xml(self):
+        xml = """
+            <a a1="1" a2="2">
+              <bs><b>1</b><b>2</b><b>3</b><b><c c1="1"/></b></bs>
+              <d><e>1</e></d>
+              <f>1</f>
+            </a>
+            """.strip()
+        as_dict = {
+            'body': {
+                'a': {
+                    'a1': '1',
+                    'a2': '2',
+                    'bs': ['1', '2', '3', {'c': {'c1': '1'}}],
+                    'd': {'e': '1'},
+                    'f': '1',
+                },
+            },
+        }
+        metadata = {'plurals': {'bs': 'b', 'ts': 't'}}
+        deserializer = wsgi.XMLDeserializer(metadata=metadata)
+        self.assertEqual(deserializer.deserialize(xml), as_dict)
+
+    def test_xml_empty(self):
+        xml = """<a></a>"""
+        as_dict = {"body": {"a": {}}}
+        deserializer = wsgi.XMLDeserializer()
+        self.assertEqual(deserializer.deserialize(xml), as_dict)
+
+
+class ResourceTest(test.TestCase):
+    def test_resource_call(self):
+        class Controller(object):
+            def index(self, req):
+                return 'off'
+
+        req = webob.Request.blank('/tests')
+        app = fakes.TestRouter(Controller())
+        response = req.get_response(app)
+        self.assertEqual(response.body, 'off')
+        self.assertEqual(response.status_int, 200)
+
+    def test_resource_not_authorized(self):
+        class Controller(object):
+            def index(self, req):
+                raise exception.NotAuthorized()
+
+        req = webob.Request.blank('/tests')
+        app = fakes.TestRouter(Controller())
+        response = req.get_response(app)
+        self.assertEqual(response.status_int, 403)
+
+    def test_dispatch(self):
+        class Controller(object):
+            def index(self, req, pants=None):
+                return pants
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+        method, extensions = resource.get_method(None, 'index', None, '')
+        actual = resource.dispatch(method, None, {'pants': 'off'})
+        expected = 'off'
+        self.assertEqual(actual, expected)
+
+    def test_get_method_unknown_controller_action(self):
+        class Controller(object):
+            def index(self, req, pants=None):
+                return pants
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+        self.assertRaises(AttributeError, resource.get_method,
+                          None, 'create', None, '')
+
+    def test_get_method_action_json(self):
+        class Controller(wsgi.Controller):
+            @wsgi.action('fooAction')
+            def _action_foo(self, req, id, body):
+                return body
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+        method, extensions = resource.get_method(None, 'action',
+                                                 'application/json',
+                                                 '{"fooAction": true}')
+        self.assertEqual(controller._action_foo, method)
+
+    def test_get_method_action_xml(self):
+        class Controller(wsgi.Controller):
+            @wsgi.action('fooAction')
+            def _action_foo(self, req, id, body):
+                return body
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+        method, extensions = resource.get_method(None, 'action',
+                                                 'application/xml',
+                                                 '<fooAction>true</fooAction>')
+        self.assertEqual(controller._action_foo, method)
+
+    def test_get_method_action_bad_body(self):
+        class Controller(wsgi.Controller):
+            @wsgi.action('fooAction')
+            def _action_foo(self, req, id, body):
+                return body
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+        self.assertRaises(exception.MalformedRequestBody, resource.get_method,
+                          None, 'action', 'application/json', '{}')
+
+    def test_get_method_unknown_controller_action(self):
+        class Controller(wsgi.Controller):
+            @wsgi.action('fooAction')
+            def _action_foo(self, req, id, body):
+                return body
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+        self.assertRaises(KeyError, resource.get_method,
+                          None, 'action', 'application/json',
+                          '{"barAction": true}')
+
+    def test_get_method_action_method(self):
+        class Controller():
+            def action(self, req, pants=None):
+                return pants
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+        method, extensions = resource.get_method(None, 'action',
+                                                 'application/xml',
+                                                 '<fooAction>true</fooAction')
+        self.assertEqual(controller.action, method)
+
+    def test_get_action_args(self):
+        class Controller(object):
+            def index(self, req, pants=None):
+                return pants
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+
+        env = {
+            'wsgiorg.routing_args': [None, {
+                'controller': None,
+                'format': None,
+                'action': 'update',
+                'id': 12,
+            }],
+        }
+
+        expected = {'action': 'update', 'id': 12}
+
+        self.assertEqual(resource.get_action_args(env), expected)
+
+    def test_get_body_bad_content(self):
+        class Controller(object):
+            def index(self, req, pants=None):
+                return pants
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+
+        request = wsgi.Request.blank('/', method='POST')
+        request.headers['Content-Type'] = 'application/none'
+        request.body = 'foo'
+
+        content_type, body = resource.get_body(request)
+        self.assertEqual(content_type, None)
+        self.assertEqual(body, '')
+
+    def test_get_body_no_content_type(self):
+        class Controller(object):
+            def index(self, req, pants=None):
+                return pants
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+
+        request = wsgi.Request.blank('/', method='POST')
+        request.body = 'foo'
+
+        content_type, body = resource.get_body(request)
+        self.assertEqual(content_type, None)
+        self.assertEqual(body, '')
+
+    def test_get_body_no_content_body(self):
+        class Controller(object):
+            def index(self, req, pants=None):
+                return pants
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+
+        request = wsgi.Request.blank('/', method='POST')
+        request.headers['Content-Type'] = 'application/json'
+        request.body = ''
+
+        content_type, body = resource.get_body(request)
+        self.assertEqual(content_type, None)
+        self.assertEqual(body, '')
+
+    def test_get_body(self):
+        class Controller(object):
+            def index(self, req, pants=None):
+                return pants
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+
+        request = wsgi.Request.blank('/', method='POST')
+        request.headers['Content-Type'] = 'application/json'
+        request.body = 'foo'
+
+        content_type, body = resource.get_body(request)
+        self.assertEqual(content_type, 'application/json')
+        self.assertEqual(body, 'foo')
+
+    def test_deserialize_badtype(self):
+        class Controller(object):
+            def index(self, req, pants=None):
+                return pants
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+        self.assertRaises(exception.InvalidContentType,
+                          resource.deserialize,
+                          controller.index, 'application/none', 'foo')
+
+    def test_deserialize_default(self):
+        class JSONDeserializer(object):
+            def deserialize(self, body):
+                return 'json'
+
+        class XMLDeserializer(object):
+            def deserialize(self, body):
+                return 'xml'
+
+        class Controller(object):
+            @wsgi.deserializers(xml=XMLDeserializer)
+            def index(self, req, pants=None):
+                return pants
+
+        controller = Controller()
+        resource = wsgi.Resource(controller, json=JSONDeserializer)
+
+        obj = resource.deserialize(controller.index, 'application/json', 'foo')
+        self.assertEqual(obj, 'json')
+
+    def test_deserialize_decorator(self):
+        class JSONDeserializer(object):
+            def deserialize(self, body):
+                return 'json'
+
+        class XMLDeserializer(object):
+            def deserialize(self, body):
+                return 'xml'
+
+        class Controller(object):
+            @wsgi.deserializers(xml=XMLDeserializer)
+            def index(self, req, pants=None):
+                return pants
+
+        controller = Controller()
+        resource = wsgi.Resource(controller, json=JSONDeserializer)
+
+        obj = resource.deserialize(controller.index, 'application/xml', 'foo')
+        self.assertEqual(obj, 'xml')
+
+    def test_register_actions(self):
+        class Controller(object):
+            def index(self, req, pants=None):
+                return pants
+
+        class ControllerExtended(wsgi.Controller):
+            @wsgi.action('fooAction')
+            def _action_foo(self, req, id, body):
+                return body
+
+            @wsgi.action('barAction')
+            def _action_bar(self, req, id, body):
+                return body
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+        self.assertEqual({}, resource.wsgi_actions)
+
+        extended = ControllerExtended()
+        resource.register_actions(extended)
+        self.assertEqual({
+                'fooAction': extended._action_foo,
+                'barAction': extended._action_bar,
+                }, resource.wsgi_actions)
+
+    def test_register_extensions(self):
+        class Controller(object):
+            def index(self, req, pants=None):
+                return pants
+
+        class ControllerExtended(wsgi.Controller):
+            @wsgi.extends
+            def index(self, req, resp_obj, pants=None):
+                return None
+
+            @wsgi.extends(action='fooAction')
+            def _action_foo(self, req, resp, id, body):
+                return None
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+        self.assertEqual({}, resource.wsgi_extensions)
+        self.assertEqual({}, resource.wsgi_action_extensions)
+
+        extended = ControllerExtended()
+        resource.register_extensions(extended)
+        self.assertEqual({'index': [extended.index]}, resource.wsgi_extensions)
+        self.assertEqual({'fooAction': [extended._action_foo]},
+                         resource.wsgi_action_extensions)
+
+    def test_get_method_extensions(self):
+        class Controller(object):
+            def index(self, req, pants=None):
+                return pants
+
+        class ControllerExtended(wsgi.Controller):
+            @wsgi.extends
+            def index(self, req, resp_obj, pants=None):
+                return None
+
+        controller = Controller()
+        extended = ControllerExtended()
+        resource = wsgi.Resource(controller)
+        resource.register_extensions(extended)
+        method, extensions = resource.get_method(None, 'index', None, '')
+        self.assertEqual(method, controller.index)
+        self.assertEqual(extensions, [extended.index])
+
+    def test_get_method_action_extensions(self):
+        class Controller(wsgi.Controller):
+            def index(self, req, pants=None):
+                return pants
+
+            @wsgi.action('fooAction')
+            def _action_foo(self, req, id, body):
+                return body
+
+        class ControllerExtended(wsgi.Controller):
+            @wsgi.extends(action='fooAction')
+            def _action_foo(self, req, resp_obj, id, body):
+                return None
+
+        controller = Controller()
+        extended = ControllerExtended()
+        resource = wsgi.Resource(controller)
+        resource.register_extensions(extended)
+        method, extensions = resource.get_method(None, 'action',
+                                                 'application/json',
+                                                 '{"fooAction": true}')
+        self.assertEqual(method, controller._action_foo)
+        self.assertEqual(extensions, [extended._action_foo])
+
+    def test_get_method_action_whitelist_extensions(self):
+        class Controller(wsgi.Controller):
+            def index(self, req, pants=None):
+                return pants
+
+        class ControllerExtended(wsgi.Controller):
+            @wsgi.action('create')
+            def _create(self, req, body):
+                pass
+
+            @wsgi.action('delete')
+            def _delete(self, req, id):
+                pass
+
+        controller = Controller()
+        extended = ControllerExtended()
+        resource = wsgi.Resource(controller)
+        resource.register_actions(extended)
+
+        method, extensions = resource.get_method(None, 'create',
+                                                 'application/json',
+                                                 '{"create": true}')
+        self.assertEqual(method, extended._create)
+        self.assertEqual(extensions, [])
+
+        method, extensions = resource.get_method(None, 'delete', None, None)
+        self.assertEqual(method, extended._delete)
+        self.assertEqual(extensions, [])
+
+    def test_pre_process_extensions_regular(self):
+        class Controller(object):
+            def index(self, req, pants=None):
+                return pants
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+
+        called = []
+
+        def extension1(req, resp_obj):
+            called.append(1)
+            return None
+
+        def extension2(req, resp_obj):
+            called.append(2)
+            return None
+
+        extensions = [extension1, extension2]
+        response, post = resource.pre_process_extensions(extensions, None, {})
+        self.assertEqual(called, [])
+        self.assertEqual(response, None)
+        self.assertEqual(list(post), [extension2, extension1])
+
+    def test_pre_process_extensions_generator(self):
+        class Controller(object):
+            def index(self, req, pants=None):
+                return pants
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+
+        called = []
+
+        def extension1(req):
+            called.append('pre1')
+            resp_obj = yield
+            called.append('post1')
+
+        def extension2(req):
+            called.append('pre2')
+            resp_obj = yield
+            called.append('post2')
+
+        extensions = [extension1, extension2]
+        response, post = resource.pre_process_extensions(extensions, None, {})
+        post = list(post)
+        self.assertEqual(called, ['pre1', 'pre2'])
+        self.assertEqual(response, None)
+        self.assertEqual(len(post), 2)
+        self.assertTrue(inspect.isgenerator(post[0]))
+        self.assertTrue(inspect.isgenerator(post[1]))
+
+        for gen in post:
+            try:
+                gen.send(None)
+            except StopIteration:
+                continue
+
+        self.assertEqual(called, ['pre1', 'pre2', 'post2', 'post1'])
+
+    def test_pre_process_extensions_generator_response(self):
+        class Controller(object):
+            def index(self, req, pants=None):
+                return pants
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+
+        called = []
+
+        def extension1(req):
+            called.append('pre1')
+            yield 'foo'
+
+        def extension2(req):
+            called.append('pre2')
+
+        extensions = [extension1, extension2]
+        response, post = resource.pre_process_extensions(extensions, None, {})
+        self.assertEqual(called, ['pre1'])
+        self.assertEqual(response, 'foo')
+        self.assertEqual(post, [])
+
+    def test_post_process_extensions_regular(self):
+        class Controller(object):
+            def index(self, req, pants=None):
+                return pants
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+
+        called = []
+
+        def extension1(req, resp_obj):
+            called.append(1)
+            return None
+
+        def extension2(req, resp_obj):
+            called.append(2)
+            return None
+
+        response = resource.post_process_extensions([extension2, extension1],
+                                                    None, None, {})
+        self.assertEqual(called, [2, 1])
+        self.assertEqual(response, None)
+
+    def test_post_process_extensions_regular_response(self):
+        class Controller(object):
+            def index(self, req, pants=None):
+                return pants
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+
+        called = []
+
+        def extension1(req, resp_obj):
+            called.append(1)
+            return None
+
+        def extension2(req, resp_obj):
+            called.append(2)
+            return 'foo'
+
+        response = resource.post_process_extensions([extension2, extension1],
+                                                    None, None, {})
+        self.assertEqual(called, [2])
+        self.assertEqual(response, 'foo')
+
+    def test_post_process_extensions_generator(self):
+        class Controller(object):
+            def index(self, req, pants=None):
+                return pants
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+
+        called = []
+
+        def extension1(req):
+            resp_obj = yield
+            called.append(1)
+
+        def extension2(req):
+            resp_obj = yield
+            called.append(2)
+
+        ext1 = extension1(None)
+        ext1.next()
+        ext2 = extension2(None)
+        ext2.next()
+
+        response = resource.post_process_extensions([ext2, ext1],
+                                                    None, None, {})
+
+        self.assertEqual(called, [2, 1])
+        self.assertEqual(response, None)
+
+    def test_post_process_extensions_generator_response(self):
+        class Controller(object):
+            def index(self, req, pants=None):
+                return pants
+
+        controller = Controller()
+        resource = wsgi.Resource(controller)
+
+        called = []
+
+        def extension1(req):
+            resp_obj = yield
+            called.append(1)
+
+        def extension2(req):
+            resp_obj = yield
+            called.append(2)
+            yield 'foo'
+
+        ext1 = extension1(None)
+        ext1.next()
+        ext2 = extension2(None)
+        ext2.next()
+
+        response = resource.post_process_extensions([ext2, ext1],
+                                                    None, None, {})
+
+        self.assertEqual(called, [2])
+        self.assertEqual(response, 'foo')
+
+
+class ResponseObjectTest(test.TestCase):
+    def test_default_code(self):
+        robj = wsgi.ResponseObject({})
+        self.assertEqual(robj.code, 200)
+
+    def test_modified_code(self):
+        robj = wsgi.ResponseObject({})
+        robj._default_code = 202
+        self.assertEqual(robj.code, 202)
+
+    def test_override_default_code(self):
+        robj = wsgi.ResponseObject({}, code=404)
+        self.assertEqual(robj.code, 404)
+
+    def test_override_modified_code(self):
+        robj = wsgi.ResponseObject({}, code=404)
+        robj._default_code = 202
+        self.assertEqual(robj.code, 404)
+
+    def test_set_header(self):
+        robj = wsgi.ResponseObject({})
+        robj['Header'] = 'foo'
+        self.assertEqual(robj.headers, {'header': 'foo'})
+
+    def test_get_header(self):
+        robj = wsgi.ResponseObject({})
+        robj['Header'] = 'foo'
+        self.assertEqual(robj['hEADER'], 'foo')
+
+    def test_del_header(self):
+        robj = wsgi.ResponseObject({})
+        robj['Header'] = 'foo'
+        del robj['hEADER']
+        self.assertFalse('header' in robj.headers)
+
+    def test_header_isolation(self):
+        robj = wsgi.ResponseObject({})
+        robj['Header'] = 'foo'
+        hdrs = robj.headers
+        hdrs['hEADER'] = 'bar'
+        self.assertEqual(robj['hEADER'], 'foo')
+
+    def test_default_serializers(self):
+        robj = wsgi.ResponseObject({})
+        self.assertEqual(robj.serializers, {})
+
+    def test_bind_serializers(self):
+        robj = wsgi.ResponseObject({}, json='foo')
+        robj._bind_method_serializers(dict(xml='bar', json='baz'))
+        self.assertEqual(robj.serializers, dict(xml='bar', json='foo'))
+
+    def test_get_serializer(self):
+        robj = wsgi.ResponseObject({}, json='json', xml='xml', atom='atom')
+        for content_type, mtype in wsgi._MEDIA_TYPE_MAP.items():
+            _mtype, serializer = robj.get_serializer(content_type)
+            self.assertEqual(serializer, mtype)
+
+    def test_get_serializer_defaults(self):
+        robj = wsgi.ResponseObject({})
+        default_serializers = dict(json='json', xml='xml', atom='atom')
+        for content_type, mtype in wsgi._MEDIA_TYPE_MAP.items():
+            self.assertRaises(exception.InvalidContentType,
+                              robj.get_serializer, content_type)
+            _mtype, serializer = robj.get_serializer(content_type,
+                                                     default_serializers)
+            self.assertEqual(serializer, mtype)
+
+    def test_serialize(self):
+        class JSONSerializer(object):
+            def serialize(self, obj):
+                return 'json'
+
+        class XMLSerializer(object):
+            def serialize(self, obj):
+                return 'xml'
+
+        class AtomSerializer(object):
+            def serialize(self, obj):
+                return 'atom'
+
+        robj = wsgi.ResponseObject({}, code=202,
+                                   json=JSONSerializer,
+                                   xml=XMLSerializer,
+                                   atom=AtomSerializer)
+        robj['X-header1'] = 'header1'
+        robj['X-header2'] = 'header2'
+
+        for content_type, mtype in wsgi._MEDIA_TYPE_MAP.items():
+            request = wsgi.Request.blank('/tests/123')
+            response = robj.serialize(request, content_type)
+
+            self.assertEqual(response.headers['Content-Type'], content_type)
+            self.assertEqual(response.headers['X-header1'], 'header1')
+            self.assertEqual(response.headers['X-header2'], 'header2')
+            self.assertEqual(response.status_int, 202)
+            self.assertEqual(response.body, mtype)
diff --git a/cinder/tests/api/openstack/test_xmlutil.py b/cinder/tests/api/openstack/test_xmlutil.py
new file mode 100644
index 000000000..7f2a26044
--- /dev/null
+++ b/cinder/tests/api/openstack/test_xmlutil.py
@@ -0,0 +1,722 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from lxml import etree
+
+from cinder import test
+from cinder.api.openstack import xmlutil
+
+
+class SelectorTest(test.TestCase):
+    obj_for_test = {
+        'test': {
+            'name': 'test',
+            'values': [1, 2, 3],
+            'attrs': {
+                'foo': 1,
+                'bar': 2,
+                'baz': 3,
+                },
+            },
+        }
+
+    def test_empty_selector(self):
+        sel = xmlutil.Selector()
+        self.assertEqual(len(sel.chain), 0)
+        self.assertEqual(sel(self.obj_for_test), self.obj_for_test)
+
+    def test_dict_selector(self):
+        sel = xmlutil.Selector('test')
+        self.assertEqual(len(sel.chain), 1)
+        self.assertEqual(sel.chain[0], 'test')
+        self.assertEqual(sel(self.obj_for_test),
+                         self.obj_for_test['test'])
+
+    def test_datum_selector(self):
+        sel = xmlutil.Selector('test', 'name')
+        self.assertEqual(len(sel.chain), 2)
+        self.assertEqual(sel.chain[0], 'test')
+        self.assertEqual(sel.chain[1], 'name')
+        self.assertEqual(sel(self.obj_for_test), 'test')
+
+    def test_list_selector(self):
+        sel = xmlutil.Selector('test', 'values', 0)
+        self.assertEqual(len(sel.chain), 3)
+        self.assertEqual(sel.chain[0], 'test')
+        self.assertEqual(sel.chain[1], 'values')
+        self.assertEqual(sel.chain[2], 0)
+        self.assertEqual(sel(self.obj_for_test), 1)
+
+    def test_items_selector(self):
+        sel = xmlutil.Selector('test', 'attrs', xmlutil.get_items)
+        self.assertEqual(len(sel.chain), 3)
+        self.assertEqual(sel.chain[2], xmlutil.get_items)
+        for key, val in sel(self.obj_for_test):
+            self.assertEqual(self.obj_for_test['test']['attrs'][key], val)
+
+    def test_missing_key_selector(self):
+        sel = xmlutil.Selector('test2', 'attrs')
+        self.assertEqual(sel(self.obj_for_test), None)
+        self.assertRaises(KeyError, sel, self.obj_for_test, True)
+
+    def test_constant_selector(self):
+        sel = xmlutil.ConstantSelector('Foobar')
+        self.assertEqual(sel.value, 'Foobar')
+        self.assertEqual(sel(self.obj_for_test), 'Foobar')
+
+
+class TemplateElementTest(test.TestCase):
+    def test_element_initial_attributes(self):
+        # Create a template element with some attributes
+        elem = xmlutil.TemplateElement('test', attrib=dict(a=1, b=2, c=3),
+                                       c=4, d=5, e=6)
+
+        # Verify all the attributes are as expected
+        expected = dict(a=1, b=2, c=4, d=5, e=6)
+        for k, v in expected.items():
+            self.assertEqual(elem.attrib[k].chain[0], v)
+
+    def test_element_get_attributes(self):
+        expected = dict(a=1, b=2, c=3)
+
+        # Create a template element with some attributes
+        elem = xmlutil.TemplateElement('test', attrib=expected)
+
+        # Verify that get() retrieves the attributes
+        for k, v in expected.items():
+            self.assertEqual(elem.get(k).chain[0], v)
+
+    def test_element_set_attributes(self):
+        attrs = dict(a=None, b='foo', c=xmlutil.Selector('foo', 'bar'))
+
+        # Create a bare template element with no attributes
+        elem = xmlutil.TemplateElement('test')
+
+        # Set the attribute values
+        for k, v in attrs.items():
+            elem.set(k, v)
+
+        # Now verify what got set
+        self.assertEqual(len(elem.attrib['a'].chain), 1)
+        self.assertEqual(elem.attrib['a'].chain[0], 'a')
+        self.assertEqual(len(elem.attrib['b'].chain), 1)
+        self.assertEqual(elem.attrib['b'].chain[0], 'foo')
+        self.assertEqual(elem.attrib['c'], attrs['c'])
+
+    def test_element_attribute_keys(self):
+        attrs = dict(a=1, b=2, c=3, d=4)
+        expected = set(attrs.keys())
+
+        # Create a template element with some attributes
+        elem = xmlutil.TemplateElement('test', attrib=attrs)
+
+        # Now verify keys
+        self.assertEqual(set(elem.keys()), expected)
+
+    def test_element_attribute_items(self):
+        expected = dict(a=xmlutil.Selector(1),
+                        b=xmlutil.Selector(2),
+                        c=xmlutil.Selector(3))
+        keys = set(expected.keys())
+
+        # Create a template element with some attributes
+        elem = xmlutil.TemplateElement('test', attrib=expected)
+
+        # Now verify items
+        for k, v in elem.items():
+            self.assertEqual(expected[k], v)
+            keys.remove(k)
+
+        # Did we visit all keys?
+        self.assertEqual(len(keys), 0)
+
+    def test_element_selector_none(self):
+        # Create a template element with no selector
+        elem = xmlutil.TemplateElement('test')
+
+        self.assertEqual(len(elem.selector.chain), 0)
+
+    def test_element_selector_string(self):
+        # Create a template element with a string selector
+        elem = xmlutil.TemplateElement('test', selector='test')
+
+        self.assertEqual(len(elem.selector.chain), 1)
+        self.assertEqual(elem.selector.chain[0], 'test')
+
+    def test_element_selector(self):
+        sel = xmlutil.Selector('a', 'b')
+
+        # Create a template element with an explicit selector
+        elem = xmlutil.TemplateElement('test', selector=sel)
+
+        self.assertEqual(elem.selector, sel)
+
+    def test_element_subselector_none(self):
+        # Create a template element with no subselector
+        elem = xmlutil.TemplateElement('test')
+
+        self.assertEqual(elem.subselector, None)
+
+    def test_element_subselector_string(self):
+        # Create a template element with a string subselector
+        elem = xmlutil.TemplateElement('test', subselector='test')
+
+        self.assertEqual(len(elem.subselector.chain), 1)
+        self.assertEqual(elem.subselector.chain[0], 'test')
+
+    def test_element_subselector(self):
+        sel = xmlutil.Selector('a', 'b')
+
+        # Create a template element with an explicit subselector
+        elem = xmlutil.TemplateElement('test', subselector=sel)
+
+        self.assertEqual(elem.subselector, sel)
+
+    def test_element_append_child(self):
+        # Create an element
+        elem = xmlutil.TemplateElement('test')
+
+        # Make sure the element starts off empty
+        self.assertEqual(len(elem), 0)
+
+        # Create a child element
+        child = xmlutil.TemplateElement('child')
+
+        # Append the child to the parent
+        elem.append(child)
+
+        # Verify that the child was added
+        self.assertEqual(len(elem), 1)
+        self.assertEqual(elem[0], child)
+        self.assertEqual('child' in elem, True)
+        self.assertEqual(elem['child'], child)
+
+        # Ensure that multiple children of the same name are rejected
+        child2 = xmlutil.TemplateElement('child')
+        self.assertRaises(KeyError, elem.append, child2)
+
+    def test_element_extend_children(self):
+        # Create an element
+        elem = xmlutil.TemplateElement('test')
+
+        # Make sure the element starts off empty
+        self.assertEqual(len(elem), 0)
+
+        # Create a few children
+        children = [
+            xmlutil.TemplateElement('child1'),
+            xmlutil.TemplateElement('child2'),
+            xmlutil.TemplateElement('child3'),
+            ]
+
+        # Extend the parent by those children
+        elem.extend(children)
+
+        # Verify that the children were added
+        self.assertEqual(len(elem), 3)
+        for idx in range(len(elem)):
+            self.assertEqual(children[idx], elem[idx])
+            self.assertEqual(children[idx].tag in elem, True)
+            self.assertEqual(elem[children[idx].tag], children[idx])
+
+        # Ensure that multiple children of the same name are rejected
+        children2 = [
+            xmlutil.TemplateElement('child4'),
+            xmlutil.TemplateElement('child1'),
+            ]
+        self.assertRaises(KeyError, elem.extend, children2)
+
+        # Also ensure that child4 was not added
+        self.assertEqual(len(elem), 3)
+        self.assertEqual(elem[-1].tag, 'child3')
+
+    def test_element_insert_child(self):
+        # Create an element
+        elem = xmlutil.TemplateElement('test')
+
+        # Make sure the element starts off empty
+        self.assertEqual(len(elem), 0)
+
+        # Create a few children
+        children = [
+            xmlutil.TemplateElement('child1'),
+            xmlutil.TemplateElement('child2'),
+            xmlutil.TemplateElement('child3'),
+            ]
+
+        # Extend the parent by those children
+        elem.extend(children)
+
+        # Create a child to insert
+        child = xmlutil.TemplateElement('child4')
+
+        # Insert it
+        elem.insert(1, child)
+
+        # Ensure the child was inserted in the right place
+        self.assertEqual(len(elem), 4)
+        children.insert(1, child)
+        for idx in range(len(elem)):
+            self.assertEqual(children[idx], elem[idx])
+            self.assertEqual(children[idx].tag in elem, True)
+            self.assertEqual(elem[children[idx].tag], children[idx])
+
+        # Ensure that multiple children of the same name are rejected
+        child2 = xmlutil.TemplateElement('child2')
+        self.assertRaises(KeyError, elem.insert, 2, child2)
+
+    def test_element_remove_child(self):
+        # Create an element
+        elem = xmlutil.TemplateElement('test')
+
+        # Make sure the element starts off empty
+        self.assertEqual(len(elem), 0)
+
+        # Create a few children
+        children = [
+            xmlutil.TemplateElement('child1'),
+            xmlutil.TemplateElement('child2'),
+            xmlutil.TemplateElement('child3'),
+            ]
+
+        # Extend the parent by those children
+        elem.extend(children)
+
+        # Create a test child to remove
+        child = xmlutil.TemplateElement('child2')
+
+        # Try to remove it
+        self.assertRaises(ValueError, elem.remove, child)
+
+        # Ensure that no child was removed
+        self.assertEqual(len(elem), 3)
+
+        # Now remove a legitimate child
+        elem.remove(children[1])
+
+        # Ensure that the child was removed
+        self.assertEqual(len(elem), 2)
+        self.assertEqual(elem[0], children[0])
+        self.assertEqual(elem[1], children[2])
+        self.assertEqual('child2' in elem, False)
+
+        # Ensure the child cannot be retrieved by name
+        def get_key(elem, key):
+            return elem[key]
+        self.assertRaises(KeyError, get_key, elem, 'child2')
+
+    def test_element_text(self):
+        # Create an element
+        elem = xmlutil.TemplateElement('test')
+
+        # Ensure that it has no text
+        self.assertEqual(elem.text, None)
+
+        # Try setting it to a string and ensure it becomes a selector
+        elem.text = 'test'
+        self.assertEqual(hasattr(elem.text, 'chain'), True)
+        self.assertEqual(len(elem.text.chain), 1)
+        self.assertEqual(elem.text.chain[0], 'test')
+
+        # Try resetting the text to None
+        elem.text = None
+        self.assertEqual(elem.text, None)
+
+        # Now make up a selector and try setting the text to that
+        sel = xmlutil.Selector()
+        elem.text = sel
+        self.assertEqual(elem.text, sel)
+
+        # Finally, try deleting the text and see what happens
+        del elem.text
+        self.assertEqual(elem.text, None)
+
+    def test_apply_attrs(self):
+        # Create a template element
+        attrs = dict(attr1=xmlutil.ConstantSelector(1),
+                     attr2=xmlutil.ConstantSelector(2))
+        tmpl_elem = xmlutil.TemplateElement('test', attrib=attrs)
+
+        # Create an etree element
+        elem = etree.Element('test')
+
+        # Apply the template to the element
+        tmpl_elem.apply(elem, None)
+
+        # Now, verify the correct attributes were set
+        for k, v in elem.items():
+            self.assertEqual(str(attrs[k].value), v)
+
+    def test_apply_text(self):
+        # Create a template element
+        tmpl_elem = xmlutil.TemplateElement('test')
+        tmpl_elem.text = xmlutil.ConstantSelector(1)
+
+        # Create an etree element
+        elem = etree.Element('test')
+
+        # Apply the template to the element
+        tmpl_elem.apply(elem, None)
+
+        # Now, verify the text was set
+        self.assertEqual(str(tmpl_elem.text.value), elem.text)
+
+    def test__render(self):
+        attrs = dict(attr1=xmlutil.ConstantSelector(1),
+                     attr2=xmlutil.ConstantSelector(2),
+                     attr3=xmlutil.ConstantSelector(3))
+
+        # Create a master template element
+        master_elem = xmlutil.TemplateElement('test', attr1=attrs['attr1'])
+
+        # Create a couple of slave template element
+        slave_elems = [
+            xmlutil.TemplateElement('test', attr2=attrs['attr2']),
+            xmlutil.TemplateElement('test', attr3=attrs['attr3']),
+            ]
+
+        # Try the render
+        elem = master_elem._render(None, None, slave_elems, None)
+
+        # Verify the particulars of the render
+        self.assertEqual(elem.tag, 'test')
+        self.assertEqual(len(elem.nsmap), 0)
+        for k, v in elem.items():
+            self.assertEqual(str(attrs[k].value), v)
+
+        # Create a parent for the element to be rendered
+        parent = etree.Element('parent')
+
+        # Try the render again...
+        elem = master_elem._render(parent, None, slave_elems, dict(a='foo'))
+
+        # Verify the particulars of the render
+        self.assertEqual(len(parent), 1)
+        self.assertEqual(parent[0], elem)
+        self.assertEqual(len(elem.nsmap), 1)
+        self.assertEqual(elem.nsmap['a'], 'foo')
+
+    def test_render(self):
+        # Create a template element
+        tmpl_elem = xmlutil.TemplateElement('test')
+        tmpl_elem.text = xmlutil.Selector()
+
+        # Create the object we're going to render
+        obj = ['elem1', 'elem2', 'elem3', 'elem4']
+
+        # Try a render with no object
+        elems = tmpl_elem.render(None, None)
+        self.assertEqual(len(elems), 0)
+
+        # Try a render with one object
+        elems = tmpl_elem.render(None, 'foo')
+        self.assertEqual(len(elems), 1)
+        self.assertEqual(elems[0][0].text, 'foo')
+        self.assertEqual(elems[0][1], 'foo')
+
+        # Now, try rendering an object with multiple entries
+        parent = etree.Element('parent')
+        elems = tmpl_elem.render(parent, obj)
+        self.assertEqual(len(elems), 4)
+
+        # Check the results
+        for idx in range(len(obj)):
+            self.assertEqual(elems[idx][0].text, obj[idx])
+            self.assertEqual(elems[idx][1], obj[idx])
+
+    def test_subelement(self):
+        # Try the SubTemplateElement constructor
+        parent = xmlutil.SubTemplateElement(None, 'parent')
+        self.assertEqual(parent.tag, 'parent')
+        self.assertEqual(len(parent), 0)
+
+        # Now try it with a parent element
+        child = xmlutil.SubTemplateElement(parent, 'child')
+        self.assertEqual(child.tag, 'child')
+        self.assertEqual(len(parent), 1)
+        self.assertEqual(parent[0], child)
+
+    def test_wrap(self):
+        # These are strange methods, but they make things easier
+        elem = xmlutil.TemplateElement('test')
+        self.assertEqual(elem.unwrap(), elem)
+        self.assertEqual(elem.wrap().root, elem)
+
+    def test_dyntag(self):
+        obj = ['a', 'b', 'c']
+
+        # Create a template element with a dynamic tag
+        tmpl_elem = xmlutil.TemplateElement(xmlutil.Selector())
+
+        # Try the render
+        parent = etree.Element('parent')
+        elems = tmpl_elem.render(parent, obj)
+
+        # Verify the particulars of the render
+        self.assertEqual(len(elems), len(obj))
+        for idx in range(len(obj)):
+            self.assertEqual(elems[idx][0].tag, obj[idx])
+
+
+class TemplateTest(test.TestCase):
+    def test_wrap(self):
+        # These are strange methods, but they make things easier
+        elem = xmlutil.TemplateElement('test')
+        tmpl = xmlutil.Template(elem)
+        self.assertEqual(tmpl.unwrap(), elem)
+        self.assertEqual(tmpl.wrap(), tmpl)
+
+    def test__siblings(self):
+        # Set up a basic template
+        elem = xmlutil.TemplateElement('test')
+        tmpl = xmlutil.Template(elem)
+
+        # Check that we get the right siblings
+        siblings = tmpl._siblings()
+        self.assertEqual(len(siblings), 1)
+        self.assertEqual(siblings[0], elem)
+
+    def test__nsmap(self):
+        # Set up a basic template
+        elem = xmlutil.TemplateElement('test')
+        tmpl = xmlutil.Template(elem, nsmap=dict(a="foo"))
+
+        # Check out that we get the right namespace dictionary
+        nsmap = tmpl._nsmap()
+        self.assertNotEqual(id(nsmap), id(tmpl.nsmap))
+        self.assertEqual(len(nsmap), 1)
+        self.assertEqual(nsmap['a'], 'foo')
+
+    def test_master_attach(self):
+        # Set up a master template
+        elem = xmlutil.TemplateElement('test')
+        tmpl = xmlutil.MasterTemplate(elem, 1)
+
+        # Make sure it has a root but no slaves
+        self.assertEqual(tmpl.root, elem)
+        self.assertEqual(len(tmpl.slaves), 0)
+
+        # Try to attach an invalid slave
+        bad_elem = xmlutil.TemplateElement('test2')
+        self.assertRaises(ValueError, tmpl.attach, bad_elem)
+        self.assertEqual(len(tmpl.slaves), 0)
+
+        # Try to attach an invalid and a valid slave
+        good_elem = xmlutil.TemplateElement('test')
+        self.assertRaises(ValueError, tmpl.attach, good_elem, bad_elem)
+        self.assertEqual(len(tmpl.slaves), 0)
+
+        # Try to attach an inapplicable template
+        class InapplicableTemplate(xmlutil.Template):
+            def apply(self, master):
+                return False
+        inapp_tmpl = InapplicableTemplate(good_elem)
+        tmpl.attach(inapp_tmpl)
+        self.assertEqual(len(tmpl.slaves), 0)
+
+        # Now try attaching an applicable template
+        tmpl.attach(good_elem)
+        self.assertEqual(len(tmpl.slaves), 1)
+        self.assertEqual(tmpl.slaves[0].root, good_elem)
+
+    def test_master_copy(self):
+        # Construct a master template
+        elem = xmlutil.TemplateElement('test')
+        tmpl = xmlutil.MasterTemplate(elem, 1, nsmap=dict(a='foo'))
+
+        # Give it a slave
+        slave = xmlutil.TemplateElement('test')
+        tmpl.attach(slave)
+
+        # Construct a copy
+        copy = tmpl.copy()
+
+        # Check to see if we actually managed a copy
+        self.assertNotEqual(tmpl, copy)
+        self.assertEqual(tmpl.root, copy.root)
+        self.assertEqual(tmpl.version, copy.version)
+        self.assertEqual(id(tmpl.nsmap), id(copy.nsmap))
+        self.assertNotEqual(id(tmpl.slaves), id(copy.slaves))
+        self.assertEqual(len(tmpl.slaves), len(copy.slaves))
+        self.assertEqual(tmpl.slaves[0], copy.slaves[0])
+
+    def test_slave_apply(self):
+        # Construct a master template
+        elem = xmlutil.TemplateElement('test')
+        master = xmlutil.MasterTemplate(elem, 3)
+
+        # Construct a slave template with applicable minimum version
+        slave = xmlutil.SlaveTemplate(elem, 2)
+        self.assertEqual(slave.apply(master), True)
+
+        # Construct a slave template with equal minimum version
+        slave = xmlutil.SlaveTemplate(elem, 3)
+        self.assertEqual(slave.apply(master), True)
+
+        # Construct a slave template with inapplicable minimum version
+        slave = xmlutil.SlaveTemplate(elem, 4)
+        self.assertEqual(slave.apply(master), False)
+
+        # Construct a slave template with applicable version range
+        slave = xmlutil.SlaveTemplate(elem, 2, 4)
+        self.assertEqual(slave.apply(master), True)
+
+        # Construct a slave template with low version range
+        slave = xmlutil.SlaveTemplate(elem, 1, 2)
+        self.assertEqual(slave.apply(master), False)
+
+        # Construct a slave template with high version range
+        slave = xmlutil.SlaveTemplate(elem, 4, 5)
+        self.assertEqual(slave.apply(master), False)
+
+        # Construct a slave template with matching version range
+        slave = xmlutil.SlaveTemplate(elem, 3, 3)
+        self.assertEqual(slave.apply(master), True)
+
+    def test__serialize(self):
+        # Our test object to serialize
+        obj = {
+            'test': {
+                'name': 'foobar',
+                'values': [1, 2, 3, 4],
+                'attrs': {
+                    'a': 1,
+                    'b': 2,
+                    'c': 3,
+                    'd': 4,
+                    },
+                'image': {
+                    'name': 'image_foobar',
+                    'id': 42,
+                    },
+                },
+            }
+
+        # Set up our master template
+        root = xmlutil.TemplateElement('test', selector='test',
+                                       name='name')
+        value = xmlutil.SubTemplateElement(root, 'value', selector='values')
+        value.text = xmlutil.Selector()
+        attrs = xmlutil.SubTemplateElement(root, 'attrs', selector='attrs')
+        xmlutil.SubTemplateElement(attrs, 'attr', selector=xmlutil.get_items,
+                                   key=0, value=1)
+        master = xmlutil.MasterTemplate(root, 1, nsmap=dict(f='foo'))
+
+        # Set up our slave template
+        root_slave = xmlutil.TemplateElement('test', selector='test')
+        image = xmlutil.SubTemplateElement(root_slave, 'image',
+                                           selector='image', id='id')
+        image.text = xmlutil.Selector('name')
+        slave = xmlutil.SlaveTemplate(root_slave, 1, nsmap=dict(b='bar'))
+
+        # Attach the slave to the master...
+        master.attach(slave)
+
+        # Try serializing our object
+        siblings = master._siblings()
+        nsmap = master._nsmap()
+        result = master._serialize(None, obj, siblings, nsmap)
+
+        # Now we get to manually walk the element tree...
+        self.assertEqual(result.tag, 'test')
+        self.assertEqual(len(result.nsmap), 2)
+        self.assertEqual(result.nsmap['f'], 'foo')
+        self.assertEqual(result.nsmap['b'], 'bar')
+        self.assertEqual(result.get('name'), obj['test']['name'])
+        for idx, val in enumerate(obj['test']['values']):
+            self.assertEqual(result[idx].tag, 'value')
+            self.assertEqual(result[idx].text, str(val))
+        idx += 1
+        self.assertEqual(result[idx].tag, 'attrs')
+        for attr in result[idx]:
+            self.assertEqual(attr.tag, 'attr')
+            self.assertEqual(attr.get('value'),
+                             str(obj['test']['attrs'][attr.get('key')]))
+        idx += 1
+        self.assertEqual(result[idx].tag, 'image')
+        self.assertEqual(result[idx].get('id'),
+                         str(obj['test']['image']['id']))
+        self.assertEqual(result[idx].text, obj['test']['image']['name'])
+
+
+class MasterTemplateBuilder(xmlutil.TemplateBuilder):
+    def construct(self):
+        elem = xmlutil.TemplateElement('test')
+        return xmlutil.MasterTemplate(elem, 1)
+
+
+class SlaveTemplateBuilder(xmlutil.TemplateBuilder):
+    def construct(self):
+        elem = xmlutil.TemplateElement('test')
+        return xmlutil.SlaveTemplate(elem, 1)
+
+
+class TemplateBuilderTest(test.TestCase):
+    def test_master_template_builder(self):
+        # Make sure the template hasn't been built yet
+        self.assertEqual(MasterTemplateBuilder._tmpl, None)
+
+        # Now, construct the template
+        tmpl1 = MasterTemplateBuilder()
+
+        # Make sure that there is a template cached...
+        self.assertNotEqual(MasterTemplateBuilder._tmpl, None)
+
+        # Make sure it wasn't what was returned...
+        self.assertNotEqual(MasterTemplateBuilder._tmpl, tmpl1)
+
+        # Make sure it doesn't get rebuilt
+        cached = MasterTemplateBuilder._tmpl
+        tmpl2 = MasterTemplateBuilder()
+        self.assertEqual(MasterTemplateBuilder._tmpl, cached)
+
+        # Make sure we're always getting fresh copies
+        self.assertNotEqual(tmpl1, tmpl2)
+
+        # Make sure we can override the copying behavior
+        tmpl3 = MasterTemplateBuilder(False)
+        self.assertEqual(MasterTemplateBuilder._tmpl, tmpl3)
+
+    def test_slave_template_builder(self):
+        # Make sure the template hasn't been built yet
+        self.assertEqual(SlaveTemplateBuilder._tmpl, None)
+
+        # Now, construct the template
+        tmpl1 = SlaveTemplateBuilder()
+
+        # Make sure there is a template cached...
+        self.assertNotEqual(SlaveTemplateBuilder._tmpl, None)
+
+        # Make sure it was what was returned...
+        self.assertEqual(SlaveTemplateBuilder._tmpl, tmpl1)
+
+        # Make sure it doesn't get rebuilt
+        tmpl2 = SlaveTemplateBuilder()
+        self.assertEqual(SlaveTemplateBuilder._tmpl, tmpl1)
+
+        # Make sure we're always getting the cached copy
+        self.assertEqual(tmpl1, tmpl2)
+
+
+class MiscellaneousXMLUtilTests(test.TestCase):
+    def test_make_flat_dict(self):
+        expected_xml = ("<?xml version='1.0' encoding='UTF-8'?>\n"
+                        '<wrapper><a>foo</a><b>bar</b></wrapper>')
+        root = xmlutil.make_flat_dict('wrapper')
+        tmpl = xmlutil.MasterTemplate(root, 1)
+        result = tmpl.serialize(dict(wrapper=dict(a='foo', b='bar')))
+        self.assertEqual(result, expected_xml)
diff --git a/cinder/tests/api/openstack/volume/__init__.py b/cinder/tests/api/openstack/volume/__init__.py
new file mode 100644
index 000000000..3be5ce944
--- /dev/null
+++ b/cinder/tests/api/openstack/volume/__init__.py
@@ -0,0 +1,19 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+# NOTE(vish): this forces the fixtures from tests/__init.py:setup() to work
+from cinder.tests import *
diff --git a/cinder/tests/api/openstack/volume/contrib/__init__.py b/cinder/tests/api/openstack/volume/contrib/__init__.py
new file mode 100644
index 000000000..3be5ce944
--- /dev/null
+++ b/cinder/tests/api/openstack/volume/contrib/__init__.py
@@ -0,0 +1,19 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+# NOTE(vish): this forces the fixtures from tests/__init.py:setup() to work
+from cinder.tests import *
diff --git a/cinder/tests/api/openstack/volume/contrib/test_types_extra_specs.py b/cinder/tests/api/openstack/volume/contrib/test_types_extra_specs.py
new file mode 100644
index 000000000..01dd0bf82
--- /dev/null
+++ b/cinder/tests/api/openstack/volume/contrib/test_types_extra_specs.py
@@ -0,0 +1,202 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 Zadara Storage Inc.
+# Copyright (c) 2011 OpenStack LLC.
+# Copyright 2011 University of Southern California
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from lxml import etree
+import webob
+
+from cinder.api.openstack.volume.contrib import types_extra_specs
+from cinder import test
+from cinder.tests.api.openstack import fakes
+import cinder.wsgi
+
+
+def return_create_volume_type_extra_specs(context, volume_type_id,
+                                          extra_specs):
+    return stub_volume_type_extra_specs()
+
+
+def return_volume_type_extra_specs(context, volume_type_id):
+    return stub_volume_type_extra_specs()
+
+
+def return_empty_volume_type_extra_specs(context, volume_type_id):
+    return {}
+
+
+def delete_volume_type_extra_specs(context, volume_type_id, key):
+    pass
+
+
+def stub_volume_type_extra_specs():
+    specs = {
+            "key1": "value1",
+            "key2": "value2",
+            "key3": "value3",
+            "key4": "value4",
+            "key5": "value5"}
+    return specs
+
+
+def volume_type_get(context, volume_type_id):
+    pass
+
+
+class VolumeTypesExtraSpecsTest(test.TestCase):
+
+    def setUp(self):
+        super(VolumeTypesExtraSpecsTest, self).setUp()
+        self.stubs.Set(cinder.db, 'volume_type_get', volume_type_get)
+        self.api_path = '/v1/fake/os-volume-types/1/extra_specs'
+        self.controller = types_extra_specs.VolumeTypeExtraSpecsController()
+
+    def test_index(self):
+        self.stubs.Set(cinder.db, 'volume_type_extra_specs_get',
+                       return_volume_type_extra_specs)
+
+        req = fakes.HTTPRequest.blank(self.api_path)
+        res_dict = self.controller.index(req, 1)
+
+        self.assertEqual('value1', res_dict['extra_specs']['key1'])
+
+    def test_index_no_data(self):
+        self.stubs.Set(cinder.db, 'volume_type_extra_specs_get',
+                       return_empty_volume_type_extra_specs)
+
+        req = fakes.HTTPRequest.blank(self.api_path)
+        res_dict = self.controller.index(req, 1)
+
+        self.assertEqual(0, len(res_dict['extra_specs']))
+
+    def test_show(self):
+        self.stubs.Set(cinder.db, 'volume_type_extra_specs_get',
+                       return_volume_type_extra_specs)
+
+        req = fakes.HTTPRequest.blank(self.api_path + '/key5')
+        res_dict = self.controller.show(req, 1, 'key5')
+
+        self.assertEqual('value5', res_dict['key5'])
+
+    def test_show_spec_not_found(self):
+        self.stubs.Set(cinder.db, 'volume_type_extra_specs_get',
+                       return_empty_volume_type_extra_specs)
+
+        req = fakes.HTTPRequest.blank(self.api_path + '/key6')
+        self.assertRaises(webob.exc.HTTPNotFound, self.controller.show,
+                          req, 1, 'key6')
+
+    def test_delete(self):
+        self.stubs.Set(cinder.db, 'volume_type_extra_specs_delete',
+                       delete_volume_type_extra_specs)
+
+        req = fakes.HTTPRequest.blank(self.api_path + '/key5')
+        self.controller.delete(req, 1, 'key5')
+
+    def test_create(self):
+        self.stubs.Set(cinder.db,
+                       'volume_type_extra_specs_update_or_create',
+                       return_create_volume_type_extra_specs)
+        body = {"extra_specs": {"key1": "value1"}}
+
+        req = fakes.HTTPRequest.blank(self.api_path)
+        res_dict = self.controller.create(req, 1, body)
+
+        self.assertEqual('value1', res_dict['extra_specs']['key1'])
+
+    def test_create_empty_body(self):
+        self.stubs.Set(cinder.db,
+                       'volume_type_extra_specs_update_or_create',
+                       return_create_volume_type_extra_specs)
+
+        req = fakes.HTTPRequest.blank(self.api_path)
+        self.assertRaises(webob.exc.HTTPBadRequest, self.controller.create,
+                          req, 1, '')
+
+    def test_update_item(self):
+        self.stubs.Set(cinder.db,
+                       'volume_type_extra_specs_update_or_create',
+                       return_create_volume_type_extra_specs)
+        body = {"key1": "value1"}
+
+        req = fakes.HTTPRequest.blank(self.api_path + '/key1')
+        res_dict = self.controller.update(req, 1, 'key1', body)
+
+        self.assertEqual('value1', res_dict['key1'])
+
+    def test_update_item_empty_body(self):
+        self.stubs.Set(cinder.db,
+                       'volume_type_extra_specs_update_or_create',
+                       return_create_volume_type_extra_specs)
+
+        req = fakes.HTTPRequest.blank(self.api_path + '/key1')
+        self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,
+                          req, 1, 'key1', '')
+
+    def test_update_item_too_many_keys(self):
+        self.stubs.Set(cinder.db,
+                       'volume_type_extra_specs_update_or_create',
+                       return_create_volume_type_extra_specs)
+        body = {"key1": "value1", "key2": "value2"}
+
+        req = fakes.HTTPRequest.blank(self.api_path + '/key1')
+        self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,
+                          req, 1, 'key1', body)
+
+    def test_update_item_body_uri_mismatch(self):
+        self.stubs.Set(cinder.db,
+                       'volume_type_extra_specs_update_or_create',
+                       return_create_volume_type_extra_specs)
+        body = {"key1": "value1"}
+
+        req = fakes.HTTPRequest.blank(self.api_path + '/bad')
+        self.assertRaises(webob.exc.HTTPBadRequest, self.controller.update,
+                          req, 1, 'bad', body)
+
+
+class VolumeTypeExtraSpecsSerializerTest(test.TestCase):
+    def test_index_create_serializer(self):
+        serializer = types_extra_specs.VolumeTypeExtraSpecsTemplate()
+
+        # Just getting some input data
+        extra_specs = stub_volume_type_extra_specs()
+        text = serializer.serialize(dict(extra_specs=extra_specs))
+
+        print text
+        tree = etree.fromstring(text)
+
+        self.assertEqual('extra_specs', tree.tag)
+        self.assertEqual(len(extra_specs), len(tree))
+        seen = set(extra_specs.keys())
+        for child in tree:
+            self.assertTrue(child.tag in seen)
+            self.assertEqual(extra_specs[child.tag], child.text)
+            seen.remove(child.tag)
+        self.assertEqual(len(seen), 0)
+
+    def test_update_show_serializer(self):
+        serializer = types_extra_specs.VolumeTypeExtraSpecTemplate()
+
+        exemplar = dict(key1='value1')
+        text = serializer.serialize(exemplar)
+
+        print text
+        tree = etree.fromstring(text)
+
+        self.assertEqual('key1', tree.tag)
+        self.assertEqual('value1', tree.text)
+        self.assertEqual(0, len(tree))
diff --git a/cinder/tests/api/openstack/volume/contrib/test_types_manage.py b/cinder/tests/api/openstack/volume/contrib/test_types_manage.py
new file mode 100644
index 000000000..f85bf98fd
--- /dev/null
+++ b/cinder/tests/api/openstack/volume/contrib/test_types_manage.py
@@ -0,0 +1,103 @@
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import webob
+
+from cinder.api.openstack.volume.contrib import types_manage
+from cinder import exception
+from cinder import test
+from cinder.volume import volume_types
+from cinder.tests.api.openstack import fakes
+
+
+def stub_volume_type(id):
+    specs = {
+            "key1": "value1",
+            "key2": "value2",
+            "key3": "value3",
+            "key4": "value4",
+            "key5": "value5"}
+    return dict(id=id, name='vol_type_%s' % str(id), extra_specs=specs)
+
+
+def return_volume_types_get_volume_type(context, id):
+    if id == "777":
+        raise exception.VolumeTypeNotFound(volume_type_id=id)
+    return stub_volume_type(int(id))
+
+
+def return_volume_types_destroy(context, name):
+    if name == "777":
+        raise exception.VolumeTypeNotFoundByName(volume_type_name=name)
+    pass
+
+
+def return_volume_types_create(context, name, specs):
+    pass
+
+
+def return_volume_types_get_by_name(context, name):
+    if name == "777":
+        raise exception.VolumeTypeNotFoundByName(volume_type_name=name)
+    return stub_volume_type(int(name.split("_")[2]))
+
+
+class VolumeTypesManageApiTest(test.TestCase):
+    def setUp(self):
+        super(VolumeTypesManageApiTest, self).setUp()
+        self.controller = types_manage.VolumeTypesManageController()
+
+    def test_volume_types_delete(self):
+        self.stubs.Set(volume_types, 'get_volume_type',
+                       return_volume_types_get_volume_type)
+        self.stubs.Set(volume_types, 'destroy',
+                       return_volume_types_destroy)
+
+        req = fakes.HTTPRequest.blank('/v1/fake/types/1')
+        self.controller._delete(req, 1)
+
+    def test_volume_types_delete_not_found(self):
+        self.stubs.Set(volume_types, 'get_volume_type',
+                       return_volume_types_get_volume_type)
+        self.stubs.Set(volume_types, 'destroy',
+                       return_volume_types_destroy)
+
+        req = fakes.HTTPRequest.blank('/v1/fake/types/777')
+        self.assertRaises(webob.exc.HTTPNotFound, self.controller._delete,
+                          req, '777')
+
+    def test_create(self):
+        self.stubs.Set(volume_types, 'create',
+                       return_volume_types_create)
+        self.stubs.Set(volume_types, 'get_volume_type_by_name',
+                       return_volume_types_get_by_name)
+
+        body = {"volume_type": {"name": "vol_type_1",
+                                "extra_specs": {"key1": "value1"}}}
+        req = fakes.HTTPRequest.blank('/v1/fake/types')
+        res_dict = self.controller._create(req, body)
+
+        self.assertEqual(1, len(res_dict))
+        self.assertEqual('vol_type_1', res_dict['volume_type']['name'])
+
+    def test_create_empty_body(self):
+        self.stubs.Set(volume_types, 'create',
+                       return_volume_types_create)
+        self.stubs.Set(volume_types, 'get_volume_type_by_name',
+                       return_volume_types_get_by_name)
+
+        req = fakes.HTTPRequest.blank('/v1/fake/types')
+        self.assertRaises(webob.exc.HTTPUnprocessableEntity,
+                          self.controller._create, req, '')
diff --git a/cinder/tests/api/openstack/volume/extensions/__init__.py b/cinder/tests/api/openstack/volume/extensions/__init__.py
new file mode 100644
index 000000000..848908a95
--- /dev/null
+++ b/cinder/tests/api/openstack/volume/extensions/__init__.py
@@ -0,0 +1,15 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
diff --git a/cinder/tests/api/openstack/volume/extensions/foxinsocks.py b/cinder/tests/api/openstack/volume/extensions/foxinsocks.py
new file mode 100644
index 000000000..5fcd6a2ba
--- /dev/null
+++ b/cinder/tests/api/openstack/volume/extensions/foxinsocks.py
@@ -0,0 +1,94 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import webob.exc
+
+from cinder.api.openstack import extensions
+from cinder.api.openstack import wsgi
+
+
+class FoxInSocksController(object):
+
+    def index(self, req):
+        return "Try to say this Mr. Knox, sir..."
+
+
+class FoxInSocksServerControllerExtension(wsgi.Controller):
+    @wsgi.action('add_tweedle')
+    def _add_tweedle(self, req, id, body):
+
+        return "Tweedle Beetle Added."
+
+    @wsgi.action('delete_tweedle')
+    def _delete_tweedle(self, req, id, body):
+
+        return "Tweedle Beetle Deleted."
+
+    @wsgi.action('fail')
+    def _fail(self, req, id, body):
+
+        raise webob.exc.HTTPBadRequest(explanation='Tweedle fail')
+
+
+class FoxInSocksFlavorGooseControllerExtension(wsgi.Controller):
+    @wsgi.extends
+    def show(self, req, resp_obj, id):
+        #NOTE: This only handles JSON responses.
+        # You can use content type header to test for XML.
+        resp_obj.obj['flavor']['googoose'] = req.GET.get('chewing')
+
+
+class FoxInSocksFlavorBandsControllerExtension(wsgi.Controller):
+    @wsgi.extends
+    def show(self, req, resp_obj, id):
+        #NOTE: This only handles JSON responses.
+        # You can use content type header to test for XML.
+        resp_obj.obj['big_bands'] = 'Pig Bands!'
+
+
+class Foxinsocks(extensions.ExtensionDescriptor):
+    """The Fox In Socks Extension"""
+
+    name = "Fox In Socks"
+    alias = "FOXNSOX"
+    namespace = "http://www.fox.in.socks/api/ext/pie/v1.0"
+    updated = "2011-01-22T13:25:27-06:00"
+
+    def __init__(self, ext_mgr):
+        ext_mgr.register(self)
+
+    def get_resources(self):
+        resources = []
+        resource = extensions.ResourceExtension('foxnsocks',
+                                               FoxInSocksController())
+        resources.append(resource)
+        return resources
+
+    def get_controller_extensions(self):
+        extension_list = []
+
+        extension_set = [
+            (FoxInSocksServerControllerExtension, 'servers'),
+            (FoxInSocksFlavorGooseControllerExtension, 'flavors'),
+            (FoxInSocksFlavorBandsControllerExtension, 'flavors'),
+            ]
+        for klass, collection in extension_set:
+            controller = klass()
+            ext = extensions.ControllerExtension(self, collection, controller)
+            extension_list.append(ext)
+
+        return extension_list
diff --git a/cinder/tests/api/openstack/volume/test_extensions.py b/cinder/tests/api/openstack/volume/test_extensions.py
new file mode 100644
index 000000000..62b4beba4
--- /dev/null
+++ b/cinder/tests/api/openstack/volume/test_extensions.py
@@ -0,0 +1,156 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 X.commerce, a business unit of eBay Inc.
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import json
+
+import webob
+from lxml import etree
+import iso8601
+
+from cinder.api.openstack import volume
+from cinder.api.openstack import xmlutil
+from cinder import flags
+from cinder import test
+
+FLAGS = flags.FLAGS
+NS = "{http://docs.openstack.org/common/api/v1.0}"
+
+
+class ExtensionTestCase(test.TestCase):
+    def setUp(self):
+        super(ExtensionTestCase, self).setUp()
+        ext_list = FLAGS.osapi_volume_extension[:]
+        fox = ('cinder.tests.api.openstack.volume.extensions.'
+               'foxinsocks.Foxinsocks')
+        if fox not in ext_list:
+            ext_list.append(fox)
+            self.flags(osapi_volume_extension=ext_list)
+
+
+class ExtensionControllerTest(ExtensionTestCase):
+
+    def setUp(self):
+        super(ExtensionControllerTest, self).setUp()
+        self.ext_list = [
+            "TypesManage",
+            "TypesExtraSpecs",
+            ]
+        self.ext_list.sort()
+
+    def test_list_extensions_json(self):
+        app = volume.APIRouter()
+        request = webob.Request.blank("/fake/extensions")
+        response = request.get_response(app)
+        self.assertEqual(200, response.status_int)
+
+        # Make sure we have all the extensions, extra extensions being OK.
+        data = json.loads(response.body)
+        names = [str(x['name']) for x in data['extensions']
+                 if str(x['name']) in self.ext_list]
+        names.sort()
+        self.assertEqual(names, self.ext_list)
+
+        # Ensure all the timestamps are valid according to iso8601
+        for ext in data['extensions']:
+            iso8601.parse_date(ext['updated'])
+
+        # Make sure that at least Fox in Sox is correct.
+        (fox_ext, ) = [
+            x for x in data['extensions'] if x['alias'] == 'FOXNSOX']
+        self.assertEqual(fox_ext, {
+                'namespace': 'http://www.fox.in.socks/api/ext/pie/v1.0',
+                'name': 'Fox In Socks',
+                'updated': '2011-01-22T13:25:27-06:00',
+                'description': 'The Fox In Socks Extension',
+                'alias': 'FOXNSOX',
+                'links': []
+            },
+        )
+
+        for ext in data['extensions']:
+            url = '/fake/extensions/%s' % ext['alias']
+            request = webob.Request.blank(url)
+            response = request.get_response(app)
+            output = json.loads(response.body)
+            self.assertEqual(output['extension']['alias'], ext['alias'])
+
+    def test_get_extension_json(self):
+        app = volume.APIRouter()
+        request = webob.Request.blank("/fake/extensions/FOXNSOX")
+        response = request.get_response(app)
+        self.assertEqual(200, response.status_int)
+
+        data = json.loads(response.body)
+        self.assertEqual(data['extension'], {
+                "namespace": "http://www.fox.in.socks/api/ext/pie/v1.0",
+                "name": "Fox In Socks",
+                "updated": "2011-01-22T13:25:27-06:00",
+                "description": "The Fox In Socks Extension",
+                "alias": "FOXNSOX",
+                "links": []})
+
+    def test_get_non_existing_extension_json(self):
+        app = volume.APIRouter()
+        request = webob.Request.blank("/fake/extensions/4")
+        response = request.get_response(app)
+        self.assertEqual(404, response.status_int)
+
+    def test_list_extensions_xml(self):
+        app = volume.APIRouter()
+        request = webob.Request.blank("/fake/extensions")
+        request.accept = "application/xml"
+        response = request.get_response(app)
+        self.assertEqual(200, response.status_int)
+
+        root = etree.XML(response.body)
+        self.assertEqual(root.tag.split('extensions')[0], NS)
+
+        # Make sure we have all the extensions, extras extensions being OK.
+        exts = root.findall('{0}extension'.format(NS))
+        self.assert_(len(exts) >= len(self.ext_list))
+
+        # Make sure that at least Fox in Sox is correct.
+        (fox_ext, ) = [x for x in exts if x.get('alias') == 'FOXNSOX']
+        self.assertEqual(fox_ext.get('name'), 'Fox In Socks')
+        self.assertEqual(fox_ext.get('namespace'),
+            'http://www.fox.in.socks/api/ext/pie/v1.0')
+        self.assertEqual(fox_ext.get('updated'), '2011-01-22T13:25:27-06:00')
+        self.assertEqual(fox_ext.findtext('{0}description'.format(NS)),
+            'The Fox In Socks Extension')
+
+        xmlutil.validate_schema(root, 'extensions')
+
+    def test_get_extension_xml(self):
+        app = volume.APIRouter()
+        request = webob.Request.blank("/fake/extensions/FOXNSOX")
+        request.accept = "application/xml"
+        response = request.get_response(app)
+        self.assertEqual(200, response.status_int)
+        xml = response.body
+
+        root = etree.XML(xml)
+        self.assertEqual(root.tag.split('extension')[0], NS)
+        self.assertEqual(root.get('alias'), 'FOXNSOX')
+        self.assertEqual(root.get('name'), 'Fox In Socks')
+        self.assertEqual(root.get('namespace'),
+            'http://www.fox.in.socks/api/ext/pie/v1.0')
+        self.assertEqual(root.get('updated'), '2011-01-22T13:25:27-06:00')
+        self.assertEqual(root.findtext('{0}description'.format(NS)),
+            'The Fox In Socks Extension')
+
+        xmlutil.validate_schema(root, 'extension')
diff --git a/cinder/tests/api/openstack/volume/test_router.py b/cinder/tests/api/openstack/volume/test_router.py
new file mode 100644
index 000000000..f7e7afb6c
--- /dev/null
+++ b/cinder/tests/api/openstack/volume/test_router.py
@@ -0,0 +1,105 @@
+# Copyright 2011 Denali Systems, Inc.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+
+from cinder.api.openstack import volume
+from cinder.api.openstack.volume import snapshots
+from cinder.api.openstack.volume import volumes
+from cinder.api.openstack.volume import versions
+from cinder.api.openstack import wsgi
+from cinder import flags
+from cinder import log as logging
+from cinder import test
+from cinder.tests.api.openstack import fakes
+
+FLAGS = flags.FLAGS
+
+LOG = logging.getLogger(__name__)
+
+
+class FakeController(object):
+    def index(self, req):
+        return {}
+
+    def detail(self, req):
+        return {}
+
+
+def create_resource():
+    return wsgi.Resource(FakeController())
+
+
+class VolumeRouterTestCase(test.TestCase):
+    def setUp(self):
+        super(VolumeRouterTestCase, self).setUp()
+        # NOTE(vish): versions is just returning text so, no need to stub.
+        self.stubs.Set(snapshots, 'create_resource', create_resource)
+        self.stubs.Set(volumes, 'create_resource', create_resource)
+        self.app = volume.APIRouter()
+
+    def test_versions(self):
+        req = fakes.HTTPRequest.blank('')
+        req.method = 'GET'
+        req.content_type = 'application/json'
+        response = req.get_response(self.app)
+        self.assertEqual(302, response.status_int)
+        req = fakes.HTTPRequest.blank('/')
+        req.method = 'GET'
+        req.content_type = 'application/json'
+        response = req.get_response(self.app)
+        self.assertEqual(200, response.status_int)
+
+    def test_versions_dispatch(self):
+        req = fakes.HTTPRequest.blank('/')
+        req.method = 'GET'
+        req.content_type = 'application/json'
+        resource = versions.Versions()
+        result = resource.dispatch(resource.index, req, {})
+        self.assertTrue(result)
+
+    def test_volumes(self):
+        req = fakes.HTTPRequest.blank('/fake/volumes')
+        req.method = 'GET'
+        req.content_type = 'application/json'
+        response = req.get_response(self.app)
+        self.assertEqual(200, response.status_int)
+
+    def test_volumes_detail(self):
+        req = fakes.HTTPRequest.blank('/fake/volumes/detail')
+        req.method = 'GET'
+        req.content_type = 'application/json'
+        response = req.get_response(self.app)
+        self.assertEqual(200, response.status_int)
+
+    def test_types(self):
+        req = fakes.HTTPRequest.blank('/fake/types')
+        req.method = 'GET'
+        req.content_type = 'application/json'
+        response = req.get_response(self.app)
+        self.assertEqual(200, response.status_int)
+
+    def test_snapshots(self):
+        req = fakes.HTTPRequest.blank('/fake/snapshots')
+        req.method = 'GET'
+        req.content_type = 'application/json'
+        response = req.get_response(self.app)
+        self.assertEqual(200, response.status_int)
+
+    def test_snapshots_detail(self):
+        req = fakes.HTTPRequest.blank('/fake/snapshots/detail')
+        req.method = 'GET'
+        req.content_type = 'application/json'
+        response = req.get_response(self.app)
+        self.assertEqual(200, response.status_int)
diff --git a/cinder/tests/api/openstack/volume/test_snapshots.py b/cinder/tests/api/openstack/volume/test_snapshots.py
new file mode 100644
index 000000000..8c87da514
--- /dev/null
+++ b/cinder/tests/api/openstack/volume/test_snapshots.py
@@ -0,0 +1,214 @@
+# Copyright 2011 Denali Systems, Inc.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import datetime
+
+from lxml import etree
+import webob
+
+from cinder.api.openstack.volume import snapshots
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+from cinder import test
+from cinder import volume
+from cinder.tests.api.openstack import fakes
+
+FLAGS = flags.FLAGS
+
+LOG = logging.getLogger(__name__)
+
+
+def _get_default_snapshot_param():
+    return {
+        'id': 123,
+        'volume_id': 12,
+        'status': 'available',
+        'volume_size': 100,
+        'created_at': None,
+        'display_name': 'Default name',
+        'display_description': 'Default description',
+        }
+
+
+def stub_snapshot_create(self, context, volume_id, name, description):
+    snapshot = _get_default_snapshot_param()
+    snapshot['volume_id'] = volume_id
+    snapshot['display_name'] = name
+    snapshot['display_description'] = description
+    return snapshot
+
+
+def stub_snapshot_delete(self, context, snapshot):
+    if snapshot['id'] != 123:
+        raise exception.NotFound
+
+
+def stub_snapshot_get(self, context, snapshot_id):
+    if snapshot_id != 123:
+        raise exception.NotFound
+
+    param = _get_default_snapshot_param()
+    return param
+
+
+def stub_snapshot_get_all(self, context):
+    param = _get_default_snapshot_param()
+    return [param]
+
+
+class SnapshotApiTest(test.TestCase):
+    def setUp(self):
+        super(SnapshotApiTest, self).setUp()
+        self.controller = snapshots.SnapshotsController()
+
+        self.stubs.Set(volume.api.API, "get_snapshot", stub_snapshot_get)
+        self.stubs.Set(volume.api.API, "get_all_snapshots",
+            stub_snapshot_get_all)
+
+    def test_snapshot_create(self):
+        self.stubs.Set(volume.api.API, "create_snapshot", stub_snapshot_create)
+        self.stubs.Set(volume.api.API, 'get', fakes.stub_volume_get)
+        snapshot = {"volume_id": '12',
+                "force": False,
+                "display_name": "Snapshot Test Name",
+                "display_description": "Snapshot Test Desc"}
+        body = dict(snapshot=snapshot)
+        req = fakes.HTTPRequest.blank('/v1/snapshots')
+        resp_dict = self.controller.create(req, body)
+
+        self.assertTrue('snapshot' in resp_dict)
+        self.assertEqual(resp_dict['snapshot']['display_name'],
+                        snapshot['display_name'])
+        self.assertEqual(resp_dict['snapshot']['display_description'],
+                        snapshot['display_description'])
+
+    def test_snapshot_create_force(self):
+        self.stubs.Set(volume.api.API, "create_snapshot_force",
+            stub_snapshot_create)
+        self.stubs.Set(volume.api.API, 'get', fakes.stub_volume_get)
+        snapshot = {"volume_id": '12',
+                "force": True,
+                "display_name": "Snapshot Test Name",
+                "display_description": "Snapshot Test Desc"}
+        body = dict(snapshot=snapshot)
+        req = fakes.HTTPRequest.blank('/v1/snapshots')
+        resp_dict = self.controller.create(req, body)
+
+        self.assertTrue('snapshot' in resp_dict)
+        self.assertEqual(resp_dict['snapshot']['display_name'],
+                        snapshot['display_name'])
+        self.assertEqual(resp_dict['snapshot']['display_description'],
+                        snapshot['display_description'])
+
+    def test_snapshot_delete(self):
+        self.stubs.Set(volume.api.API, "delete_snapshot", stub_snapshot_delete)
+
+        snapshot_id = 123
+        req = fakes.HTTPRequest.blank('/v1/snapshots/%d' % snapshot_id)
+        resp = self.controller.delete(req, snapshot_id)
+        self.assertEqual(resp.status_int, 202)
+
+    def test_snapshot_delete_invalid_id(self):
+        self.stubs.Set(volume.api.API, "delete_snapshot", stub_snapshot_delete)
+        snapshot_id = 234
+        req = fakes.HTTPRequest.blank('/v1/snapshots/%d' % snapshot_id)
+        self.assertRaises(webob.exc.HTTPNotFound,
+                          self.controller.delete,
+                          req,
+                          snapshot_id)
+
+    def test_snapshot_show(self):
+        req = fakes.HTTPRequest.blank('/v1/snapshots/123')
+        resp_dict = self.controller.show(req, 123)
+
+        self.assertTrue('snapshot' in resp_dict)
+        self.assertEqual(resp_dict['snapshot']['id'], '123')
+
+    def test_snapshot_show_invalid_id(self):
+        snapshot_id = 234
+        req = fakes.HTTPRequest.blank('/v1/snapshots/%d' % snapshot_id)
+        self.assertRaises(webob.exc.HTTPNotFound,
+                          self.controller.show,
+                          req,
+                          snapshot_id)
+
+    def test_snapshot_detail(self):
+        req = fakes.HTTPRequest.blank('/v1/snapshots/detail')
+        resp_dict = self.controller.detail(req)
+
+        self.assertTrue('snapshots' in resp_dict)
+        resp_snapshots = resp_dict['snapshots']
+        self.assertEqual(len(resp_snapshots), 1)
+
+        resp_snapshot = resp_snapshots.pop()
+        self.assertEqual(resp_snapshot['id'], '123')
+
+
+class SnapshotSerializerTest(test.TestCase):
+    def _verify_snapshot(self, snap, tree):
+        self.assertEqual(tree.tag, 'snapshot')
+
+        for attr in ('id', 'status', 'size', 'created_at',
+                     'display_name', 'display_description', 'volume_id'):
+            self.assertEqual(str(snap[attr]), tree.get(attr))
+
+    def test_snapshot_show_create_serializer(self):
+        serializer = snapshots.SnapshotTemplate()
+        raw_snapshot = dict(
+            id='snap_id',
+            status='snap_status',
+            size=1024,
+            created_at=datetime.datetime.now(),
+            display_name='snap_name',
+            display_description='snap_desc',
+            volume_id='vol_id',
+            )
+        text = serializer.serialize(dict(snapshot=raw_snapshot))
+
+        print text
+        tree = etree.fromstring(text)
+
+        self._verify_snapshot(raw_snapshot, tree)
+
+    def test_snapshot_index_detail_serializer(self):
+        serializer = snapshots.SnapshotsTemplate()
+        raw_snapshots = [dict(
+                id='snap1_id',
+                status='snap1_status',
+                size=1024,
+                created_at=datetime.datetime.now(),
+                display_name='snap1_name',
+                display_description='snap1_desc',
+                volume_id='vol1_id',
+                ),
+                       dict(
+                id='snap2_id',
+                status='snap2_status',
+                size=1024,
+                created_at=datetime.datetime.now(),
+                display_name='snap2_name',
+                display_description='snap2_desc',
+                volume_id='vol2_id',
+                )]
+        text = serializer.serialize(dict(snapshots=raw_snapshots))
+
+        print text
+        tree = etree.fromstring(text)
+
+        self.assertEqual('snapshots', tree.tag)
+        self.assertEqual(len(raw_snapshots), len(tree))
+        for idx, child in enumerate(tree):
+            self._verify_snapshot(raw_snapshots[idx], child)
diff --git a/cinder/tests/api/openstack/volume/test_types.py b/cinder/tests/api/openstack/volume/test_types.py
new file mode 100644
index 000000000..e8d98d7de
--- /dev/null
+++ b/cinder/tests/api/openstack/volume/test_types.py
@@ -0,0 +1,146 @@
+# Copyright 2011 OpenStack LLC.
+# aLL Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from lxml import etree
+import webob
+
+from cinder.api.openstack.volume import types
+from cinder import exception
+from cinder import test
+from cinder.volume import volume_types
+from cinder.tests.api.openstack import fakes
+
+
+def stub_volume_type(id):
+    specs = {
+            "key1": "value1",
+            "key2": "value2",
+            "key3": "value3",
+            "key4": "value4",
+            "key5": "value5"}
+    return dict(id=id, name='vol_type_%s' % str(id), extra_specs=specs)
+
+
+def return_volume_types_get_all_types(context):
+    return dict(vol_type_1=stub_volume_type(1),
+                vol_type_2=stub_volume_type(2),
+                vol_type_3=stub_volume_type(3))
+
+
+def return_empty_volume_types_get_all_types(context):
+    return {}
+
+
+def return_volume_types_get_volume_type(context, id):
+    if id == "777":
+        raise exception.VolumeTypeNotFound(volume_type_id=id)
+    return stub_volume_type(int(id))
+
+
+def return_volume_types_get_by_name(context, name):
+    if name == "777":
+        raise exception.VolumeTypeNotFoundByName(volume_type_name=name)
+    return stub_volume_type(int(name.split("_")[2]))
+
+
+class VolumeTypesApiTest(test.TestCase):
+    def setUp(self):
+        super(VolumeTypesApiTest, self).setUp()
+        self.controller = types.VolumeTypesController()
+
+    def test_volume_types_index(self):
+        self.stubs.Set(volume_types, 'get_all_types',
+                       return_volume_types_get_all_types)
+
+        req = fakes.HTTPRequest.blank('/v1/fake/types')
+        res_dict = self.controller.index(req)
+
+        self.assertEqual(3, len(res_dict['volume_types']))
+
+        expected_names = ['vol_type_1', 'vol_type_2', 'vol_type_3']
+        actual_names = map(lambda e: e['name'], res_dict['volume_types'])
+        self.assertEqual(set(actual_names), set(expected_names))
+        for entry in res_dict['volume_types']:
+            self.assertEqual('value1', entry['extra_specs']['key1'])
+
+    def test_volume_types_index_no_data(self):
+        self.stubs.Set(volume_types, 'get_all_types',
+                       return_empty_volume_types_get_all_types)
+
+        req = fakes.HTTPRequest.blank('/v1/fake/types')
+        res_dict = self.controller.index(req)
+
+        self.assertEqual(0, len(res_dict['volume_types']))
+
+    def test_volume_types_show(self):
+        self.stubs.Set(volume_types, 'get_volume_type',
+                       return_volume_types_get_volume_type)
+
+        req = fakes.HTTPRequest.blank('/v1/fake/types/1')
+        res_dict = self.controller.show(req, 1)
+
+        self.assertEqual(1, len(res_dict))
+        self.assertEqual('1', res_dict['volume_type']['id'])
+        self.assertEqual('vol_type_1', res_dict['volume_type']['name'])
+
+    def test_volume_types_show_not_found(self):
+        self.stubs.Set(volume_types, 'get_volume_type',
+                       return_volume_types_get_volume_type)
+
+        req = fakes.HTTPRequest.blank('/v1/fake/types/777')
+        self.assertRaises(webob.exc.HTTPNotFound, self.controller.show,
+                          req, '777')
+
+
+class VolumeTypesSerializerTest(test.TestCase):
+    def _verify_volume_type(self, vtype, tree):
+        self.assertEqual('volume_type', tree.tag)
+        self.assertEqual(vtype['name'], tree.get('name'))
+        self.assertEqual(str(vtype['id']), tree.get('id'))
+        self.assertEqual(1, len(tree))
+        extra_specs = tree[0]
+        self.assertEqual('extra_specs', extra_specs.tag)
+        seen = set(vtype['extra_specs'].keys())
+        for child in extra_specs:
+            self.assertTrue(child.tag in seen)
+            self.assertEqual(vtype['extra_specs'][child.tag], child.text)
+            seen.remove(child.tag)
+        self.assertEqual(len(seen), 0)
+
+    def test_index_serializer(self):
+        serializer = types.VolumeTypesTemplate()
+
+        # Just getting some input data
+        vtypes = return_volume_types_get_all_types(None)
+        text = serializer.serialize({'volume_types': vtypes.values()})
+
+        tree = etree.fromstring(text)
+
+        self.assertEqual('volume_types', tree.tag)
+        self.assertEqual(len(vtypes), len(tree))
+        for child in tree:
+            name = child.get('name')
+            self.assertTrue(name in vtypes)
+            self._verify_volume_type(vtypes[name], child)
+
+    def test_voltype_serializer(self):
+        serializer = types.VolumeTypeTemplate()
+
+        vtype = stub_volume_type(1)
+        text = serializer.serialize(dict(volume_type=vtype))
+
+        tree = etree.fromstring(text)
+
+        self._verify_volume_type(vtype, tree)
diff --git a/cinder/tests/api/openstack/volume/test_volumes.py b/cinder/tests/api/openstack/volume/test_volumes.py
new file mode 100644
index 000000000..9563989a9
--- /dev/null
+++ b/cinder/tests/api/openstack/volume/test_volumes.py
@@ -0,0 +1,290 @@
+# Copyright 2013 Josh Durgin
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import datetime
+
+from lxml import etree
+import webob
+
+from cinder.api.openstack.volume import volumes
+from cinder import flags
+from cinder import test
+from cinder.tests.api.openstack import fakes
+from cinder.volume import api as volume_api
+
+
+FLAGS = flags.FLAGS
+NS = '{http://docs.openstack.org/volume/api/v1}'
+
+
+class VolumeApiTest(test.TestCase):
+    def setUp(self):
+        super(VolumeApiTest, self).setUp()
+        self.controller = volumes.VolumeController()
+
+        self.stubs.Set(volume_api.API, 'get_all', fakes.stub_volume_get_all)
+        self.stubs.Set(volume_api.API, 'get', fakes.stub_volume_get)
+        self.stubs.Set(volume_api.API, 'delete', fakes.stub_volume_delete)
+
+    def test_volume_create(self):
+        self.stubs.Set(volume_api.API, "create", fakes.stub_volume_create)
+
+        vol = {"size": 100,
+               "display_name": "Volume Test Name",
+               "display_description": "Volume Test Desc",
+               "availability_zone": "zone1:host1"}
+        body = {"volume": vol}
+        req = fakes.HTTPRequest.blank('/v1/volumes')
+        res_dict = self.controller.create(req, body)
+        expected = {'volume': {'status': 'fakestatus',
+                               'display_description': 'Volume Test Desc',
+                               'availability_zone': 'zone1:host1',
+                               'display_name': 'Volume Test Name',
+                               'attachments': [{'device': '/',
+                                                'server_id': 'fakeuuid',
+                                                'id': '1',
+                                                'volume_id': '1'}],
+                               'volume_type': 'vol_type_name',
+                               'snapshot_id': None,
+                               'metadata': {},
+                               'id': '1',
+                               'created_at': datetime.datetime(1, 1, 1,
+                                                              1, 1, 1),
+                               'size': 100}}
+        self.assertEqual(res_dict, expected)
+
+    def test_volume_create_no_body(self):
+        body = {}
+        req = fakes.HTTPRequest.blank('/v1/volumes')
+        self.assertRaises(webob.exc.HTTPUnprocessableEntity,
+                          self.controller.create,
+                          req,
+                          body)
+
+    def test_volume_list(self):
+        req = fakes.HTTPRequest.blank('/v1/volumes')
+        res_dict = self.controller.index(req)
+        expected = {'volumes': [{'status': 'fakestatus',
+                                 'display_description': 'displaydesc',
+                                 'availability_zone': 'fakeaz',
+                                 'display_name': 'displayname',
+                                 'attachments': [{'device': '/',
+                                                  'server_id': 'fakeuuid',
+                                                  'id': '1',
+                                                  'volume_id': '1'}],
+                                 'volume_type': 'vol_type_name',
+                                 'snapshot_id': None,
+                                 'metadata': {},
+                                 'id': '1',
+                                 'created_at': datetime.datetime(1, 1, 1,
+                                                                1, 1, 1),
+                                 'size': 1}]}
+        self.assertEqual(res_dict, expected)
+
+    def test_volume_list_detail(self):
+        req = fakes.HTTPRequest.blank('/v1/volumes/detail')
+        res_dict = self.controller.index(req)
+        expected = {'volumes': [{'status': 'fakestatus',
+                                 'display_description': 'displaydesc',
+                                 'availability_zone': 'fakeaz',
+                                 'display_name': 'displayname',
+                                 'attachments': [{'device': '/',
+                                                  'server_id': 'fakeuuid',
+                                                  'id': '1',
+                                                  'volume_id': '1'}],
+                                 'volume_type': 'vol_type_name',
+                                 'snapshot_id': None,
+                                 'metadata': {},
+                                 'id': '1',
+                                 'created_at': datetime.datetime(1, 1, 1,
+                                                                1, 1, 1),
+                                 'size': 1}]}
+        self.assertEqual(res_dict, expected)
+
+    def test_volume_show(self):
+        req = fakes.HTTPRequest.blank('/v1/volumes/1')
+        res_dict = self.controller.show(req, 1)
+        expected = {'volume': {'status': 'fakestatus',
+                               'display_description': 'displaydesc',
+                               'availability_zone': 'fakeaz',
+                               'display_name': 'displayname',
+                               'attachments': [{'device': '/',
+                                                'server_id': 'fakeuuid',
+                                                'id': '1',
+                                                'volume_id': '1'}],
+                               'volume_type': 'vol_type_name',
+                               'snapshot_id': None,
+                               'metadata': {},
+                               'id': '1',
+                               'created_at': datetime.datetime(1, 1, 1,
+                                                              1, 1, 1),
+                               'size': 1}}
+        self.assertEqual(res_dict, expected)
+
+    def test_volume_show_no_attachments(self):
+        def stub_volume_get(self, context, volume_id):
+            return fakes.stub_volume(volume_id, attach_status='detached')
+
+        self.stubs.Set(volume_api.API, 'get', stub_volume_get)
+
+        req = fakes.HTTPRequest.blank('/v1/volumes/1')
+        res_dict = self.controller.show(req, 1)
+        expected = {'volume': {'status': 'fakestatus',
+                               'display_description': 'displaydesc',
+                               'availability_zone': 'fakeaz',
+                               'display_name': 'displayname',
+                               'attachments': [],
+                               'volume_type': 'vol_type_name',
+                               'snapshot_id': None,
+                               'metadata': {},
+                               'id': '1',
+                               'created_at': datetime.datetime(1, 1, 1,
+                                                              1, 1, 1),
+                               'size': 1}}
+        self.assertEqual(res_dict, expected)
+
+    def test_volume_show_no_volume(self):
+        self.stubs.Set(volume_api.API, "get", fakes.stub_volume_get_notfound)
+
+        req = fakes.HTTPRequest.blank('/v1/volumes/1')
+        self.assertRaises(webob.exc.HTTPNotFound,
+                          self.controller.show,
+                          req,
+                          1)
+
+    def test_volume_delete(self):
+        req = fakes.HTTPRequest.blank('/v1/volumes/1')
+        resp = self.controller.delete(req, 1)
+        self.assertEqual(resp.status_int, 202)
+
+    def test_volume_delete_no_volume(self):
+        self.stubs.Set(volume_api.API, "get", fakes.stub_volume_get_notfound)
+
+        req = fakes.HTTPRequest.blank('/v1/volumes/1')
+        self.assertRaises(webob.exc.HTTPNotFound,
+                          self.controller.delete,
+                          req,
+                          1)
+
+
+class VolumeSerializerTest(test.TestCase):
+    def _verify_volume_attachment(self, attach, tree):
+        for attr in ('id', 'volume_id', 'server_id', 'device'):
+            self.assertEqual(str(attach[attr]), tree.get(attr))
+
+    def _verify_volume(self, vol, tree):
+        self.assertEqual(tree.tag, NS + 'volume')
+
+        for attr in ('id', 'status', 'size', 'availability_zone', 'created_at',
+                     'display_name', 'display_description', 'volume_type',
+                     'snapshot_id'):
+            self.assertEqual(str(vol[attr]), tree.get(attr))
+
+        for child in tree:
+            print child.tag
+            self.assertTrue(child.tag in (NS + 'attachments', NS + 'metadata'))
+            if child.tag == 'attachments':
+                self.assertEqual(1, len(child))
+                self.assertEqual('attachment', child[0].tag)
+                self._verify_volume_attachment(vol['attachments'][0], child[0])
+            elif child.tag == 'metadata':
+                not_seen = set(vol['metadata'].keys())
+                for gr_child in child:
+                    self.assertTrue(gr_child.tag in not_seen)
+                    self.assertEqual(str(vol['metadata'][gr_child.tag]),
+                                     gr_child.text)
+                    not_seen.remove(gr_child.tag)
+                self.assertEqual(0, len(not_seen))
+
+    def test_volume_show_create_serializer(self):
+        serializer = volumes.VolumeTemplate()
+        raw_volume = dict(
+            id='vol_id',
+            status='vol_status',
+            size=1024,
+            availability_zone='vol_availability',
+            created_at=datetime.datetime.now(),
+            attachments=[dict(
+                    id='vol_id',
+                    volume_id='vol_id',
+                    server_id='instance_uuid',
+                    device='/foo')],
+            display_name='vol_name',
+            display_description='vol_desc',
+            volume_type='vol_type',
+            snapshot_id='snap_id',
+            metadata=dict(
+                foo='bar',
+                baz='quux',
+                ),
+            )
+        text = serializer.serialize(dict(volume=raw_volume))
+
+        print text
+        tree = etree.fromstring(text)
+
+        self._verify_volume(raw_volume, tree)
+
+    def test_volume_index_detail_serializer(self):
+        serializer = volumes.VolumesTemplate()
+        raw_volumes = [dict(
+                id='vol1_id',
+                status='vol1_status',
+                size=1024,
+                availability_zone='vol1_availability',
+                created_at=datetime.datetime.now(),
+                attachments=[dict(
+                        id='vol1_id',
+                        volume_id='vol1_id',
+                        server_id='instance_uuid',
+                        device='/foo1')],
+                display_name='vol1_name',
+                display_description='vol1_desc',
+                volume_type='vol1_type',
+                snapshot_id='snap1_id',
+                metadata=dict(
+                    foo='vol1_foo',
+                    bar='vol1_bar',
+                    ),
+                ),
+                       dict(
+                id='vol2_id',
+                status='vol2_status',
+                size=1024,
+                availability_zone='vol2_availability',
+                created_at=datetime.datetime.now(),
+                attachments=[dict(
+                        id='vol2_id',
+                        volume_id='vol2_id',
+                        server_id='instance_uuid',
+                        device='/foo2')],
+                display_name='vol2_name',
+                display_description='vol2_desc',
+                volume_type='vol2_type',
+                snapshot_id='snap2_id',
+                metadata=dict(
+                    foo='vol2_foo',
+                    bar='vol2_bar',
+                    ),
+                )]
+        text = serializer.serialize(dict(volumes=raw_volumes))
+
+        print text
+        tree = etree.fromstring(text)
+
+        self.assertEqual(NS + 'volumes', tree.tag)
+        self.assertEqual(len(raw_volumes), len(tree))
+        for idx, child in enumerate(tree):
+            self._verify_volume(raw_volumes[idx], child)
diff --git a/cinder/tests/api/test_auth.py b/cinder/tests/api/test_auth.py
new file mode 100644
index 000000000..cfb8b7775
--- /dev/null
+++ b/cinder/tests/api/test_auth.py
@@ -0,0 +1,58 @@
+# Copyright (c) 2012 OpenStack, LLC
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import webob
+
+import cinder.api.auth
+from cinder import test
+
+
+class TestCinderKeystoneContextMiddleware(test.TestCase):
+
+    def setUp(self):
+        super(TestCinderKeystoneContextMiddleware, self).setUp()
+
+        @webob.dec.wsgify()
+        def fake_app(req):
+            self.context = req.environ['cinder.context']
+            return webob.Response()
+
+        self.context = None
+        self.middleware = cinder.api.auth.CinderKeystoneContext(fake_app)
+        self.request = webob.Request.blank('/')
+        self.request.headers['X_TENANT_ID'] = 'testtenantid'
+        self.request.headers['X_AUTH_TOKEN'] = 'testauthtoken'
+
+    def test_no_user_or_user_id(self):
+        response = self.request.get_response(self.middleware)
+        self.assertEqual(response.status, '401 Unauthorized')
+
+    def test_user_only(self):
+        self.request.headers['X_USER_ID'] = 'testuserid'
+        response = self.request.get_response(self.middleware)
+        self.assertEqual(response.status, '200 OK')
+        self.assertEqual(self.context.user_id, 'testuserid')
+
+    def test_user_id_only(self):
+        self.request.headers['X_USER'] = 'testuser'
+        response = self.request.get_response(self.middleware)
+        self.assertEqual(response.status, '200 OK')
+        self.assertEqual(self.context.user_id, 'testuser')
+
+    def test_user_id_trumps_user(self):
+        self.request.headers['X_USER_ID'] = 'testuserid'
+        self.request.headers['X_USER'] = 'testuser'
+        response = self.request.get_response(self.middleware)
+        self.assertEqual(response.status, '200 OK')
+        self.assertEqual(self.context.user_id, 'testuserid')
diff --git a/cinder/tests/api/test_sizelimit.py b/cinder/tests/api/test_sizelimit.py
new file mode 100644
index 000000000..280ee9c29
--- /dev/null
+++ b/cinder/tests/api/test_sizelimit.py
@@ -0,0 +1,51 @@
+# Copyright (c) 2012 OpenStack, LLC
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import webob
+
+import cinder.api.sizelimit
+from cinder import flags
+from cinder import test
+
+FLAGS = flags.FLAGS
+MAX_REQUEST_BODY_SIZE = FLAGS.osapi_max_request_body_size
+
+
+class TestRequestBodySizeLimiter(test.TestCase):
+
+    def setUp(self):
+        super(TestRequestBodySizeLimiter, self).setUp()
+
+        @webob.dec.wsgify()
+        def fake_app(req):
+            return webob.Response()
+
+        self.middleware = cinder.api.sizelimit.RequestBodySizeLimiter(fake_app)
+        self.request = webob.Request.blank('/', method='POST')
+
+    def test_content_length_acceptable(self):
+        self.request.headers['Content-Length'] = MAX_REQUEST_BODY_SIZE
+        self.request.body = "0" * MAX_REQUEST_BODY_SIZE
+        response = self.request.get_response(self.middleware)
+        self.assertEqual(response.status_int, 200)
+
+    def test_content_length_to_large(self):
+        self.request.headers['Content-Length'] = MAX_REQUEST_BODY_SIZE + 1
+        response = self.request.get_response(self.middleware)
+        self.assertEqual(response.status_int, 400)
+
+    def test_request_to_large(self):
+        self.request.body = "0" * (MAX_REQUEST_BODY_SIZE + 1)
+        response = self.request.get_response(self.middleware)
+        self.assertEqual(response.status_int, 400)
diff --git a/cinder/tests/api/test_wsgi.py b/cinder/tests/api/test_wsgi.py
new file mode 100644
index 000000000..c68f8158e
--- /dev/null
+++ b/cinder/tests/api/test_wsgi.py
@@ -0,0 +1,67 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# Copyright 2010 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+Test WSGI basics and provide some helper functions for other WSGI tests.
+"""
+
+from cinder import test
+
+import routes
+import webob
+
+from cinder import wsgi
+
+
+class Test(test.TestCase):
+
+    def test_debug(self):
+
+        class Application(wsgi.Application):
+            """Dummy application to test debug."""
+
+            def __call__(self, environ, start_response):
+                start_response("200", [("X-Test", "checking")])
+                return ['Test result']
+
+        application = wsgi.Debug(Application())
+        result = webob.Request.blank('/').get_response(application)
+        self.assertEqual(result.body, "Test result")
+
+    def test_router(self):
+
+        class Application(wsgi.Application):
+            """Test application to call from router."""
+
+            def __call__(self, environ, start_response):
+                start_response("200", [])
+                return ['Router result']
+
+        class Router(wsgi.Router):
+            """Test router."""
+
+            def __init__(self):
+                mapper = routes.Mapper()
+                mapper.connect("/test", controller=Application())
+                super(Router, self).__init__(mapper)
+
+        result = webob.Request.blank('/test').get_response(Router())
+        self.assertEqual(result.body, "Router result")
+        result = webob.Request.blank('/bad').get_response(Router())
+        self.assertNotEqual(result.body, "Router result")
diff --git a/cinder/tests/db/__init__.py b/cinder/tests/db/__init__.py
new file mode 100644
index 000000000..2d43aac42
--- /dev/null
+++ b/cinder/tests/db/__init__.py
@@ -0,0 +1,20 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+#    Copyright (c) 2010 Citrix Systems, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+:mod:`db` -- Stubs for DB API
+=============================
+"""
diff --git a/cinder/tests/db/fakes.py b/cinder/tests/db/fakes.py
new file mode 100644
index 000000000..5cd2284d2
--- /dev/null
+++ b/cinder/tests/db/fakes.py
@@ -0,0 +1,47 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 X.commerce, a business unit of eBay Inc.
+# Copyright 2010 OpenStack, LLC
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Stubouts, mocks and fixtures for the test suite"""
+
+from cinder import db
+from cinder import exception
+
+
+class FakeModel(object):
+    """Stubs out for model."""
+    def __init__(self, values):
+        self.values = values
+
+    def __getattr__(self, name):
+        return self.values[name]
+
+    def __getitem__(self, key):
+        if key in self.values:
+            return self.values[key]
+        else:
+            raise NotImplementedError()
+
+    def __repr__(self):
+        return '<FakeModel: %s>' % self.values
+
+
+def stub_out(stubs, funcs):
+    """Set the stubs in mapping in the db api."""
+    for func in funcs:
+        func_name = '_'.join(func.__name__.split('_')[1:])
+        stubs.Set(db, func_name, func)
diff --git a/cinder/tests/declare_flags.py b/cinder/tests/declare_flags.py
new file mode 100644
index 000000000..ee4733fc1
--- /dev/null
+++ b/cinder/tests/declare_flags.py
@@ -0,0 +1,23 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from cinder import flags
+from cinder.openstack.common import cfg
+
+FLAGS = flags.FLAGS
+FLAGS.register_opt(cfg.IntOpt('answer', default=42, help='test flag'))
diff --git a/cinder/tests/fake_flags.py b/cinder/tests/fake_flags.py
new file mode 100644
index 000000000..89d0f84f7
--- /dev/null
+++ b/cinder/tests/fake_flags.py
@@ -0,0 +1,34 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from cinder import flags
+
+FLAGS = flags.FLAGS
+
+flags.DECLARE('volume_driver', 'cinder.volume.manager')
+FLAGS.set_default('volume_driver', 'cinder.volume.driver.FakeISCSIDriver')
+FLAGS.set_default('connection_type', 'fake')
+FLAGS.set_default('fake_rabbit', True)
+FLAGS.set_default('rpc_backend', 'cinder.rpc.impl_fake')
+flags.DECLARE('iscsi_num_targets', 'cinder.volume.driver')
+FLAGS.set_default('iscsi_num_targets', 8)
+FLAGS.set_default('verbose', True)
+FLAGS.set_default('sql_connection', "sqlite://")
+FLAGS.set_default('sqlite_synchronous', False)
+flags.DECLARE('policy_file', 'cinder.policy')
+FLAGS.set_default('policy_file', 'cinder/tests/policy.json')
diff --git a/cinder/tests/fake_utils.py b/cinder/tests/fake_utils.py
new file mode 100644
index 000000000..02f0e14ca
--- /dev/null
+++ b/cinder/tests/fake_utils.py
@@ -0,0 +1,112 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 Citrix Systems, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""This modules stubs out functions in cinder.utils."""
+
+import re
+
+from eventlet import greenthread
+
+from cinder import exception
+from cinder import log as logging
+from cinder import utils
+
+LOG = logging.getLogger(__name__)
+
+_fake_execute_repliers = []
+_fake_execute_log = []
+
+
+def fake_execute_get_log():
+    return _fake_execute_log
+
+
+def fake_execute_clear_log():
+    global _fake_execute_log
+    _fake_execute_log = []
+
+
+def fake_execute_set_repliers(repliers):
+    """Allows the client to configure replies to commands."""
+    global _fake_execute_repliers
+    _fake_execute_repliers = repliers
+
+
+def fake_execute_default_reply_handler(*ignore_args, **ignore_kwargs):
+    """A reply handler for commands that haven't been added to the reply list.
+
+    Returns empty strings for stdout and stderr.
+
+    """
+    return '', ''
+
+
+def fake_execute(*cmd_parts, **kwargs):
+    """This function stubs out execute.
+
+    It optionally executes a preconfigued function to return expected data.
+
+    """
+    global _fake_execute_repliers
+
+    process_input = kwargs.get('process_input', None)
+    check_exit_code = kwargs.get('check_exit_code', 0)
+    delay_on_retry = kwargs.get('delay_on_retry', True)
+    attempts = kwargs.get('attempts', 1)
+    run_as_root = kwargs.get('run_as_root', False)
+    cmd_str = ' '.join(str(part) for part in cmd_parts)
+
+    LOG.debug(_("Faking execution of cmd (subprocess): %s"), cmd_str)
+    _fake_execute_log.append(cmd_str)
+
+    reply_handler = fake_execute_default_reply_handler
+
+    for fake_replier in _fake_execute_repliers:
+        if re.match(fake_replier[0], cmd_str):
+            reply_handler = fake_replier[1]
+            LOG.debug(_('Faked command matched %s') % fake_replier[0])
+            break
+
+    if isinstance(reply_handler, basestring):
+        # If the reply handler is a string, return it as stdout
+        reply = reply_handler, ''
+    else:
+        try:
+            # Alternative is a function, so call it
+            reply = reply_handler(cmd_parts,
+                                  process_input=process_input,
+                                  delay_on_retry=delay_on_retry,
+                                  attempts=attempts,
+                                  run_as_root=run_as_root,
+                                  check_exit_code=check_exit_code)
+        except exception.ProcessExecutionError as e:
+            LOG.debug(_('Faked command raised an exception %s'), e)
+            raise
+
+    stdout = reply[0]
+    stderr = reply[1]
+    LOG.debug(_("Reply to faked command is stdout='%(stdout)s' "
+                "stderr='%(stderr)s'") % locals())
+
+    # Replicate the sleep call in the real function
+    greenthread.sleep(0)
+    return reply
+
+
+def stub_out_utils_execute(stubs):
+    fake_execute_set_repliers([])
+    fake_execute_clear_log()
+    stubs.Set(utils, 'execute', fake_execute)
diff --git a/cinder/tests/integrated/__init__.py b/cinder/tests/integrated/__init__.py
new file mode 100644
index 000000000..7c17b5ad7
--- /dev/null
+++ b/cinder/tests/integrated/__init__.py
@@ -0,0 +1,22 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+#    Copyright (c) 2011 Justin Santa Barbara
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+:mod:`integrated` -- Tests whole systems, using mock services where needed
+=================================
+"""
+# NOTE(vish): this forces the fixtures from tests/__init.py:setup() to work
+from cinder.tests import *
diff --git a/cinder/tests/integrated/api/__init__.py b/cinder/tests/integrated/api/__init__.py
new file mode 100644
index 000000000..5798ab3d1
--- /dev/null
+++ b/cinder/tests/integrated/api/__init__.py
@@ -0,0 +1,20 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+#    Copyright (c) 2011 Justin Santa Barbara
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+:mod:`api` -- OpenStack API client, for testing rather than production
+=================================
+"""
diff --git a/cinder/tests/integrated/api/client.py b/cinder/tests/integrated/api/client.py
new file mode 100644
index 000000000..51e247d4f
--- /dev/null
+++ b/cinder/tests/integrated/api/client.py
@@ -0,0 +1,217 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+#    Copyright (c) 2011 Justin Santa Barbara
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import json
+import httplib
+import urllib
+import urlparse
+
+from cinder import log as logging
+
+
+LOG = logging.getLogger(__name__)
+
+
+class OpenStackApiException(Exception):
+    def __init__(self, message=None, response=None):
+        self.response = response
+        if not message:
+            message = 'Unspecified error'
+
+        if response:
+            _status = response.status
+            _body = response.read()
+
+            message = _('%(message)s\nStatus Code: %(_status)s\n'
+                        'Body: %(_body)s') % locals()
+
+        super(OpenStackApiException, self).__init__(message)
+
+
+class OpenStackApiAuthenticationException(OpenStackApiException):
+    def __init__(self, response=None, message=None):
+        if not message:
+            message = _("Authentication error")
+        super(OpenStackApiAuthenticationException, self).__init__(message,
+                                                                  response)
+
+
+class OpenStackApiAuthorizationException(OpenStackApiException):
+    def __init__(self, response=None, message=None):
+        if not message:
+            message = _("Authorization error")
+        super(OpenStackApiAuthorizationException, self).__init__(message,
+                                                                  response)
+
+
+class OpenStackApiNotFoundException(OpenStackApiException):
+    def __init__(self, response=None, message=None):
+        if not message:
+            message = _("Item not found")
+        super(OpenStackApiNotFoundException, self).__init__(message, response)
+
+
+class TestOpenStackClient(object):
+    """Simple OpenStack API Client.
+
+    This is a really basic OpenStack API client that is under our control,
+    so we can make changes / insert hooks for testing
+
+    """
+
+    def __init__(self, auth_user, auth_key, auth_uri):
+        super(TestOpenStackClient, self).__init__()
+        self.auth_result = None
+        self.auth_user = auth_user
+        self.auth_key = auth_key
+        self.auth_uri = auth_uri
+        # default project_id
+        self.project_id = 'openstack'
+
+    def request(self, url, method='GET', body=None, headers=None):
+        _headers = {'Content-Type': 'application/json'}
+        _headers.update(headers or {})
+
+        parsed_url = urlparse.urlparse(url)
+        port = parsed_url.port
+        hostname = parsed_url.hostname
+        scheme = parsed_url.scheme
+
+        if scheme == 'http':
+            conn = httplib.HTTPConnection(hostname,
+                                          port=port)
+        elif scheme == 'https':
+            conn = httplib.HTTPSConnection(hostname,
+                                           port=port)
+        else:
+            raise OpenStackApiException("Unknown scheme: %s" % url)
+
+        relative_url = parsed_url.path
+        if parsed_url.query:
+            relative_url = relative_url + "?" + parsed_url.query
+        LOG.info(_("Doing %(method)s on %(relative_url)s") % locals())
+        if body:
+            LOG.info(_("Body: %s") % body)
+
+        conn.request(method, relative_url, body, _headers)
+        response = conn.getresponse()
+        return response
+
+    def _authenticate(self):
+        if self.auth_result:
+            return self.auth_result
+
+        auth_uri = self.auth_uri
+        headers = {'X-Auth-User': self.auth_user,
+                   'X-Auth-Key': self.auth_key,
+                   'X-Auth-Project-Id': self.project_id}
+        response = self.request(auth_uri,
+                                headers=headers)
+
+        http_status = response.status
+        LOG.debug(_("%(auth_uri)s => code %(http_status)s") % locals())
+
+        if http_status == 401:
+            raise OpenStackApiAuthenticationException(response=response)
+
+        auth_headers = {}
+        for k, v in response.getheaders():
+            auth_headers[k] = v
+
+        self.auth_result = auth_headers
+        return self.auth_result
+
+    def api_request(self, relative_uri, check_response_status=None, **kwargs):
+        auth_result = self._authenticate()
+
+        # NOTE(justinsb): httplib 'helpfully' converts headers to lower case
+        base_uri = auth_result['x-server-management-url']
+
+        full_uri = '%s/%s' % (base_uri, relative_uri)
+
+        headers = kwargs.setdefault('headers', {})
+        headers['X-Auth-Token'] = auth_result['x-auth-token']
+
+        response = self.request(full_uri, **kwargs)
+
+        http_status = response.status
+        LOG.debug(_("%(relative_uri)s => code %(http_status)s") % locals())
+
+        if check_response_status:
+            if not http_status in check_response_status:
+                if http_status == 404:
+                    raise OpenStackApiNotFoundException(response=response)
+                elif http_status == 401:
+                    raise OpenStackApiAuthorizationException(response=response)
+                else:
+                    raise OpenStackApiException(
+                                        message=_("Unexpected status code"),
+                                        response=response)
+
+        return response
+
+    def _decode_json(self, response):
+        body = response.read()
+        LOG.debug(_("Decoding JSON: %s") % (body))
+        if body:
+            return json.loads(body)
+        else:
+            return ""
+
+    def api_get(self, relative_uri, **kwargs):
+        kwargs.setdefault('check_response_status', [200])
+        response = self.api_request(relative_uri, **kwargs)
+        return self._decode_json(response)
+
+    def api_post(self, relative_uri, body, **kwargs):
+        kwargs['method'] = 'POST'
+        if body:
+            headers = kwargs.setdefault('headers', {})
+            headers['Content-Type'] = 'application/json'
+            kwargs['body'] = json.dumps(body)
+
+        kwargs.setdefault('check_response_status', [200, 202])
+        response = self.api_request(relative_uri, **kwargs)
+        return self._decode_json(response)
+
+    def api_put(self, relative_uri, body, **kwargs):
+        kwargs['method'] = 'PUT'
+        if body:
+            headers = kwargs.setdefault('headers', {})
+            headers['Content-Type'] = 'application/json'
+            kwargs['body'] = json.dumps(body)
+
+        kwargs.setdefault('check_response_status', [200, 202, 204])
+        response = self.api_request(relative_uri, **kwargs)
+        return self._decode_json(response)
+
+    def api_delete(self, relative_uri, **kwargs):
+        kwargs['method'] = 'DELETE'
+        kwargs.setdefault('check_response_status', [200, 202, 204])
+        return self.api_request(relative_uri, **kwargs)
+
+    def get_volume(self, volume_id):
+        return self.api_get('/volumes/%s' % volume_id)['volume']
+
+    def get_volumes(self, detail=True):
+        rel_url = '/volumes/detail' if detail else '/volumes'
+        return self.api_get(rel_url)['volumes']
+
+    def post_volume(self, volume):
+        return self.api_post('/volumes', volume)['volume']
+
+    def delete_volume(self, volume_id):
+        return self.api_delete('/volumes/%s' % volume_id)
diff --git a/cinder/tests/integrated/integrated_helpers.py b/cinder/tests/integrated/integrated_helpers.py
new file mode 100644
index 000000000..4b243efc1
--- /dev/null
+++ b/cinder/tests/integrated/integrated_helpers.py
@@ -0,0 +1,130 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 Justin Santa Barbara
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+Provides common functionality for integrated unit tests
+"""
+
+import random
+import string
+
+from cinder.log import logging
+from cinder import service
+from cinder import test  # For the flags
+from cinder.tests.integrated.api import client
+from cinder import utils
+
+
+LOG = logging.getLogger(__name__)
+
+
+def generate_random_alphanumeric(length):
+    """Creates a random alphanumeric string of specified length."""
+    return ''.join(random.choice(string.ascii_uppercase + string.digits)
+                   for _x in range(length))
+
+
+def generate_random_numeric(length):
+    """Creates a random numeric string of specified length."""
+    return ''.join(random.choice(string.digits)
+                   for _x in range(length))
+
+
+def generate_new_element(items, prefix, numeric=False):
+    """Creates a random string with prefix, that is not in 'items' list."""
+    while True:
+        if numeric:
+            candidate = prefix + generate_random_numeric(8)
+        else:
+            candidate = prefix + generate_random_alphanumeric(8)
+        if not candidate in items:
+            return candidate
+        LOG.debug("Random collision on %s" % candidate)
+
+
+class _IntegratedTestBase(test.TestCase):
+    def setUp(self):
+        super(_IntegratedTestBase, self).setUp()
+
+        f = self._get_flags()
+        self.flags(**f)
+        self.flags(verbose=True)
+
+        # set up services
+        self.volume = self.start_service('volume')
+        self.scheduler = self.start_service('scheduler')
+
+        self._start_api_service()
+
+        self.api = client.TestOpenStackClient('fake', 'fake', self.auth_url)
+
+    def tearDown(self):
+        self.osapi.stop()
+        super(_IntegratedTestBase, self).tearDown()
+
+    def _start_api_service(self):
+        self.osapi = service.WSGIService("osapi_volume")
+        self.osapi.start()
+        # FIXME(ja): this is not the auth url - this is the service url
+        # FIXME(ja): this needs fixed in nova as well
+        self.auth_url = 'http://%s:%s/v1' % (self.osapi.host, self.osapi.port)
+        LOG.warn(self.auth_url)
+
+    def _get_flags(self):
+        """An opportunity to setup flags, before the services are started."""
+        f = {}
+
+        # Ensure tests only listen on localhost
+        f['osapi_volume_listen'] = '127.0.0.1'
+
+        # Auto-assign ports to allow concurrent tests
+        f['osapi_volume_listen_port'] = 0
+
+        return f
+
+    def get_unused_server_name(self):
+        servers = self.api.get_servers()
+        server_names = [server['name'] for server in servers]
+        return generate_new_element(server_names, 'server')
+
+    def get_invalid_image(self):
+        return str(utils.gen_uuid())
+
+    def _build_minimal_create_server_request(self):
+        server = {}
+
+        image = self.api.get_images()[0]
+        LOG.debug("Image: %s" % image)
+
+        if 'imageRef' in image:
+            image_href = image['imageRef']
+        else:
+            image_href = image['id']
+            image_href = 'http://fake.server/%s' % image_href
+
+        # We now have a valid imageId
+        server['imageRef'] = image_href
+
+        # Set a valid flavorId
+        flavor = self.api.get_flavors()[0]
+        LOG.debug("Using flavor: %s" % flavor)
+        server['flavorRef'] = 'http://fake.server/%s' % flavor['id']
+
+        # Set a valid server name
+        server_name = self.get_unused_server_name()
+        server['name'] = server_name
+        return server
diff --git a/cinder/tests/integrated/test_extensions.py b/cinder/tests/integrated/test_extensions.py
new file mode 100644
index 000000000..bcb921d83
--- /dev/null
+++ b/cinder/tests/integrated/test_extensions.py
@@ -0,0 +1,42 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 Justin Santa Barbara
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from cinder.api.openstack.volume import extensions
+from cinder import flags
+from cinder.log import logging
+from cinder.tests.integrated import integrated_helpers
+
+
+FLAGS = flags.FLAGS
+LOG = logging.getLogger(__name__)
+
+
+class ExtensionsTest(integrated_helpers._IntegratedTestBase):
+    def _get_flags(self):
+        f = super(ExtensionsTest, self)._get_flags()
+        f['osapi_volume_extension'] = FLAGS.osapi_volume_extension[:]
+        f['osapi_volume_extension'].append(
+            'cinder.tests.api.openstack.volume.extensions.'
+            'foxinsocks.Foxinsocks')
+        return f
+
+    def test_get_foxnsocks(self):
+        """Simple check that fox-n-socks works."""
+        response = self.api.api_request('/foxnsocks')
+        foxnsocks = response.read()
+        LOG.debug("foxnsocks: %s" % foxnsocks)
+        self.assertEqual('Try to say this Mr. Knox, sir...', foxnsocks)
diff --git a/cinder/tests/integrated/test_login.py b/cinder/tests/integrated/test_login.py
new file mode 100644
index 000000000..cd9fb7a16
--- /dev/null
+++ b/cinder/tests/integrated/test_login.py
@@ -0,0 +1,31 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 Justin Santa Barbara
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+
+from cinder.log import logging
+from cinder.tests.integrated import integrated_helpers
+
+
+LOG = logging.getLogger(__name__)
+
+
+class LoginTest(integrated_helpers._IntegratedTestBase):
+    def test_login(self):
+        """Simple check - we list volumes - so we know we're logged in."""
+        volumes = self.api.get_volumes()
+        for volume in volumes:
+            LOG.debug(_("volume: %s") % volume)
diff --git a/cinder/tests/integrated/test_volumes.py b/cinder/tests/integrated/test_volumes.py
new file mode 100644
index 000000000..f94d85604
--- /dev/null
+++ b/cinder/tests/integrated/test_volumes.py
@@ -0,0 +1,181 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 Justin Santa Barbara
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import unittest
+import time
+
+from cinder import service
+from cinder.log import logging
+from cinder.tests.integrated import integrated_helpers
+from cinder.tests.integrated.api import client
+from cinder.volume import driver
+
+
+LOG = logging.getLogger(__name__)
+
+
+class VolumesTest(integrated_helpers._IntegratedTestBase):
+    def setUp(self):
+        super(VolumesTest, self).setUp()
+        driver.LoggingVolumeDriver.clear_logs()
+
+    def _start_api_service(self):
+        self.osapi = service.WSGIService("osapi_volume")
+        self.osapi.start()
+        self.auth_url = 'http://%s:%s/v1' % (self.osapi.host, self.osapi.port)
+        LOG.warn(self.auth_url)
+
+    def _get_flags(self):
+        f = super(VolumesTest, self)._get_flags()
+        f['use_local_volumes'] = False  # Avoids calling local_path
+        f['volume_driver'] = 'cinder.volume.driver.LoggingVolumeDriver'
+        return f
+
+    def test_get_volumes_summary(self):
+        """Simple check that listing volumes works."""
+        volumes = self.api.get_volumes(False)
+        for volume in volumes:
+            LOG.debug("volume: %s" % volume)
+
+    def test_get_volumes(self):
+        """Simple check that listing volumes works."""
+        volumes = self.api.get_volumes()
+        for volume in volumes:
+            LOG.debug("volume: %s" % volume)
+
+    def _poll_while(self, volume_id, continue_states, max_retries=5):
+        """Poll (briefly) while the state is in continue_states."""
+        retries = 0
+        while True:
+            try:
+                found_volume = self.api.get_volume(volume_id)
+            except client.OpenStackApiNotFoundException:
+                found_volume = None
+                LOG.debug("Got 404, proceeding")
+                break
+
+            LOG.debug("Found %s" % found_volume)
+
+            self.assertEqual(volume_id, found_volume['id'])
+
+            if not found_volume['status'] in continue_states:
+                break
+
+            time.sleep(1)
+            retries = retries + 1
+            if retries > max_retries:
+                break
+        return found_volume
+
+    def test_create_and_delete_volume(self):
+        """Creates and deletes a volume."""
+
+        # Create volume
+        created_volume = self.api.post_volume({'volume': {'size': 1}})
+        LOG.debug("created_volume: %s" % created_volume)
+        self.assertTrue(created_volume['id'])
+        created_volume_id = created_volume['id']
+
+        # Check it's there
+        found_volume = self.api.get_volume(created_volume_id)
+        self.assertEqual(created_volume_id, found_volume['id'])
+
+        # It should also be in the all-volume list
+        volumes = self.api.get_volumes()
+        volume_names = [volume['id'] for volume in volumes]
+        self.assertTrue(created_volume_id in volume_names)
+
+        # Wait (briefly) for creation. Delay is due to the 'message queue'
+        found_volume = self._poll_while(created_volume_id, ['creating'])
+
+        # It should be available...
+        self.assertEqual('available', found_volume['status'])
+
+        # Delete the volume
+        self.api.delete_volume(created_volume_id)
+
+        # Wait (briefly) for deletion. Delay is due to the 'message queue'
+        found_volume = self._poll_while(created_volume_id, ['deleting'])
+
+        # Should be gone
+        self.assertFalse(found_volume)
+
+        LOG.debug("Logs: %s" % driver.LoggingVolumeDriver.all_logs())
+
+        create_actions = driver.LoggingVolumeDriver.logs_like(
+                            'create_volume',
+                            id=created_volume_id)
+        LOG.debug("Create_Actions: %s" % create_actions)
+
+        self.assertEquals(1, len(create_actions))
+        create_action = create_actions[0]
+        self.assertEquals(create_action['id'], created_volume_id)
+        self.assertEquals(create_action['availability_zone'], 'cinder')
+        self.assertEquals(create_action['size'], 1)
+
+        export_actions = driver.LoggingVolumeDriver.logs_like(
+                            'create_export',
+                            id=created_volume_id)
+        self.assertEquals(1, len(export_actions))
+        export_action = export_actions[0]
+        self.assertEquals(export_action['id'], created_volume_id)
+        self.assertEquals(export_action['availability_zone'], 'cinder')
+
+        delete_actions = driver.LoggingVolumeDriver.logs_like(
+                            'delete_volume',
+                            id=created_volume_id)
+        self.assertEquals(1, len(delete_actions))
+        delete_action = export_actions[0]
+        self.assertEquals(delete_action['id'], created_volume_id)
+
+    def test_create_volume_with_metadata(self):
+        """Creates a volume with metadata."""
+
+        # Create volume
+        metadata = {'key1': 'value1',
+                    'key2': 'value2'}
+        created_volume = self.api.post_volume(
+            {'volume': {'size': 1,
+                        'metadata': metadata}})
+        LOG.debug("created_volume: %s" % created_volume)
+        self.assertTrue(created_volume['id'])
+        created_volume_id = created_volume['id']
+
+        # Check it's there and metadata present
+        found_volume = self.api.get_volume(created_volume_id)
+        self.assertEqual(created_volume_id, found_volume['id'])
+        self.assertEqual(metadata, found_volume['metadata'])
+
+    def test_create_volume_in_availability_zone(self):
+        """Creates a volume in availability_zone."""
+
+        # Create volume
+        availability_zone = 'zone1:host1'
+        created_volume = self.api.post_volume(
+            {'volume': {'size': 1,
+                        'availability_zone': availability_zone}})
+        LOG.debug("created_volume: %s" % created_volume)
+        self.assertTrue(created_volume['id'])
+        created_volume_id = created_volume['id']
+
+        # Check it's there and availability zone present
+        found_volume = self.api.get_volume(created_volume_id)
+        self.assertEqual(created_volume_id, found_volume['id'])
+        self.assertEqual(availability_zone, found_volume['availability_zone'])
+
+if __name__ == "__main__":
+    unittest.main()
diff --git a/cinder/tests/integrated/test_xml.py b/cinder/tests/integrated/test_xml.py
new file mode 100644
index 000000000..1277b80aa
--- /dev/null
+++ b/cinder/tests/integrated/test_xml.py
@@ -0,0 +1,52 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 Justin Santa Barbara
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from lxml import etree
+
+from cinder.log import logging
+from cinder.tests.integrated import integrated_helpers
+from cinder.api.openstack import common
+from cinder.api.openstack import xmlutil
+
+
+LOG = logging.getLogger(__name__)
+
+
+class XmlTests(integrated_helpers._IntegratedTestBase):
+    """"Some basic XML sanity checks."""
+
+    # FIXME(ja): does cinder need limits?
+    # def test_namespace_limits(self):
+    #     headers = {}
+    #     headers['Accept'] = 'application/xml'
+
+    #     response = self.api.api_request('/limits', headers=headers)
+    #     data = response.read()
+    #     LOG.debug("data: %s" % data)
+    #     root = etree.XML(data)
+    #     self.assertEqual(root.nsmap.get(None), xmlutil.XMLNS_COMMON_V10)
+
+    def test_namespace_volumes(self):
+        """/servers should have v1.1 namespace (has changed in 1.1)."""
+        headers = {}
+        headers['Accept'] = 'application/xml'
+
+        response = self.api.api_request('/volumes', headers=headers)
+        data = response.read()
+        LOG.warn("data: %s" % data)
+        root = etree.XML(data)
+        self.assertEqual(root.nsmap.get(None), common.XML_NS_V1)
diff --git a/cinder/tests/monkey_patch_example/__init__.py b/cinder/tests/monkey_patch_example/__init__.py
new file mode 100644
index 000000000..25cf9ccfe
--- /dev/null
+++ b/cinder/tests/monkey_patch_example/__init__.py
@@ -0,0 +1,33 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""Example Module for testing utils.monkey_patch()."""
+
+
+CALLED_FUNCTION = []
+
+
+def example_decorator(name, function):
+    """ decorator for notify which is used from utils.monkey_patch()
+
+        :param name: name of the function
+        :param function: - object of the function
+        :returns: function -- decorated function
+    """
+    def wrapped_func(*args, **kwarg):
+        CALLED_FUNCTION.append(name)
+        return function(*args, **kwarg)
+    return wrapped_func
diff --git a/cinder/tests/monkey_patch_example/example_a.py b/cinder/tests/monkey_patch_example/example_a.py
new file mode 100644
index 000000000..21e79bcb0
--- /dev/null
+++ b/cinder/tests/monkey_patch_example/example_a.py
@@ -0,0 +1,29 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""Example Module A for testing utils.monkey_patch()."""
+
+
+def example_function_a():
+    return 'Example function'
+
+
+class ExampleClassA():
+    def example_method(self):
+        return 'Example method'
+
+    def example_method_add(self, arg1, arg2):
+        return arg1 + arg2
diff --git a/cinder/tests/monkey_patch_example/example_b.py b/cinder/tests/monkey_patch_example/example_b.py
new file mode 100644
index 000000000..9d8f6d339
--- /dev/null
+++ b/cinder/tests/monkey_patch_example/example_b.py
@@ -0,0 +1,30 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Example Module B for testing utils.monkey_patch()."""
+
+
+def example_function_b():
+    return 'Example function'
+
+
+class ExampleClassB():
+    def example_method(self):
+        return 'Example method'
+
+    def example_method_add(self, arg1, arg2):
+        return arg1 + arg2
diff --git a/cinder/tests/notifier/__init__.py b/cinder/tests/notifier/__init__.py
new file mode 100644
index 000000000..643e7c463
--- /dev/null
+++ b/cinder/tests/notifier/__init__.py
@@ -0,0 +1,16 @@
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from cinder.tests import *
diff --git a/cinder/tests/notifier/test_capacity_notifier.py b/cinder/tests/notifier/test_capacity_notifier.py
new file mode 100644
index 000000000..298de5f60
--- /dev/null
+++ b/cinder/tests/notifier/test_capacity_notifier.py
@@ -0,0 +1,59 @@
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import cinder.db.api
+from cinder.notifier import capacity_notifier as cn
+from cinder import test
+from cinder import utils
+
+
+class CapacityNotifierTestCase(test.TestCase):
+    """Test case for the Capacity updating notifier."""
+
+    def _make_msg(self, host, event):
+        usage_info = dict(memory_mb=123, disk_gb=456)
+        payload = utils.to_primitive(usage_info, convert_instances=True)
+        return dict(
+            publisher_id="compute.%s" % host,
+            event_type="compute.instance.%s" % event,
+            payload=payload
+        )
+
+    def test_event_type(self):
+        msg = self._make_msg("myhost", "mymethod")
+        msg['event_type'] = 'random'
+        self.assertFalse(cn.notify(msg))
+
+    def test_bad_event_suffix(self):
+        msg = self._make_msg("myhost", "mymethod.badsuffix")
+        self.assertFalse(cn.notify(msg))
+
+    def test_bad_publisher_id(self):
+        msg = self._make_msg("myhost", "mymethod.start")
+        msg['publisher_id'] = 'badpublisher'
+        self.assertFalse(cn.notify(msg))
+
+    def test_update_called(self):
+        def _verify_called(host, context, free_ram_mb_delta,
+                           free_disk_gb_delta, work_delta, vm_delta):
+            self.assertEquals(free_ram_mb_delta, 123)
+            self.assertEquals(free_disk_gb_delta, 456)
+            self.assertEquals(vm_delta, -1)
+            self.assertEquals(work_delta, -1)
+
+        self.stubs.Set(cinder.db.api, "compute_node_utilization_update",
+                       _verify_called)
+        msg = self._make_msg("myhost", "delete.end")
+        self.assertTrue(cn.notify(msg))
diff --git a/cinder/tests/notifier/test_list_notifier.py b/cinder/tests/notifier/test_list_notifier.py
new file mode 100644
index 000000000..83e380764
--- /dev/null
+++ b/cinder/tests/notifier/test_list_notifier.py
@@ -0,0 +1,84 @@
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import cinder
+from cinder import log as logging
+import cinder.notifier.api
+import cinder.notifier.log_notifier
+import cinder.notifier.no_op_notifier
+from cinder.notifier import list_notifier
+from cinder import test
+
+
+class NotifierListTestCase(test.TestCase):
+    """Test case for notifications"""
+
+    def setUp(self):
+        super(NotifierListTestCase, self).setUp()
+        list_notifier._reset_drivers()
+        # Mock log to add one to exception_count when log.exception is called
+
+        def mock_exception(cls, *args):
+            self.exception_count += 1
+
+        self.exception_count = 0
+        list_notifier_log = logging.getLogger('cinder.notifier.list_notifier')
+        self.stubs.Set(list_notifier_log, "exception", mock_exception)
+        # Mock no_op notifier to add one to notify_count when called.
+
+        def mock_notify(cls, *args):
+            self.notify_count += 1
+
+        self.notify_count = 0
+        self.stubs.Set(cinder.notifier.no_op_notifier, 'notify', mock_notify)
+        # Mock log_notifier to raise RuntimeError when called.
+
+        def mock_notify2(cls, *args):
+            raise RuntimeError("Bad notifier.")
+
+        self.stubs.Set(cinder.notifier.log_notifier, 'notify', mock_notify2)
+
+    def tearDown(self):
+        list_notifier._reset_drivers()
+        super(NotifierListTestCase, self).tearDown()
+
+    def test_send_notifications_successfully(self):
+        self.flags(notification_driver='cinder.notifier.list_notifier',
+                   list_notifier_drivers=['cinder.notifier.no_op_notifier',
+                                          'cinder.notifier.no_op_notifier'])
+        cinder.notifier.api.notify('publisher_id', 'event_type',
+                cinder.notifier.api.WARN, dict(a=3))
+        self.assertEqual(self.notify_count, 2)
+        self.assertEqual(self.exception_count, 0)
+
+    def test_send_notifications_with_errors(self):
+
+        self.flags(notification_driver='cinder.notifier.list_notifier',
+                   list_notifier_drivers=['cinder.notifier.no_op_notifier',
+                                          'cinder.notifier.log_notifier'])
+        cinder.notifier.api.notify('publisher_id',
+                'event_type', cinder.notifier.api.WARN, dict(a=3))
+        self.assertEqual(self.notify_count, 1)
+        self.assertEqual(self.exception_count, 1)
+
+    def test_when_driver_fails_to_import(self):
+        self.flags(notification_driver='cinder.notifier.list_notifier',
+                   list_notifier_drivers=['cinder.notifier.no_op_notifier',
+                                          'cinder.notifier.logo_notifier',
+                                          'fdsjgsdfhjkhgsfkj'])
+        cinder.notifier.api.notify('publisher_id',
+                'event_type', cinder.notifier.api.WARN, dict(a=3))
+        self.assertEqual(self.exception_count, 2)
+        self.assertEqual(self.notify_count, 1)
diff --git a/cinder/tests/policy.json b/cinder/tests/policy.json
new file mode 100644
index 000000000..940dedb45
--- /dev/null
+++ b/cinder/tests/policy.json
@@ -0,0 +1,25 @@
+{
+    "volume:create": [],
+    "volume:get": [],
+    "volume:get_all": [],
+    "volume:get_volume_metadata": [],
+    "volume:delete": [],
+    "volume:update": [],
+    "volume:delete_volume_metadata": [],
+    "volume:update_volume_metadata": [],
+    "volume:attach": [],
+    "volume:detach": [],
+    "volume:reserve_volume": [],
+    "volume:unreserve_volume": [],
+    "volume:check_attach": [],
+    "volume:check_detach": [],
+    "volume:initialize_connection": [],
+    "volume:terminate_connection": [],
+    "volume:create_snapshot": [],
+    "volume:delete_snapshot": [],
+    "volume:get_snapshot": [],
+    "volume:get_all_snapshots": [],
+
+    "volume_extension:types_manage": [],
+    "volume_extension:types_extra_specs": []
+}
diff --git a/cinder/tests/rpc/__init__.py b/cinder/tests/rpc/__init__.py
new file mode 100644
index 000000000..3be5ce944
--- /dev/null
+++ b/cinder/tests/rpc/__init__.py
@@ -0,0 +1,19 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+# NOTE(vish): this forces the fixtures from tests/__init.py:setup() to work
+from cinder.tests import *
diff --git a/cinder/tests/rpc/common.py b/cinder/tests/rpc/common.py
new file mode 100644
index 000000000..4de1be144
--- /dev/null
+++ b/cinder/tests/rpc/common.py
@@ -0,0 +1,239 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+Unit Tests for remote procedure calls shared between all implementations
+"""
+
+import time
+
+from eventlet import greenthread
+import nose
+
+from cinder import context
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+from cinder.rpc import amqp as rpc_amqp
+from cinder.rpc import common as rpc_common
+from cinder import test
+
+
+FLAGS = flags.FLAGS
+LOG = logging.getLogger(__name__)
+
+
+class BaseRpcTestCase(test.TestCase):
+    def setUp(self, supports_timeouts=True):
+        super(BaseRpcTestCase, self).setUp()
+        self.conn = self.rpc.create_connection(FLAGS, True)
+        self.receiver = TestReceiver()
+        self.conn.create_consumer('test', self.receiver, False)
+        self.conn.consume_in_thread()
+        self.context = context.get_admin_context()
+        self.supports_timeouts = supports_timeouts
+
+    def tearDown(self):
+        self.conn.close()
+        super(BaseRpcTestCase, self).tearDown()
+
+    def test_call_succeed(self):
+        value = 42
+        result = self.rpc.call(FLAGS, self.context, 'test',
+                               {"method": "echo", "args": {"value": value}})
+        self.assertEqual(value, result)
+
+    def test_call_succeed_despite_multiple_returns_yield(self):
+        value = 42
+        result = self.rpc.call(FLAGS, self.context, 'test',
+                          {"method": "echo_three_times_yield",
+                           "args": {"value": value}})
+        self.assertEqual(value + 2, result)
+
+    def test_multicall_succeed_once(self):
+        value = 42
+        result = self.rpc.multicall(FLAGS, self.context,
+                              'test',
+                              {"method": "echo",
+                               "args": {"value": value}})
+        for i, x in enumerate(result):
+            if i > 0:
+                self.fail('should only receive one response')
+            self.assertEqual(value + i, x)
+
+    def test_multicall_three_nones(self):
+        value = 42
+        result = self.rpc.multicall(FLAGS, self.context,
+                              'test',
+                              {"method": "multicall_three_nones",
+                               "args": {"value": value}})
+        for i, x in enumerate(result):
+            self.assertEqual(x, None)
+        # i should have been 0, 1, and finally 2:
+        self.assertEqual(i, 2)
+
+    def test_multicall_succeed_three_times_yield(self):
+        value = 42
+        result = self.rpc.multicall(FLAGS, self.context,
+                              'test',
+                              {"method": "echo_three_times_yield",
+                               "args": {"value": value}})
+        for i, x in enumerate(result):
+            self.assertEqual(value + i, x)
+
+    def test_context_passed(self):
+        """Makes sure a context is passed through rpc call."""
+        value = 42
+        result = self.rpc.call(FLAGS, self.context,
+                          'test', {"method": "context",
+                                   "args": {"value": value}})
+        self.assertEqual(self.context.to_dict(), result)
+
+    def test_nested_calls(self):
+        """Test that we can do an rpc.call inside another call."""
+        class Nested(object):
+            @staticmethod
+            def echo(context, queue, value):
+                """Calls echo in the passed queue"""
+                LOG.debug(_("Nested received %(queue)s, %(value)s")
+                        % locals())
+                # TODO(comstud):
+                # so, it will replay the context and use the same REQID?
+                # that's bizarre.
+                ret = self.rpc.call(FLAGS, context,
+                               queue,
+                               {"method": "echo",
+                                "args": {"value": value}})
+                LOG.debug(_("Nested return %s"), ret)
+                return value
+
+        nested = Nested()
+        conn = self.rpc.create_connection(FLAGS, True)
+        conn.create_consumer('nested', nested, False)
+        conn.consume_in_thread()
+        value = 42
+        result = self.rpc.call(FLAGS, self.context,
+                          'nested', {"method": "echo",
+                                     "args": {"queue": "test",
+                                              "value": value}})
+        conn.close()
+        self.assertEqual(value, result)
+
+    def test_call_timeout(self):
+        """Make sure rpc.call will time out"""
+        if not self.supports_timeouts:
+            raise nose.SkipTest(_("RPC backend does not support timeouts"))
+
+        value = 42
+        self.assertRaises(rpc_common.Timeout,
+                          self.rpc.call,
+                          FLAGS, self.context,
+                          'test',
+                          {"method": "block",
+                           "args": {"value": value}}, timeout=1)
+        try:
+            self.rpc.call(FLAGS, self.context,
+                     'test',
+                     {"method": "block",
+                      "args": {"value": value}},
+                     timeout=1)
+            self.fail("should have thrown Timeout")
+        except rpc_common.Timeout as exc:
+            pass
+
+
+class BaseRpcAMQPTestCase(BaseRpcTestCase):
+    """Base test class for all AMQP-based RPC tests"""
+    def test_proxycallback_handles_exceptions(self):
+        """Make sure exceptions unpacking messages don't cause hangs."""
+        orig_unpack = rpc_amqp.unpack_context
+
+        info = {'unpacked': False}
+
+        def fake_unpack_context(*args, **kwargs):
+            info['unpacked'] = True
+            raise test.TestingException('moo')
+
+        self.stubs.Set(rpc_amqp, 'unpack_context', fake_unpack_context)
+
+        value = 41
+        self.rpc.cast(FLAGS, self.context, 'test',
+                      {"method": "echo", "args": {"value": value}})
+
+        # Wait for the cast to complete.
+        for x in xrange(50):
+            if info['unpacked']:
+                break
+            greenthread.sleep(0.1)
+        else:
+            self.fail("Timeout waiting for message to be consued")
+
+        # Now see if we get a response even though we raised an
+        # exception for the cast above.
+        self.stubs.Set(rpc_amqp, 'unpack_context', orig_unpack)
+
+        value = 42
+        result = self.rpc.call(FLAGS, self.context, 'test',
+                {"method": "echo",
+                 "args": {"value": value}})
+        self.assertEqual(value, result)
+
+
+class TestReceiver(object):
+    """Simple Proxy class so the consumer has methods to call.
+
+    Uses static methods because we aren't actually storing any state.
+
+    """
+
+    @staticmethod
+    def echo(context, value):
+        """Simply returns whatever value is sent in."""
+        LOG.debug(_("Received %s"), value)
+        return value
+
+    @staticmethod
+    def context(context, value):
+        """Returns dictionary version of context."""
+        LOG.debug(_("Received %s"), context)
+        return context.to_dict()
+
+    @staticmethod
+    def multicall_three_nones(context, value):
+        yield None
+        yield None
+        yield None
+
+    @staticmethod
+    def echo_three_times_yield(context, value):
+        yield value
+        yield value + 1
+        yield value + 2
+
+    @staticmethod
+    def fail(context, value):
+        """Raises an exception with the value sent in."""
+        raise NotImplementedError(value)
+
+    @staticmethod
+    def fail_converted(context, value):
+        """Raises an exception with the value sent in."""
+        raise exception.ConvertedException(explanation=value)
+
+    @staticmethod
+    def block(context, value):
+        time.sleep(2)
diff --git a/cinder/tests/rpc/test_common.py b/cinder/tests/rpc/test_common.py
new file mode 100644
index 000000000..5fd257a6b
--- /dev/null
+++ b/cinder/tests/rpc/test_common.py
@@ -0,0 +1,147 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 OpenStack, LLC
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+Unit Tests for 'common' functons used through rpc code.
+"""
+
+import json
+import sys
+
+from cinder import context
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+from cinder import test
+from cinder.rpc import amqp as rpc_amqp
+from cinder.rpc import common as rpc_common
+from cinder.tests.rpc import common
+
+FLAGS = flags.FLAGS
+LOG = logging.getLogger(__name__)
+
+
+def raise_exception():
+    raise Exception("test")
+
+
+class FakeUserDefinedException(Exception):
+    def __init__(self):
+        Exception.__init__(self, "Test Message")
+
+
+class RpcCommonTestCase(test.TestCase):
+    def test_serialize_remote_exception(self):
+        expected = {
+            'class': 'Exception',
+            'module': 'exceptions',
+            'message': 'test',
+        }
+
+        try:
+            raise_exception()
+        except Exception as exc:
+            failure = rpc_common.serialize_remote_exception(sys.exc_info())
+
+        failure = json.loads(failure)
+        #assure the traceback was added
+        self.assertEqual(expected['class'], failure['class'])
+        self.assertEqual(expected['module'], failure['module'])
+        self.assertEqual(expected['message'], failure['message'])
+
+    def test_serialize_remote_cinder_exception(self):
+        def raise_cinder_exception():
+            raise exception.CinderException("test", code=500)
+
+        expected = {
+            'class': 'CinderException',
+            'module': 'cinder.exception',
+            'kwargs': {'code': 500},
+            'message': 'test'
+        }
+
+        try:
+            raise_cinder_exception()
+        except Exception as exc:
+            failure = rpc_common.serialize_remote_exception(sys.exc_info())
+
+        failure = json.loads(failure)
+        #assure the traceback was added
+        self.assertEqual(expected['class'], failure['class'])
+        self.assertEqual(expected['module'], failure['module'])
+        self.assertEqual(expected['kwargs'], failure['kwargs'])
+        self.assertEqual(expected['message'], failure['message'])
+
+    def test_deserialize_remote_exception(self):
+        failure = {
+            'class': 'CinderException',
+            'module': 'cinder.exception',
+            'message': 'test message',
+            'tb': ['raise CinderException'],
+        }
+        serialized = json.dumps(failure)
+
+        after_exc = rpc_common.deserialize_remote_exception(FLAGS, serialized)
+        self.assertTrue(isinstance(after_exc, exception.CinderException))
+        self.assertTrue('test message' in unicode(after_exc))
+        #assure the traceback was added
+        self.assertTrue('raise CinderException' in unicode(after_exc))
+
+    def test_deserialize_remote_exception_bad_module(self):
+        failure = {
+            'class': 'popen2',
+            'module': 'os',
+            'kwargs': {'cmd': '/bin/echo failed'},
+            'message': 'foo',
+        }
+        serialized = json.dumps(failure)
+
+        after_exc = rpc_common.deserialize_remote_exception(FLAGS, serialized)
+        self.assertTrue(isinstance(after_exc, rpc_common.RemoteError))
+
+    def test_deserialize_remote_exception_user_defined_exception(self):
+        """Ensure a user defined exception can be deserialized."""
+        self.flags(allowed_rpc_exception_modules=[self.__class__.__module__])
+        failure = {
+            'class': 'FakeUserDefinedException',
+            'module': self.__class__.__module__,
+            'tb': ['raise FakeUserDefinedException'],
+        }
+        serialized = json.dumps(failure)
+
+        after_exc = rpc_common.deserialize_remote_exception(FLAGS, serialized)
+        self.assertTrue(isinstance(after_exc, FakeUserDefinedException))
+        #assure the traceback was added
+        self.assertTrue('raise FakeUserDefinedException' in unicode(after_exc))
+
+    def test_deserialize_remote_exception_cannot_recreate(self):
+        """Ensure a RemoteError is returned on initialization failure.
+
+        If an exception cannot be recreated with it's original class then a
+        RemoteError with the exception informations should still be returned.
+
+        """
+        self.flags(allowed_rpc_exception_modules=[self.__class__.__module__])
+        failure = {
+            'class': 'FakeIDontExistException',
+            'module': self.__class__.__module__,
+            'tb': ['raise FakeIDontExistException'],
+        }
+        serialized = json.dumps(failure)
+
+        after_exc = rpc_common.deserialize_remote_exception(FLAGS, serialized)
+        self.assertTrue(isinstance(after_exc, rpc_common.RemoteError))
+        #assure the traceback was added
+        self.assertTrue('raise FakeIDontExistException' in unicode(after_exc))
diff --git a/cinder/tests/rpc/test_fake.py b/cinder/tests/rpc/test_fake.py
new file mode 100644
index 000000000..4f6722ab3
--- /dev/null
+++ b/cinder/tests/rpc/test_fake.py
@@ -0,0 +1,33 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+Unit Tests for remote procedure calls using fake_impl
+"""
+
+from cinder import log as logging
+from cinder.rpc import impl_fake
+from cinder.tests.rpc import common
+
+
+LOG = logging.getLogger(__name__)
+
+
+class RpcFakeTestCase(common.BaseRpcTestCase):
+    def setUp(self):
+        self.rpc = impl_fake
+        super(RpcFakeTestCase, self).setUp()
diff --git a/cinder/tests/rpc/test_kombu.py b/cinder/tests/rpc/test_kombu.py
new file mode 100644
index 000000000..3ce5337c6
--- /dev/null
+++ b/cinder/tests/rpc/test_kombu.py
@@ -0,0 +1,350 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+Unit Tests for remote procedure calls using kombu
+"""
+
+from cinder import context
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+from cinder import test
+from cinder.rpc import amqp as rpc_amqp
+from cinder.rpc import impl_kombu
+from cinder.tests.rpc import common
+
+FLAGS = flags.FLAGS
+LOG = logging.getLogger(__name__)
+
+
+class MyException(Exception):
+    pass
+
+
+def _raise_exc_stub(stubs, times, obj, method, exc_msg,
+        exc_class=MyException):
+    info = {'called': 0}
+    orig_method = getattr(obj, method)
+
+    def _raise_stub(*args, **kwargs):
+        info['called'] += 1
+        if info['called'] <= times:
+            raise exc_class(exc_msg)
+        orig_method(*args, **kwargs)
+    stubs.Set(obj, method, _raise_stub)
+    return info
+
+
+class RpcKombuTestCase(common.BaseRpcAMQPTestCase):
+    def setUp(self):
+        self.rpc = impl_kombu
+        impl_kombu.register_opts(FLAGS)
+        super(RpcKombuTestCase, self).setUp()
+
+    def tearDown(self):
+        impl_kombu.cleanup()
+        super(RpcKombuTestCase, self).tearDown()
+
+    def test_reusing_connection(self):
+        """Test that reusing a connection returns same one."""
+        conn_context = self.rpc.create_connection(FLAGS, new=False)
+        conn1 = conn_context.connection
+        conn_context.close()
+        conn_context = self.rpc.create_connection(FLAGS, new=False)
+        conn2 = conn_context.connection
+        conn_context.close()
+        self.assertEqual(conn1, conn2)
+
+    def test_topic_send_receive(self):
+        """Test sending to a topic exchange/queue"""
+
+        conn = self.rpc.create_connection(FLAGS)
+        message = 'topic test message'
+
+        self.received_message = None
+
+        def _callback(message):
+            self.received_message = message
+
+        conn.declare_topic_consumer('a_topic', _callback)
+        conn.topic_send('a_topic', message)
+        conn.consume(limit=1)
+        conn.close()
+
+        self.assertEqual(self.received_message, message)
+
+    def test_direct_send_receive(self):
+        """Test sending to a direct exchange/queue"""
+        conn = self.rpc.create_connection(FLAGS)
+        message = 'direct test message'
+
+        self.received_message = None
+
+        def _callback(message):
+            self.received_message = message
+
+        conn.declare_direct_consumer('a_direct', _callback)
+        conn.direct_send('a_direct', message)
+        conn.consume(limit=1)
+        conn.close()
+
+        self.assertEqual(self.received_message, message)
+
+    def test_cast_interface_uses_default_options(self):
+        """Test kombu rpc.cast"""
+
+        ctxt = context.RequestContext('fake_user', 'fake_project')
+
+        class MyConnection(impl_kombu.Connection):
+            def __init__(myself, *args, **kwargs):
+                super(MyConnection, myself).__init__(*args, **kwargs)
+                self.assertEqual(myself.params,
+                        {'hostname': FLAGS.rabbit_host,
+                         'userid': FLAGS.rabbit_userid,
+                         'password': FLAGS.rabbit_password,
+                         'port': FLAGS.rabbit_port,
+                         'virtual_host': FLAGS.rabbit_virtual_host,
+                         'transport': 'memory'})
+
+            def topic_send(_context, topic, msg):
+                pass
+
+        MyConnection.pool = rpc_amqp.Pool(FLAGS, MyConnection)
+        self.stubs.Set(impl_kombu, 'Connection', MyConnection)
+
+        impl_kombu.cast(FLAGS, ctxt, 'fake_topic', {'msg': 'fake'})
+
+    def test_cast_to_server_uses_server_params(self):
+        """Test kombu rpc.cast"""
+
+        ctxt = context.RequestContext('fake_user', 'fake_project')
+
+        server_params = {'username': 'fake_username',
+                         'password': 'fake_password',
+                         'hostname': 'fake_hostname',
+                         'port': 31337,
+                         'virtual_host': 'fake_virtual_host'}
+
+        class MyConnection(impl_kombu.Connection):
+            def __init__(myself, *args, **kwargs):
+                super(MyConnection, myself).__init__(*args, **kwargs)
+                self.assertEqual(myself.params,
+                        {'hostname': server_params['hostname'],
+                         'userid': server_params['username'],
+                         'password': server_params['password'],
+                         'port': server_params['port'],
+                         'virtual_host': server_params['virtual_host'],
+                         'transport': 'memory'})
+
+            def topic_send(_context, topic, msg):
+                pass
+
+        MyConnection.pool = rpc_amqp.Pool(FLAGS, MyConnection)
+        self.stubs.Set(impl_kombu, 'Connection', MyConnection)
+
+        impl_kombu.cast_to_server(FLAGS, ctxt, server_params,
+                'fake_topic', {'msg': 'fake'})
+
+    @test.skip_test("kombu memory transport seems buggy with fanout queues "
+            "as this test passes when you use rabbit (fake_rabbit=False)")
+    def test_fanout_send_receive(self):
+        """Test sending to a fanout exchange and consuming from 2 queues"""
+
+        conn = self.rpc.create_connection()
+        conn2 = self.rpc.create_connection()
+        message = 'fanout test message'
+
+        self.received_message = None
+
+        def _callback(message):
+            self.received_message = message
+
+        conn.declare_fanout_consumer('a_fanout', _callback)
+        conn2.declare_fanout_consumer('a_fanout', _callback)
+        conn.fanout_send('a_fanout', message)
+
+        conn.consume(limit=1)
+        conn.close()
+        self.assertEqual(self.received_message, message)
+
+        self.received_message = None
+        conn2.consume(limit=1)
+        conn2.close()
+        self.assertEqual(self.received_message, message)
+
+    def test_declare_consumer_errors_will_reconnect(self):
+        # Test that any exception with 'timeout' in it causes a
+        # reconnection
+        info = _raise_exc_stub(self.stubs, 2, self.rpc.DirectConsumer,
+                '__init__', 'foo timeout foo')
+
+        conn = self.rpc.Connection(FLAGS)
+        result = conn.declare_consumer(self.rpc.DirectConsumer,
+                'test_topic', None)
+
+        self.assertEqual(info['called'], 3)
+        self.assertTrue(isinstance(result, self.rpc.DirectConsumer))
+
+        # Test that any exception in transport.connection_errors causes
+        # a reconnection
+        self.stubs.UnsetAll()
+
+        info = _raise_exc_stub(self.stubs, 1, self.rpc.DirectConsumer,
+                '__init__', 'meow')
+
+        conn = self.rpc.Connection(FLAGS)
+        conn.connection_errors = (MyException, )
+
+        result = conn.declare_consumer(self.rpc.DirectConsumer,
+                'test_topic', None)
+
+        self.assertEqual(info['called'], 2)
+        self.assertTrue(isinstance(result, self.rpc.DirectConsumer))
+
+    def test_declare_consumer_ioerrors_will_reconnect(self):
+        """Test that an IOError exception causes a reconnection"""
+        info = _raise_exc_stub(self.stubs, 2, self.rpc.DirectConsumer,
+                '__init__', 'Socket closed', exc_class=IOError)
+
+        conn = self.rpc.Connection(FLAGS)
+        result = conn.declare_consumer(self.rpc.DirectConsumer,
+                'test_topic', None)
+
+        self.assertEqual(info['called'], 3)
+        self.assertTrue(isinstance(result, self.rpc.DirectConsumer))
+
+    def test_publishing_errors_will_reconnect(self):
+        # Test that any exception with 'timeout' in it causes a
+        # reconnection when declaring the publisher class and when
+        # calling send()
+        info = _raise_exc_stub(self.stubs, 2, self.rpc.DirectPublisher,
+                '__init__', 'foo timeout foo')
+
+        conn = self.rpc.Connection(FLAGS)
+        conn.publisher_send(self.rpc.DirectPublisher, 'test_topic', 'msg')
+
+        self.assertEqual(info['called'], 3)
+        self.stubs.UnsetAll()
+
+        info = _raise_exc_stub(self.stubs, 2, self.rpc.DirectPublisher,
+                'send', 'foo timeout foo')
+
+        conn = self.rpc.Connection(FLAGS)
+        conn.publisher_send(self.rpc.DirectPublisher, 'test_topic', 'msg')
+
+        self.assertEqual(info['called'], 3)
+
+        # Test that any exception in transport.connection_errors causes
+        # a reconnection when declaring the publisher class and when
+        # calling send()
+        self.stubs.UnsetAll()
+
+        info = _raise_exc_stub(self.stubs, 1, self.rpc.DirectPublisher,
+                '__init__', 'meow')
+
+        conn = self.rpc.Connection(FLAGS)
+        conn.connection_errors = (MyException, )
+
+        conn.publisher_send(self.rpc.DirectPublisher, 'test_topic', 'msg')
+
+        self.assertEqual(info['called'], 2)
+        self.stubs.UnsetAll()
+
+        info = _raise_exc_stub(self.stubs, 1, self.rpc.DirectPublisher,
+                'send', 'meow')
+
+        conn = self.rpc.Connection(FLAGS)
+        conn.connection_errors = (MyException, )
+
+        conn.publisher_send(self.rpc.DirectPublisher, 'test_topic', 'msg')
+
+        self.assertEqual(info['called'], 2)
+
+    @test.skip_test("kombu memory transport hangs here on precise")
+    def test_iterconsume_errors_will_reconnect(self):
+        conn = self.rpc.Connection(FLAGS)
+        message = 'reconnect test message'
+
+        self.received_message = None
+
+        def _callback(message):
+            self.received_message = message
+
+        conn.declare_direct_consumer('a_direct', _callback)
+        conn.direct_send('a_direct', message)
+
+        info = _raise_exc_stub(self.stubs, 1, conn.connection,
+                'drain_events', 'foo timeout foo')
+        conn.consume(limit=1)
+        conn.close()
+
+        self.assertEqual(self.received_message, message)
+        # Only called once, because our stub goes away during reconnection
+
+    def test_call_exception(self):
+        """Test that exception gets passed back properly.
+
+        rpc.call returns an Exception object.  The value of the
+        exception is converted to a string.
+
+        """
+        self.flags(allowed_rpc_exception_modules=['exceptions'])
+        value = "This is the exception message"
+        self.assertRaises(NotImplementedError,
+                          self.rpc.call,
+                          FLAGS,
+                          self.context,
+                          'test',
+                          {"method": "fail",
+                           "args": {"value": value}})
+        try:
+            self.rpc.call(FLAGS, self.context,
+                     'test',
+                     {"method": "fail",
+                      "args": {"value": value}})
+            self.fail("should have thrown Exception")
+        except NotImplementedError as exc:
+            self.assertTrue(value in unicode(exc))
+            #Traceback should be included in exception message
+            self.assertTrue('raise NotImplementedError(value)' in unicode(exc))
+
+    def test_call_converted_exception(self):
+        """Test that exception gets passed back properly.
+
+        rpc.call returns an Exception object.  The value of the
+        exception is converted to a string.
+
+        """
+        value = "This is the exception message"
+        self.assertRaises(exception.ConvertedException,
+                          self.rpc.call,
+                          FLAGS,
+                          self.context,
+                          'test',
+                          {"method": "fail_converted",
+                           "args": {"value": value}})
+        try:
+            self.rpc.call(FLAGS, self.context,
+                     'test',
+                     {"method": "fail_converted",
+                      "args": {"value": value}})
+            self.fail("should have thrown Exception")
+        except exception.ConvertedException as exc:
+            self.assertTrue(value in unicode(exc))
+            #Traceback should be included in exception message
+            self.assertTrue('exception.ConvertedException' in unicode(exc))
diff --git a/cinder/tests/rpc/test_kombu_ssl.py b/cinder/tests/rpc/test_kombu_ssl.py
new file mode 100644
index 000000000..b1addec92
--- /dev/null
+++ b/cinder/tests/rpc/test_kombu_ssl.py
@@ -0,0 +1,58 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+Unit Tests for remote procedure calls using kombu + ssl
+"""
+
+from cinder import flags
+from cinder import test
+from cinder.rpc import impl_kombu
+
+# Flag settings we will ensure get passed to amqplib
+SSL_VERSION = "SSLv2"
+SSL_CERT = "/tmp/cert.blah.blah"
+SSL_CA_CERT = "/tmp/cert.ca.blah.blah"
+SSL_KEYFILE = "/tmp/keyfile.blah.blah"
+
+FLAGS = flags.FLAGS
+
+
+class RpcKombuSslTestCase(test.TestCase):
+
+    def setUp(self):
+        super(RpcKombuSslTestCase, self).setUp()
+        impl_kombu.register_opts(FLAGS)
+        self.flags(kombu_ssl_keyfile=SSL_KEYFILE,
+                   kombu_ssl_ca_certs=SSL_CA_CERT,
+                   kombu_ssl_certfile=SSL_CERT,
+                   kombu_ssl_version=SSL_VERSION,
+                   rabbit_use_ssl=True)
+
+    def test_ssl_on_extended(self):
+        rpc = impl_kombu
+        conn = rpc.create_connection(FLAGS, True)
+        c = conn.connection
+        #This might be kombu version dependent...
+        #Since we are now peaking into the internals of kombu...
+        self.assertTrue(isinstance(c.connection.ssl, dict))
+        self.assertEqual(SSL_VERSION, c.connection.ssl.get("ssl_version"))
+        self.assertEqual(SSL_CERT, c.connection.ssl.get("certfile"))
+        self.assertEqual(SSL_CA_CERT, c.connection.ssl.get("ca_certs"))
+        self.assertEqual(SSL_KEYFILE, c.connection.ssl.get("keyfile"))
+        #That hash then goes into amqplib which then goes
+        #Into python ssl creation...
diff --git a/cinder/tests/rpc/test_qpid.py b/cinder/tests/rpc/test_qpid.py
new file mode 100644
index 000000000..4ec865169
--- /dev/null
+++ b/cinder/tests/rpc/test_qpid.py
@@ -0,0 +1,340 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+# Copyright 2012, Red Hat, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+Unit Tests for remote procedure calls using qpid
+"""
+
+import mox
+
+from cinder import context
+from cinder import flags
+from cinder import log as logging
+from cinder.rpc import amqp as rpc_amqp
+from cinder import test
+
+try:
+    import qpid
+    from cinder.rpc import impl_qpid
+except ImportError:
+    qpid = None
+    impl_qpid = None
+
+
+FLAGS = flags.FLAGS
+LOG = logging.getLogger(__name__)
+
+
+class RpcQpidTestCase(test.TestCase):
+    """
+    Exercise the public API of impl_qpid utilizing mox.
+
+    This set of tests utilizes mox to replace the Qpid objects and ensures
+    that the right operations happen on them when the various public rpc API
+    calls are exercised.  The API calls tested here include:
+
+        cinder.rpc.create_connection()
+        cinder.rpc.common.Connection.create_consumer()
+        cinder.rpc.common.Connection.close()
+        cinder.rpc.cast()
+        cinder.rpc.fanout_cast()
+        cinder.rpc.call()
+        cinder.rpc.multicall()
+    """
+
+    def setUp(self):
+        super(RpcQpidTestCase, self).setUp()
+
+        self.mock_connection = None
+        self.mock_session = None
+        self.mock_sender = None
+        self.mock_receiver = None
+
+        if qpid:
+            impl_qpid.register_opts(FLAGS)
+            self.orig_connection = qpid.messaging.Connection
+            self.orig_session = qpid.messaging.Session
+            self.orig_sender = qpid.messaging.Sender
+            self.orig_receiver = qpid.messaging.Receiver
+            qpid.messaging.Connection = lambda *_x, **_y: self.mock_connection
+            qpid.messaging.Session = lambda *_x, **_y: self.mock_session
+            qpid.messaging.Sender = lambda *_x, **_y: self.mock_sender
+            qpid.messaging.Receiver = lambda *_x, **_y: self.mock_receiver
+
+    def tearDown(self):
+        if qpid:
+            qpid.messaging.Connection = self.orig_connection
+            qpid.messaging.Session = self.orig_session
+            qpid.messaging.Sender = self.orig_sender
+            qpid.messaging.Receiver = self.orig_receiver
+        if impl_qpid:
+            # Need to reset this in case we changed the connection_cls
+            # in self._setup_to_server_tests()
+            impl_qpid.Connection.pool.connection_cls = impl_qpid.Connection
+
+        super(RpcQpidTestCase, self).tearDown()
+
+    @test.skip_if(qpid is None, "Test requires qpid")
+    def test_create_connection(self):
+        self.mock_connection = self.mox.CreateMock(self.orig_connection)
+        self.mock_session = self.mox.CreateMock(self.orig_session)
+
+        self.mock_connection.opened().AndReturn(False)
+        self.mock_connection.open()
+        self.mock_connection.session().AndReturn(self.mock_session)
+        self.mock_connection.close()
+
+        self.mox.ReplayAll()
+
+        connection = impl_qpid.create_connection(FLAGS)
+        connection.close()
+
+    def _test_create_consumer(self, fanout):
+        self.mock_connection = self.mox.CreateMock(self.orig_connection)
+        self.mock_session = self.mox.CreateMock(self.orig_session)
+        self.mock_receiver = self.mox.CreateMock(self.orig_receiver)
+
+        self.mock_connection.opened().AndReturn(False)
+        self.mock_connection.open()
+        self.mock_connection.session().AndReturn(self.mock_session)
+        if fanout:
+            # The link name includes a UUID, so match it with a regex.
+            expected_address = mox.Regex(r'^impl_qpid_test_fanout ; '
+                '{"node": {"x-declare": {"auto-delete": true, "durable": '
+                'false, "type": "fanout"}, "type": "topic"}, "create": '
+                '"always", "link": {"x-declare": {"auto-delete": true, '
+                '"exclusive": true, "durable": false}, "durable": true, '
+                '"name": "impl_qpid_test_fanout_.*"}}$')
+        else:
+            expected_address = (
+                'cinder/impl_qpid_test ; {"node": {"x-declare": '
+                '{"auto-delete": true, "durable": true}, "type": "topic"}, '
+                '"create": "always", "link": {"x-declare": {"auto-delete": '
+                'true, "exclusive": false, "durable": false}, "durable": '
+                'true, "name": "impl_qpid_test"}}')
+        self.mock_session.receiver(expected_address).AndReturn(
+                                                        self.mock_receiver)
+        self.mock_receiver.capacity = 1
+        self.mock_connection.close()
+
+        self.mox.ReplayAll()
+
+        connection = impl_qpid.create_connection(FLAGS)
+        connection.create_consumer("impl_qpid_test",
+                                   lambda *_x, **_y: None,
+                                   fanout)
+        connection.close()
+
+    @test.skip_if(qpid is None, "Test requires qpid")
+    def test_create_consumer(self):
+        self._test_create_consumer(fanout=False)
+
+    @test.skip_if(qpid is None, "Test requires qpid")
+    def test_create_consumer_fanout(self):
+        self._test_create_consumer(fanout=True)
+
+    def _test_cast(self, fanout, server_params=None):
+        self.mock_connection = self.mox.CreateMock(self.orig_connection)
+        self.mock_session = self.mox.CreateMock(self.orig_session)
+        self.mock_sender = self.mox.CreateMock(self.orig_sender)
+
+        self.mock_connection.opened().AndReturn(False)
+        self.mock_connection.open()
+
+        self.mock_connection.session().AndReturn(self.mock_session)
+        if fanout:
+            expected_address = ('impl_qpid_test_fanout ; '
+                '{"node": {"x-declare": {"auto-delete": true, '
+                '"durable": false, "type": "fanout"}, '
+                '"type": "topic"}, "create": "always"}')
+        else:
+            expected_address = (
+                'cinder/impl_qpid_test ; {"node": {"x-declare": '
+                '{"auto-delete": true, "durable": false}, "type": "topic"}, '
+                '"create": "always"}')
+        self.mock_session.sender(expected_address).AndReturn(self.mock_sender)
+        self.mock_sender.send(mox.IgnoreArg())
+        if not server_params:
+            # This is a pooled connection, so instead of closing it, it
+            # gets reset, which is just creating a new session on the
+            # connection.
+            self.mock_session.close()
+            self.mock_connection.session().AndReturn(self.mock_session)
+
+        self.mox.ReplayAll()
+
+        try:
+            ctx = context.RequestContext("user", "project")
+
+            args = [FLAGS, ctx, "impl_qpid_test",
+                    {"method": "test_method", "args": {}}]
+
+            if server_params:
+                args.insert(2, server_params)
+                if fanout:
+                    method = impl_qpid.fanout_cast_to_server
+                else:
+                    method = impl_qpid.cast_to_server
+            else:
+                if fanout:
+                    method = impl_qpid.fanout_cast
+                else:
+                    method = impl_qpid.cast
+
+            method(*args)
+        finally:
+            while impl_qpid.Connection.pool.free_items:
+                # Pull the mock connection object out of the connection pool so
+                # that it doesn't mess up other test cases.
+                impl_qpid.Connection.pool.get()
+
+    @test.skip_if(qpid is None, "Test requires qpid")
+    def test_cast(self):
+        self._test_cast(fanout=False)
+
+    @test.skip_if(qpid is None, "Test requires qpid")
+    def test_fanout_cast(self):
+        self._test_cast(fanout=True)
+
+    def _setup_to_server_tests(self, server_params):
+        class MyConnection(impl_qpid.Connection):
+            def __init__(myself, *args, **kwargs):
+                super(MyConnection, myself).__init__(*args, **kwargs)
+                self.assertEqual(myself.connection.username,
+                        server_params['username'])
+                self.assertEqual(myself.connection.password,
+                        server_params['password'])
+                self.assertEqual(myself.broker,
+                        server_params['hostname'] + ':' +
+                                str(server_params['port']))
+
+        MyConnection.pool = rpc_amqp.Pool(FLAGS, MyConnection)
+        self.stubs.Set(impl_qpid, 'Connection', MyConnection)
+
+    @test.skip_if(qpid is None, "Test requires qpid")
+    def test_cast_to_server(self):
+        server_params = {'username': 'fake_username',
+                         'password': 'fake_password',
+                         'hostname': 'fake_hostname',
+                         'port': 31337}
+        self._setup_to_server_tests(server_params)
+        self._test_cast(fanout=False, server_params=server_params)
+
+    @test.skip_if(qpid is None, "Test requires qpid")
+    def test_fanout_cast_to_server(self):
+        server_params = {'username': 'fake_username',
+                         'password': 'fake_password',
+                         'hostname': 'fake_hostname',
+                         'port': 31337}
+        self._setup_to_server_tests(server_params)
+        self._test_cast(fanout=True, server_params=server_params)
+
+    def _test_call(self, multi):
+        self.mock_connection = self.mox.CreateMock(self.orig_connection)
+        self.mock_session = self.mox.CreateMock(self.orig_session)
+        self.mock_sender = self.mox.CreateMock(self.orig_sender)
+        self.mock_receiver = self.mox.CreateMock(self.orig_receiver)
+
+        self.mock_connection.opened().AndReturn(False)
+        self.mock_connection.open()
+        self.mock_connection.session().AndReturn(self.mock_session)
+        rcv_addr = mox.Regex(r'^.*/.* ; {"node": {"x-declare": {"auto-delete":'
+                   ' true, "durable": true, "type": "direct"}, "type": '
+                   '"topic"}, "create": "always", "link": {"x-declare": '
+                   '{"auto-delete": true, "exclusive": true, "durable": '
+                   'false}, "durable": true, "name": ".*"}}')
+        self.mock_session.receiver(rcv_addr).AndReturn(self.mock_receiver)
+        self.mock_receiver.capacity = 1
+        send_addr = ('cinder/impl_qpid_test ; {"node": {"x-declare": '
+            '{"auto-delete": true, "durable": false}, "type": "topic"}, '
+            '"create": "always"}')
+        self.mock_session.sender(send_addr).AndReturn(self.mock_sender)
+        self.mock_sender.send(mox.IgnoreArg())
+
+        self.mock_session.next_receiver(timeout=mox.IsA(int)).AndReturn(
+                                                        self.mock_receiver)
+        self.mock_receiver.fetch().AndReturn(qpid.messaging.Message(
+                        {"result": "foo", "failure": False, "ending": False}))
+        if multi:
+            self.mock_session.next_receiver(timeout=mox.IsA(int)).AndReturn(
+                                                        self.mock_receiver)
+            self.mock_receiver.fetch().AndReturn(
+                            qpid.messaging.Message(
+                                {"result": "bar", "failure": False,
+                                 "ending": False}))
+            self.mock_session.next_receiver(timeout=mox.IsA(int)).AndReturn(
+                                                        self.mock_receiver)
+            self.mock_receiver.fetch().AndReturn(
+                            qpid.messaging.Message(
+                                {"result": "baz", "failure": False,
+                                 "ending": False}))
+        self.mock_session.next_receiver(timeout=mox.IsA(int)).AndReturn(
+                                                        self.mock_receiver)
+        self.mock_receiver.fetch().AndReturn(qpid.messaging.Message(
+                        {"failure": False, "ending": True}))
+        self.mock_session.close()
+        self.mock_connection.session().AndReturn(self.mock_session)
+
+        self.mox.ReplayAll()
+
+        try:
+            ctx = context.RequestContext("user", "project")
+
+            if multi:
+                method = impl_qpid.multicall
+            else:
+                method = impl_qpid.call
+
+            res = method(FLAGS, ctx, "impl_qpid_test",
+                           {"method": "test_method", "args": {}})
+
+            if multi:
+                self.assertEquals(list(res), ["foo", "bar", "baz"])
+            else:
+                self.assertEquals(res, "foo")
+        finally:
+            while impl_qpid.Connection.pool.free_items:
+                # Pull the mock connection object out of the connection pool so
+                # that it doesn't mess up other test cases.
+                impl_qpid.Connection.pool.get()
+
+    @test.skip_if(qpid is None, "Test requires qpid")
+    def test_call(self):
+        self._test_call(multi=False)
+
+    @test.skip_if(qpid is None, "Test requires qpid")
+    def test_multicall(self):
+        self._test_call(multi=True)
+
+
+#
+#from cinder.tests.rpc import common
+#
+# Qpid does not have a handy in-memory transport like kombu, so it's not
+# terribly straight forward to take advantage of the common unit tests.
+# However, at least at the time of this writing, the common unit tests all pass
+# with qpidd running.
+#
+# class RpcQpidCommonTestCase(common._BaseRpcTestCase):
+#     def setUp(self):
+#         self.rpc = impl_qpid
+#         super(RpcQpidCommonTestCase, self).setUp()
+#
+#     def tearDown(self):
+#         super(RpcQpidCommonTestCase, self).tearDown()
+#
diff --git a/cinder/tests/runtime_flags.py b/cinder/tests/runtime_flags.py
new file mode 100644
index 000000000..4327561fc
--- /dev/null
+++ b/cinder/tests/runtime_flags.py
@@ -0,0 +1,23 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from cinder import flags
+from cinder.openstack.common import cfg
+
+FLAGS = flags.FLAGS
+FLAGS.register_opt(cfg.IntOpt('runtime_answer', default=54, help='test flag'))
diff --git a/cinder/tests/scheduler/__init__.py b/cinder/tests/scheduler/__init__.py
new file mode 100644
index 000000000..3be5ce944
--- /dev/null
+++ b/cinder/tests/scheduler/__init__.py
@@ -0,0 +1,19 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+# NOTE(vish): this forces the fixtures from tests/__init.py:setup() to work
+from cinder.tests import *
diff --git a/cinder/tests/scheduler/fakes.py b/cinder/tests/scheduler/fakes.py
new file mode 100644
index 000000000..384dae7ba
--- /dev/null
+++ b/cinder/tests/scheduler/fakes.py
@@ -0,0 +1,62 @@
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+Fakes For Scheduler tests.
+"""
+
+import mox
+
+from cinder import db
+from cinder.scheduler import host_manager
+
+
+class FakeHostManager(host_manager.HostManager):
+    """host1: free_ram_mb=1024-512-512=0, free_disk_gb=1024-512-512=0
+       host2: free_ram_mb=2048-512=1536  free_disk_gb=2048-512=1536
+       host3: free_ram_mb=4096-1024=3072  free_disk_gb=4096-1024=3072
+       host4: free_ram_mb=8192  free_disk_gb=8192"""
+
+    def __init__(self):
+        super(FakeHostManager, self).__init__()
+
+        self.service_states = {
+            'host1': {
+                'compute': {'host_memory_free': 1073741824},
+            },
+            'host2': {
+                'compute': {'host_memory_free': 2147483648},
+            },
+            'host3': {
+                'compute': {'host_memory_free': 3221225472},
+            },
+            'host4': {
+                'compute': {'host_memory_free': 999999999},
+            },
+        }
+
+    def get_host_list_from_db(self, context):
+        return [
+            ('host1', dict(free_disk_gb=1024, free_ram_mb=1024)),
+            ('host2', dict(free_disk_gb=2048, free_ram_mb=2048)),
+            ('host3', dict(free_disk_gb=4096, free_ram_mb=4096)),
+            ('host4', dict(free_disk_gb=8192, free_ram_mb=8192)),
+        ]
+
+
+class FakeHostState(host_manager.HostState):
+    def __init__(self, host, topic, attribute_dict):
+        super(FakeHostState, self).__init__(host, topic)
+        for (key, val) in attribute_dict.iteritems():
+            setattr(self, key, val)
diff --git a/cinder/tests/scheduler/test_scheduler.py b/cinder/tests/scheduler/test_scheduler.py
new file mode 100644
index 000000000..346132a7d
--- /dev/null
+++ b/cinder/tests/scheduler/test_scheduler.py
@@ -0,0 +1,322 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+Tests For Scheduler
+"""
+
+import datetime
+import json
+
+from cinder import context
+from cinder import db
+from cinder import exception
+from cinder import flags
+from cinder.notifier import api as notifier
+from cinder import rpc
+from cinder.rpc import common as rpc_common
+from cinder.scheduler import driver
+from cinder.scheduler import manager
+from cinder import test
+from cinder.tests.scheduler import fakes
+from cinder import utils
+
+FLAGS = flags.FLAGS
+
+
+class SchedulerManagerTestCase(test.TestCase):
+    """Test case for scheduler manager"""
+
+    manager_cls = manager.SchedulerManager
+    driver_cls = driver.Scheduler
+    driver_cls_name = 'cinder.scheduler.driver.Scheduler'
+
+    class AnException(Exception):
+        pass
+
+    def setUp(self):
+        super(SchedulerManagerTestCase, self).setUp()
+        self.flags(scheduler_driver=self.driver_cls_name)
+        self.manager = self.manager_cls()
+        self.context = context.RequestContext('fake_user', 'fake_project')
+        self.topic = 'fake_topic'
+        self.fake_args = (1, 2, 3)
+        self.fake_kwargs = {'cat': 'meow', 'dog': 'woof'}
+
+    def test_1_correct_init(self):
+        # Correct scheduler driver
+        manager = self.manager
+        self.assertTrue(isinstance(manager.driver, self.driver_cls))
+
+    def test_get_host_list(self):
+        expected = 'fake_hosts'
+
+        self.mox.StubOutWithMock(self.manager.driver, 'get_host_list')
+        self.manager.driver.get_host_list().AndReturn(expected)
+
+        self.mox.ReplayAll()
+        result = self.manager.get_host_list(self.context)
+        self.assertEqual(result, expected)
+
+    def test_get_service_capabilities(self):
+        expected = 'fake_service_capabs'
+
+        self.mox.StubOutWithMock(self.manager.driver,
+                'get_service_capabilities')
+        self.manager.driver.get_service_capabilities().AndReturn(
+                expected)
+
+        self.mox.ReplayAll()
+        result = self.manager.get_service_capabilities(self.context)
+        self.assertEqual(result, expected)
+
+    def test_update_service_capabilities(self):
+        service_name = 'fake_service'
+        host = 'fake_host'
+
+        self.mox.StubOutWithMock(self.manager.driver,
+                'update_service_capabilities')
+
+        # Test no capabilities passes empty dictionary
+        self.manager.driver.update_service_capabilities(service_name,
+                host, {})
+        self.mox.ReplayAll()
+        result = self.manager.update_service_capabilities(self.context,
+                service_name=service_name, host=host)
+        self.mox.VerifyAll()
+
+        self.mox.ResetAll()
+        # Test capabilities passes correctly
+        capabilities = {'fake_capability': 'fake_value'}
+        self.manager.driver.update_service_capabilities(
+                service_name, host, capabilities)
+        self.mox.ReplayAll()
+        result = self.manager.update_service_capabilities(self.context,
+                service_name=service_name, host=host,
+                capabilities=capabilities)
+
+    def test_existing_method(self):
+        def stub_method(self, *args, **kwargs):
+            pass
+        setattr(self.manager.driver, 'schedule_stub_method', stub_method)
+
+        self.mox.StubOutWithMock(self.manager.driver,
+                'schedule_stub_method')
+        self.manager.driver.schedule_stub_method(self.context,
+                *self.fake_args, **self.fake_kwargs)
+
+        self.mox.ReplayAll()
+        self.manager.stub_method(self.context, self.topic,
+                *self.fake_args, **self.fake_kwargs)
+
+    def test_missing_method_fallback(self):
+        self.mox.StubOutWithMock(self.manager.driver, 'schedule')
+        self.manager.driver.schedule(self.context, self.topic,
+                'noexist', *self.fake_args, **self.fake_kwargs)
+
+        self.mox.ReplayAll()
+        self.manager.noexist(self.context, self.topic,
+                *self.fake_args, **self.fake_kwargs)
+
+    def _mox_schedule_method_helper(self, method_name):
+        # Make sure the method exists that we're going to test call
+        def stub_method(*args, **kwargs):
+            pass
+
+        setattr(self.manager.driver, method_name, stub_method)
+
+        self.mox.StubOutWithMock(self.manager.driver,
+                method_name)
+
+
+class SchedulerTestCase(test.TestCase):
+    """Test case for base scheduler driver class"""
+
+    # So we can subclass this test and re-use tests if we need.
+    driver_cls = driver.Scheduler
+
+    def setUp(self):
+        super(SchedulerTestCase, self).setUp()
+        self.driver = self.driver_cls()
+        self.context = context.RequestContext('fake_user', 'fake_project')
+        self.topic = 'fake_topic'
+
+    def test_get_host_list(self):
+        expected = 'fake_hosts'
+
+        self.mox.StubOutWithMock(self.driver.host_manager, 'get_host_list')
+        self.driver.host_manager.get_host_list().AndReturn(expected)
+
+        self.mox.ReplayAll()
+        result = self.driver.get_host_list()
+        self.assertEqual(result, expected)
+
+    def test_get_service_capabilities(self):
+        expected = 'fake_service_capabs'
+
+        self.mox.StubOutWithMock(self.driver.host_manager,
+                'get_service_capabilities')
+        self.driver.host_manager.get_service_capabilities().AndReturn(
+                expected)
+
+        self.mox.ReplayAll()
+        result = self.driver.get_service_capabilities()
+        self.assertEqual(result, expected)
+
+    def test_update_service_capabilities(self):
+        service_name = 'fake_service'
+        host = 'fake_host'
+
+        self.mox.StubOutWithMock(self.driver.host_manager,
+                'update_service_capabilities')
+
+        capabilities = {'fake_capability': 'fake_value'}
+        self.driver.host_manager.update_service_capabilities(
+                service_name, host, capabilities)
+        self.mox.ReplayAll()
+        result = self.driver.update_service_capabilities(service_name,
+                host, capabilities)
+
+    def test_hosts_up(self):
+        service1 = {'host': 'host1'}
+        service2 = {'host': 'host2'}
+        services = [service1, service2]
+
+        self.mox.StubOutWithMock(db, 'service_get_all_by_topic')
+        self.mox.StubOutWithMock(utils, 'service_is_up')
+
+        db.service_get_all_by_topic(self.context,
+                self.topic).AndReturn(services)
+        utils.service_is_up(service1).AndReturn(False)
+        utils.service_is_up(service2).AndReturn(True)
+
+        self.mox.ReplayAll()
+        result = self.driver.hosts_up(self.context, self.topic)
+        self.assertEqual(result, ['host2'])
+
+
+class SchedulerDriverBaseTestCase(SchedulerTestCase):
+    """Test cases for base scheduler driver class methods
+       that can't will fail if the driver is changed"""
+
+    def test_unimplemented_schedule(self):
+        fake_args = (1, 2, 3)
+        fake_kwargs = {'cat': 'meow'}
+
+        self.assertRaises(NotImplementedError, self.driver.schedule,
+                         self.context, self.topic, 'schedule_something',
+                         *fake_args, **fake_kwargs)
+
+
+class SchedulerDriverModuleTestCase(test.TestCase):
+    """Test case for scheduler driver module methods"""
+
+    def setUp(self):
+        super(SchedulerDriverModuleTestCase, self).setUp()
+        self.context = context.RequestContext('fake_user', 'fake_project')
+
+    def test_cast_to_volume_host_update_db_with_volume_id(self):
+        host = 'fake_host1'
+        method = 'fake_method'
+        fake_kwargs = {'volume_id': 31337,
+                       'extra_arg': 'meow'}
+        queue = 'fake_queue'
+
+        self.mox.StubOutWithMock(utils, 'utcnow')
+        self.mox.StubOutWithMock(db, 'volume_update')
+        self.mox.StubOutWithMock(db, 'queue_get_for')
+        self.mox.StubOutWithMock(rpc, 'cast')
+
+        utils.utcnow().AndReturn('fake-now')
+        db.volume_update(self.context, 31337,
+                {'host': host, 'scheduled_at': 'fake-now'})
+        db.queue_get_for(self.context, 'volume', host).AndReturn(queue)
+        rpc.cast(self.context, queue,
+                {'method': method,
+                 'args': fake_kwargs})
+
+        self.mox.ReplayAll()
+        driver.cast_to_volume_host(self.context, host, method,
+                update_db=True, **fake_kwargs)
+
+    def test_cast_to_volume_host_update_db_without_volume_id(self):
+        host = 'fake_host1'
+        method = 'fake_method'
+        fake_kwargs = {'extra_arg': 'meow'}
+        queue = 'fake_queue'
+
+        self.mox.StubOutWithMock(db, 'queue_get_for')
+        self.mox.StubOutWithMock(rpc, 'cast')
+
+        db.queue_get_for(self.context, 'volume', host).AndReturn(queue)
+        rpc.cast(self.context, queue,
+                {'method': method,
+                 'args': fake_kwargs})
+
+        self.mox.ReplayAll()
+        driver.cast_to_volume_host(self.context, host, method,
+                update_db=True, **fake_kwargs)
+
+    def test_cast_to_volume_host_no_update_db(self):
+        host = 'fake_host1'
+        method = 'fake_method'
+        fake_kwargs = {'extra_arg': 'meow'}
+        queue = 'fake_queue'
+
+        self.mox.StubOutWithMock(db, 'queue_get_for')
+        self.mox.StubOutWithMock(rpc, 'cast')
+
+        db.queue_get_for(self.context, 'volume', host).AndReturn(queue)
+        rpc.cast(self.context, queue,
+                {'method': method,
+                 'args': fake_kwargs})
+
+        self.mox.ReplayAll()
+        driver.cast_to_volume_host(self.context, host, method,
+                update_db=False, **fake_kwargs)
+
+    def test_cast_to_host_volume_topic(self):
+        host = 'fake_host1'
+        method = 'fake_method'
+        fake_kwargs = {'extra_arg': 'meow'}
+
+        self.mox.StubOutWithMock(driver, 'cast_to_volume_host')
+        driver.cast_to_volume_host(self.context, host, method,
+                update_db=False, **fake_kwargs)
+
+        self.mox.ReplayAll()
+        driver.cast_to_host(self.context, 'volume', host, method,
+                update_db=False, **fake_kwargs)
+
+    def test_cast_to_host_unknown_topic(self):
+        host = 'fake_host1'
+        method = 'fake_method'
+        fake_kwargs = {'extra_arg': 'meow'}
+        topic = 'unknown'
+        queue = 'fake_queue'
+
+        self.mox.StubOutWithMock(db, 'queue_get_for')
+        self.mox.StubOutWithMock(rpc, 'cast')
+
+        db.queue_get_for(self.context, topic, host).AndReturn(queue)
+        rpc.cast(self.context, queue,
+                {'method': method,
+                 'args': fake_kwargs})
+
+        self.mox.ReplayAll()
+        driver.cast_to_host(self.context, topic, host, method,
+                update_db=False, **fake_kwargs)
diff --git a/cinder/tests/test_SolidFireSanISCSIDriver.py b/cinder/tests/test_SolidFireSanISCSIDriver.py
new file mode 100644
index 000000000..4a1a60121
--- /dev/null
+++ b/cinder/tests/test_SolidFireSanISCSIDriver.py
@@ -0,0 +1,186 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from cinder import exception
+from cinder import log as logging
+from cinder.volume import san
+from cinder import test
+
+LOG = logging.getLogger(__name__)
+
+
+class SolidFireVolumeTestCase(test.TestCase):
+    def setUp(self):
+        super(SolidFireVolumeTestCase, self).setUp()
+
+    def fake_issue_api_request(obj, method, params):
+        if method is 'GetClusterInfo':
+            LOG.info('Called Fake GetClusterInfo...')
+            results = {'result': {'clusterInfo':
+                          {'name': 'fake-cluster',
+                           'mvip': '1.1.1.1',
+                           'svip': '1.1.1.1',
+                           'uniqueID': 'unqid',
+                           'repCount': 2,
+                           'attributes': {}}}}
+            return results
+
+        elif method is 'AddAccount':
+            LOG.info('Called Fake AddAccount...')
+            return {'result': {'accountID': 25}, 'id': 1}
+
+        elif method is 'GetAccountByName':
+            LOG.info('Called Fake GetAccountByName...')
+            results = {'result': {'account': {
+                       'accountID': 25,
+                       'username': params['username'],
+                       'status': 'active',
+                       'initiatorSecret': '123456789012',
+                       'targetSecret': '123456789012',
+                       'attributes': {},
+                       'volumes': [6, 7, 20]}},
+                   "id": 1}
+            return results
+
+        elif method is 'CreateVolume':
+            LOG.info('Called Fake CreateVolume...')
+            return {'result': {'volumeID': 5}, 'id': 1}
+
+        elif method is 'DeleteVolume':
+            LOG.info('Called Fake DeleteVolume...')
+            return {'result': {}, 'id': 1}
+
+        elif method is 'ListVolumesForAccount':
+            LOG.info('Called Fake ListVolumesForAccount...')
+            result = {'result': {'volumes': [{
+                                           'volumeID': '5',
+                                           'name': 'test_volume',
+                                           'accountID': 25,
+                                           'sliceCount': 1,
+                                           'totalSize': 1048576 * 1024,
+                                           'enable512e': False,
+                                           'access': "readWrite",
+                                           'status': "active",
+                                           'attributes':None,
+                                           'qos':None}]}}
+            return result
+
+        else:
+            LOG.error('Crap, unimplemented API call in Fake:%s' % method)
+
+    def fake_issue_api_request_fails(obj, method, params):
+        return {'error': {
+                    'code': 000,
+                    'name': 'DummyError',
+                    'message': 'This is a fake error response'},
+                    'id': 1}
+
+    def test_create_volume(self):
+        self.stubs.Set(san.SolidFireSanISCSIDriver, '_issue_api_request',
+                       self.fake_issue_api_request)
+        testvol = {'project_id': 'testprjid',
+                   'name': 'testvol',
+                   'size': 1}
+        sfv = san.SolidFireSanISCSIDriver()
+        model_update = sfv.create_volume(testvol)
+
+    def test_create_volume_fails(self):
+        self.stubs.Set(san.SolidFireSanISCSIDriver, '_issue_api_request',
+                       self.fake_issue_api_request_fails)
+        testvol = {'project_id': 'testprjid',
+                   'name': 'testvol',
+                   'size': 1}
+        sfv = san.SolidFireSanISCSIDriver()
+        try:
+            sfv.create_volume(testvol)
+            self.fail("Should have thrown Error")
+        except Exception:
+            pass
+
+    def test_create_sfaccount(self):
+        sfv = san.SolidFireSanISCSIDriver()
+        self.stubs.Set(san.SolidFireSanISCSIDriver, '_issue_api_request',
+                       self.fake_issue_api_request)
+        account = sfv._create_sfaccount('project-id')
+        self.assertNotEqual(account, None)
+
+    def test_create_sfaccount_fails(self):
+        sfv = san.SolidFireSanISCSIDriver()
+        self.stubs.Set(san.SolidFireSanISCSIDriver, '_issue_api_request',
+                       self.fake_issue_api_request_fails)
+        account = sfv._create_sfaccount('project-id')
+        self.assertEqual(account, None)
+
+    def test_get_sfaccount_by_name(self):
+        sfv = san.SolidFireSanISCSIDriver()
+        self.stubs.Set(san.SolidFireSanISCSIDriver, '_issue_api_request',
+                       self.fake_issue_api_request)
+        account = sfv._get_sfaccount_by_name('some-name')
+        self.assertNotEqual(account, None)
+
+    def test_get_sfaccount_by_name_fails(self):
+        sfv = san.SolidFireSanISCSIDriver()
+        self.stubs.Set(san.SolidFireSanISCSIDriver, '_issue_api_request',
+                       self.fake_issue_api_request_fails)
+        account = sfv._get_sfaccount_by_name('some-name')
+        self.assertEqual(account, None)
+
+    def test_delete_volume(self):
+        self.stubs.Set(san.SolidFireSanISCSIDriver, '_issue_api_request',
+                       self.fake_issue_api_request)
+        testvol = {'project_id': 'testprjid',
+                   'name': 'test_volume',
+                   'size': 1}
+        sfv = san.SolidFireSanISCSIDriver()
+        model_update = sfv.delete_volume(testvol)
+
+    def test_delete_volume_fails_no_volume(self):
+        self.stubs.Set(san.SolidFireSanISCSIDriver, '_issue_api_request',
+                       self.fake_issue_api_request)
+        testvol = {'project_id': 'testprjid',
+                   'name': 'no-name',
+                   'size': 1}
+        sfv = san.SolidFireSanISCSIDriver()
+        try:
+            model_update = sfv.delete_volume(testvol)
+            self.fail("Should have thrown Error")
+        except Exception:
+            pass
+
+    def test_delete_volume_fails_account_lookup(self):
+        self.stubs.Set(san.SolidFireSanISCSIDriver, '_issue_api_request',
+                       self.fake_issue_api_request)
+        testvol = {'project_id': 'testprjid',
+                   'name': 'no-name',
+                   'size': 1}
+        sfv = san.SolidFireSanISCSIDriver()
+        self.assertRaises(exception.DuplicateSfVolumeNames,
+                          sfv.delete_volume,
+                          testvol)
+
+    def test_get_cluster_info(self):
+        self.stubs.Set(san.SolidFireSanISCSIDriver, '_issue_api_request',
+                       self.fake_issue_api_request)
+        sfv = san.SolidFireSanISCSIDriver()
+        sfv._get_cluster_info()
+
+    def test_get_cluster_info_fail(self):
+        self.stubs.Set(san.SolidFireSanISCSIDriver, '_issue_api_request',
+                       self.fake_issue_api_request_fails)
+        sfv = san.SolidFireSanISCSIDriver()
+        self.assertRaises(exception.SolidFireAPIException,
+                          sfv._get_cluster_info)
diff --git a/cinder/tests/test_api.py b/cinder/tests/test_api.py
new file mode 100644
index 000000000..8a158c706
--- /dev/null
+++ b/cinder/tests/test_api.py
@@ -0,0 +1,75 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Unit tests for the API endpoint"""
+
+import httplib
+import StringIO
+
+import webob
+
+
+class FakeHttplibSocket(object):
+    """a fake socket implementation for httplib.HTTPResponse, trivial"""
+    def __init__(self, response_string):
+        self.response_string = response_string
+        self._buffer = StringIO.StringIO(response_string)
+
+    def makefile(self, _mode, _other):
+        """Returns the socket's internal buffer"""
+        return self._buffer
+
+
+class FakeHttplibConnection(object):
+    """A fake httplib.HTTPConnection for boto to use
+
+    requests made via this connection actually get translated and routed into
+    our WSGI app, we then wait for the response and turn it back into
+    the httplib.HTTPResponse that boto expects.
+    """
+    def __init__(self, app, host, is_secure=False):
+        self.app = app
+        self.host = host
+
+    def request(self, method, path, data, headers):
+        req = webob.Request.blank(path)
+        req.method = method
+        req.body = data
+        req.headers = headers
+        req.headers['Accept'] = 'text/html'
+        req.host = self.host
+        # Call the WSGI app, get the HTTP response
+        resp = str(req.get_response(self.app))
+        # For some reason, the response doesn't have "HTTP/1.0 " prepended; I
+        # guess that's a function the web server usually provides.
+        resp = "HTTP/1.0 %s" % resp
+        self.sock = FakeHttplibSocket(resp)
+        self.http_response = httplib.HTTPResponse(self.sock)
+        # NOTE(vish): boto is accessing private variables for some reason
+        self._HTTPConnection__response = self.http_response
+        self.http_response.begin()
+
+    def getresponse(self):
+        return self.http_response
+
+    def getresponsebody(self):
+        return self.sock.response_string
+
+    def close(self):
+        """Required for compatibility with boto/tornado"""
+        pass
diff --git a/cinder/tests/test_compat_flagfile.py b/cinder/tests/test_compat_flagfile.py
new file mode 100644
index 000000000..a98b88fc1
--- /dev/null
+++ b/cinder/tests/test_compat_flagfile.py
@@ -0,0 +1,175 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2012 Red Hat, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import contextlib
+import os
+import shutil
+import StringIO
+import textwrap
+import tempfile
+import unittest
+import uuid
+
+from cinder.compat import flagfile
+from cinder import test
+
+
+class ThatLastTwoPercentCoverageTestCase(unittest.TestCase):
+    def test_open_file_for_reading(self):
+        with flagfile._open_file_for_reading(__file__):
+            pass
+
+    def test_open_fd_for_writing(self):
+        (fd, path) = tempfile.mkstemp()
+        try:
+            with flagfile._open_fd_for_writing(fd, None):
+                pass
+        finally:
+            os.remove(path)
+
+
+class CompatFlagfileTestCase(test.TestCase):
+    def setUp(self):
+        super(CompatFlagfileTestCase, self).setUp()
+        self.files = {}
+        self.tempdir = str(uuid.uuid4())
+        self.tempfiles = []
+
+        self.stubs.Set(flagfile, '_open_file_for_reading', self._fake_open)
+        self.stubs.Set(flagfile, '_open_fd_for_writing', self._fake_open)
+        self.stubs.Set(tempfile, 'mkdtemp', self._fake_mkdtemp)
+        self.stubs.Set(tempfile, 'mkstemp', self._fake_mkstemp)
+        self.stubs.Set(shutil, 'rmtree', self._fake_rmtree)
+
+    def _fake_open(self, *args):
+        @contextlib.contextmanager
+        def managed_stringio(path):
+            if not path in self.files:
+                self.files[path] = ""
+            sio = StringIO.StringIO(textwrap.dedent(self.files[path]))
+            try:
+                yield sio
+            finally:
+                self.files[path] = sio.getvalue()
+                sio.close()
+        if len(args) == 2:
+            args = args[1:]  # remove the fd arg for fdopen() case
+        return managed_stringio(args[0])
+
+    def _fake_mkstemp(self, *args, **kwargs):
+        self.assertTrue('dir' in kwargs)
+        self.assertEquals(kwargs['dir'], self.tempdir)
+        self.tempfiles.append(str(uuid.uuid4()))
+        return (None, self.tempfiles[-1])
+
+    def _fake_mkdtemp(self, *args, **kwargs):
+        return self.tempdir
+
+    def _fake_rmtree(self, path):
+        self.assertEquals(self.tempdir, path)
+        self.tempdir = None
+
+    def test_no_args(self):
+        before = []
+        after = flagfile.handle_flagfiles(before, tempdir=self.tempdir)
+        self.assertEquals(after, before)
+
+    def _do_test_empty_flagfile(self, before):
+        self.files['foo.flags'] = ''
+        after = flagfile.handle_flagfiles(before, tempdir=self.tempdir)
+        self.assertEquals(after, ['--config-file=' + self.tempfiles[-1]])
+        self.assertEquals(self.files[self.tempfiles[-1]], '[DEFAULT]\n')
+
+    def test_empty_flagfile(self):
+        self._do_test_empty_flagfile(['--flagfile=foo.flags'])
+
+    def test_empty_flagfile_separated(self):
+        self._do_test_empty_flagfile(['--flagfile', 'foo.flags'])
+
+    def test_empty_flagfile_single_hyphen(self):
+        self._do_test_empty_flagfile(['-flagfile=foo.flags'])
+
+    def test_empty_flagfile_single_hyphen_separated_separated(self):
+        self._do_test_empty_flagfile(['-flagfile', 'foo.flags'])
+
+    def test_empty_flagfile_with_other_args(self):
+        self.files['foo.flags'] = ''
+
+        before = [
+            '--foo', 'bar',
+            '--flagfile=foo.flags',
+            '--blaa=foo',
+            '--foo-flagfile',
+            '--flagfile-foo'
+            ]
+
+        after = flagfile.handle_flagfiles(before, tempdir=self.tempdir)
+
+        self.assertEquals(after, [
+                '--foo', 'bar',
+                '--config-file=' + self.tempfiles[-1],
+                '--blaa=foo',
+                '--foo-flagfile',
+                '--flagfile-foo'])
+        self.assertEquals(self.files[self.tempfiles[-1]], '[DEFAULT]\n')
+
+    def _do_test_flagfile(self, flags, conf):
+        self.files['foo.flags'] = flags
+
+        before = ['--flagfile=foo.flags']
+
+        after = flagfile.handle_flagfiles(before, tempdir=self.tempdir)
+
+        self.assertEquals(after,
+                          ['--config-file=' + t
+                           for t in reversed(self.tempfiles)])
+        self.assertEquals(self.files[self.tempfiles[-1]],
+                          '[DEFAULT]\n' + conf)
+
+    def test_flagfile(self):
+        self._do_test_flagfile('--bar=foo', 'bar=foo\n')
+
+    def test_boolean_flag(self):
+        self._do_test_flagfile('--verbose', 'verbose=true\n')
+
+    def test_boolean_inverted_flag(self):
+        self._do_test_flagfile('--noverbose', 'verbose=false\n')
+
+    def test_flagfile_comments(self):
+        self._do_test_flagfile(' \n\n#foo\n--bar=foo\n--foo=bar\n//bar',
+                               'bar=foo\nfoo=bar\n')
+
+    def test_flagfile_is_config(self):
+        self.files['foo.flags'] = '\n\n#foo\n//bar\n[DEFAULT]\nbar=foo'
+        before = ['--flagfile=foo.flags']
+        after = flagfile.handle_flagfiles(before, tempdir=self.tempdir)
+        self.assertEquals(after, ['--config-file=foo.flags'])
+
+    def test_flagfile_nested(self):
+        self.files['bar.flags'] = '--foo=bar'
+
+        self._do_test_flagfile('--flagfile=bar.flags', '')
+
+        self.assertEquals(self.files[self.tempfiles[-2]],
+                          '[DEFAULT]\nfoo=bar\n')
+
+    def test_flagfile_managed(self):
+        self.files['foo.flags'] = ''
+        before = ['--flagfile=foo.flags']
+        with flagfile.handle_flagfiles_managed(before) as after:
+            self.assertEquals(after, ['--config-file=' + self.tempfiles[-1]])
+            self.assertEquals(self.files[self.tempfiles[-1]], '[DEFAULT]\n')
+        self.assertTrue(self.tempdir is None)
diff --git a/cinder/tests/test_context.py b/cinder/tests/test_context.py
new file mode 100644
index 000000000..afa78cda6
--- /dev/null
+++ b/cinder/tests/test_context.py
@@ -0,0 +1,70 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+#    Copyright 2011 OpenStack LLC
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from cinder import context
+from cinder import test
+
+
+class ContextTestCase(test.TestCase):
+
+    def test_request_context_sets_is_admin(self):
+        ctxt = context.RequestContext('111',
+                                      '222',
+                                      roles=['admin', 'weasel'])
+        self.assertEquals(ctxt.is_admin, True)
+
+    def test_request_context_sets_is_admin_upcase(self):
+        ctxt = context.RequestContext('111',
+                                      '222',
+                                      roles=['Admin', 'weasel'])
+        self.assertEquals(ctxt.is_admin, True)
+
+    def test_request_context_read_deleted(self):
+        ctxt = context.RequestContext('111',
+                                      '222',
+                                      read_deleted='yes')
+        self.assertEquals(ctxt.read_deleted, 'yes')
+
+        ctxt.read_deleted = 'no'
+        self.assertEquals(ctxt.read_deleted, 'no')
+
+    def test_request_context_read_deleted_invalid(self):
+        self.assertRaises(ValueError,
+                          context.RequestContext,
+                          '111',
+                          '222',
+                          read_deleted=True)
+
+        ctxt = context.RequestContext('111', '222')
+        self.assertRaises(ValueError,
+                          setattr,
+                          ctxt,
+                          'read_deleted',
+                          True)
+
+    def test_extra_args_to_context_get_logged(self):
+        info = {}
+
+        def fake_warn(log_msg):
+            info['log_msg'] = log_msg
+
+        self.stubs.Set(context.LOG, 'warn', fake_warn)
+
+        c = context.RequestContext('user', 'project',
+                extra_arg1='meow', extra_arg2='wuff')
+        self.assertTrue(c)
+        self.assertIn("'extra_arg1': 'meow'", info['log_msg'])
+        self.assertIn("'extra_arg2': 'wuff'", info['log_msg'])
diff --git a/cinder/tests/test_db_api.py b/cinder/tests/test_db_api.py
new file mode 100644
index 000000000..93e079d0e
--- /dev/null
+++ b/cinder/tests/test_db_api.py
@@ -0,0 +1,331 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Unit tests for the DB API"""
+
+from cinder import test
+from cinder import context
+from cinder import db
+from cinder import exception
+from cinder import flags
+
+FLAGS = flags.FLAGS
+
+
+def _get_fake_aggr_values():
+    return {'name': 'fake_aggregate',
+            'availability_zone': 'fake_avail_zone', }
+
+
+def _get_fake_aggr_metadata():
+    return {'fake_key1': 'fake_value1',
+            'fake_key2': 'fake_value2'}
+
+
+def _get_fake_aggr_hosts():
+    return ['foo.openstack.org']
+
+
+def _create_aggregate(context=context.get_admin_context(),
+                      values=_get_fake_aggr_values(),
+                      metadata=_get_fake_aggr_metadata()):
+    return db.aggregate_create(context, values, metadata)
+
+
+def _create_aggregate_with_hosts(context=context.get_admin_context(),
+                      values=_get_fake_aggr_values(),
+                      metadata=_get_fake_aggr_metadata(),
+                      hosts=_get_fake_aggr_hosts()):
+    result = _create_aggregate(context=context,
+                               values=values, metadata=metadata)
+    for host in hosts:
+        db.aggregate_host_add(context, result.id, host)
+    return result
+
+
+class AggregateDBApiTestCase(test.TestCase):
+    def setUp(self):
+        super(AggregateDBApiTestCase, self).setUp()
+        self.user_id = 'fake'
+        self.project_id = 'fake'
+        self.context = context.RequestContext(self.user_id, self.project_id)
+
+    def test_aggregate_create(self):
+        """Ensure aggregate can be created with no metadata."""
+        result = _create_aggregate(metadata=None)
+        self.assertEqual(result['operational_state'], 'created')
+
+    def test_aggregate_create_avoid_name_conflict(self):
+        """Test we can avoid conflict on deleted aggregates."""
+        r1 = _create_aggregate(metadata=None)
+        db.aggregate_delete(context.get_admin_context(), r1.id)
+        values = {'name': r1.name, 'availability_zone': 'new_zone'}
+        r2 = _create_aggregate(values=values)
+        self.assertEqual(r2.name, values['name'])
+        self.assertEqual(r2.availability_zone, values['availability_zone'])
+        self.assertEqual(r2.operational_state, "created")
+
+    def test_aggregate_create_raise_exist_exc(self):
+        """Ensure aggregate names are distinct."""
+        _create_aggregate(metadata=None)
+        self.assertRaises(exception.AggregateNameExists,
+                          _create_aggregate, metadata=None)
+
+    def test_aggregate_get_raise_not_found(self):
+        """Ensure AggregateNotFound is raised when getting an aggregate."""
+        ctxt = context.get_admin_context()
+        # this does not exist!
+        aggregate_id = 1
+        self.assertRaises(exception.AggregateNotFound,
+                          db.aggregate_get,
+                          ctxt, aggregate_id)
+
+    def test_aggregate_metadata_get_raise_not_found(self):
+        """Ensure AggregateNotFound is raised when getting metadata."""
+        ctxt = context.get_admin_context()
+        # this does not exist!
+        aggregate_id = 1
+        self.assertRaises(exception.AggregateNotFound,
+                          db.aggregate_metadata_get,
+                          ctxt, aggregate_id)
+
+    def test_aggregate_create_with_metadata(self):
+        """Ensure aggregate can be created with metadata."""
+        ctxt = context.get_admin_context()
+        result = _create_aggregate(context=ctxt)
+        expected_metadata = db.aggregate_metadata_get(ctxt, result['id'])
+        self.assertDictMatch(expected_metadata, _get_fake_aggr_metadata())
+
+    def test_aggregate_create_low_privi_context(self):
+        """Ensure right context is applied when creating aggregate."""
+        self.assertRaises(exception.AdminRequired,
+                          db.aggregate_create,
+                          self.context, _get_fake_aggr_values())
+
+    def test_aggregate_get(self):
+        """Ensure we can get aggregate with all its relations."""
+        ctxt = context.get_admin_context()
+        result = _create_aggregate_with_hosts(context=ctxt)
+        expected = db.aggregate_get(ctxt, result.id)
+        self.assertEqual(_get_fake_aggr_hosts(), expected.hosts)
+        self.assertEqual(_get_fake_aggr_metadata(), expected.metadetails)
+
+    def test_aggregate_get_by_host(self):
+        """Ensure we can get an aggregate by host."""
+        ctxt = context.get_admin_context()
+        r1 = _create_aggregate_with_hosts(context=ctxt)
+        r2 = db.aggregate_get_by_host(ctxt, 'foo.openstack.org')
+        self.assertEqual(r1.id, r2.id)
+
+    def test_aggregate_get_by_host_not_found(self):
+        """Ensure AggregateHostNotFound is raised with unknown host."""
+        ctxt = context.get_admin_context()
+        _create_aggregate_with_hosts(context=ctxt)
+        self.assertRaises(exception.AggregateHostNotFound,
+                          db.aggregate_get_by_host, ctxt, 'unknown_host')
+
+    def test_aggregate_delete_raise_not_found(self):
+        """Ensure AggregateNotFound is raised when deleting an aggregate."""
+        ctxt = context.get_admin_context()
+        # this does not exist!
+        aggregate_id = 1
+        self.assertRaises(exception.AggregateNotFound,
+                          db.aggregate_delete,
+                          ctxt, aggregate_id)
+
+    def test_aggregate_delete(self):
+        """Ensure we can delete an aggregate."""
+        ctxt = context.get_admin_context()
+        result = _create_aggregate(context=ctxt, metadata=None)
+        db.aggregate_delete(ctxt, result['id'])
+        expected = db.aggregate_get_all(ctxt)
+        self.assertEqual(0, len(expected))
+        aggregate = db.aggregate_get(ctxt.elevated(read_deleted='yes'),
+                                     result['id'])
+        self.assertEqual(aggregate["operational_state"], "dismissed")
+
+    def test_aggregate_update(self):
+        """Ensure an aggregate can be updated."""
+        ctxt = context.get_admin_context()
+        result = _create_aggregate(context=ctxt, metadata=None)
+        new_values = _get_fake_aggr_values()
+        new_values['availability_zone'] = 'different_avail_zone'
+        updated = db.aggregate_update(ctxt, 1, new_values)
+        self.assertNotEqual(result.availability_zone,
+                            updated.availability_zone)
+
+    def test_aggregate_update_with_metadata(self):
+        """Ensure an aggregate can be updated with metadata."""
+        ctxt = context.get_admin_context()
+        result = _create_aggregate(context=ctxt, metadata=None)
+        values = _get_fake_aggr_values()
+        values['metadata'] = _get_fake_aggr_metadata()
+        db.aggregate_update(ctxt, 1, values)
+        expected = db.aggregate_metadata_get(ctxt, result.id)
+        self.assertDictMatch(_get_fake_aggr_metadata(), expected)
+
+    def test_aggregate_update_with_existing_metadata(self):
+        """Ensure an aggregate can be updated with existing metadata."""
+        ctxt = context.get_admin_context()
+        result = _create_aggregate(context=ctxt)
+        values = _get_fake_aggr_values()
+        values['metadata'] = _get_fake_aggr_metadata()
+        values['metadata']['fake_key1'] = 'foo'
+        db.aggregate_update(ctxt, 1, values)
+        expected = db.aggregate_metadata_get(ctxt, result.id)
+        self.assertDictMatch(values['metadata'], expected)
+
+    def test_aggregate_update_raise_not_found(self):
+        """Ensure AggregateNotFound is raised when updating an aggregate."""
+        ctxt = context.get_admin_context()
+        # this does not exist!
+        aggregate_id = 1
+        new_values = _get_fake_aggr_values()
+        self.assertRaises(exception.AggregateNotFound,
+                          db.aggregate_update, ctxt, aggregate_id, new_values)
+
+    def test_aggregate_get_all(self):
+        """Ensure we can get all aggregates."""
+        ctxt = context.get_admin_context()
+        counter = 3
+        for c in xrange(counter):
+            _create_aggregate(context=ctxt,
+                              values={'name': 'fake_aggregate_%d' % c,
+                                      'availability_zone': 'fake_avail_zone'},
+                              metadata=None)
+        results = db.aggregate_get_all(ctxt)
+        self.assertEqual(len(results), counter)
+
+    def test_aggregate_get_all_non_deleted(self):
+        """Ensure we get only non-deleted aggregates."""
+        ctxt = context.get_admin_context()
+        add_counter = 5
+        remove_counter = 2
+        aggregates = []
+        for c in xrange(1, add_counter):
+            values = {'name': 'fake_aggregate_%d' % c,
+                      'availability_zone': 'fake_avail_zone'}
+            aggregates.append(_create_aggregate(context=ctxt,
+                                                values=values, metadata=None))
+        for c in xrange(1, remove_counter):
+            db.aggregate_delete(ctxt, aggregates[c - 1].id)
+        results = db.aggregate_get_all(ctxt)
+        self.assertEqual(len(results), add_counter - remove_counter)
+
+    def test_aggregate_metadata_add(self):
+        """Ensure we can add metadata for the aggregate."""
+        ctxt = context.get_admin_context()
+        result = _create_aggregate(context=ctxt, metadata=None)
+        metadata = _get_fake_aggr_metadata()
+        db.aggregate_metadata_add(ctxt, result.id, metadata)
+        expected = db.aggregate_metadata_get(ctxt, result.id)
+        self.assertDictMatch(metadata, expected)
+
+    def test_aggregate_metadata_update(self):
+        """Ensure we can update metadata for the aggregate."""
+        ctxt = context.get_admin_context()
+        result = _create_aggregate(context=ctxt)
+        metadata = _get_fake_aggr_metadata()
+        key = metadata.keys()[0]
+        db.aggregate_metadata_delete(ctxt, result.id, key)
+        new_metadata = {key: 'foo'}
+        db.aggregate_metadata_add(ctxt, result.id, new_metadata)
+        expected = db.aggregate_metadata_get(ctxt, result.id)
+        metadata[key] = 'foo'
+        self.assertDictMatch(metadata, expected)
+
+    def test_aggregate_metadata_delete(self):
+        """Ensure we can delete metadata for the aggregate."""
+        ctxt = context.get_admin_context()
+        result = _create_aggregate(context=ctxt, metadata=None)
+        metadata = _get_fake_aggr_metadata()
+        db.aggregate_metadata_add(ctxt, result.id, metadata)
+        db.aggregate_metadata_delete(ctxt, result.id, metadata.keys()[0])
+        expected = db.aggregate_metadata_get(ctxt, result.id)
+        del metadata[metadata.keys()[0]]
+        self.assertDictMatch(metadata, expected)
+
+    def test_aggregate_metadata_delete_raise_not_found(self):
+        """Ensure AggregateMetadataNotFound is raised when deleting."""
+        ctxt = context.get_admin_context()
+        result = _create_aggregate(context=ctxt)
+        self.assertRaises(exception.AggregateMetadataNotFound,
+                          db.aggregate_metadata_delete,
+                          ctxt, result.id, 'foo_key')
+
+    def test_aggregate_host_add(self):
+        """Ensure we can add host to the aggregate."""
+        ctxt = context.get_admin_context()
+        result = _create_aggregate_with_hosts(context=ctxt, metadata=None)
+        expected = db.aggregate_host_get_all(ctxt, result.id)
+        self.assertEqual(_get_fake_aggr_hosts(), expected)
+
+    def test_aggregate_host_add_deleted(self):
+        """Ensure we can add a host that was previously deleted."""
+        ctxt = context.get_admin_context()
+        result = _create_aggregate_with_hosts(context=ctxt, metadata=None)
+        host = _get_fake_aggr_hosts()[0]
+        db.aggregate_host_delete(ctxt, result.id, host)
+        db.aggregate_host_add(ctxt, result.id, host)
+        expected = db.aggregate_host_get_all(ctxt, result.id)
+        self.assertEqual(len(expected), 1)
+
+    def test_aggregate_host_add_duplicate_raise_conflict(self):
+        """Ensure we cannot add host to distinct aggregates."""
+        ctxt = context.get_admin_context()
+        _create_aggregate_with_hosts(context=ctxt, metadata=None)
+        self.assertRaises(exception.AggregateHostConflict,
+                          _create_aggregate_with_hosts, ctxt,
+                          values={'name': 'fake_aggregate2',
+                                  'availability_zone': 'fake_avail_zone2', },
+                          metadata=None)
+
+    def test_aggregate_host_add_duplicate_raise_exist_exc(self):
+        """Ensure we cannot add host to the same aggregate."""
+        ctxt = context.get_admin_context()
+        result = _create_aggregate_with_hosts(context=ctxt, metadata=None)
+        self.assertRaises(exception.AggregateHostExists,
+                          db.aggregate_host_add,
+                          ctxt, result.id, _get_fake_aggr_hosts()[0])
+
+    def test_aggregate_host_add_raise_not_found(self):
+        """Ensure AggregateFound when adding a host."""
+        ctxt = context.get_admin_context()
+        # this does not exist!
+        aggregate_id = 1
+        host = _get_fake_aggr_hosts()[0]
+        self.assertRaises(exception.AggregateNotFound,
+                          db.aggregate_host_add,
+                          ctxt, aggregate_id, host)
+
+    def test_aggregate_host_delete(self):
+        """Ensure we can add host to the aggregate."""
+        ctxt = context.get_admin_context()
+        result = _create_aggregate_with_hosts(context=ctxt, metadata=None)
+        db.aggregate_host_delete(ctxt, result.id,
+                                 _get_fake_aggr_hosts()[0])
+        expected = db.aggregate_host_get_all(ctxt, result.id)
+        self.assertEqual(0, len(expected))
+
+    def test_aggregate_host_delete_raise_not_found(self):
+        """Ensure AggregateHostNotFound is raised when deleting a host."""
+        ctxt = context.get_admin_context()
+        result = _create_aggregate(context=ctxt)
+        self.assertRaises(exception.AggregateHostNotFound,
+                          db.aggregate_host_delete,
+                          ctxt, result.id, _get_fake_aggr_hosts()[0])
diff --git a/cinder/tests/test_exception.py b/cinder/tests/test_exception.py
new file mode 100644
index 000000000..717fb3d85
--- /dev/null
+++ b/cinder/tests/test_exception.py
@@ -0,0 +1,126 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from cinder import test
+from cinder import exception
+
+
+class FakeNotifier(object):
+    """Acts like the cinder.notifier.api module."""
+    ERROR = 88
+
+    def __init__(self):
+        self.provided_publisher = None
+        self.provided_event = None
+        self.provided_priority = None
+        self.provided_payload = None
+
+    def notify(self, publisher, event, priority, payload):
+        self.provided_publisher = publisher
+        self.provided_event = event
+        self.provided_priority = priority
+        self.provided_payload = payload
+
+
+def good_function():
+    return 99
+
+
+def bad_function_error():
+    raise exception.Error()
+
+
+def bad_function_exception():
+    raise test.TestingException()
+
+
+class WrapExceptionTestCase(test.TestCase):
+    def test_wrap_exception_good_return(self):
+        wrapped = exception.wrap_exception()
+        self.assertEquals(99, wrapped(good_function)())
+
+    def test_wrap_exception_throws_error(self):
+        wrapped = exception.wrap_exception()
+        self.assertRaises(exception.Error, wrapped(bad_function_error))
+
+    def test_wrap_exception_throws_exception(self):
+        wrapped = exception.wrap_exception()
+        self.assertRaises(test.TestingException,
+                          wrapped(bad_function_exception))
+
+    def test_wrap_exception_with_notifier(self):
+        notifier = FakeNotifier()
+        wrapped = exception.wrap_exception(notifier, "publisher", "event",
+                                           "level")
+        self.assertRaises(test.TestingException,
+                          wrapped(bad_function_exception))
+        self.assertEquals(notifier.provided_publisher, "publisher")
+        self.assertEquals(notifier.provided_event, "event")
+        self.assertEquals(notifier.provided_priority, "level")
+        for key in ['exception', 'args']:
+            self.assertTrue(key in notifier.provided_payload.keys())
+
+    def test_wrap_exception_with_notifier_defaults(self):
+        notifier = FakeNotifier()
+        wrapped = exception.wrap_exception(notifier)
+        self.assertRaises(test.TestingException,
+                          wrapped(bad_function_exception))
+        self.assertEquals(notifier.provided_publisher, None)
+        self.assertEquals(notifier.provided_event, "bad_function_exception")
+        self.assertEquals(notifier.provided_priority, notifier.ERROR)
+
+
+class CinderExceptionTestCase(test.TestCase):
+    def test_default_error_msg(self):
+        class FakeCinderException(exception.CinderException):
+            message = "default message"
+
+        exc = FakeCinderException()
+        self.assertEquals(unicode(exc), 'default message')
+
+    def test_error_msg(self):
+        self.assertEquals(unicode(exception.CinderException('test')),
+                          'test')
+
+    def test_default_error_msg_with_kwargs(self):
+        class FakeCinderException(exception.CinderException):
+            message = "default message: %(code)s"
+
+        exc = FakeCinderException(code=500)
+        self.assertEquals(unicode(exc), 'default message: 500')
+
+    def test_error_msg_exception_with_kwargs(self):
+        class FakeCinderException(exception.CinderException):
+            message = "default message: %(mispelled_code)s"
+
+        exc = FakeCinderException(code=500)
+        self.assertEquals(unicode(exc), 'default message: %(mispelled_code)s')
+
+    def test_default_error_code(self):
+        class FakeCinderException(exception.CinderException):
+            code = 404
+
+        exc = FakeCinderException()
+        self.assertEquals(exc.kwargs['code'], 404)
+
+    def test_error_code_from_kwarg(self):
+        class FakeCinderException(exception.CinderException):
+            code = 500
+
+        exc = FakeCinderException(code=404)
+        self.assertEquals(exc.kwargs['code'], 404)
diff --git a/cinder/tests/test_flags.py b/cinder/tests/test_flags.py
new file mode 100644
index 000000000..e94c3484e
--- /dev/null
+++ b/cinder/tests/test_flags.py
@@ -0,0 +1,146 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+# Copyright 2011 Red Hat, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import os
+import tempfile
+
+from cinder import flags
+from cinder.openstack.common import cfg
+from cinder import test
+
+FLAGS = flags.FLAGS
+FLAGS.register_opt(cfg.StrOpt('flags_unittest',
+                              default='foo',
+                              help='for testing purposes only'))
+
+
+class FlagsTestCase(test.TestCase):
+
+    def setUp(self):
+        super(FlagsTestCase, self).setUp()
+        self.FLAGS = flags.CinderConfigOpts()
+        self.global_FLAGS = flags.FLAGS
+
+    def test_declare(self):
+        self.assert_('answer' not in self.global_FLAGS)
+        flags.DECLARE('answer', 'cinder.tests.declare_flags')
+        self.assert_('answer' in self.global_FLAGS)
+        self.assertEqual(self.global_FLAGS.answer, 42)
+
+        # Make sure we don't overwrite anything
+        self.global_FLAGS.set_override('answer', 256)
+        self.assertEqual(self.global_FLAGS.answer, 256)
+        flags.DECLARE('answer', 'cinder.tests.declare_flags')
+        self.assertEqual(self.global_FLAGS.answer, 256)
+
+    def test_getopt_non_interspersed_args(self):
+        self.assert_('runtime_answer' not in self.global_FLAGS)
+
+        argv = ['flags_test', 'extra_arg', '--runtime_answer=60']
+        args = self.global_FLAGS(argv)
+        self.assertEqual(len(args), 3)
+        self.assertEqual(argv, args)
+
+    def test_runtime_and_unknown_flags(self):
+        self.assert_('runtime_answer' not in self.global_FLAGS)
+        import cinder.tests.runtime_flags
+        self.assert_('runtime_answer' in self.global_FLAGS)
+        self.assertEqual(self.global_FLAGS.runtime_answer, 54)
+
+    def test_long_vs_short_flags(self):
+        self.global_FLAGS.reset()
+        self.global_FLAGS.register_cli_opt(cfg.StrOpt('duplicate_answer_long',
+                                                      default='val',
+                                                      help='desc'))
+        argv = ['flags_test', '--duplicate_answer=60', 'extra_arg']
+        args = self.global_FLAGS(argv)
+
+        self.assert_('duplicate_answer' not in self.global_FLAGS)
+        self.assert_(self.global_FLAGS.duplicate_answer_long, 60)
+
+        self.global_FLAGS.reset()
+        self.global_FLAGS.register_cli_opt(cfg.IntOpt('duplicate_answer',
+                                                      default=60,
+                                                      help='desc'))
+        args = self.global_FLAGS(argv)
+        self.assertEqual(self.global_FLAGS.duplicate_answer, 60)
+        self.assertEqual(self.global_FLAGS.duplicate_answer_long, 'val')
+
+    def test_flag_leak_left(self):
+        self.assertEqual(FLAGS.flags_unittest, 'foo')
+        self.flags(flags_unittest='bar')
+        self.assertEqual(FLAGS.flags_unittest, 'bar')
+
+    def test_flag_leak_right(self):
+        self.assertEqual(FLAGS.flags_unittest, 'foo')
+        self.flags(flags_unittest='bar')
+        self.assertEqual(FLAGS.flags_unittest, 'bar')
+
+    def test_flag_overrides(self):
+        self.assertEqual(FLAGS.flags_unittest, 'foo')
+        self.flags(flags_unittest='bar')
+        self.assertEqual(FLAGS.flags_unittest, 'bar')
+        self.reset_flags()
+        self.assertEqual(FLAGS.flags_unittest, 'foo')
+
+    def test_flagfile(self):
+        opts = [
+            cfg.StrOpt('string', default='default', help='desc'),
+            cfg.IntOpt('int', default=1, help='desc'),
+            cfg.BoolOpt('false', default=False, help='desc'),
+            cfg.BoolOpt('true', default=True, help='desc'),
+            cfg.MultiStrOpt('multi', default=['blaa'], help='desc'),
+            ]
+
+        self.FLAGS.register_opts(opts)
+
+        (fd, path) = tempfile.mkstemp(prefix='cinder', suffix='.flags')
+
+        try:
+            os.write(fd, '--string=foo\n--int=2\n--false\n--notrue\n')
+            os.write(fd, '--multi=bar\n')
+            os.close(fd)
+
+            self.FLAGS(['flags_test', '--flagfile=' + path])
+
+            self.assertEqual(self.FLAGS.string, 'foo')
+            self.assertEqual(self.FLAGS.int, 2)
+            self.assertEqual(self.FLAGS.false, True)
+            self.assertEqual(self.FLAGS.true, False)
+            self.assertEqual(self.FLAGS.multi, ['bar'])
+
+            # Re-parse to test multistring isn't append multiple times
+            self.FLAGS(['flags_test', '--flagfile=' + path])
+            self.assertEqual(self.FLAGS.multi, ['bar'])
+        finally:
+            os.remove(path)
+
+    def test_defaults(self):
+        self.FLAGS.register_opt(cfg.StrOpt('foo', default='bar', help='desc'))
+        self.assertEqual(self.FLAGS.foo, 'bar')
+
+        self.FLAGS.set_default('foo', 'blaa')
+        self.assertEqual(self.FLAGS.foo, 'blaa')
+
+    def test_templated_values(self):
+        self.FLAGS.register_opt(cfg.StrOpt('foo', default='foo', help='desc'))
+        self.FLAGS.register_opt(cfg.StrOpt('bar', default='bar', help='desc'))
+        self.FLAGS.register_opt(cfg.StrOpt('blaa',
+                                           default='$foo$bar', help='desc'))
+        self.assertEqual(self.FLAGS.blaa, 'foobar')
diff --git a/cinder/tests/test_iscsi.py b/cinder/tests/test_iscsi.py
new file mode 100644
index 000000000..d81b4ca5e
--- /dev/null
+++ b/cinder/tests/test_iscsi.py
@@ -0,0 +1,116 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 Red Hat, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import string
+
+from cinder import test
+from cinder.volume import iscsi
+
+
+class TargetAdminTestCase(object):
+
+    def setUp(self):
+        self.cmds = []
+
+        self.tid = 1
+        self.target_name = 'iqn.2011-09.org.foo.bar:blaa'
+        self.lun = 10
+        self.path = '/foo/bar/blaa'
+
+        self.script_template = None
+
+    def get_script_params(self):
+        return {'tid': self.tid,
+                'target_name': self.target_name,
+                'lun': self.lun,
+                'path': self.path}
+
+    def get_script(self):
+        return self.script_template % self.get_script_params()
+
+    def fake_execute(self, *cmd, **kwargs):
+        self.cmds.append(string.join(cmd))
+        return "", None
+
+    def clear_cmds(self):
+        cmds = []
+
+    def verify_cmds(self, cmds):
+        self.assertEqual(len(cmds), len(self.cmds))
+        for a, b in zip(cmds, self.cmds):
+            self.assertEqual(a, b)
+
+    def verify(self):
+        script = self.get_script()
+        cmds = []
+        for line in script.split('\n'):
+            if not line.strip():
+                continue
+            cmds.append(line)
+        self.verify_cmds(cmds)
+
+    def run_commands(self):
+        tgtadm = iscsi.get_target_admin()
+        tgtadm.set_execute(self.fake_execute)
+        tgtadm.new_target(self.target_name, self.tid)
+        tgtadm.show_target(self.tid)
+        tgtadm.new_logicalunit(self.tid, self.lun, self.path)
+        tgtadm.delete_logicalunit(self.tid, self.lun)
+        tgtadm.delete_target(self.tid)
+
+    def test_target_admin(self):
+        self.clear_cmds()
+        self.run_commands()
+        self.verify()
+
+
+class TgtAdmTestCase(test.TestCase, TargetAdminTestCase):
+
+    def setUp(self):
+        super(TgtAdmTestCase, self).setUp()
+        TargetAdminTestCase.setUp(self)
+        self.flags(iscsi_helper='tgtadm')
+        self.script_template = "\n".join([
+        "tgtadm --op new --lld=iscsi --mode=target --tid=%(tid)s "
+                "--targetname=%(target_name)s",
+        "tgtadm --op bind --lld=iscsi --mode=target --initiator-address=ALL "
+                "--tid=%(tid)s",
+        "tgtadm --op show --lld=iscsi --mode=target --tid=%(tid)s",
+        "tgtadm --op new --lld=iscsi --mode=logicalunit --tid=%(tid)s "
+                "--lun=%(lun)d --backing-store=%(path)s",
+        "tgtadm --op delete --lld=iscsi --mode=logicalunit --tid=%(tid)s "
+                "--lun=%(lun)d",
+        "tgtadm --op delete --lld=iscsi --mode=target --tid=%(tid)s"])
+
+    def get_script_params(self):
+        params = super(TgtAdmTestCase, self).get_script_params()
+        params['lun'] += 1
+        return params
+
+
+class IetAdmTestCase(test.TestCase, TargetAdminTestCase):
+
+    def setUp(self):
+        super(IetAdmTestCase, self).setUp()
+        TargetAdminTestCase.setUp(self)
+        self.flags(iscsi_helper='ietadm')
+        self.script_template = "\n".join([
+        "ietadm --op new --tid=%(tid)s --params Name=%(target_name)s",
+        "ietadm --op show --tid=%(tid)s",
+        "ietadm --op new --tid=%(tid)s --lun=%(lun)d "
+                "--params Path=%(path)s,Type=fileio",
+        "ietadm --op delete --tid=%(tid)s --lun=%(lun)d",
+        "ietadm --op delete --tid=%(tid)s"])
diff --git a/cinder/tests/test_log.py b/cinder/tests/test_log.py
new file mode 100644
index 000000000..3d07df447
--- /dev/null
+++ b/cinder/tests/test_log.py
@@ -0,0 +1,218 @@
+import cStringIO
+import json
+import logging
+import sys
+
+from cinder import context
+from cinder import flags
+from cinder import log
+from cinder.notifier import api as notifier
+from cinder import test
+
+FLAGS = flags.FLAGS
+flags.DECLARE('list_notifier_drivers',
+              'cinder.notifier.list_notifier')
+
+
+def _fake_context():
+    return context.RequestContext(1, 1)
+
+
+class LoggerTestCase(test.TestCase):
+    def setUp(self):
+        super(LoggerTestCase, self).setUp()
+        self.log = log.getLogger()
+
+    def test_handlers_have_cinder_formatter(self):
+        formatters = []
+        for h in self.log.logger.handlers:
+            f = h.formatter
+            if isinstance(f, log.LegacyCinderFormatter):
+                formatters.append(f)
+        self.assert_(formatters)
+        self.assertEqual(len(formatters), len(self.log.logger.handlers))
+
+    def test_handles_context_kwarg(self):
+        self.log.info("foo", context=_fake_context())
+        self.assert_(True)  # didn't raise exception
+
+    def test_audit_handles_context_arg(self):
+        self.log.audit("foo", context=_fake_context())
+        self.assert_(True)  # didn't raise exception
+
+    def test_will_be_verbose_if_verbose_flag_set(self):
+        self.flags(verbose=True)
+        log.setup()
+        self.assertEqual(logging.DEBUG, self.log.logger.getEffectiveLevel())
+
+    def test_will_not_be_verbose_if_verbose_flag_not_set(self):
+        self.flags(verbose=False)
+        log.setup()
+        self.assertEqual(logging.INFO, self.log.logger.getEffectiveLevel())
+
+    def test_no_logging_via_module(self):
+        for func in ('critical', 'error', 'exception', 'warning', 'warn',
+                     'info', 'debug', 'log', 'audit'):
+            self.assertRaises(AttributeError, getattr, log, func)
+
+
+class LogHandlerTestCase(test.TestCase):
+    def test_log_path_logdir(self):
+        self.flags(logdir='/some/path', logfile=None)
+        self.assertEquals(log._get_log_file_path(binary='foo-bar'),
+                         '/some/path/foo-bar.log')
+
+    def test_log_path_logfile(self):
+        self.flags(logfile='/some/path/foo-bar.log')
+        self.assertEquals(log._get_log_file_path(binary='foo-bar'),
+                         '/some/path/foo-bar.log')
+
+    def test_log_path_none(self):
+        self.flags(logdir=None, logfile=None)
+        self.assertTrue(log._get_log_file_path(binary='foo-bar') is None)
+
+    def test_log_path_logfile_overrides_logdir(self):
+        self.flags(logdir='/some/other/path',
+                   logfile='/some/path/foo-bar.log')
+        self.assertEquals(log._get_log_file_path(binary='foo-bar'),
+                         '/some/path/foo-bar.log')
+
+
+class PublishErrorsHandlerTestCase(test.TestCase):
+    """Tests for cinder.log.PublishErrorsHandler"""
+    def setUp(self):
+        super(PublishErrorsHandlerTestCase, self).setUp()
+        self.publiserrorshandler = log.PublishErrorsHandler(logging.ERROR)
+
+    def test_emit_cfg_list_notifier_drivers_in_flags(self):
+        self.stub_flg = False
+
+        def fake_notifier(*args, **kwargs):
+            self.stub_flg = True
+
+        self.stubs.Set(notifier, 'notify', fake_notifier)
+        logrecord = logging.LogRecord('name', 'WARN', '/tmp', 1,
+                                      'Message', None, None)
+        self.publiserrorshandler.emit(logrecord)
+        self.assertTrue(self.stub_flg)
+
+    def test_emit_cfg_log_notifier_in_list_notifier_drivers(self):
+        self.flags(list_notifier_drivers=['cinder.notifier.rabbit_notifier',
+                                          'cinder.notifier.log_notifier'])
+        self.stub_flg = True
+
+        def fake_notifier(*args, **kwargs):
+            self.stub_flg = False
+
+        self.stubs.Set(notifier, 'notify', fake_notifier)
+        logrecord = logging.LogRecord('name', 'WARN', '/tmp', 1,
+                                      'Message', None, None)
+        self.publiserrorshandler.emit(logrecord)
+        self.assertTrue(self.stub_flg)
+
+
+class CinderFormatterTestCase(test.TestCase):
+    def setUp(self):
+        super(CinderFormatterTestCase, self).setUp()
+        self.flags(logging_context_format_string="HAS CONTEXT "
+                                                 "[%(request_id)s]: "
+                                                 "%(message)s",
+                   logging_default_format_string="NOCTXT: %(message)s",
+                   logging_debug_format_suffix="--DBG")
+        self.log = log.getLogger()
+        self.stream = cStringIO.StringIO()
+        self.handler = logging.StreamHandler(self.stream)
+        self.handler.setFormatter(log.LegacyCinderFormatter())
+        self.log.logger.addHandler(self.handler)
+        self.level = self.log.logger.getEffectiveLevel()
+        self.log.logger.setLevel(logging.DEBUG)
+
+    def tearDown(self):
+        self.log.logger.setLevel(self.level)
+        self.log.logger.removeHandler(self.handler)
+        super(CinderFormatterTestCase, self).tearDown()
+
+    def test_uncontextualized_log(self):
+        self.log.info("foo")
+        self.assertEqual("NOCTXT: foo\n", self.stream.getvalue())
+
+    def test_contextualized_log(self):
+        ctxt = _fake_context()
+        self.log.info("bar", context=ctxt)
+        expected = "HAS CONTEXT [%s]: bar\n" % ctxt.request_id
+        self.assertEqual(expected, self.stream.getvalue())
+
+    def test_debugging_log(self):
+        self.log.debug("baz")
+        self.assertEqual("NOCTXT: baz --DBG\n", self.stream.getvalue())
+
+
+class CinderLoggerTestCase(test.TestCase):
+    def setUp(self):
+        super(CinderLoggerTestCase, self).setUp()
+        levels = FLAGS.default_log_levels
+        levels.append("cinder-test=AUDIT")
+        self.flags(default_log_levels=levels,
+                   verbose=True)
+        log.setup()
+        self.log = log.getLogger('cinder-test')
+
+    def test_has_level_from_flags(self):
+        self.assertEqual(logging.AUDIT, self.log.logger.getEffectiveLevel())
+
+    def test_child_log_has_level_of_parent_flag(self):
+        l = log.getLogger('cinder-test.foo')
+        self.assertEqual(logging.AUDIT, l.logger.getEffectiveLevel())
+
+
+class JSONFormatterTestCase(test.TestCase):
+    def setUp(self):
+        super(JSONFormatterTestCase, self).setUp()
+        self.log = log.getLogger('test-json')
+        self.stream = cStringIO.StringIO()
+        handler = logging.StreamHandler(self.stream)
+        handler.setFormatter(log.JSONFormatter())
+        self.log.logger.addHandler(handler)
+        self.log.logger.setLevel(logging.DEBUG)
+
+    def test_json(self):
+        test_msg = 'This is a %(test)s line'
+        test_data = {'test': 'log'}
+        self.log.debug(test_msg, test_data)
+
+        data = json.loads(self.stream.getvalue())
+        self.assertTrue(data)
+        self.assertTrue('extra' in data)
+        self.assertEqual('test-json', data['name'])
+
+        self.assertEqual(test_msg % test_data, data['message'])
+        self.assertEqual(test_msg, data['msg'])
+        self.assertEqual(test_data, data['args'])
+
+        self.assertEqual('test_log.py', data['filename'])
+        self.assertEqual('test_json', data['funcname'])
+
+        self.assertEqual('DEBUG', data['levelname'])
+        self.assertEqual(logging.DEBUG, data['levelno'])
+        self.assertFalse(data['traceback'])
+
+    def test_json_exception(self):
+        test_msg = 'This is %s'
+        test_data = 'exceptional'
+        try:
+            raise Exception('This is exceptional')
+        except Exception:
+            self.log.exception(test_msg, test_data)
+
+        data = json.loads(self.stream.getvalue())
+        self.assertTrue(data)
+        self.assertTrue('extra' in data)
+        self.assertEqual('test-json', data['name'])
+
+        self.assertEqual(test_msg % test_data, data['message'])
+        self.assertEqual(test_msg, data['msg'])
+        self.assertEqual([test_data], data['args'])
+
+        self.assertEqual('ERROR', data['levelname'])
+        self.assertEqual(logging.ERROR, data['levelno'])
+        self.assertTrue(data['traceback'])
diff --git a/cinder/tests/test_migrations.conf b/cinder/tests/test_migrations.conf
new file mode 100644
index 000000000..774f14994
--- /dev/null
+++ b/cinder/tests/test_migrations.conf
@@ -0,0 +1,9 @@
+[DEFAULT]
+# Set up any number of migration data stores you want, one
+# The "name" used in the test is the config variable key.
+#sqlite=sqlite:///test_migrations.db
+sqlite=sqlite://
+#mysql=mysql://root:@localhost/test_migrations
+#postgresql=postgresql://user:pass@localhost/test_migrations
+[walk_style]
+snake_walk=yes
diff --git a/cinder/tests/test_migrations.py b/cinder/tests/test_migrations.py
new file mode 100644
index 000000000..e16e9d04f
--- /dev/null
+++ b/cinder/tests/test_migrations.py
@@ -0,0 +1,296 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010-2011 OpenStack, LLC
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+Tests for database migrations. This test case reads the configuration
+file test_migrations.conf for database connection settings
+to use in the tests. For each connection found in the config file,
+the test case runs a series of test cases to ensure that migrations work
+properly both upgrading and downgrading, and that no data loss occurs
+if possible.
+"""
+
+import ConfigParser
+import commands
+import os
+import unittest
+import urlparse
+
+from migrate.versioning import repository
+import sqlalchemy
+
+import cinder.db.sqlalchemy.migrate_repo
+from cinder.db.sqlalchemy.migration import versioning_api as migration_api
+from cinder import log as logging
+from cinder import test
+
+LOG = logging.getLogger('cinder.tests.test_migrations')
+
+
+def _mysql_get_connect_string(user="openstack_citest",
+                              passwd="openstack_citest",
+                              database="openstack_citest"):
+    """
+    Try to get a connection with a very specfic set of values, if we get
+    these then we'll run the mysql tests, otherwise they are skipped
+    """
+    return "mysql://%(user)s:%(passwd)s@localhost/%(database)s" % locals()
+
+
+def _is_mysql_avail(user="openstack_citest",
+                    passwd="openstack_citest",
+                    database="openstack_citest"):
+    try:
+        connect_uri = _mysql_get_connect_string(
+            user=user, passwd=passwd, database=database)
+        engine = sqlalchemy.create_engine(connect_uri)
+        connection = engine.connect()
+    except Exception:
+        # intential catch all to handle exceptions even if we don't
+        # have mysql code loaded at all.
+        return False
+    else:
+        connection.close()
+        return True
+
+
+def _missing_mysql():
+    if "NOVA_TEST_MYSQL_PRESENT" in os.environ:
+        return True
+    return not _is_mysql_avail()
+
+
+class TestMigrations(test.TestCase):
+    """Test sqlalchemy-migrate migrations"""
+
+    TEST_DATABASES = {}
+    DEFAULT_CONFIG_FILE = os.path.join(os.path.dirname(__file__),
+                                       'test_migrations.conf')
+    # Test machines can set the CINDER_TEST_MIGRATIONS_CONF variable
+    # to override the location of the config file for migration testing
+    CONFIG_FILE_PATH = os.environ.get('CINDER_TEST_MIGRATIONS_CONF',
+                                      DEFAULT_CONFIG_FILE)
+    MIGRATE_FILE = cinder.db.sqlalchemy.migrate_repo.__file__
+    REPOSITORY = repository.Repository(
+                                os.path.abspath(os.path.dirname(MIGRATE_FILE)))
+
+    def setUp(self):
+        super(TestMigrations, self).setUp()
+
+        self.snake_walk = False
+
+        # Load test databases from the config file. Only do this
+        # once. No need to re-run this on each test...
+        LOG.debug('config_path is %s' % TestMigrations.CONFIG_FILE_PATH)
+        if not TestMigrations.TEST_DATABASES:
+            if os.path.exists(TestMigrations.CONFIG_FILE_PATH):
+                cp = ConfigParser.RawConfigParser()
+                try:
+                    cp.read(TestMigrations.CONFIG_FILE_PATH)
+                    defaults = cp.defaults()
+                    for key, value in defaults.items():
+                        TestMigrations.TEST_DATABASES[key] = value
+                    self.snake_walk = cp.getboolean('walk_style', 'snake_walk')
+                except ConfigParser.ParsingError, e:
+                    self.fail("Failed to read test_migrations.conf config "
+                              "file. Got error: %s" % e)
+            else:
+                self.fail("Failed to find test_migrations.conf config "
+                          "file.")
+
+        self.engines = {}
+        for key, value in TestMigrations.TEST_DATABASES.items():
+            self.engines[key] = sqlalchemy.create_engine(value)
+
+        # We start each test case with a completely blank slate.
+        self._reset_databases()
+
+    def tearDown(self):
+
+        # We destroy the test data store between each test case,
+        # and recreate it, which ensures that we have no side-effects
+        # from the tests
+        self._reset_databases()
+
+        # remove these from the list so they aren't used in the migration tests
+        if "mysqlcitest" in self.engines:
+            del self.engines["mysqlcitest"]
+        if "mysqlcitest" in TestMigrations.TEST_DATABASES:
+            del TestMigrations.TEST_DATABASES["mysqlcitest"]
+        super(TestMigrations, self).tearDown()
+
+    def _reset_databases(self):
+        def execute_cmd(cmd=None):
+            status, output = commands.getstatusoutput(cmd)
+            LOG.debug(output)
+            self.assertEqual(0, status)
+        for key, engine in self.engines.items():
+            conn_string = TestMigrations.TEST_DATABASES[key]
+            conn_pieces = urlparse.urlparse(conn_string)
+            if conn_string.startswith('sqlite'):
+                # We can just delete the SQLite database, which is
+                # the easiest and cleanest solution
+                db_path = conn_pieces.path.strip('/')
+                if os.path.exists(db_path):
+                    os.unlink(db_path)
+                # No need to recreate the SQLite DB. SQLite will
+                # create it for us if it's not there...
+            elif conn_string.startswith('mysql'):
+                # We can execute the MySQL client to destroy and re-create
+                # the MYSQL database, which is easier and less error-prone
+                # than using SQLAlchemy to do this via MetaData...trust me.
+                database = conn_pieces.path.strip('/')
+                loc_pieces = conn_pieces.netloc.split('@')
+                host = loc_pieces[1]
+                auth_pieces = loc_pieces[0].split(':')
+                user = auth_pieces[0]
+                password = ""
+                if len(auth_pieces) > 1:
+                    if auth_pieces[1].strip():
+                        password = "-p\"%s\"" % auth_pieces[1]
+                sql = ("drop database if exists %(database)s; "
+                       "create database %(database)s;") % locals()
+                cmd = ("mysql -u \"%(user)s\" %(password)s -h %(host)s "
+                       "-e \"%(sql)s\"") % locals()
+                execute_cmd(cmd)
+            elif conn_string.startswith('postgresql'):
+                database = conn_pieces.path.strip('/')
+                loc_pieces = conn_pieces.netloc.split('@')
+                host = loc_pieces[1]
+                auth_pieces = loc_pieces[0].split(':')
+                user = auth_pieces[0]
+                password = ""
+                if len(auth_pieces) > 1:
+                    if auth_pieces[1].strip():
+                        password = auth_pieces[1]
+                cmd = ("touch ~/.pgpass;"
+                       "chmod 0600 ~/.pgpass;"
+                       "sed -i -e"
+                       "'1{s/^.*$/\*:\*:\*:%(user)s:%(password)s/};"
+                       "1!d' ~/.pgpass") % locals()
+                execute_cmd(cmd)
+                sql = ("UPDATE pg_catalog.pg_database SET datallowconn=false "
+                       "WHERE datname='%(database)s';") % locals()
+                cmd = ("psql -U%(user)s -h%(host)s -c\"%(sql)s\"") % locals()
+                execute_cmd(cmd)
+                sql = ("SELECT pg_catalog.pg_terminate_backend(procpid) "
+                       "FROM pg_catalog.pg_stat_activity "
+                       "WHERE datname='%(database)s';") % locals()
+                cmd = ("psql -U%(user)s -h%(host)s -c\"%(sql)s\"") % locals()
+                execute_cmd(cmd)
+                sql = ("drop database if exists %(database)s;") % locals()
+                cmd = ("psql -U%(user)s -h%(host)s -c\"%(sql)s\"") % locals()
+                execute_cmd(cmd)
+                sql = ("create database %(database)s;") % locals()
+                cmd = ("psql -U%(user)s -h%(host)s -c\"%(sql)s\"") % locals()
+                execute_cmd(cmd)
+
+    def test_walk_versions(self):
+        """
+        Walks all version scripts for each tested database, ensuring
+        that there are no errors in the version scripts for each engine
+        """
+        for key, engine in self.engines.items():
+            self._walk_versions(engine, self.snake_walk)
+
+    def test_mysql_connect_fail(self):
+        """
+        Test that we can trigger a mysql connection failure and we fail
+        gracefully to ensure we don't break people without mysql
+        """
+        if _is_mysql_avail(user="openstack_cifail"):
+            self.fail("Shouldn't have connected")
+
+    @test.skip_if(_missing_mysql(), "mysql not available")
+    def test_mysql_innodb(self):
+        """
+        Test that table creation on mysql only builds InnoDB tables
+        """
+        # add this to the global lists to make reset work with it, it's removed
+        # automaticaly in tearDown so no need to clean it up here.
+        connect_string = _mysql_get_connect_string()
+        engine = sqlalchemy.create_engine(connect_string)
+        self.engines["mysqlcitest"] = engine
+        TestMigrations.TEST_DATABASES["mysqlcitest"] = connect_string
+
+        # build a fully populated mysql database with all the tables
+        self._reset_databases()
+        self._walk_versions(engine, False, False)
+
+        uri = self._mysql_get_connect_string(database="information_schema")
+        connection = sqlalchemy.create_engine(uri).connect()
+
+        # sanity check
+        total = connection.execute("SELECT count(*) "
+                                   "from information_schema.TABLES "
+                                   "where TABLE_SCHEMA='openstack_citest'")
+        self.assertTrue(total.scalar() > 0, "No tables found. Wrong schema?")
+
+        noninnodb = connection.execute("SELECT count(*) "
+                                       "from information_schema.TABLES "
+                                       "where TABLE_SCHEMA='openstack_citest' "
+                                       "and ENGINE!='InnoDB'")
+        count = noninnodb.scalar()
+        self.assertEqual(count, 0, "%d non InnoDB tables created" % count)
+
+    def _walk_versions(self, engine=None, snake_walk=False, downgrade=True):
+        # Determine latest version script from the repo, then
+        # upgrade from 1 through to the latest, with no data
+        # in the databases. This just checks that the schema itself
+        # upgrades successfully.
+
+        # Place the database under version control
+        migration_api.version_control(engine, TestMigrations.REPOSITORY)
+        self.assertEqual(0,
+                migration_api.db_version(engine,
+                                         TestMigrations.REPOSITORY))
+
+        LOG.debug('latest version is %s' % TestMigrations.REPOSITORY.latest)
+
+        for version in xrange(1, TestMigrations.REPOSITORY.latest + 1):
+            # upgrade -> downgrade -> upgrade
+            self._migrate_up(engine, version)
+            if snake_walk:
+                self._migrate_down(engine, version - 1)
+                self._migrate_up(engine, version)
+
+        if downgrade:
+            # Now walk it back down to 0 from the latest, testing
+            # the downgrade paths.
+            for version in reversed(
+                xrange(0, TestMigrations.REPOSITORY.latest)):
+                # downgrade -> upgrade -> downgrade
+                self._migrate_down(engine, version)
+                if snake_walk:
+                    self._migrate_up(engine, version + 1)
+                    self._migrate_down(engine, version)
+
+    def _migrate_down(self, engine, version):
+        migration_api.downgrade(engine,
+                                TestMigrations.REPOSITORY,
+                                version)
+        self.assertEqual(version,
+                         migration_api.db_version(engine,
+                                                  TestMigrations.REPOSITORY))
+
+    def _migrate_up(self, engine, version):
+        migration_api.upgrade(engine,
+                              TestMigrations.REPOSITORY,
+                              version)
+        self.assertEqual(version,
+                migration_api.db_version(engine,
+                                         TestMigrations.REPOSITORY))
diff --git a/cinder/tests/test_misc.py b/cinder/tests/test_misc.py
new file mode 100644
index 000000000..d89b2a698
--- /dev/null
+++ b/cinder/tests/test_misc.py
@@ -0,0 +1,184 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+#    Copyright 2010 OpenStack LLC
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import commands
+import errno
+import glob
+import os
+import select
+
+from eventlet import greenpool
+from eventlet import greenthread
+import lockfile
+
+from cinder import exception
+from cinder import test
+from cinder import utils
+
+
+class ExceptionTestCase(test.TestCase):
+    @staticmethod
+    def _raise_exc(exc):
+        raise exc()
+
+    def test_exceptions_raise(self):
+        for name in dir(exception):
+            exc = getattr(exception, name)
+            if isinstance(exc, type):
+                self.assertRaises(exc, self._raise_exc, exc)
+
+
+class ProjectTestCase(test.TestCase):
+    def test_authors_up_to_date(self):
+        topdir = os.path.normpath(os.path.dirname(__file__) + '/../../')
+        missing = set()
+        contributors = set()
+        mailmap = utils.parse_mailmap(os.path.join(topdir, '.mailmap'))
+        authors_file = open(os.path.join(topdir,
+                                         'Authors'), 'r').read().lower()
+
+        if os.path.exists(os.path.join(topdir, '.git')):
+            for email in commands.getoutput('git log --format=%ae').split():
+                if not email:
+                    continue
+                if "jenkins" in email and "openstack.org" in email:
+                    continue
+                email = '<' + email.lower() + '>'
+                contributors.add(utils.str_dict_replace(email, mailmap))
+        else:
+            return
+
+        for contributor in contributors:
+            if contributor == 'cinder-core':
+                continue
+            if not contributor in authors_file:
+                missing.add(contributor)
+
+        self.assertTrue(len(missing) == 0,
+                        '%r not listed in Authors' % missing)
+
+    def test_all_migrations_have_downgrade(self):
+        topdir = os.path.normpath(os.path.dirname(__file__) + '/../../')
+        py_glob = os.path.join(topdir, "cinder", "db", "sqlalchemy",
+                               "migrate_repo", "versions", "*.py")
+        missing_downgrade = []
+        for path in glob.iglob(py_glob):
+            has_upgrade = False
+            has_downgrade = False
+            with open(path, "r") as f:
+                for line in f:
+                    if 'def upgrade(' in line:
+                        has_upgrade = True
+                    if 'def downgrade(' in line:
+                        has_downgrade = True
+
+                if has_upgrade and not has_downgrade:
+                    fname = os.path.basename(path)
+                    missing_downgrade.append(fname)
+
+        helpful_msg = (_("The following migrations are missing a downgrade:"
+                         "\n\t%s") % '\n\t'.join(sorted(missing_downgrade)))
+        self.assert_(not missing_downgrade, helpful_msg)
+
+
+class LockTestCase(test.TestCase):
+    def test_synchronized_wrapped_function_metadata(self):
+        @utils.synchronized('whatever')
+        def foo():
+            """Bar"""
+            pass
+        self.assertEquals(foo.__doc__, 'Bar', "Wrapped function's docstring "
+                                              "got lost")
+        self.assertEquals(foo.__name__, 'foo', "Wrapped function's name "
+                                               "got mangled")
+
+    def test_synchronized_internally(self):
+        """We can lock across multiple green threads"""
+        saved_sem_num = len(utils._semaphores)
+        seen_threads = list()
+
+        @utils.synchronized('testlock2', external=False)
+        def f(id):
+            for x in range(10):
+                seen_threads.append(id)
+                greenthread.sleep(0)
+
+        threads = []
+        pool = greenpool.GreenPool(10)
+        for i in range(10):
+            threads.append(pool.spawn(f, i))
+
+        for thread in threads:
+            thread.wait()
+
+        self.assertEquals(len(seen_threads), 100)
+        # Looking at the seen threads, split it into chunks of 10, and verify
+        # that the last 9 match the first in each chunk.
+        for i in range(10):
+            for j in range(9):
+                self.assertEquals(seen_threads[i * 10],
+                                  seen_threads[i * 10 + 1 + j])
+
+        self.assertEqual(saved_sem_num, len(utils._semaphores),
+                         "Semaphore leak detected")
+
+    def test_nested_external_fails(self):
+        """We can not nest external syncs"""
+
+        @utils.synchronized('testlock1', external=True)
+        def outer_lock():
+
+            @utils.synchronized('testlock2', external=True)
+            def inner_lock():
+                pass
+            inner_lock()
+        try:
+            self.assertRaises(lockfile.NotMyLock, outer_lock)
+        finally:
+            utils.cleanup_file_locks()
+
+    def test_synchronized_externally(self):
+        """We can lock across multiple processes"""
+        rpipe1, wpipe1 = os.pipe()
+        rpipe2, wpipe2 = os.pipe()
+
+        @utils.synchronized('testlock1', external=True)
+        def f(rpipe, wpipe):
+            try:
+                os.write(wpipe, "foo")
+            except OSError, e:
+                self.assertEquals(e.errno, errno.EPIPE)
+                return
+
+            rfds, _wfds, _efds = select.select([rpipe], [], [], 1)
+            self.assertEquals(len(rfds), 0, "The other process, which was"
+                                            " supposed to be locked, "
+                                            "wrote on its end of the "
+                                            "pipe")
+            os.close(rpipe)
+
+        pid = os.fork()
+        if pid > 0:
+            os.close(wpipe1)
+            os.close(rpipe2)
+
+            f(rpipe1, wpipe2)
+        else:
+            os.close(rpipe1)
+            os.close(wpipe2)
+
+            f(rpipe2, wpipe1)
+            os._exit(0)
diff --git a/cinder/tests/test_netapp.py b/cinder/tests/test_netapp.py
new file mode 100644
index 000000000..179e46b8b
--- /dev/null
+++ b/cinder/tests/test_netapp.py
@@ -0,0 +1,927 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2012 NetApp, Inc.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+Tests for NetApp volume driver
+
+"""
+
+import BaseHTTPServer
+import httplib
+import StringIO
+
+from lxml import etree
+
+from cinder import log as logging
+from cinder import test
+from cinder.volume import netapp
+
+LOG = logging.getLogger("cinder.volume.driver")
+
+
+WSDL_HEADER = """<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
+    xmlns:na="http://www.netapp.com/management/v1"
+    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+    xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="NetAppDfm"
+    targetNamespace="http://www.netapp.com/management/v1">"""
+
+WSDL_TYPES = """<types>
+<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
+    targetNamespace="http://www.netapp.com/management/v1">
+<xsd:element name="ApiProxy">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="Request" type="na:Request"/>
+            <xsd:element name="Target" type="xsd:string"/>
+            <xsd:element minOccurs="0" name="Timeout" type="xsd:integer"/>
+            <xsd:element minOccurs="0" name="Username" type="xsd:string"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="ApiProxyResult">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="Response" type="na:Response"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DatasetEditBegin">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="DatasetNameOrId" type="na:ObjNameOrId"/>
+            <xsd:element minOccurs="0" name="Force" type="xsd:boolean"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DatasetEditBeginResult">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="EditLockId" type="xsd:integer"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DatasetEditCommit">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element minOccurs="0" name="AssumeConfirmation"
+                type="xsd:boolean"/>
+            <xsd:element name="EditLockId" type="xsd:integer"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DatasetEditCommitResult">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element minOccurs="0" name="IsProvisioningFailure"
+                type="xsd:boolean"/>
+            <xsd:element minOccurs="0" name="JobIds" type="na:ArrayOfJobInfo"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DatasetEditRollback">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="EditLockId" type="xsd:integer"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DatasetEditRollbackResult">
+    <xsd:complexType/>
+</xsd:element>
+<xsd:element name="DatasetListInfoIterEnd">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="Tag" type="xsd:string"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DatasetListInfoIterEndResult">
+    <xsd:complexType/>
+</xsd:element>
+<xsd:element name="DatasetListInfoIterNext">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="Maximum" type="xsd:integer"/>
+            <xsd:element name="Tag" type="xsd:string"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DatasetListInfoIterNextResult">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="Datasets" type="na:ArrayOfDatasetInfo"/>
+            <xsd:element name="Records" type="xsd:integer"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DatasetListInfoIterStart">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element minOccurs="0" name="ObjectNameOrId"
+                type="na:ObjNameOrId"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DatasetListInfoIterStartResult">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="Records" type="xsd:integer"/>
+            <xsd:element name="Tag" type="xsd:string"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DatasetMemberListInfoIterEnd">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="Tag" type="xsd:string"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DatasetMemberListInfoIterEndResult">
+    <xsd:complexType/>
+</xsd:element>
+<xsd:element name="DatasetMemberListInfoIterNext">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="Maximum" type="xsd:integer"/>
+            <xsd:element name="Tag" type="xsd:string"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DatasetMemberListInfoIterNextResult">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="DatasetMembers"
+                type="na:ArrayOfDatasetMemberInfo"/>
+            <xsd:element name="Records" type="xsd:integer"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DatasetMemberListInfoIterStart">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="DatasetNameOrId" type="na:ObjNameOrId"/>
+            <xsd:element minOccurs="0" name="IncludeExportsInfo"
+                type="xsd:boolean"/>
+            <xsd:element minOccurs="0" name="IncludeIndirect"
+                type="xsd:boolean"/>
+            <xsd:element minOccurs="0" name="MemberType" type="xsd:string"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DatasetMemberListInfoIterStartResult">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="Records" type="xsd:integer"/>
+            <xsd:element name="Tag" type="xsd:string"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DatasetProvisionMember">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="EditLockId" type="xsd:integer"/>
+            <xsd:element name="ProvisionMemberRequestInfo"
+                type="na:ProvisionMemberRequestInfo"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DatasetProvisionMemberResult">
+    <xsd:complexType/>
+</xsd:element>
+<xsd:element name="DatasetRemoveMember">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="DatasetMemberParameters"
+                type="na:ArrayOfDatasetMemberParameter"/>
+            <xsd:element minOccurs="0" name="Destroy" type="xsd:boolean"/>
+            <xsd:element name="EditLockId" type="xsd:integer"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DatasetRemoveMemberResult">
+    <xsd:complexType/>
+</xsd:element>
+<xsd:element name="DpJobProgressEventListIterEnd">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="Tag" type="xsd:string"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DpJobProgressEventListIterEndResult">
+    <xsd:complexType/>
+</xsd:element>
+<xsd:element name="DpJobProgressEventListIterNext">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="Maximum" type="xsd:integer"/>
+            <xsd:element name="Tag" type="xsd:string"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DpJobProgressEventListIterNextResult">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="ProgressEvents"
+                type="na:ArrayOfDpJobProgressEventInfo"/>
+            <xsd:element name="Records" type="xsd:integer"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DpJobProgressEventListIterStart">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element minOccurs="0" name="JobId" type="xsd:integer"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DpJobProgressEventListIterStartResult">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="Records" type="xsd:integer"/>
+            <xsd:element name="Tag" type="xsd:string"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DfmAbout">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element minOccurs="0" name="IncludeDirectorySizeInfo"
+                type="xsd:boolean"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="DfmAboutResult">
+    <xsd:complexType>
+        <xsd:all/>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="HostListInfoIterEnd">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="Tag" type="xsd:string"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="HostListInfoIterEndResult">
+    <xsd:complexType/>
+</xsd:element>
+<xsd:element name="HostListInfoIterNext">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="Maximum" type="xsd:integer"/>
+            <xsd:element name="Tag" type="xsd:string"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="HostListInfoIterNextResult">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="Hosts" type="na:ArrayOfHostInfo"/>
+            <xsd:element name="Records" type="xsd:integer"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="HostListInfoIterStart">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element minOccurs="0" name="ObjectNameOrId"
+                type="na:ObjNameOrId"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="HostListInfoIterStartResult">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="Records" type="xsd:integer"/>
+            <xsd:element name="Tag" type="xsd:string"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="LunListInfoIterEnd">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="Tag" type="xsd:string"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="LunListInfoIterEndResult">
+    <xsd:complexType/>
+</xsd:element>
+<xsd:element name="LunListInfoIterNext">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="Maximum" type="xsd:integer"/>
+            <xsd:element name="Tag" type="xsd:string"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="LunListInfoIterNextResult">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="Luns" type="na:ArrayOfLunInfo"/>
+            <xsd:element name="Records" type="xsd:integer"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="LunListInfoIterStart">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element minOccurs="0" name="ObjectNameOrId"
+                type="na:ObjNameOrId"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="LunListInfoIterStartResult">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element name="Records" type="xsd:integer"/>
+            <xsd:element name="Tag" type="xsd:string"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="StorageServiceDatasetProvision">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element minOccurs="0" name="AssumeConfirmation"
+                type="xsd:boolean"/>
+            <xsd:element name="DatasetName" type="na:ObjName"/>
+            <xsd:element name="StorageServiceNameOrId" type="na:ObjNameOrId"/>
+            <xsd:element minOccurs="0" name="StorageSetDetails"
+                type="na:ArrayOfStorageSetInfo"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:element name="StorageServiceDatasetProvisionResult">
+    <xsd:complexType>
+        <xsd:all>
+            <xsd:element minOccurs="0" name="ConformanceAlerts"
+                type="na:ArrayOfConformanceAlert"/>
+            <xsd:element name="DatasetId" type="na:ObjId"/>
+            <xsd:element minOccurs="0" name="DryRunResults"
+                type="na:ArrayOfDryRunResult"/>
+        </xsd:all>
+    </xsd:complexType>
+</xsd:element>
+<xsd:complexType name="ArrayOfDatasetInfo">
+    <xsd:sequence>
+        <xsd:element maxOccurs="unbounded" name="DatasetInfo"
+            type="na:DatasetInfo"/>
+    </xsd:sequence>
+</xsd:complexType>
+<xsd:complexType name="ArrayOfDatasetMemberInfo">
+    <xsd:sequence>
+        <xsd:element maxOccurs="unbounded" name="DatasetMemberInfo"
+            type="na:DatasetMemberInfo"/>
+    </xsd:sequence>
+</xsd:complexType>
+<xsd:complexType name="ArrayOfDatasetMemberParameter">
+    <xsd:sequence>
+        <xsd:element maxOccurs="unbounded" name="DatasetMemberParameter"
+            type="na:DatasetMemberParameter"/>
+    </xsd:sequence>
+</xsd:complexType>
+<xsd:complexType name="ArrayOfDpJobProgressEventInfo">
+    <xsd:sequence>
+        <xsd:element maxOccurs="unbounded" name="DpJobProgressEventInfo"
+            type="na:DpJobProgressEventInfo"/>
+    </xsd:sequence>
+</xsd:complexType>
+<xsd:complexType name="ArrayOfHostInfo">
+    <xsd:sequence>
+        <xsd:element maxOccurs="unbounded" name="HostInfo" type="na:HostInfo"/>
+    </xsd:sequence>
+</xsd:complexType>
+<xsd:complexType name="ArrayOfJobInfo">
+    <xsd:sequence>
+        <xsd:element maxOccurs="unbounded" name="JobInfo" type="na:JobInfo"/>
+    </xsd:sequence>
+</xsd:complexType>
+<xsd:complexType name="ArrayOfLunInfo">
+    <xsd:sequence>
+        <xsd:element maxOccurs="unbounded" name="LunInfo" type="na:LunInfo"/>
+    </xsd:sequence>
+</xsd:complexType>
+<xsd:complexType name="ArrayOfStorageSetInfo">
+    <xsd:sequence>
+        <xsd:element maxOccurs="unbounded" name="StorageSetInfo"
+            type="na:StorageSetInfo"/>
+    </xsd:sequence>
+</xsd:complexType>
+<xsd:complexType name="DatasetExportInfo">
+    <xsd:all>
+        <xsd:element minOccurs="0" name="DatasetExportProtocol"
+            type="na:DatasetExportProtocol"/>
+        <xsd:element minOccurs="0" name="DatasetLunMappingInfo"
+            type="na:DatasetLunMappingInfo"/>
+    </xsd:all>
+</xsd:complexType>
+<xsd:simpleType name="DatasetExportProtocol">
+    <xsd:restriction base="xsd:string"/>
+</xsd:simpleType>
+<xsd:complexType name="DatasetInfo">
+    <xsd:all>
+        <xsd:element name="DatasetId" type="na:ObjId"/>
+    </xsd:all>
+</xsd:complexType>
+<xsd:complexType name="DatasetLunMappingInfo">
+    <xsd:all>
+        <xsd:element name="IgroupOsType" type="xsd:string"/>
+    </xsd:all>
+</xsd:complexType>
+<xsd:complexType name="DatasetMemberInfo">
+    <xsd:all>
+        <xsd:element name="MemberId" type="na:ObjId"/>
+        <xsd:element name="MemberName" type="na:ObjName"/>
+    </xsd:all>
+</xsd:complexType>
+<xsd:complexType name="DatasetMemberParameter">
+    <xsd:all>
+        <xsd:element name="ObjectNameOrId" type="na:ObjNameOrId"/>
+    </xsd:all>
+</xsd:complexType>
+<xsd:complexType name="DpJobProgressEventInfo">
+    <xsd:all>
+        <xsd:element name="EventStatus" type="na:ObjStatus"/>
+        <xsd:element name="EventType" type="xsd:string"/>
+        <xsd:element minOccurs="0" name="ProgressLunInfo"
+            type="na:ProgressLunInfo"/>
+    </xsd:all>
+</xsd:complexType>
+<xsd:simpleType name="DpPolicyNodeName">
+    <xsd:restriction base="xsd:string"/>
+</xsd:simpleType>
+<xsd:simpleType name="HostId">
+    <xsd:restriction base="xsd:integer"/>
+</xsd:simpleType>
+<xsd:complexType name="HostInfo">
+    <xsd:all>
+        <xsd:element name="HostAddress" type="xsd:string"/>
+        <xsd:element name="HostId" type="na:HostId"/>
+        <xsd:element name="HostName" type="xsd:string"/>
+    </xsd:all>
+</xsd:complexType>
+<xsd:complexType name="JobInfo">
+    <xsd:all>
+        <xsd:element name="JobId" type="xsd:integer"/>
+    </xsd:all>
+</xsd:complexType>
+<xsd:complexType name="LunInfo">
+    <xsd:all>
+        <xsd:element name="HostId" type="na:ObjId"/>
+        <xsd:element name="LunPath" type="na:ObjName"/>
+    </xsd:all>
+</xsd:complexType>
+<xsd:simpleType name="ObjId">
+    <xsd:restriction base="xsd:integer"/>
+</xsd:simpleType>
+<xsd:simpleType name="ObjName">
+    <xsd:restriction base="xsd:string"/>
+</xsd:simpleType>
+<xsd:simpleType name="ObjNameOrId">
+    <xsd:restriction base="xsd:string"/>
+</xsd:simpleType>
+<xsd:simpleType name="ObjStatus">
+    <xsd:restriction base="xsd:string"/>
+</xsd:simpleType>
+<xsd:complexType name="ProgressLunInfo">
+    <xsd:all>
+        <xsd:element name="LunPathId" type="na:ObjId"/>
+    </xsd:all>
+</xsd:complexType>
+<xsd:complexType name="ProvisionMemberRequestInfo">
+    <xsd:all>
+        <xsd:element minOccurs="0" name="Description" type="xsd:string"/>
+        <xsd:element minOccurs="0" name="MaximumSnapshotSpace"
+            type="xsd:integer"/>
+        <xsd:element name="Name" type="xsd:string"/>
+        <xsd:element name="Size" type="xsd:integer"/>
+    </xsd:all>
+</xsd:complexType>
+<xsd:complexType name="Request">
+    <xsd:all>
+        <xsd:element minOccurs="0" name="Args">
+            <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:any maxOccurs="unbounded" minOccurs="0"/>
+                </xsd:sequence>
+            </xsd:complexType>
+        </xsd:element>
+        <xsd:element name="Name" type="xsd:string">
+        </xsd:element>
+    </xsd:all>
+</xsd:complexType>
+<xsd:complexType name="Response">
+    <xsd:all>
+        <xsd:element minOccurs="0" name="Errno" type="xsd:integer"/>
+        <xsd:element minOccurs="0" name="Reason" type="xsd:string"/>
+        <xsd:element minOccurs="0" name="Results">
+            <xsd:complexType>
+                <xsd:sequence>
+                    <xsd:any maxOccurs="unbounded" minOccurs="0"/>
+                </xsd:sequence>
+            </xsd:complexType>
+        </xsd:element>
+        <xsd:element name="Status" type="xsd:string"/>
+    </xsd:all>
+</xsd:complexType>
+<xsd:complexType name="StorageSetInfo">
+    <xsd:all>
+        <xsd:element minOccurs="0" name="DatasetExportInfo"
+            type="na:DatasetExportInfo"/>
+        <xsd:element minOccurs="0" name="DpNodeName"
+            type="na:DpPolicyNodeName"/>
+        <xsd:element minOccurs="0" name="ServerNameOrId"
+            type="na:ObjNameOrId"/>
+    </xsd:all>
+</xsd:complexType>
+</xsd:schema></types>"""
+
+WSDL_TRAILER = """<service name="DfmService">
+<port binding="na:DfmBinding" name="DfmPort">
+<soap:address location="https://HOST_NAME:8488/apis/soap/v1"/>
+</port></service></definitions>"""
+
+RESPONSE_PREFIX = """<?xml version="1.0" encoding="UTF-8"?>
+<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
+    xmlns:na="http://www.netapp.com/management/v1"><env:Header/><env:Body>"""
+
+RESPONSE_SUFFIX = """</env:Body></env:Envelope>"""
+
+APIS = ['ApiProxy', 'DatasetListInfoIterStart', 'DatasetListInfoIterNext',
+    'DatasetListInfoIterEnd', 'DatasetEditBegin', 'DatasetEditCommit',
+    'DatasetProvisionMember', 'DatasetRemoveMember', 'DfmAbout',
+    'DpJobProgressEventListIterStart', 'DpJobProgressEventListIterNext',
+    'DpJobProgressEventListIterEnd', 'DatasetMemberListInfoIterStart',
+    'DatasetMemberListInfoIterNext', 'DatasetMemberListInfoIterEnd',
+    'HostListInfoIterStart', 'HostListInfoIterNext', 'HostListInfoIterEnd',
+    'LunListInfoIterStart', 'LunListInfoIterNext', 'LunListInfoIterEnd',
+    'StorageServiceDatasetProvision']
+
+iter_count = 0
+iter_table = {}
+
+
+class FakeDfmServerHandler(BaseHTTPServer.BaseHTTPRequestHandler):
+    """HTTP handler that fakes enough stuff to allow the driver to run"""
+
+    def do_GET(s):
+        """Respond to a GET request."""
+        if '/dfm.wsdl' != s.path:
+            s.send_response(404)
+            s.end_headers
+            return
+        s.send_response(200)
+        s.send_header("Content-Type", "application/wsdl+xml")
+        s.end_headers()
+        out = s.wfile
+        out.write(WSDL_HEADER)
+        out.write(WSDL_TYPES)
+        for api in APIS:
+            out.write('<message name="%sRequest">' % api)
+            out.write('<part element="na:%s" name="parameters"/>' % api)
+            out.write('</message>')
+            out.write('<message name="%sResponse">' % api)
+            out.write('<part element="na:%sResult" name="results"/>' % api)
+            out.write('</message>')
+        out.write('<portType name="DfmInterface">')
+        for api in APIS:
+            out.write('<operation name="%s">' % api)
+            out.write('<input message="na:%sRequest"/>' % api)
+            out.write('<output message="na:%sResponse"/>' % api)
+            out.write('</operation>')
+        out.write('</portType>')
+        out.write('<binding name="DfmBinding" type="na:DfmInterface">')
+        out.write('<soap:binding style="document" ' +
+            'transport="http://schemas.xmlsoap.org/soap/http"/>')
+        for api in APIS:
+            out.write('<operation name="%s">' % api)
+            out.write('<soap:operation soapAction="urn:%s"/>' % api)
+            out.write('<input><soap:body use="literal"/></input>')
+            out.write('<output><soap:body use="literal"/></output>')
+            out.write('</operation>')
+        out.write('</binding>')
+        out.write(WSDL_TRAILER)
+
+    def do_POST(s):
+        """Respond to a POST request."""
+        if '/apis/soap/v1' != s.path:
+            s.send_response(404)
+            s.end_headers
+            return
+        request_xml = s.rfile.read(int(s.headers['Content-Length']))
+        ntap_ns = 'http://www.netapp.com/management/v1'
+        nsmap = {'env': 'http://schemas.xmlsoap.org/soap/envelope/',
+            'na': ntap_ns}
+        root = etree.fromstring(request_xml)
+
+        body = root.xpath('/env:Envelope/env:Body', namespaces=nsmap)[0]
+        request = body.getchildren()[0]
+        tag = request.tag
+        if not tag.startswith('{' + ntap_ns + '}'):
+            s.send_response(500)
+            s.end_headers
+            return
+        api = tag[(2 + len(ntap_ns)):]
+        global iter_count
+        global iter_table
+        if 'DatasetListInfoIterStart' == api:
+            body = """<na:DatasetListInfoIterStartResult>
+                    <na:Records>1</na:Records>
+                    <na:Tag>dataset</na:Tag>
+                </na:DatasetListInfoIterStartResult>"""
+        elif 'DatasetListInfoIterNext' == api:
+            body = """<na:DatasetListInfoIterNextResult>
+                    <na:Datasets>
+                        <na:DatasetInfo>
+                            <na:DatasetId>0</na:DatasetId>
+                        </na:DatasetInfo>
+                    </na:Datasets>
+                    <na:Records>1</na:Records>
+                </na:DatasetListInfoIterNextResult>"""
+        elif 'DatasetListInfoIterEnd' == api:
+            body = """<na:DatasetListInfoIterEndResult/>"""
+        elif 'DatasetEditBegin' == api:
+            body = """<na:DatasetEditBeginResult>
+                    <na:EditLockId>0</na:EditLockId>
+                </na:DatasetEditBeginResult>"""
+        elif 'DatasetEditCommit' == api:
+            body = """<na:DatasetEditCommitResult>
+                    <na:IsProvisioningFailure>false</na:IsProvisioningFailure>
+                    <na:JobIds>
+                        <na:JobInfo>
+                            <na:JobId>0</na:JobId>
+                        </na:JobInfo>
+                    </na:JobIds>
+                </na:DatasetEditCommitResult>"""
+        elif 'DatasetProvisionMember' == api:
+            body = """<na:DatasetProvisionMemberResult/>"""
+        elif 'DatasetRemoveMember' == api:
+            body = """<na:DatasetRemoveMemberResult/>"""
+        elif 'DfmAbout' == api:
+            body = """<na:DfmAboutResult/>"""
+        elif 'DpJobProgressEventListIterStart' == api:
+            iter_name = 'dpjobprogress_%s' % iter_count
+            iter_count = iter_count + 1
+            iter_table[iter_name] = 0
+            body = """<na:DpJobProgressEventListIterStartResult>
+                    <na:Records>2</na:Records>
+                    <na:Tag>%s</na:Tag>
+                </na:DpJobProgressEventListIterStartResult>""" % iter_name
+        elif 'DpJobProgressEventListIterNext' == api:
+            tags = body.xpath('na:DpJobProgressEventListIterNext/na:Tag',
+                              namespaces=nsmap)
+            iter_name = tags[0].text
+            if iter_table[iter_name]:
+                body = """<na:DpJobProgressEventListIterNextResult/>"""
+            else:
+                iter_table[iter_name] = 1
+                body = """<na:DpJobProgressEventListIterNextResult>
+                        <na:ProgressEvents>
+                            <na:DpJobProgressEventInfo>
+                                <na:EventStatus>normal</na:EventStatus>
+                                <na:EventType>lun-create</na:EventType>
+                                <na:ProgressLunInfo>
+                                    <na:LunPathId>0</na:LunPathId>
+                                 </na:ProgressLunInfo>
+                            </na:DpJobProgressEventInfo>
+                            <na:DpJobProgressEventInfo>
+                                <na:EventStatus>normal</na:EventStatus>
+                                <na:EventType>job-end</na:EventType>
+                            </na:DpJobProgressEventInfo>
+                        </na:ProgressEvents>
+                        <na:Records>2</na:Records>
+                    </na:DpJobProgressEventListIterNextResult>"""
+        elif 'DpJobProgressEventListIterEnd' == api:
+            body = """<na:DpJobProgressEventListIterEndResult/>"""
+        elif 'DatasetMemberListInfoIterStart' == api:
+            body = """<na:DatasetMemberListInfoIterStartResult>
+                    <na:Records>1</na:Records>
+                    <na:Tag>dataset-member</na:Tag>
+                </na:DatasetMemberListInfoIterStartResult>"""
+        elif 'DatasetMemberListInfoIterNext' == api:
+            name = 'filer:/OpenStack_testproj/volume-00000001/volume-00000001'
+            body = """<na:DatasetMemberListInfoIterNextResult>
+                    <na:DatasetMembers>
+                        <na:DatasetMemberInfo>
+                            <na:MemberId>0</na:MemberId>
+                            <na:MemberName>%s</na:MemberName>
+                        </na:DatasetMemberInfo>
+                    </na:DatasetMembers>
+                    <na:Records>1</na:Records>
+                </na:DatasetMemberListInfoIterNextResult>""" % name
+        elif 'DatasetMemberListInfoIterEnd' == api:
+            body = """<na:DatasetMemberListInfoIterEndResult/>"""
+        elif 'HostListInfoIterStart' == api:
+            body = """<na:HostListInfoIterStartResult>
+                    <na:Records>1</na:Records>
+                    <na:Tag>host</na:Tag>
+                </na:HostListInfoIterStartResult>"""
+        elif 'HostListInfoIterNext' == api:
+            body = """<na:HostListInfoIterNextResult>
+                    <na:Hosts>
+                        <na:HostInfo>
+                            <na:HostAddress>1.2.3.4</na:HostAddress>
+                            <na:HostId>0</na:HostId>
+                            <na:HostName>filer</na:HostName>
+                        </na:HostInfo>
+                    </na:Hosts>
+                    <na:Records>1</na:Records>
+                </na:HostListInfoIterNextResult>"""
+        elif 'HostListInfoIterEnd' == api:
+            body = """<na:HostListInfoIterEndResult/>"""
+        elif 'LunListInfoIterStart' == api:
+            body = """<na:LunListInfoIterStartResult>
+                    <na:Records>1</na:Records>
+                    <na:Tag>lun</na:Tag>
+                </na:LunListInfoIterStartResult>"""
+        elif 'LunListInfoIterNext' == api:
+            path = 'OpenStack_testproj/volume-00000001/volume-00000001'
+            body = """<na:LunListInfoIterNextResult>
+                    <na:Luns>
+                        <na:LunInfo>
+                            <na:HostId>0</na:HostId>
+                            <na:LunPath>%s</na:LunPath>
+                        </na:LunInfo>
+                    </na:Luns>
+                    <na:Records>1</na:Records>
+                </na:LunListInfoIterNextResult>""" % path
+        elif 'LunListInfoIterEnd' == api:
+            body = """<na:LunListInfoIterEndResult/>"""
+        elif 'ApiProxy' == api:
+            names = body.xpath('na:ApiProxy/na:Request/na:Name',
+                               namespaces=nsmap)
+            proxy = names[0].text
+            if 'igroup-list-info' == proxy:
+                igroup = 'openstack-iqn.1993-08.org.debian:01:23456789'
+                initiator = 'iqn.1993-08.org.debian:01:23456789'
+                proxy_body = """<initiator-groups>
+                        <initiator-group-info>
+                            <initiator-group-name>%s</initiator-group-name>
+                            <initiator-group-type>iscsi</initiator-group-type>
+                       <initiator-group-os-type>linux</initiator-group-os-type>
+                            <initiators>
+                                <initiator-info>
+                                    <initiator-name>%s</initiator-name>
+                                </initiator-info>
+                            </initiators>
+                        </initiator-group-info>
+                    </initiator-groups>""" % (igroup, initiator)
+            elif 'igroup-create' == proxy:
+                proxy_body = ''
+            elif 'igroup-add' == proxy:
+                proxy_body = ''
+            elif 'lun-map-list-info' == proxy:
+                proxy_body = '<initiator-groups/>'
+            elif 'lun-map' == proxy:
+                proxy_body = '<lun-id-assigned>0</lun-id-assigned>'
+            elif 'lun-unmap' == proxy:
+                proxy_body = ''
+            elif 'iscsi-portal-list-info' == proxy:
+                proxy_body = """<iscsi-portal-list-entries>
+                        <iscsi-portal-list-entry-info>
+                            <ip-address>1.2.3.4</ip-address>
+                            <ip-port>3260</ip-port>
+                            <tpgroup-tag>1000</tpgroup-tag>
+                        </iscsi-portal-list-entry-info>
+                    </iscsi-portal-list-entries>"""
+            elif 'iscsi-node-get-name' == proxy:
+                target = 'iqn.1992-08.com.netapp:sn.111111111'
+                proxy_body = '<node-name>%s</node-name>' % target
+            else:
+                # Unknown proxy API
+                s.send_response(500)
+                s.end_headers
+                return
+            api = api + ':' + proxy
+            proxy_header = '<na:ApiProxyResult><na:Response><na:Results>'
+            proxy_trailer = """</na:Results><na:Status>passed</na:Status>
+                </na:Response></na:ApiProxyResult>"""
+            body = proxy_header + proxy_body + proxy_trailer
+        else:
+            # Unknown API
+            s.send_response(500)
+            s.end_headers
+            return
+        s.send_response(200)
+        s.send_header("Content-Type", "text/xml; charset=utf-8")
+        s.end_headers()
+        s.wfile.write(RESPONSE_PREFIX)
+        s.wfile.write(body)
+        s.wfile.write(RESPONSE_SUFFIX)
+
+
+class FakeHttplibSocket(object):
+    """A fake socket implementation for httplib.HTTPResponse"""
+    def __init__(self, value):
+        self._rbuffer = StringIO.StringIO(value)
+        self._wbuffer = StringIO.StringIO('')
+        oldclose = self._wbuffer.close
+
+        def newclose():
+            self.result = self._wbuffer.getvalue()
+            oldclose()
+        self._wbuffer.close = newclose
+
+    def makefile(self, mode, _other):
+        """Returns the socket's internal buffer"""
+        if mode == 'r' or mode == 'rb':
+            return self._rbuffer
+        if mode == 'w' or mode == 'wb':
+            return self._wbuffer
+
+
+class FakeHTTPConnection(object):
+    """A fake httplib.HTTPConnection for netapp tests
+
+    Requests made via this connection actually get translated and routed into
+    the fake Dfm handler above, we then turn the response into
+    the httplib.HTTPResponse that the caller expects.
+    """
+    def __init__(self, host, timeout=None):
+        self.host = host
+
+    def request(self, method, path, data=None, headers=None):
+        if not headers:
+            headers = {}
+        req_str = '%s %s HTTP/1.1\r\n' % (method, path)
+        for key, value in headers.iteritems():
+            req_str += "%s: %s\r\n" % (key, value)
+        if data:
+            req_str += '\r\n%s' % data
+
+        # NOTE(vish): normally the http transport normailizes from unicode
+        sock = FakeHttplibSocket(req_str.decode("latin-1").encode("utf-8"))
+        # NOTE(vish): stop the server from trying to look up address from
+        #             the fake socket
+        FakeDfmServerHandler.address_string = lambda x: '127.0.0.1'
+        self.app = FakeDfmServerHandler(sock, '127.0.0.1:8088', None)
+
+        self.sock = FakeHttplibSocket(sock.result)
+        self.http_response = httplib.HTTPResponse(self.sock)
+
+    def set_debuglevel(self, level):
+        pass
+
+    def getresponse(self):
+        self.http_response.begin()
+        return self.http_response
+
+    def getresponsebody(self):
+        return self.sock.result
+
+
+class NetAppDriverTestCase(test.TestCase):
+    """Test case for NetAppISCSIDriver"""
+    STORAGE_SERVICE = 'Thin Provisioned Space for VMFS Datastores'
+    PROJECT_ID = 'testproj'
+    VOLUME_NAME = 'volume-00000001'
+    VOLUME_SIZE = 2147483648L  # 2 GB
+    INITIATOR = 'iqn.1993-08.org.debian:01:23456789'
+
+    def setUp(self):
+        super(NetAppDriverTestCase, self).setUp()
+        driver = netapp.NetAppISCSIDriver()
+        self.stubs.Set(httplib, 'HTTPConnection', FakeHTTPConnection)
+        driver._create_client('http://localhost:8088/dfm.wsdl',
+                              'root', 'password', 'localhost', 8088)
+        driver._set_storage_service(self.STORAGE_SERVICE)
+        self.driver = driver
+
+    def test_connect(self):
+        self.driver.check_for_setup_error()
+
+    def test_create_destroy(self):
+        self.driver._provision(self.VOLUME_NAME, None, self.PROJECT_ID,
+                               self.VOLUME_SIZE)
+        self.driver._remove_destroy(self.VOLUME_NAME, self.PROJECT_ID)
+
+    def test_map_unmap(self):
+        self.driver._provision(self.VOLUME_NAME, None, self.PROJECT_ID,
+                               self.VOLUME_SIZE)
+        volume = {'name': self.VOLUME_NAME, 'project_id': self.PROJECT_ID,
+            'id': 0, 'provider_auth': None}
+        updates = self.driver._get_export(volume)
+        self.assertTrue(updates['provider_location'])
+        volume['provider_location'] = updates['provider_location']
+        connector = {'initiator': self.INITIATOR}
+        connection_info = self.driver.initialize_connection(volume, connector)
+        self.assertEqual(connection_info['driver_volume_type'], 'iscsi')
+        properties = connection_info['data']
+        self.driver.terminate_connection(volume, connector)
+        self.driver._remove_destroy(self.VOLUME_NAME, self.PROJECT_ID)
diff --git a/cinder/tests/test_nexenta.py b/cinder/tests/test_nexenta.py
new file mode 100644
index 000000000..5a33318b1
--- /dev/null
+++ b/cinder/tests/test_nexenta.py
@@ -0,0 +1,281 @@
+#!/usr/bin/env python
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+#
+# Copyright 2011 Nexenta Systems, Inc.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+Unit tests for OpenStack Cinder volume driver
+"""
+
+import base64
+import urllib2
+
+import cinder.flags
+import cinder.test
+from cinder.volume import nexenta
+from cinder.volume.nexenta import volume
+from cinder.volume.nexenta import jsonrpc
+
+FLAGS = cinder.flags.FLAGS
+
+
+class TestNexentaDriver(cinder.test.TestCase):
+    TEST_VOLUME_NAME = 'volume1'
+    TEST_VOLUME_NAME2 = 'volume2'
+    TEST_SNAPSHOT_NAME = 'snapshot1'
+    TEST_VOLUME_REF = {
+        'name': TEST_VOLUME_NAME,
+        'size': 1,
+    }
+    TEST_VOLUME_REF2 = {
+        'name': TEST_VOLUME_NAME2,
+        'size': 1,
+    }
+    TEST_SNAPSHOT_REF = {
+        'name': TEST_SNAPSHOT_NAME,
+        'volume_name': TEST_VOLUME_NAME,
+    }
+
+    def __init__(self, method):
+        super(TestNexentaDriver, self).__init__(method)
+
+    def setUp(self):
+        super(TestNexentaDriver, self).setUp()
+        self.flags(
+            nexenta_host='1.1.1.1',
+            nexenta_volume='cinder',
+            nexenta_target_prefix='iqn:',
+            nexenta_target_group_prefix='cinder/',
+            nexenta_blocksize='8K',
+            nexenta_sparse=True,
+        )
+        self.nms_mock = self.mox.CreateMockAnything()
+        for mod in ['volume', 'zvol', 'iscsitarget',
+                    'stmf', 'scsidisk', 'snapshot']:
+            setattr(self.nms_mock, mod, self.mox.CreateMockAnything())
+        self.stubs.Set(jsonrpc, 'NexentaJSONProxy',
+                       lambda *_, **__: self.nms_mock)
+        self.drv = volume.NexentaDriver()
+        self.drv.do_setup({})
+
+    def test_setup_error(self):
+        self.nms_mock.volume.object_exists('cinder').AndReturn(True)
+        self.mox.ReplayAll()
+        self.drv.check_for_setup_error()
+
+    def test_setup_error_fail(self):
+        self.nms_mock.volume.object_exists('cinder').AndReturn(False)
+        self.mox.ReplayAll()
+        self.assertRaises(LookupError, self.drv.check_for_setup_error)
+
+    def test_local_path(self):
+        self.assertRaises(NotImplementedError, self.drv.local_path, '')
+
+    def test_create_volume(self):
+        self.nms_mock.zvol.create('cinder/volume1', '1G', '8K', True)
+        self.mox.ReplayAll()
+        self.drv.create_volume(self.TEST_VOLUME_REF)
+
+    def test_delete_volume(self):
+        self.nms_mock.zvol.destroy('cinder/volume1', '')
+        self.mox.ReplayAll()
+        self.drv.delete_volume(self.TEST_VOLUME_REF)
+
+    def test_create_snapshot(self):
+        self.nms_mock.zvol.create_snapshot('cinder/volume1', 'snapshot1', '')
+        self.mox.ReplayAll()
+        self.drv.create_snapshot(self.TEST_SNAPSHOT_REF)
+
+    def test_create_volume_from_snapshot(self):
+        self.nms_mock.zvol.clone('cinder/volume1@snapshot1', 'cinder/volume2')
+        self.mox.ReplayAll()
+        self.drv.create_volume_from_snapshot(self.TEST_VOLUME_REF2,
+                                             self.TEST_SNAPSHOT_REF)
+
+    def test_delete_snapshot(self):
+        self.nms_mock.snapshot.destroy('cinder/volume1@snapshot1', '')
+        self.mox.ReplayAll()
+        self.drv.delete_snapshot(self.TEST_SNAPSHOT_REF)
+
+    _CREATE_EXPORT_METHODS = [
+        ('iscsitarget', 'create_target', ({'target_name': 'iqn:volume1'},),
+            u'Unable to create iscsi target\n'
+            u' iSCSI target iqn.1986-03.com.sun:02:cinder-volume1 already'
+                                                               u' configured\n'
+            u' itadm create-target failed with error 17\n',
+        ),
+        ('stmf', 'create_targetgroup', ('cinder/volume1',),
+            u'Unable to create targetgroup: stmfadm: cinder/volume1:'
+                                                          u' already exists\n',
+        ),
+        ('stmf', 'add_targetgroup_member', ('cinder/volume1', 'iqn:volume1'),
+            u'Unable to add member to targetgroup: stmfadm:'
+                u' iqn.1986-03.com.sun:02:cinder-volume1: already exists\n',
+        ),
+        ('scsidisk', 'create_lu', ('cinder/volume1', {}),
+            u"Unable to create lu with zvol 'cinder/volume1':\n"
+            u" sbdadm: filename /dev/zvol/rdsk/cinder/volume1: in use\n",
+        ),
+        ('scsidisk', 'add_lun_mapping_entry', ('cinder/volume1', {
+                'target_group': 'cinder/volume1', 'lun': '0'}),
+            u"Unable to add view to zvol 'cinder/volume1' (LUNs in use: ):\n"
+            u" stmfadm: view entry exists\n",
+        ),
+    ]
+
+    def _stub_export_method(self, module, method, args, error, fail=False):
+        m = getattr(self.nms_mock, module)
+        m = getattr(m, method)
+        mock = m(*args)
+        if fail:
+            mock.AndRaise(nexenta.NexentaException(error))
+
+    def _stub_all_export_methods(self, fail=False):
+        for params in self._CREATE_EXPORT_METHODS:
+            self._stub_export_method(*params, fail=fail)
+
+    def test_create_export(self):
+        self._stub_all_export_methods()
+        self.mox.ReplayAll()
+        retval = self.drv.create_export({}, self.TEST_VOLUME_REF)
+        self.assertEquals(retval,
+            {'provider_location':
+                '%s:%s,1 %s%s' % (FLAGS.nexenta_host,
+                                  FLAGS.nexenta_iscsi_target_portal_port,
+                                  FLAGS.nexenta_target_prefix,
+                                  self.TEST_VOLUME_NAME)})
+
+    def __get_test(i):
+        def _test_create_export_fail(self):
+            for params in self._CREATE_EXPORT_METHODS[:i]:
+                self._stub_export_method(*params)
+            self._stub_export_method(*self._CREATE_EXPORT_METHODS[i],
+                                     fail=True)
+            self.mox.ReplayAll()
+            self.assertRaises(nexenta.NexentaException,
+                        self.drv.create_export, {}, self.TEST_VOLUME_REF)
+        return _test_create_export_fail
+
+    for i in range(len(_CREATE_EXPORT_METHODS)):
+        locals()['test_create_export_fail_%d' % i] = __get_test(i)
+
+    def test_ensure_export(self):
+        self._stub_all_export_methods(fail=True)
+        self.mox.ReplayAll()
+        self.drv.ensure_export({}, self.TEST_VOLUME_REF)
+
+    def test_remove_export(self):
+        self.nms_mock.scsidisk.delete_lu('cinder/volume1')
+        self.nms_mock.stmf.destroy_targetgroup('cinder/volume1')
+        self.nms_mock.iscsitarget.delete_target('iqn:volume1')
+        self.mox.ReplayAll()
+        self.drv.remove_export({}, self.TEST_VOLUME_REF)
+
+    def test_remove_export_fail_0(self):
+        self.nms_mock.scsidisk.delete_lu('cinder/volume1')
+        self.nms_mock.stmf.destroy_targetgroup('cinder/volume1').AndRaise(
+                                                    nexenta.NexentaException())
+        self.nms_mock.iscsitarget.delete_target('iqn:volume1')
+        self.mox.ReplayAll()
+        self.drv.remove_export({}, self.TEST_VOLUME_REF)
+
+    def test_remove_export_fail_1(self):
+        self.nms_mock.scsidisk.delete_lu('cinder/volume1')
+        self.nms_mock.stmf.destroy_targetgroup('cinder/volume1')
+        self.nms_mock.iscsitarget.delete_target('iqn:volume1').AndRaise(
+                                                    nexenta.NexentaException())
+        self.mox.ReplayAll()
+        self.drv.remove_export({}, self.TEST_VOLUME_REF)
+
+
+class TestNexentaJSONRPC(cinder.test.TestCase):
+    URL = 'http://example.com/'
+    URL_S = 'https://example.com/'
+    USER = 'user'
+    PASSWORD = 'password'
+    HEADERS = {'Authorization': 'Basic %s' % (base64.b64encode(
+                                                ':'.join((USER, PASSWORD))),),
+               'Content-Type': 'application/json'}
+    REQUEST = 'the request'
+
+    def setUp(self):
+        super(TestNexentaJSONRPC, self).setUp()
+        self.proxy = jsonrpc.NexentaJSONProxy(
+            self.URL, self.USER, self.PASSWORD, auto=True)
+        self.mox.StubOutWithMock(urllib2, 'Request', True)
+        self.mox.StubOutWithMock(urllib2, 'urlopen')
+        self.resp_mock = self.mox.CreateMockAnything()
+        self.resp_info_mock = self.mox.CreateMockAnything()
+        self.resp_mock.info().AndReturn(self.resp_info_mock)
+        urllib2.urlopen(self.REQUEST).AndReturn(self.resp_mock)
+
+    def test_call(self):
+        urllib2.Request(self.URL,
+                '{"object": null, "params": ["arg1", "arg2"], "method": null}',
+                self.HEADERS).AndReturn(self.REQUEST)
+        self.resp_info_mock.status = ''
+        self.resp_mock.read().AndReturn(
+                '{"error": null, "result": "the result"}')
+        self.mox.ReplayAll()
+        result = self.proxy('arg1', 'arg2')
+        self.assertEquals("the result", result)
+
+    def test_call_deep(self):
+        urllib2.Request(self.URL,
+              '{"object": "obj1.subobj", "params": ["arg1", "arg2"],'
+                                                          ' "method": "meth"}',
+              self.HEADERS).AndReturn(self.REQUEST)
+        self.resp_info_mock.status = ''
+        self.resp_mock.read().AndReturn(
+            '{"error": null, "result": "the result"}')
+        self.mox.ReplayAll()
+        result = self.proxy.obj1.subobj.meth('arg1', 'arg2')
+        self.assertEquals("the result", result)
+
+    def test_call_auto(self):
+        urllib2.Request(self.URL,
+                '{"object": null, "params": ["arg1", "arg2"], "method": null}',
+                self.HEADERS).AndReturn(self.REQUEST)
+        urllib2.Request(self.URL_S,
+                '{"object": null, "params": ["arg1", "arg2"], "method": null}',
+                self.HEADERS).AndReturn(self.REQUEST)
+        self.resp_info_mock.status = 'EOF in headers'
+        self.resp_mock.read().AndReturn(
+            '{"error": null, "result": "the result"}')
+        urllib2.urlopen(self.REQUEST).AndReturn(self.resp_mock)
+        self.mox.ReplayAll()
+        result = self.proxy('arg1', 'arg2')
+        self.assertEquals("the result", result)
+
+    def test_call_error(self):
+        urllib2.Request(self.URL,
+                '{"object": null, "params": ["arg1", "arg2"], "method": null}',
+                self.HEADERS).AndReturn(self.REQUEST)
+        self.resp_info_mock.status = ''
+        self.resp_mock.read().AndReturn(
+            '{"error": {"message": "the error"}, "result": "the result"}')
+        self.mox.ReplayAll()
+        self.assertRaises(jsonrpc.NexentaJSONException,
+                          self.proxy, 'arg1', 'arg2')
+
+    def test_call_fail(self):
+        urllib2.Request(self.URL,
+                '{"object": null, "params": ["arg1", "arg2"], "method": null}',
+                self.HEADERS).AndReturn(self.REQUEST)
+        self.resp_info_mock.status = 'EOF in headers'
+        self.proxy.auto = False
+        self.mox.ReplayAll()
+        self.assertRaises(jsonrpc.NexentaJSONException,
+                          self.proxy, 'arg1', 'arg2')
diff --git a/cinder/tests/test_notifier.py b/cinder/tests/test_notifier.py
new file mode 100644
index 000000000..e147f786c
--- /dev/null
+++ b/cinder/tests/test_notifier.py
@@ -0,0 +1,133 @@
+# Copyright 2011 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import cinder
+from cinder import flags
+from cinder import log
+import cinder.notifier.no_op_notifier
+from cinder.notifier import api as notifier_api
+from cinder import test
+
+
+class NotifierTestCase(test.TestCase):
+    """Test case for notifications"""
+    def setUp(self):
+        super(NotifierTestCase, self).setUp()
+        self.flags(notification_driver='cinder.notifier.no_op_notifier')
+
+    def test_send_notification(self):
+        self.notify_called = False
+
+        def mock_notify(cls, *args):
+            self.notify_called = True
+
+        self.stubs.Set(cinder.notifier.no_op_notifier, 'notify',
+                mock_notify)
+
+        notifier_api.notify('publisher_id', 'event_type',
+                cinder.notifier.api.WARN, dict(a=3))
+        self.assertEqual(self.notify_called, True)
+
+    def test_verify_message_format(self):
+        """A test to ensure changing the message format is prohibitively
+        annoying"""
+
+        def message_assert(message):
+            fields = [('publisher_id', 'publisher_id'),
+                      ('event_type', 'event_type'),
+                      ('priority', 'WARN'),
+                      ('payload', dict(a=3))]
+            for k, v in fields:
+                self.assertEqual(message[k], v)
+            self.assertTrue(len(message['message_id']) > 0)
+            self.assertTrue(len(message['timestamp']) > 0)
+
+        self.stubs.Set(cinder.notifier.no_op_notifier, 'notify',
+                message_assert)
+        notifier_api.notify('publisher_id', 'event_type',
+                cinder.notifier.api.WARN, dict(a=3))
+
+    def test_send_rabbit_notification(self):
+        self.stubs.Set(cinder.flags.FLAGS, 'notification_driver',
+                'cinder.notifier.rabbit_notifier')
+        self.mock_notify = False
+
+        def mock_notify(cls, *args):
+            self.mock_notify = True
+
+        self.stubs.Set(cinder.rpc, 'notify', mock_notify)
+        notifier_api.notify('publisher_id', 'event_type',
+                cinder.notifier.api.WARN, dict(a=3))
+
+        self.assertEqual(self.mock_notify, True)
+
+    def test_invalid_priority(self):
+        self.assertRaises(cinder.notifier.api.BadPriorityException,
+                notifier_api.notify, 'publisher_id',
+                'event_type', 'not a priority', dict(a=3))
+
+    def test_rabbit_priority_queue(self):
+        flags.DECLARE('notification_topics', 'cinder.notifier.rabbit_notifier')
+        self.stubs.Set(cinder.flags.FLAGS, 'notification_driver',
+                'cinder.notifier.rabbit_notifier')
+        self.stubs.Set(cinder.flags.FLAGS, 'notification_topics',
+                       ['testnotify', ])
+
+        self.test_topic = None
+
+        def mock_notify(context, topic, msg):
+            self.test_topic = topic
+
+        self.stubs.Set(cinder.rpc, 'notify', mock_notify)
+        notifier_api.notify('publisher_id', 'event_type', 'DEBUG', dict(a=3))
+        self.assertEqual(self.test_topic, 'testnotify.debug')
+
+    def test_error_notification(self):
+        self.stubs.Set(cinder.flags.FLAGS, 'notification_driver',
+            'cinder.notifier.rabbit_notifier')
+        self.stubs.Set(cinder.flags.FLAGS, 'publish_errors', True)
+        LOG = log.getLogger('cinder')
+        log.setup()
+        msgs = []
+
+        def mock_notify(context, topic, data):
+            msgs.append(data)
+
+        self.stubs.Set(cinder.rpc, 'notify', mock_notify)
+        LOG.error('foo')
+        self.assertEqual(1, len(msgs))
+        msg = msgs[0]
+        self.assertEqual(msg['event_type'], 'error_notification')
+        self.assertEqual(msg['priority'], 'ERROR')
+        self.assertEqual(msg['payload']['error'], 'foo')
+
+    def test_send_notification_by_decorator(self):
+        self.notify_called = False
+
+        def example_api(arg1, arg2):
+            return arg1 + arg2
+
+        example_api = cinder.notifier.api.notify_decorator(
+                            'example_api',
+                             example_api)
+
+        def mock_notify(cls, *args):
+            self.notify_called = True
+
+        self.stubs.Set(cinder.notifier.no_op_notifier, 'notify',
+                mock_notify)
+
+        self.assertEqual(3, example_api(1, 2))
+        self.assertEqual(self.notify_called, True)
diff --git a/cinder/tests/test_nova_rootwrap.py b/cinder/tests/test_nova_rootwrap.py
new file mode 100644
index 000000000..42fd5ee5f
--- /dev/null
+++ b/cinder/tests/test_nova_rootwrap.py
@@ -0,0 +1,133 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+#    Copyright 2011 OpenStack LLC
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import os
+import subprocess
+
+from cinder.rootwrap import filters
+from cinder.rootwrap import wrapper
+from cinder import test
+
+
+class RootwrapTestCase(test.TestCase):
+
+    def setUp(self):
+        super(RootwrapTestCase, self).setUp()
+        self.filters = [
+            filters.RegExpFilter("/bin/ls", "root", 'ls', '/[a-z]+'),
+            filters.CommandFilter("/usr/bin/foo_bar_not_exist", "root"),
+            filters.RegExpFilter("/bin/cat", "root", 'cat', '/[a-z]+'),
+            filters.CommandFilter("/nonexistant/cat", "root"),
+            filters.CommandFilter("/bin/cat", "root")  # Keep this one last
+            ]
+
+    def test_RegExpFilter_match(self):
+        usercmd = ["ls", "/root"]
+        filtermatch = wrapper.match_filter(self.filters, usercmd)
+        self.assertFalse(filtermatch is None)
+        self.assertEqual(filtermatch.get_command(usercmd),
+            ["/bin/ls", "/root"])
+
+    def test_RegExpFilter_reject(self):
+        usercmd = ["ls", "root"]
+        filtermatch = wrapper.match_filter(self.filters, usercmd)
+        self.assertTrue(filtermatch is None)
+
+    def test_missing_command(self):
+        valid_but_missing = ["foo_bar_not_exist"]
+        invalid = ["foo_bar_not_exist_and_not_matched"]
+        filtermatch = wrapper.match_filter(self.filters, valid_but_missing)
+        self.assertTrue(filtermatch is not None)
+        filtermatch = wrapper.match_filter(self.filters, invalid)
+        self.assertTrue(filtermatch is None)
+
+    def test_DnsmasqFilter(self):
+        usercmd = ['FLAGFILE=A', 'NETWORK_ID=foobar', 'dnsmasq', 'foo']
+        f = filters.DnsmasqFilter("/usr/bin/dnsmasq", "root")
+        self.assertTrue(f.match(usercmd))
+        self.assertEqual(f.get_command(usercmd), ['/usr/bin/dnsmasq', 'foo'])
+        env = f.get_environment(usercmd)
+        self.assertEqual(env.get('FLAGFILE'), 'A')
+        self.assertEqual(env.get('NETWORK_ID'), 'foobar')
+
+    @test.skip_if(not os.path.exists("/proc/%d" % os.getpid()),
+                  "Test requires /proc filesystem (procfs)")
+    def test_KillFilter(self):
+        p = subprocess.Popen(["/bin/sleep", "5"])
+        f = filters.KillFilter("/bin/kill", "root",
+                               ["-ALRM"],
+                               ["/bin/sleep"])
+        usercmd = ['kill', '-9', p.pid]
+        # Incorrect signal should fail
+        self.assertFalse(f.match(usercmd))
+        usercmd = ['kill', p.pid]
+        # Providing no signal should fail
+        self.assertFalse(f.match(usercmd))
+
+        f = filters.KillFilter("/bin/kill", "root",
+                               ["-9", ""],
+                               ["/bin/sleep"])
+        usercmd = ['kill', '-9', os.getpid()]
+        # Our own PID does not match /bin/sleep, so it should fail
+        self.assertFalse(f.match(usercmd))
+        usercmd = ['kill', '-9', 999999]
+        # Nonexistant PID should fail
+        self.assertFalse(f.match(usercmd))
+        usercmd = ['kill', p.pid]
+        # Providing no signal should work
+        self.assertTrue(f.match(usercmd))
+        usercmd = ['kill', '-9', p.pid]
+        # Providing -9 signal should work
+        self.assertTrue(f.match(usercmd))
+
+    def test_KillFilter_no_raise(self):
+        """Makes sure ValueError from bug 926412 is gone"""
+        f = filters.KillFilter("/bin/kill", "root", [""])
+        # Providing anything other than kill should be False
+        usercmd = ['notkill', 999999]
+        self.assertFalse(f.match(usercmd))
+        # Providing something that is not a pid should be False
+        usercmd = ['kill', 'notapid']
+        self.assertFalse(f.match(usercmd))
+
+    def test_KillFilter_deleted_exe(self):
+        """Makes sure deleted exe's are killed correctly"""
+        # See bug #967931.
+        def fake_readlink(blah):
+            return '/bin/commandddddd (deleted)'
+
+        f = filters.KillFilter("/bin/kill", "root",
+                               [""],
+                               ["/bin/commandddddd"])
+        usercmd = ['kill', 1234]
+        # Providing no signal should work
+        self.stubs.Set(os, 'readlink', fake_readlink)
+        self.assertTrue(f.match(usercmd))
+
+    def test_ReadFileFilter(self):
+        goodfn = '/good/file.name'
+        f = filters.ReadFileFilter(goodfn)
+        usercmd = ['cat', '/bad/file']
+        self.assertFalse(f.match(['cat', '/bad/file']))
+        usercmd = ['cat', goodfn]
+        self.assertEqual(f.get_command(usercmd), ['/bin/cat', goodfn])
+        self.assertTrue(f.match(usercmd))
+
+    def test_skips(self):
+        # Check that all filters are skipped and that the last matches
+        usercmd = ["cat", "/"]
+        filtermatch = wrapper.match_filter(self.filters, usercmd)
+        self.assertTrue(filtermatch is self.filters[-1])
diff --git a/cinder/tests/test_policy.py b/cinder/tests/test_policy.py
new file mode 100644
index 000000000..4cb66f088
--- /dev/null
+++ b/cinder/tests/test_policy.py
@@ -0,0 +1,189 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 Piston Cloud Computing, Inc.
+# All Rights Reserved.
+
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Test of Policy Engine For Cinder"""
+
+import os.path
+import StringIO
+import urllib2
+
+from cinder.common import policy as common_policy
+from cinder import context
+from cinder import exception
+from cinder import flags
+import cinder.common.policy
+from cinder import policy
+from cinder import test
+from cinder import utils
+
+FLAGS = flags.FLAGS
+
+
+class PolicyFileTestCase(test.TestCase):
+    def setUp(self):
+        super(PolicyFileTestCase, self).setUp()
+        policy.reset()
+        self.context = context.RequestContext('fake', 'fake')
+        self.target = {}
+
+    def tearDown(self):
+        super(PolicyFileTestCase, self).tearDown()
+        policy.reset()
+
+    def test_modified_policy_reloads(self):
+        with utils.tempdir() as tmpdir:
+            tmpfilename = os.path.join(tmpdir, 'policy')
+            self.flags(policy_file=tmpfilename)
+
+            action = "example:test"
+            with open(tmpfilename, "w") as policyfile:
+                policyfile.write("""{"example:test": []}""")
+            policy.enforce(self.context, action, self.target)
+            with open(tmpfilename, "w") as policyfile:
+                policyfile.write("""{"example:test": ["false:false"]}""")
+            # NOTE(vish): reset stored policy cache so we don't have to
+            # sleep(1)
+            policy._POLICY_CACHE = {}
+            self.assertRaises(exception.PolicyNotAuthorized, policy.enforce,
+                              self.context, action, self.target)
+
+
+class PolicyTestCase(test.TestCase):
+    def setUp(self):
+        super(PolicyTestCase, self).setUp()
+        policy.reset()
+        # NOTE(vish): preload rules to circumvent reloading from file
+        policy.init()
+        rules = {
+            "true": [],
+            "example:allowed": [],
+            "example:denied": [["false:false"]],
+            "example:get_http": [["http:http://www.example.com"]],
+            "example:my_file": [["role:compute_admin"],
+                                ["project_id:%(project_id)s"]],
+            "example:early_and_fail": [["false:false", "rule:true"]],
+            "example:early_or_success": [["rule:true"], ["false:false"]],
+            "example:lowercase_admin": [["role:admin"], ["role:sysadmin"]],
+            "example:uppercase_admin": [["role:ADMIN"], ["role:sysadmin"]],
+        }
+        # NOTE(vish): then overload underlying brain
+        common_policy.set_brain(common_policy.HttpBrain(rules))
+        self.context = context.RequestContext('fake', 'fake', roles=['member'])
+        self.target = {}
+
+    def tearDown(self):
+        policy.reset()
+        super(PolicyTestCase, self).tearDown()
+
+    def test_enforce_nonexistent_action_throws(self):
+        action = "example:noexist"
+        self.assertRaises(exception.PolicyNotAuthorized, policy.enforce,
+                          self.context, action, self.target)
+
+    def test_enforce_bad_action_throws(self):
+        action = "example:denied"
+        self.assertRaises(exception.PolicyNotAuthorized, policy.enforce,
+                          self.context, action, self.target)
+
+    def test_enforce_good_action(self):
+        action = "example:allowed"
+        policy.enforce(self.context, action, self.target)
+
+    def test_enforce_http_true(self):
+
+        def fakeurlopen(url, post_data):
+            return StringIO.StringIO("True")
+        self.stubs.Set(urllib2, 'urlopen', fakeurlopen)
+        action = "example:get_http"
+        target = {}
+        result = policy.enforce(self.context, action, target)
+        self.assertEqual(result, None)
+
+    def test_enforce_http_false(self):
+
+        def fakeurlopen(url, post_data):
+            return StringIO.StringIO("False")
+        self.stubs.Set(urllib2, 'urlopen', fakeurlopen)
+        action = "example:get_http"
+        target = {}
+        self.assertRaises(exception.PolicyNotAuthorized, policy.enforce,
+                          self.context, action, target)
+
+    def test_templatized_enforcement(self):
+        target_mine = {'project_id': 'fake'}
+        target_not_mine = {'project_id': 'another'}
+        action = "example:my_file"
+        policy.enforce(self.context, action, target_mine)
+        self.assertRaises(exception.PolicyNotAuthorized, policy.enforce,
+                          self.context, action, target_not_mine)
+
+    def test_early_AND_enforcement(self):
+        action = "example:early_and_fail"
+        self.assertRaises(exception.PolicyNotAuthorized, policy.enforce,
+                          self.context, action, self.target)
+
+    def test_early_OR_enforcement(self):
+        action = "example:early_or_success"
+        policy.enforce(self.context, action, self.target)
+
+    def test_ignore_case_role_check(self):
+        lowercase_action = "example:lowercase_admin"
+        uppercase_action = "example:uppercase_admin"
+        # NOTE(dprince) we mix case in the Admin role here to ensure
+        # case is ignored
+        admin_context = context.RequestContext('admin',
+                                                'fake',
+                                                roles=['AdMiN'])
+        policy.enforce(admin_context, lowercase_action, self.target)
+        policy.enforce(admin_context, uppercase_action, self.target)
+
+
+class DefaultPolicyTestCase(test.TestCase):
+
+    def setUp(self):
+        super(DefaultPolicyTestCase, self).setUp()
+        policy.reset()
+        policy.init()
+
+        self.rules = {
+            "default": [],
+            "example:exist": [["false:false"]]
+        }
+
+        self._set_brain('default')
+
+        self.context = context.RequestContext('fake', 'fake')
+
+    def _set_brain(self, default_rule):
+        brain = cinder.common.policy.HttpBrain(self.rules, default_rule)
+        cinder.common.policy.set_brain(brain)
+
+    def tearDown(self):
+        super(DefaultPolicyTestCase, self).tearDown()
+        policy.reset()
+
+    def test_policy_called(self):
+        self.assertRaises(exception.PolicyNotAuthorized, policy.enforce,
+                self.context, "example:exist", {})
+
+    def test_not_found_policy_calls_default(self):
+        policy.enforce(self.context, "example:noexist", {})
+
+    def test_default_not_found(self):
+        self._set_brain("default_noexist")
+        self.assertRaises(exception.PolicyNotAuthorized, policy.enforce,
+                self.context, "example:noexist", {})
diff --git a/cinder/tests/test_quota.py b/cinder/tests/test_quota.py
new file mode 100644
index 000000000..6e794d6e4
--- /dev/null
+++ b/cinder/tests/test_quota.py
@@ -0,0 +1,316 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from cinder import context
+from cinder import db
+from cinder import flags
+from cinder import quota
+from cinder import exception
+from cinder import rpc
+from cinder import test
+from cinder import volume
+from cinder.scheduler import driver as scheduler_driver
+
+
+FLAGS = flags.FLAGS
+
+
+class GetQuotaTestCase(test.TestCase):
+    def setUp(self):
+        super(GetQuotaTestCase, self).setUp()
+        self.flags(quota_instances=10,
+                   quota_cores=20,
+                   quota_ram=50 * 1024,
+                   quota_volumes=10,
+                   quota_gigabytes=1000,
+                   quota_floating_ips=10,
+                   quota_security_groups=10,
+                   quota_security_group_rules=20,
+                   quota_metadata_items=128,
+                   quota_injected_files=5,
+                   quota_injected_file_content_bytes=10 * 1024)
+        self.context = context.RequestContext('admin', 'admin', is_admin=True)
+
+    def _stub_class(self):
+        def fake_quota_class_get_all_by_name(context, quota_class):
+            result = dict(class_name=quota_class)
+            if quota_class == 'test_class':
+                result.update(
+                    instances=5,
+                    cores=10,
+                    ram=25 * 1024,
+                    volumes=5,
+                    gigabytes=500,
+                    floating_ips=5,
+                    quota_security_groups=10,
+                    quota_security_group_rules=20,
+                    metadata_items=64,
+                    injected_files=2,
+                    injected_file_content_bytes=5 * 1024,
+                    invalid_quota=100,
+                    )
+            return result
+
+        self.stubs.Set(db, 'quota_class_get_all_by_name',
+                       fake_quota_class_get_all_by_name)
+
+    def _stub_project(self, override=False):
+        def fake_quota_get_all_by_project(context, project_id):
+            result = dict(project_id=project_id)
+            if override:
+                result.update(
+                    instances=2,
+                    cores=5,
+                    ram=12 * 1024,
+                    volumes=2,
+                    gigabytes=250,
+                    floating_ips=2,
+                    security_groups=5,
+                    security_group_rules=10,
+                    metadata_items=32,
+                    injected_files=1,
+                    injected_file_content_bytes=2 * 1024,
+                    invalid_quota=50,
+                    )
+            return result
+
+        self.stubs.Set(db, 'quota_get_all_by_project',
+                       fake_quota_get_all_by_project)
+
+    def test_default_quotas(self):
+        result = quota._get_default_quotas()
+        self.assertEqual(result, dict(
+                instances=10,
+                cores=20,
+                ram=50 * 1024,
+                volumes=10,
+                gigabytes=1000,
+                floating_ips=10,
+                security_groups=10,
+                security_group_rules=20,
+                metadata_items=128,
+                injected_files=5,
+                injected_file_content_bytes=10 * 1024,
+                ))
+
+    def test_default_quotas_unlimited(self):
+        self.flags(quota_instances=-1,
+                   quota_cores=-1,
+                   quota_ram=-1,
+                   quota_volumes=-1,
+                   quota_gigabytes=-1,
+                   quota_floating_ips=-1,
+                   quota_security_groups=-1,
+                   quota_security_group_rules=-1,
+                   quota_metadata_items=-1,
+                   quota_injected_files=-1,
+                   quota_injected_file_content_bytes=-1)
+        result = quota._get_default_quotas()
+        self.assertEqual(result, dict(
+                instances=-1,
+                cores=-1,
+                ram=-1,
+                volumes=-1,
+                gigabytes=-1,
+                floating_ips=-1,
+                security_groups=-1,
+                security_group_rules=-1,
+                metadata_items=-1,
+                injected_files=-1,
+                injected_file_content_bytes=-1,
+                ))
+
+    def test_class_quotas_noclass(self):
+        self._stub_class()
+        result = quota.get_class_quotas(self.context, 'noclass')
+        self.assertEqual(result, dict(
+                instances=10,
+                cores=20,
+                ram=50 * 1024,
+                volumes=10,
+                gigabytes=1000,
+                floating_ips=10,
+                security_groups=10,
+                security_group_rules=20,
+                metadata_items=128,
+                injected_files=5,
+                injected_file_content_bytes=10 * 1024,
+                ))
+
+    def test_class_quotas(self):
+        self._stub_class()
+        result = quota.get_class_quotas(self.context, 'test_class')
+        self.assertEqual(result, dict(
+                instances=5,
+                cores=10,
+                ram=25 * 1024,
+                volumes=5,
+                gigabytes=500,
+                floating_ips=5,
+                security_groups=10,
+                security_group_rules=20,
+                metadata_items=64,
+                injected_files=2,
+                injected_file_content_bytes=5 * 1024,
+                ))
+
+    def test_project_quotas_defaults_noclass(self):
+        self._stub_class()
+        self._stub_project()
+        result = quota.get_project_quotas(self.context, 'admin')
+        self.assertEqual(result, dict(
+                instances=10,
+                cores=20,
+                ram=50 * 1024,
+                volumes=10,
+                gigabytes=1000,
+                floating_ips=10,
+                security_groups=10,
+                security_group_rules=20,
+                metadata_items=128,
+                injected_files=5,
+                injected_file_content_bytes=10 * 1024,
+                ))
+
+    def test_project_quotas_overrides_noclass(self):
+        self._stub_class()
+        self._stub_project(True)
+        result = quota.get_project_quotas(self.context, 'admin')
+        self.assertEqual(result, dict(
+                instances=2,
+                cores=5,
+                ram=12 * 1024,
+                volumes=2,
+                gigabytes=250,
+                floating_ips=2,
+                security_groups=5,
+                security_group_rules=10,
+                metadata_items=32,
+                injected_files=1,
+                injected_file_content_bytes=2 * 1024,
+                ))
+
+    def test_project_quotas_defaults_withclass(self):
+        self._stub_class()
+        self._stub_project()
+        self.context.quota_class = 'test_class'
+        result = quota.get_project_quotas(self.context, 'admin')
+        self.assertEqual(result, dict(
+                instances=5,
+                cores=10,
+                ram=25 * 1024,
+                volumes=5,
+                gigabytes=500,
+                floating_ips=5,
+                security_groups=10,
+                security_group_rules=20,
+                metadata_items=64,
+                injected_files=2,
+                injected_file_content_bytes=5 * 1024,
+                ))
+
+    def test_project_quotas_overrides_withclass(self):
+        self._stub_class()
+        self._stub_project(True)
+        self.context.quota_class = 'test_class'
+        result = quota.get_project_quotas(self.context, 'admin')
+        self.assertEqual(result, dict(
+                instances=2,
+                cores=5,
+                ram=12 * 1024,
+                volumes=2,
+                gigabytes=250,
+                floating_ips=2,
+                security_groups=5,
+                security_group_rules=10,
+                metadata_items=32,
+                injected_files=1,
+                injected_file_content_bytes=2 * 1024,
+                ))
+
+
+class QuotaTestCase(test.TestCase):
+
+    class StubImageService(object):
+
+        def show(self, *args, **kwargs):
+            return {"properties": {}}
+
+    def setUp(self):
+        super(QuotaTestCase, self).setUp()
+        self.flags(quota_volumes=2,
+                   quota_gigabytes=20)
+        self.user_id = 'admin'
+        self.project_id = 'admin'
+        self.context = context.RequestContext(self.user_id,
+                                              self.project_id,
+                                              is_admin=True)
+        orig_rpc_call = rpc.call
+
+        def rpc_call_wrapper(context, topic, msg):
+            """Stub out the scheduler creating the instance entry"""
+            if (topic == FLAGS.scheduler_topic and
+                msg['method'] == 'run_instance'):
+                scheduler = scheduler_driver.Scheduler
+                instance = scheduler().create_instance_db_entry(
+                        context,
+                        msg['args']['request_spec'])
+                return [scheduler_driver.encode_instance(instance)]
+            else:
+                return orig_rpc_call(context, topic, msg)
+
+        self.stubs.Set(rpc, 'call', rpc_call_wrapper)
+
+    def _create_volume(self, size=10):
+        """Create a test volume"""
+        vol = {}
+        vol['user_id'] = self.user_id
+        vol['project_id'] = self.project_id
+        vol['size'] = size
+        return db.volume_create(self.context, vol)['id']
+
+    def test_unlimited_volumes(self):
+        self.flags(quota_volumes=10, quota_gigabytes=-1)
+        volumes = quota.allowed_volumes(self.context, 100, 1)
+        self.assertEqual(volumes, 10)
+        db.quota_create(self.context, self.project_id, 'volumes', -1)
+        volumes = quota.allowed_volumes(self.context, 100, 1)
+        self.assertEqual(volumes, 100)
+        volumes = quota.allowed_volumes(self.context, 101, 1)
+        self.assertEqual(volumes, 101)
+
+    def test_too_many_volumes(self):
+        volume_ids = []
+        for i in range(FLAGS.quota_volumes):
+            volume_id = self._create_volume()
+            volume_ids.append(volume_id)
+        self.assertRaises(exception.QuotaError,
+                          volume.API().create,
+                          self.context, 10, '', '', None)
+        for volume_id in volume_ids:
+            db.volume_destroy(self.context, volume_id)
+
+    def test_too_many_gigabytes(self):
+        volume_ids = []
+        volume_id = self._create_volume(size=20)
+        volume_ids.append(volume_id)
+        self.assertRaises(exception.QuotaError,
+                          volume.API().create,
+                          self.context, 10, '', '', None)
+        for volume_id in volume_ids:
+            db.volume_destroy(self.context, volume_id)
diff --git a/cinder/tests/test_service.py b/cinder/tests/test_service.py
new file mode 100644
index 000000000..c0c2561e4
--- /dev/null
+++ b/cinder/tests/test_service.py
@@ -0,0 +1,221 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+Unit Tests for remote procedure calls using queue
+"""
+
+import mox
+
+from cinder import context
+from cinder import db
+from cinder import exception
+from cinder import flags
+from cinder.openstack.common import cfg
+from cinder import test
+from cinder import service
+from cinder import manager
+from cinder import wsgi
+
+
+test_service_opts = [
+    cfg.StrOpt("fake_manager",
+               default="cinder.tests.test_service.FakeManager",
+               help="Manager for testing"),
+    cfg.StrOpt("test_service_listen",
+               default=None,
+               help="Host to bind test service to"),
+    cfg.IntOpt("test_service_listen_port",
+               default=0,
+               help="Port number to bind test service to"),
+    ]
+
+flags.FLAGS.register_opts(test_service_opts)
+
+
+class FakeManager(manager.Manager):
+    """Fake manager for tests"""
+    def test_method(self):
+        return 'manager'
+
+
+class ExtendedService(service.Service):
+    def test_method(self):
+        return 'service'
+
+
+class ServiceManagerTestCase(test.TestCase):
+    """Test cases for Services"""
+
+    def test_message_gets_to_manager(self):
+        serv = service.Service('test',
+                               'test',
+                               'test',
+                               'cinder.tests.test_service.FakeManager')
+        serv.start()
+        self.assertEqual(serv.test_method(), 'manager')
+
+    def test_override_manager_method(self):
+        serv = ExtendedService('test',
+                               'test',
+                               'test',
+                               'cinder.tests.test_service.FakeManager')
+        serv.start()
+        self.assertEqual(serv.test_method(), 'service')
+
+
+class ServiceFlagsTestCase(test.TestCase):
+    def test_service_enabled_on_create_based_on_flag(self):
+        self.flags(enable_new_services=True)
+        host = 'foo'
+        binary = 'cinder-fake'
+        app = service.Service.create(host=host, binary=binary)
+        app.start()
+        app.stop()
+        ref = db.service_get(context.get_admin_context(), app.service_id)
+        db.service_destroy(context.get_admin_context(), app.service_id)
+        self.assert_(not ref['disabled'])
+
+    def test_service_disabled_on_create_based_on_flag(self):
+        self.flags(enable_new_services=False)
+        host = 'foo'
+        binary = 'cinder-fake'
+        app = service.Service.create(host=host, binary=binary)
+        app.start()
+        app.stop()
+        ref = db.service_get(context.get_admin_context(), app.service_id)
+        db.service_destroy(context.get_admin_context(), app.service_id)
+        self.assert_(ref['disabled'])
+
+
+class ServiceTestCase(test.TestCase):
+    """Test cases for Services"""
+
+    def setUp(self):
+        super(ServiceTestCase, self).setUp()
+        self.mox.StubOutWithMock(service, 'db')
+
+    def test_create(self):
+        host = 'foo'
+        binary = 'cinder-fake'
+        topic = 'fake'
+
+        # NOTE(vish): Create was moved out of mox replay to make sure that
+        #             the looping calls are created in StartService.
+        app = service.Service.create(host=host, binary=binary, topic=topic)
+
+        self.assert_(app)
+
+    def test_report_state_newly_disconnected(self):
+        host = 'foo'
+        binary = 'bar'
+        topic = 'test'
+        service_create = {'host': host,
+                          'binary': binary,
+                          'topic': topic,
+                          'report_count': 0,
+                          'availability_zone': 'cinder'}
+        service_ref = {'host': host,
+                          'binary': binary,
+                          'topic': topic,
+                          'report_count': 0,
+                          'availability_zone': 'cinder',
+                          'id': 1}
+
+        service.db.service_get_by_args(mox.IgnoreArg(),
+                                      host,
+                                      binary).AndRaise(exception.NotFound())
+        service.db.service_create(mox.IgnoreArg(),
+                                  service_create).AndReturn(service_ref)
+        service.db.service_get(mox.IgnoreArg(),
+                               mox.IgnoreArg()).AndRaise(Exception())
+
+        self.mox.ReplayAll()
+        serv = service.Service(host,
+                               binary,
+                               topic,
+                               'cinder.tests.test_service.FakeManager')
+        serv.start()
+        serv.report_state()
+        self.assert_(serv.model_disconnected)
+
+    def test_report_state_newly_connected(self):
+        host = 'foo'
+        binary = 'bar'
+        topic = 'test'
+        service_create = {'host': host,
+                          'binary': binary,
+                          'topic': topic,
+                          'report_count': 0,
+                          'availability_zone': 'cinder'}
+        service_ref = {'host': host,
+                          'binary': binary,
+                          'topic': topic,
+                          'report_count': 0,
+                          'availability_zone': 'cinder',
+                          'id': 1}
+
+        service.db.service_get_by_args(mox.IgnoreArg(),
+                                      host,
+                                      binary).AndRaise(exception.NotFound())
+        service.db.service_create(mox.IgnoreArg(),
+                                  service_create).AndReturn(service_ref)
+        service.db.service_get(mox.IgnoreArg(),
+                               service_ref['id']).AndReturn(service_ref)
+        service.db.service_update(mox.IgnoreArg(), service_ref['id'],
+                                  mox.ContainsKeyValue('report_count', 1))
+
+        self.mox.ReplayAll()
+        serv = service.Service(host,
+                               binary,
+                               topic,
+                               'cinder.tests.test_service.FakeManager')
+        serv.start()
+        serv.model_disconnected = True
+        serv.report_state()
+
+        self.assert_(not serv.model_disconnected)
+
+
+class TestWSGIService(test.TestCase):
+
+    def setUp(self):
+        super(TestWSGIService, self).setUp()
+        self.stubs.Set(wsgi.Loader, "load_app", mox.MockAnything())
+
+    def test_service_random_port(self):
+        test_service = service.WSGIService("test_service")
+        self.assertEquals(0, test_service.port)
+        test_service.start()
+        self.assertNotEqual(0, test_service.port)
+        test_service.stop()
+
+
+class TestLauncher(test.TestCase):
+
+    def setUp(self):
+        super(TestLauncher, self).setUp()
+        self.stubs.Set(wsgi.Loader, "load_app", mox.MockAnything())
+        self.service = service.WSGIService("test_service")
+
+    def test_launch_app(self):
+        self.assertEquals(0, self.service.port)
+        launcher = service.Launcher()
+        launcher.launch_server(self.service)
+        self.assertEquals(0, self.service.port)
+        launcher.stop()
diff --git a/cinder/tests/test_skip_examples.py b/cinder/tests/test_skip_examples.py
new file mode 100644
index 000000000..2e51aef34
--- /dev/null
+++ b/cinder/tests/test_skip_examples.py
@@ -0,0 +1,47 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from cinder import test
+
+
+class ExampleSkipTestCase(test.TestCase):
+    test_counter = 0
+
+    @test.skip_test("Example usage of @test.skip_test()")
+    def test_skip_test_example(self):
+        self.fail("skip_test failed to work properly.")
+
+    @test.skip_if(True, "Example usage of @test.skip_if()")
+    def test_skip_if_example(self):
+        self.fail("skip_if failed to work properly.")
+
+    @test.skip_unless(False, "Example usage of @test.skip_unless()")
+    def test_skip_unless_example(self):
+        self.fail("skip_unless failed to work properly.")
+
+    @test.skip_if(False, "This test case should never be skipped.")
+    def test_001_increase_test_counter(self):
+        ExampleSkipTestCase.test_counter += 1
+
+    @test.skip_unless(True, "This test case should never be skipped.")
+    def test_002_increase_test_counter(self):
+        ExampleSkipTestCase.test_counter += 1
+
+    def test_003_verify_test_counter(self):
+        self.assertEquals(ExampleSkipTestCase.test_counter, 2,
+                          "Tests were not skipped appropriately")
diff --git a/cinder/tests/test_test.py b/cinder/tests/test_test.py
new file mode 100644
index 000000000..8ff84c1ad
--- /dev/null
+++ b/cinder/tests/test_test.py
@@ -0,0 +1,44 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Tests for the testing base code."""
+
+from cinder import rpc
+from cinder import test
+
+
+class IsolationTestCase(test.TestCase):
+    """Ensure that things are cleaned up after failed tests.
+
+    These tests don't really do much here, but if isolation fails a bunch
+    of other tests should fail.
+
+    """
+    def test_service_isolation(self):
+        self.start_service('volume')
+
+    def test_rpc_consumer_isolation(self):
+        class NeverCalled(object):
+
+            def __getattribute__(*args):
+                assert False, "I should never get called."
+
+        connection = rpc.create_connection(new=True)
+        proxy = NeverCalled()
+        connection.create_consumer('volume', proxy, fanout=False)
+        connection.consume_in_thread()
diff --git a/cinder/tests/test_test_utils.py b/cinder/tests/test_test_utils.py
new file mode 100644
index 000000000..5e9063cc5
--- /dev/null
+++ b/cinder/tests/test_test_utils.py
@@ -0,0 +1,29 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+#
+#    Copyright 2010 OpenStack LLC
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from cinder import db
+from cinder import test
+from cinder.tests import utils as test_utils
+
+
+class TestUtilsTestCase(test.TestCase):
+    def test_get_test_admin_context(self):
+        """get_test_admin_context's return value behaves like admin context"""
+        ctxt = test_utils.get_test_admin_context()
+
+        # TODO(soren): This should verify the full interface context
+        # objects expose.
+        self.assertTrue(ctxt.is_admin)
diff --git a/cinder/tests/test_utils.py b/cinder/tests/test_utils.py
new file mode 100644
index 000000000..ee946e7d9
--- /dev/null
+++ b/cinder/tests/test_utils.py
@@ -0,0 +1,1188 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+#    Copyright 2011 Justin Santa Barbara
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import __builtin__
+import datetime
+import hashlib
+import os
+import os.path
+import socket
+import shutil
+import StringIO
+import tempfile
+
+import eventlet
+from eventlet import greenpool
+import iso8601
+import lockfile
+import mox
+
+import cinder
+from cinder import exception
+from cinder import flags
+from cinder import test
+from cinder import utils
+
+
+FLAGS = flags.FLAGS
+
+
+class ExecuteTestCase(test.TestCase):
+    def test_retry_on_failure(self):
+        fd, tmpfilename = tempfile.mkstemp()
+        _, tmpfilename2 = tempfile.mkstemp()
+        try:
+            fp = os.fdopen(fd, 'w+')
+            fp.write('''#!/bin/sh
+# If stdin fails to get passed during one of the runs, make a note.
+if ! grep -q foo
+then
+    echo 'failure' > "$1"
+fi
+# If stdin has failed to get passed during this or a previous run, exit early.
+if grep failure "$1"
+then
+    exit 1
+fi
+runs="$(cat $1)"
+if [ -z "$runs" ]
+then
+    runs=0
+fi
+runs=$(($runs + 1))
+echo $runs > "$1"
+exit 1
+''')
+            fp.close()
+            os.chmod(tmpfilename, 0755)
+            self.assertRaises(exception.ProcessExecutionError,
+                              utils.execute,
+                              tmpfilename, tmpfilename2, attempts=10,
+                              process_input='foo',
+                              delay_on_retry=False)
+            fp = open(tmpfilename2, 'r+')
+            runs = fp.read()
+            fp.close()
+            self.assertNotEquals(runs.strip(), 'failure', 'stdin did not '
+                                                          'always get passed '
+                                                          'correctly')
+            runs = int(runs.strip())
+            self.assertEquals(runs, 10,
+                              'Ran %d times instead of 10.' % (runs,))
+        finally:
+            os.unlink(tmpfilename)
+            os.unlink(tmpfilename2)
+
+    def test_unknown_kwargs_raises_error(self):
+        self.assertRaises(exception.Error,
+                          utils.execute,
+                          '/usr/bin/env', 'true',
+                          this_is_not_a_valid_kwarg=True)
+
+    def test_check_exit_code_boolean(self):
+        utils.execute('/usr/bin/env', 'false', check_exit_code=False)
+        self.assertRaises(exception.ProcessExecutionError,
+                          utils.execute,
+                          '/usr/bin/env', 'false', check_exit_code=True)
+
+    def test_no_retry_on_success(self):
+        fd, tmpfilename = tempfile.mkstemp()
+        _, tmpfilename2 = tempfile.mkstemp()
+        try:
+            fp = os.fdopen(fd, 'w+')
+            fp.write('''#!/bin/sh
+# If we've already run, bail out.
+grep -q foo "$1" && exit 1
+# Mark that we've run before.
+echo foo > "$1"
+# Check that stdin gets passed correctly.
+grep foo
+''')
+            fp.close()
+            os.chmod(tmpfilename, 0755)
+            utils.execute(tmpfilename,
+                          tmpfilename2,
+                          process_input='foo',
+                          attempts=2)
+        finally:
+            os.unlink(tmpfilename)
+            os.unlink(tmpfilename2)
+
+
+class GetFromPathTestCase(test.TestCase):
+    def test_tolerates_nones(self):
+        f = utils.get_from_path
+
+        input = []
+        self.assertEquals([], f(input, "a"))
+        self.assertEquals([], f(input, "a/b"))
+        self.assertEquals([], f(input, "a/b/c"))
+
+        input = [None]
+        self.assertEquals([], f(input, "a"))
+        self.assertEquals([], f(input, "a/b"))
+        self.assertEquals([], f(input, "a/b/c"))
+
+        input = [{'a': None}]
+        self.assertEquals([], f(input, "a"))
+        self.assertEquals([], f(input, "a/b"))
+        self.assertEquals([], f(input, "a/b/c"))
+
+        input = [{'a': {'b': None}}]
+        self.assertEquals([{'b': None}], f(input, "a"))
+        self.assertEquals([], f(input, "a/b"))
+        self.assertEquals([], f(input, "a/b/c"))
+
+        input = [{'a': {'b': {'c': None}}}]
+        self.assertEquals([{'b': {'c': None}}], f(input, "a"))
+        self.assertEquals([{'c': None}], f(input, "a/b"))
+        self.assertEquals([], f(input, "a/b/c"))
+
+        input = [{'a': {'b': {'c': None}}}, {'a': None}]
+        self.assertEquals([{'b': {'c': None}}], f(input, "a"))
+        self.assertEquals([{'c': None}], f(input, "a/b"))
+        self.assertEquals([], f(input, "a/b/c"))
+
+        input = [{'a': {'b': {'c': None}}}, {'a': {'b': None}}]
+        self.assertEquals([{'b': {'c': None}}, {'b': None}], f(input, "a"))
+        self.assertEquals([{'c': None}], f(input, "a/b"))
+        self.assertEquals([], f(input, "a/b/c"))
+
+    def test_does_select(self):
+        f = utils.get_from_path
+
+        input = [{'a': 'a_1'}]
+        self.assertEquals(['a_1'], f(input, "a"))
+        self.assertEquals([], f(input, "a/b"))
+        self.assertEquals([], f(input, "a/b/c"))
+
+        input = [{'a': {'b': 'b_1'}}]
+        self.assertEquals([{'b': 'b_1'}], f(input, "a"))
+        self.assertEquals(['b_1'], f(input, "a/b"))
+        self.assertEquals([], f(input, "a/b/c"))
+
+        input = [{'a': {'b': {'c': 'c_1'}}}]
+        self.assertEquals([{'b': {'c': 'c_1'}}], f(input, "a"))
+        self.assertEquals([{'c': 'c_1'}], f(input, "a/b"))
+        self.assertEquals(['c_1'], f(input, "a/b/c"))
+
+        input = [{'a': {'b': {'c': 'c_1'}}}, {'a': None}]
+        self.assertEquals([{'b': {'c': 'c_1'}}], f(input, "a"))
+        self.assertEquals([{'c': 'c_1'}], f(input, "a/b"))
+        self.assertEquals(['c_1'], f(input, "a/b/c"))
+
+        input = [{'a': {'b': {'c': 'c_1'}}},
+                 {'a': {'b': None}}]
+        self.assertEquals([{'b': {'c': 'c_1'}}, {'b': None}], f(input, "a"))
+        self.assertEquals([{'c': 'c_1'}], f(input, "a/b"))
+        self.assertEquals(['c_1'], f(input, "a/b/c"))
+
+        input = [{'a': {'b': {'c': 'c_1'}}},
+                 {'a': {'b': {'c': 'c_2'}}}]
+        self.assertEquals([{'b': {'c': 'c_1'}}, {'b': {'c': 'c_2'}}],
+                          f(input, "a"))
+        self.assertEquals([{'c': 'c_1'}, {'c': 'c_2'}], f(input, "a/b"))
+        self.assertEquals(['c_1', 'c_2'], f(input, "a/b/c"))
+
+        self.assertEquals([], f(input, "a/b/c/d"))
+        self.assertEquals([], f(input, "c/a/b/d"))
+        self.assertEquals([], f(input, "i/r/t"))
+
+    def test_flattens_lists(self):
+        f = utils.get_from_path
+
+        input = [{'a': [1, 2, 3]}]
+        self.assertEquals([1, 2, 3], f(input, "a"))
+        self.assertEquals([], f(input, "a/b"))
+        self.assertEquals([], f(input, "a/b/c"))
+
+        input = [{'a': {'b': [1, 2, 3]}}]
+        self.assertEquals([{'b': [1, 2, 3]}], f(input, "a"))
+        self.assertEquals([1, 2, 3], f(input, "a/b"))
+        self.assertEquals([], f(input, "a/b/c"))
+
+        input = [{'a': {'b': [1, 2, 3]}}, {'a': {'b': [4, 5, 6]}}]
+        self.assertEquals([1, 2, 3, 4, 5, 6], f(input, "a/b"))
+        self.assertEquals([], f(input, "a/b/c"))
+
+        input = [{'a': [{'b': [1, 2, 3]}, {'b': [4, 5, 6]}]}]
+        self.assertEquals([1, 2, 3, 4, 5, 6], f(input, "a/b"))
+        self.assertEquals([], f(input, "a/b/c"))
+
+        input = [{'a': [1, 2, {'b': 'b_1'}]}]
+        self.assertEquals([1, 2, {'b': 'b_1'}], f(input, "a"))
+        self.assertEquals(['b_1'], f(input, "a/b"))
+
+    def test_bad_xpath(self):
+        f = utils.get_from_path
+
+        self.assertRaises(exception.Error, f, [], None)
+        self.assertRaises(exception.Error, f, [], "")
+        self.assertRaises(exception.Error, f, [], "/")
+        self.assertRaises(exception.Error, f, [], "/a")
+        self.assertRaises(exception.Error, f, [], "/a/")
+        self.assertRaises(exception.Error, f, [], "//")
+        self.assertRaises(exception.Error, f, [], "//a")
+        self.assertRaises(exception.Error, f, [], "a//a")
+        self.assertRaises(exception.Error, f, [], "a//a/")
+        self.assertRaises(exception.Error, f, [], "a/a/")
+
+    def test_real_failure1(self):
+        # Real world failure case...
+        #  We weren't coping when the input was a Dictionary instead of a List
+        # This led to test_accepts_dictionaries
+        f = utils.get_from_path
+
+        inst = {'fixed_ip': {'floating_ips': [{'address': '1.2.3.4'}],
+                             'address': '192.168.0.3'},
+                'hostname': ''}
+
+        private_ips = f(inst, 'fixed_ip/address')
+        public_ips = f(inst, 'fixed_ip/floating_ips/address')
+        self.assertEquals(['192.168.0.3'], private_ips)
+        self.assertEquals(['1.2.3.4'], public_ips)
+
+    def test_accepts_dictionaries(self):
+        f = utils.get_from_path
+
+        input = {'a': [1, 2, 3]}
+        self.assertEquals([1, 2, 3], f(input, "a"))
+        self.assertEquals([], f(input, "a/b"))
+        self.assertEquals([], f(input, "a/b/c"))
+
+        input = {'a': {'b': [1, 2, 3]}}
+        self.assertEquals([{'b': [1, 2, 3]}], f(input, "a"))
+        self.assertEquals([1, 2, 3], f(input, "a/b"))
+        self.assertEquals([], f(input, "a/b/c"))
+
+        input = {'a': [{'b': [1, 2, 3]}, {'b': [4, 5, 6]}]}
+        self.assertEquals([1, 2, 3, 4, 5, 6], f(input, "a/b"))
+        self.assertEquals([], f(input, "a/b/c"))
+
+        input = {'a': [1, 2, {'b': 'b_1'}]}
+        self.assertEquals([1, 2, {'b': 'b_1'}], f(input, "a"))
+        self.assertEquals(['b_1'], f(input, "a/b"))
+
+
+class GenericUtilsTestCase(test.TestCase):
+    def test_parse_server_string(self):
+        result = utils.parse_server_string('::1')
+        self.assertEqual(('::1', ''), result)
+        result = utils.parse_server_string('[::1]:8773')
+        self.assertEqual(('::1', '8773'), result)
+        result = utils.parse_server_string('2001:db8::192.168.1.1')
+        self.assertEqual(('2001:db8::192.168.1.1', ''), result)
+        result = utils.parse_server_string('[2001:db8::192.168.1.1]:8773')
+        self.assertEqual(('2001:db8::192.168.1.1', '8773'), result)
+        result = utils.parse_server_string('192.168.1.1')
+        self.assertEqual(('192.168.1.1', ''), result)
+        result = utils.parse_server_string('192.168.1.2:8773')
+        self.assertEqual(('192.168.1.2', '8773'), result)
+        result = utils.parse_server_string('192.168.1.3')
+        self.assertEqual(('192.168.1.3', ''), result)
+        result = utils.parse_server_string('www.example.com:8443')
+        self.assertEqual(('www.example.com', '8443'), result)
+        result = utils.parse_server_string('www.example.com')
+        self.assertEqual(('www.example.com', ''), result)
+        # error case
+        result = utils.parse_server_string('www.exa:mple.com:8443')
+        self.assertEqual(('', ''), result)
+
+    def test_hostname_unicode_sanitization(self):
+        hostname = u"\u7684.test.example.com"
+        self.assertEqual("test.example.com",
+                         utils.sanitize_hostname(hostname))
+
+    def test_hostname_sanitize_periods(self):
+        hostname = "....test.example.com..."
+        self.assertEqual("test.example.com",
+                         utils.sanitize_hostname(hostname))
+
+    def test_hostname_sanitize_dashes(self):
+        hostname = "----test.example.com---"
+        self.assertEqual("test.example.com",
+                         utils.sanitize_hostname(hostname))
+
+    def test_hostname_sanitize_characters(self):
+        hostname = "(#@&$!(@*--#&91)(__=+--test-host.example!!.com-0+"
+        self.assertEqual("91----test-host.example.com-0",
+                         utils.sanitize_hostname(hostname))
+
+    def test_hostname_translate(self):
+        hostname = "<}\x1fh\x10e\x08l\x02l\x05o\x12!{>"
+        self.assertEqual("hello", utils.sanitize_hostname(hostname))
+
+    def test_bool_from_str(self):
+        self.assertTrue(utils.bool_from_str('1'))
+        self.assertTrue(utils.bool_from_str('2'))
+        self.assertTrue(utils.bool_from_str('-1'))
+        self.assertTrue(utils.bool_from_str('true'))
+        self.assertTrue(utils.bool_from_str('True'))
+        self.assertTrue(utils.bool_from_str('tRuE'))
+        self.assertFalse(utils.bool_from_str('False'))
+        self.assertFalse(utils.bool_from_str('false'))
+        self.assertFalse(utils.bool_from_str('0'))
+        self.assertFalse(utils.bool_from_str(None))
+        self.assertFalse(utils.bool_from_str('junk'))
+
+    def test_generate_glance_url(self):
+        generated_url = utils.generate_glance_url()
+        actual_url = "http://%s:%d" % (FLAGS.glance_host, FLAGS.glance_port)
+        self.assertEqual(generated_url, actual_url)
+
+    def test_read_cached_file(self):
+        self.mox.StubOutWithMock(os.path, "getmtime")
+        os.path.getmtime(mox.IgnoreArg()).AndReturn(1)
+        self.mox.ReplayAll()
+
+        cache_data = {"data": 1123, "mtime": 1}
+        data = utils.read_cached_file("/this/is/a/fake", cache_data)
+        self.assertEqual(cache_data["data"], data)
+
+    def test_read_modified_cached_file(self):
+        self.mox.StubOutWithMock(os.path, "getmtime")
+        self.mox.StubOutWithMock(__builtin__, 'open')
+        os.path.getmtime(mox.IgnoreArg()).AndReturn(2)
+
+        fake_contents = "lorem ipsum"
+        fake_file = self.mox.CreateMockAnything()
+        fake_file.read().AndReturn(fake_contents)
+        fake_context_manager = self.mox.CreateMockAnything()
+        fake_context_manager.__enter__().AndReturn(fake_file)
+        fake_context_manager.__exit__(mox.IgnoreArg(),
+                                      mox.IgnoreArg(),
+                                      mox.IgnoreArg())
+
+        __builtin__.open(mox.IgnoreArg()).AndReturn(fake_context_manager)
+
+        self.mox.ReplayAll()
+        cache_data = {"data": 1123, "mtime": 1}
+        self.reload_called = False
+
+        def test_reload(reloaded_data):
+            self.assertEqual(reloaded_data, fake_contents)
+            self.reload_called = True
+
+        data = utils.read_cached_file("/this/is/a/fake", cache_data,
+                                                reload_func=test_reload)
+        self.assertEqual(data, fake_contents)
+        self.assertTrue(self.reload_called)
+
+    def test_generate_password(self):
+        password = utils.generate_password()
+        self.assertTrue([c for c in password if c in '0123456789'])
+        self.assertTrue([c for c in password
+                         if c in 'abcdefghijklmnopqrstuvwxyz'])
+        self.assertTrue([c for c in password
+                         if c in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'])
+
+    def test_read_file_as_root(self):
+        def fake_execute(*args, **kwargs):
+            if args[1] == 'bad':
+                raise exception.ProcessExecutionError
+            return 'fakecontents', None
+
+        self.stubs.Set(utils, 'execute', fake_execute)
+        contents = utils.read_file_as_root('good')
+        self.assertEqual(contents, 'fakecontents')
+        self.assertRaises(exception.FileNotFound,
+                          utils.read_file_as_root, 'bad')
+
+    def test_strcmp_const_time(self):
+        self.assertTrue(utils.strcmp_const_time('abc123', 'abc123'))
+        self.assertFalse(utils.strcmp_const_time('a', 'aaaaa'))
+        self.assertFalse(utils.strcmp_const_time('ABC123', 'abc123'))
+
+    def test_temporary_chown(self):
+        def fake_execute(*args, **kwargs):
+            if args[0] == 'chown':
+                fake_execute.uid = args[1]
+        self.stubs.Set(utils, 'execute', fake_execute)
+
+        with tempfile.NamedTemporaryFile() as f:
+            with utils.temporary_chown(f.name, owner_uid=2):
+                self.assertEqual(fake_execute.uid, 2)
+            self.assertEqual(fake_execute.uid, os.getuid())
+
+
+class IsUUIDLikeTestCase(test.TestCase):
+    def assertUUIDLike(self, val, expected):
+        result = utils.is_uuid_like(val)
+        self.assertEqual(result, expected)
+
+    def test_good_uuid(self):
+        val = 'aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa'
+        self.assertUUIDLike(val, True)
+
+    def test_integer_passed(self):
+        val = 1
+        self.assertUUIDLike(val, False)
+
+    def test_non_uuid_string_passed(self):
+        val = 'foo-fooo'
+        self.assertUUIDLike(val, False)
+
+    def test_non_uuid_string_passed2(self):
+        val = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
+        self.assertUUIDLike(val, False)
+
+    def test_gen_valid_uuid(self):
+        self.assertUUIDLike(str(utils.gen_uuid()), True)
+
+
+class ToPrimitiveTestCase(test.TestCase):
+    def test_list(self):
+        self.assertEquals(utils.to_primitive([1, 2, 3]), [1, 2, 3])
+
+    def test_empty_list(self):
+        self.assertEquals(utils.to_primitive([]), [])
+
+    def test_tuple(self):
+        self.assertEquals(utils.to_primitive((1, 2, 3)), [1, 2, 3])
+
+    def test_dict(self):
+        self.assertEquals(utils.to_primitive(dict(a=1, b=2, c=3)),
+                          dict(a=1, b=2, c=3))
+
+    def test_empty_dict(self):
+        self.assertEquals(utils.to_primitive({}), {})
+
+    def test_datetime(self):
+        x = datetime.datetime(1, 2, 3, 4, 5, 6, 7)
+        self.assertEquals(utils.to_primitive(x), "0001-02-03 04:05:06.000007")
+
+    def test_iter(self):
+        class IterClass(object):
+            def __init__(self):
+                self.data = [1, 2, 3, 4, 5]
+                self.index = 0
+
+            def __iter__(self):
+                return self
+
+            def next(self):
+                if self.index == len(self.data):
+                    raise StopIteration
+                self.index = self.index + 1
+                return self.data[self.index - 1]
+
+        x = IterClass()
+        self.assertEquals(utils.to_primitive(x), [1, 2, 3, 4, 5])
+
+    def test_iteritems(self):
+        class IterItemsClass(object):
+            def __init__(self):
+                self.data = dict(a=1, b=2, c=3).items()
+                self.index = 0
+
+            def __iter__(self):
+                return self
+
+            def next(self):
+                if self.index == len(self.data):
+                    raise StopIteration
+                self.index = self.index + 1
+                return self.data[self.index - 1]
+
+        x = IterItemsClass()
+        ordered = utils.to_primitive(x)
+        ordered.sort()
+        self.assertEquals(ordered, [['a', 1], ['b', 2], ['c', 3]])
+
+    def test_instance(self):
+        class MysteryClass(object):
+            a = 10
+
+            def __init__(self):
+                self.b = 1
+
+        x = MysteryClass()
+        self.assertEquals(utils.to_primitive(x, convert_instances=True),
+                          dict(b=1))
+
+        self.assertEquals(utils.to_primitive(x), x)
+
+    def test_typeerror(self):
+        x = bytearray  # Class, not instance
+        self.assertEquals(utils.to_primitive(x), u"<type 'bytearray'>")
+
+    def test_nasties(self):
+        def foo():
+            pass
+        x = [datetime, foo, dir]
+        ret = utils.to_primitive(x)
+        self.assertEquals(len(ret), 3)
+        self.assertTrue(ret[0].startswith(u"<module 'datetime' from "))
+        self.assertTrue(ret[1].startswith('<function foo at 0x'))
+        self.assertEquals(ret[2], '<built-in function dir>')
+
+
+class MonkeyPatchTestCase(test.TestCase):
+    """Unit test for utils.monkey_patch()."""
+    def setUp(self):
+        super(MonkeyPatchTestCase, self).setUp()
+        self.example_package = 'cinder.tests.monkey_patch_example.'
+        self.flags(
+            monkey_patch=True,
+            monkey_patch_modules=[self.example_package + 'example_a' + ':'
+            + self.example_package + 'example_decorator'])
+
+    def test_monkey_patch(self):
+        utils.monkey_patch()
+        cinder.tests.monkey_patch_example.CALLED_FUNCTION = []
+        from cinder.tests.monkey_patch_example import example_a
+        from cinder.tests.monkey_patch_example import example_b
+
+        self.assertEqual('Example function', example_a.example_function_a())
+        exampleA = example_a.ExampleClassA()
+        exampleA.example_method()
+        ret_a = exampleA.example_method_add(3, 5)
+        self.assertEqual(ret_a, 8)
+
+        self.assertEqual('Example function', example_b.example_function_b())
+        exampleB = example_b.ExampleClassB()
+        exampleB.example_method()
+        ret_b = exampleB.example_method_add(3, 5)
+
+        self.assertEqual(ret_b, 8)
+        package_a = self.example_package + 'example_a.'
+        self.assertTrue(package_a + 'example_function_a'
+            in cinder.tests.monkey_patch_example.CALLED_FUNCTION)
+
+        self.assertTrue(package_a + 'ExampleClassA.example_method'
+            in cinder.tests.monkey_patch_example.CALLED_FUNCTION)
+        self.assertTrue(package_a + 'ExampleClassA.example_method_add'
+            in cinder.tests.monkey_patch_example.CALLED_FUNCTION)
+        package_b = self.example_package + 'example_b.'
+        self.assertFalse(package_b + 'example_function_b'
+            in cinder.tests.monkey_patch_example.CALLED_FUNCTION)
+        self.assertFalse(package_b + 'ExampleClassB.example_method'
+            in cinder.tests.monkey_patch_example.CALLED_FUNCTION)
+        self.assertFalse(package_b + 'ExampleClassB.example_method_add'
+            in cinder.tests.monkey_patch_example.CALLED_FUNCTION)
+
+
+class DeprecationTest(test.TestCase):
+    def setUp(self):
+        super(DeprecationTest, self).setUp()
+
+        def fake_warn_deprecated_class(cls, msg):
+            self.warn = ('class', cls, msg)
+
+        def fake_warn_deprecated_function(func, msg):
+            self.warn = ('function', func, msg)
+
+        self.stubs.Set(utils, 'warn_deprecated_class',
+                       fake_warn_deprecated_class)
+        self.stubs.Set(utils, 'warn_deprecated_function',
+                       fake_warn_deprecated_function)
+        self.warn = None
+
+    def test_deprecated_function_no_message(self):
+        def test_function():
+            pass
+
+        decorated = utils.deprecated()(test_function)
+
+        decorated()
+        self.assertEqual(self.warn, ('function', test_function, ''))
+
+    def test_deprecated_function_with_message(self):
+        def test_function():
+            pass
+
+        decorated = utils.deprecated('string')(test_function)
+
+        decorated()
+        self.assertEqual(self.warn, ('function', test_function, 'string'))
+
+    def test_deprecated_class_no_message(self):
+        @utils.deprecated()
+        class TestClass(object):
+            pass
+
+        TestClass()
+        self.assertEqual(self.warn, ('class', TestClass, ''))
+
+    def test_deprecated_class_with_message(self):
+        @utils.deprecated('string')
+        class TestClass(object):
+            pass
+
+        TestClass()
+        self.assertEqual(self.warn, ('class', TestClass, 'string'))
+
+    def test_deprecated_classmethod_no_message(self):
+        @utils.deprecated()
+        class TestClass(object):
+            @classmethod
+            def class_method(cls):
+                pass
+
+        TestClass.class_method()
+        self.assertEqual(self.warn, ('class', TestClass, ''))
+
+    def test_deprecated_classmethod_with_message(self):
+        @utils.deprecated('string')
+        class TestClass(object):
+            @classmethod
+            def class_method(cls):
+                pass
+
+        TestClass.class_method()
+        self.assertEqual(self.warn, ('class', TestClass, 'string'))
+
+    def test_deprecated_staticmethod_no_message(self):
+        @utils.deprecated()
+        class TestClass(object):
+            @staticmethod
+            def static_method():
+                pass
+
+        TestClass.static_method()
+        self.assertEqual(self.warn, ('class', TestClass, ''))
+
+    def test_deprecated_staticmethod_with_message(self):
+        @utils.deprecated('string')
+        class TestClass(object):
+            @staticmethod
+            def static_method():
+                pass
+
+        TestClass.static_method()
+        self.assertEqual(self.warn, ('class', TestClass, 'string'))
+
+    def test_deprecated_instancemethod(self):
+        @utils.deprecated()
+        class TestClass(object):
+            def instance_method(self):
+                pass
+
+        # Instantiate the class...
+        obj = TestClass()
+        self.assertEqual(self.warn, ('class', TestClass, ''))
+
+        # Reset warn...
+        self.warn = None
+
+        # Call the instance method...
+        obj.instance_method()
+
+        # Make sure that did *not* generate a warning
+        self.assertEqual(self.warn, None)
+
+    def test_service_is_up(self):
+        fts_func = datetime.datetime.fromtimestamp
+        fake_now = 1000
+        down_time = 5
+
+        self.flags(service_down_time=down_time)
+        self.mox.StubOutWithMock(utils, 'utcnow')
+
+        # Up (equal)
+        utils.utcnow().AndReturn(fts_func(fake_now))
+        service = {'updated_at': fts_func(fake_now - down_time),
+                   'created_at': fts_func(fake_now - down_time)}
+        self.mox.ReplayAll()
+        result = utils.service_is_up(service)
+        self.assertTrue(result)
+
+        self.mox.ResetAll()
+        # Up
+        utils.utcnow().AndReturn(fts_func(fake_now))
+        service = {'updated_at': fts_func(fake_now - down_time + 1),
+                   'created_at': fts_func(fake_now - down_time + 1)}
+        self.mox.ReplayAll()
+        result = utils.service_is_up(service)
+        self.assertTrue(result)
+
+        self.mox.ResetAll()
+        # Down
+        utils.utcnow().AndReturn(fts_func(fake_now))
+        service = {'updated_at': fts_func(fake_now - down_time - 1),
+                   'created_at': fts_func(fake_now - down_time - 1)}
+        self.mox.ReplayAll()
+        result = utils.service_is_up(service)
+        self.assertFalse(result)
+
+    def test_xhtml_escape(self):
+        self.assertEqual('&quot;foo&quot;', utils.xhtml_escape('"foo"'))
+        self.assertEqual('&apos;foo&apos;', utils.xhtml_escape("'foo'"))
+
+    def test_hash_file(self):
+        data = 'Mary had a little lamb, its fleece as white as snow'
+        flo = StringIO.StringIO(data)
+        h1 = utils.hash_file(flo)
+        h2 = hashlib.sha1(data).hexdigest()
+        self.assertEquals(h1, h2)
+
+
+class Iso8601TimeTest(test.TestCase):
+
+    def _instaneous(self, timestamp, yr, mon, day, hr, min, sec, micro):
+        self.assertEquals(timestamp.year, yr)
+        self.assertEquals(timestamp.month, mon)
+        self.assertEquals(timestamp.day, day)
+        self.assertEquals(timestamp.hour, hr)
+        self.assertEquals(timestamp.minute, min)
+        self.assertEquals(timestamp.second, sec)
+        self.assertEquals(timestamp.microsecond, micro)
+
+    def _do_test(self, str, yr, mon, day, hr, min, sec, micro, shift):
+        DAY_SECONDS = 24 * 60 * 60
+        timestamp = utils.parse_isotime(str)
+        self._instaneous(timestamp, yr, mon, day, hr, min, sec, micro)
+        offset = timestamp.tzinfo.utcoffset(None)
+        self.assertEqual(offset.seconds + offset.days * DAY_SECONDS, shift)
+
+    def test_zulu(self):
+        str = '2012-02-14T20:53:07Z'
+        self._do_test(str, 2012, 02, 14, 20, 53, 7, 0, 0)
+
+    def test_zulu_micros(self):
+        str = '2012-02-14T20:53:07.123Z'
+        self._do_test(str, 2012, 02, 14, 20, 53, 7, 123000, 0)
+
+    def test_offset_east(self):
+        str = '2012-02-14T20:53:07+04:30'
+        offset = 4.5 * 60 * 60
+        self._do_test(str, 2012, 02, 14, 20, 53, 7, 0, offset)
+
+    def test_offset_east_micros(self):
+        str = '2012-02-14T20:53:07.42+04:30'
+        offset = 4.5 * 60 * 60
+        self._do_test(str, 2012, 02, 14, 20, 53, 7, 420000, offset)
+
+    def test_offset_west(self):
+        str = '2012-02-14T20:53:07-05:30'
+        offset = -5.5 * 60 * 60
+        self._do_test(str, 2012, 02, 14, 20, 53, 7, 0, offset)
+
+    def test_offset_west_micros(self):
+        str = '2012-02-14T20:53:07.654321-05:30'
+        offset = -5.5 * 60 * 60
+        self._do_test(str, 2012, 02, 14, 20, 53, 7, 654321, offset)
+
+    def test_compare(self):
+        zulu = utils.parse_isotime('2012-02-14T20:53:07')
+        east = utils.parse_isotime('2012-02-14T20:53:07-01:00')
+        west = utils.parse_isotime('2012-02-14T20:53:07+01:00')
+        self.assertTrue(east > west)
+        self.assertTrue(east > zulu)
+        self.assertTrue(zulu > west)
+
+    def test_compare_micros(self):
+        zulu = utils.parse_isotime('2012-02-14T20:53:07.6544')
+        east = utils.parse_isotime('2012-02-14T19:53:07.654321-01:00')
+        west = utils.parse_isotime('2012-02-14T21:53:07.655+01:00')
+        self.assertTrue(east < west)
+        self.assertTrue(east < zulu)
+        self.assertTrue(zulu < west)
+
+    def test_zulu_roundtrip(self):
+        str = '2012-02-14T20:53:07Z'
+        zulu = utils.parse_isotime(str)
+        self.assertEquals(zulu.tzinfo, iso8601.iso8601.UTC)
+        self.assertEquals(utils.isotime(zulu), str)
+
+    def test_east_roundtrip(self):
+        str = '2012-02-14T20:53:07-07:00'
+        east = utils.parse_isotime(str)
+        self.assertEquals(east.tzinfo.tzname(None), '-07:00')
+        self.assertEquals(utils.isotime(east), str)
+
+    def test_west_roundtrip(self):
+        str = '2012-02-14T20:53:07+11:30'
+        west = utils.parse_isotime(str)
+        self.assertEquals(west.tzinfo.tzname(None), '+11:30')
+        self.assertEquals(utils.isotime(west), str)
+
+    def test_now_roundtrip(self):
+        str = utils.isotime()
+        now = utils.parse_isotime(str)
+        self.assertEquals(now.tzinfo, iso8601.iso8601.UTC)
+        self.assertEquals(utils.isotime(now), str)
+
+    def test_zulu_normalize(self):
+        str = '2012-02-14T20:53:07Z'
+        zulu = utils.parse_isotime(str)
+        normed = utils.normalize_time(zulu)
+        self._instaneous(normed, 2012, 2, 14, 20, 53, 07, 0)
+
+    def test_east_normalize(self):
+        str = '2012-02-14T20:53:07-07:00'
+        east = utils.parse_isotime(str)
+        normed = utils.normalize_time(east)
+        self._instaneous(normed, 2012, 2, 15, 03, 53, 07, 0)
+
+    def test_west_normalize(self):
+        str = '2012-02-14T20:53:07+21:00'
+        west = utils.parse_isotime(str)
+        normed = utils.normalize_time(west)
+        self._instaneous(normed, 2012, 2, 13, 23, 53, 07, 0)
+
+
+class TestGreenLocks(test.TestCase):
+    def test_concurrent_green_lock_succeeds(self):
+        """Verify spawn_n greenthreads with two locks run concurrently.
+
+        This succeeds with spawn but fails with spawn_n because lockfile
+        gets the same thread id for both spawn_n threads. Our workaround
+        of using the GreenLockFile will work even if the issue is fixed.
+        """
+        self.completed = False
+        with utils.tempdir() as tmpdir:
+
+            def locka(wait):
+                a = utils.GreenLockFile(os.path.join(tmpdir, 'a'))
+                a.acquire()
+                wait.wait()
+                a.release()
+                self.completed = True
+
+            def lockb(wait):
+                b = utils.GreenLockFile(os.path.join(tmpdir, 'b'))
+                b.acquire()
+                wait.wait()
+                b.release()
+
+            wait1 = eventlet.event.Event()
+            wait2 = eventlet.event.Event()
+            pool = greenpool.GreenPool()
+            pool.spawn_n(locka, wait1)
+            pool.spawn_n(lockb, wait2)
+            wait2.send()
+            eventlet.sleep(0)
+            wait1.send()
+            pool.waitall()
+        self.assertTrue(self.completed)
+
+
+class TestLockCleanup(test.TestCase):
+    """unit tests for utils.cleanup_file_locks()"""
+
+    def setUp(self):
+        super(TestLockCleanup, self).setUp()
+
+        self.pid = os.getpid()
+        self.dead_pid = self._get_dead_pid()
+        self.tempdir = tempfile.mkdtemp()
+        self.flags(lock_path=self.tempdir)
+        self.lock_name = 'cinder-testlock'
+        self.lock_file = os.path.join(FLAGS.lock_path,
+                                      self.lock_name + '.lock')
+        self.hostname = socket.gethostname()
+        print self.pid, self.dead_pid
+        try:
+            os.unlink(self.lock_file)
+        except OSError as (errno, strerror):
+            if errno == 2:
+                pass
+
+    def tearDown(self):
+        shutil.rmtree(self.tempdir)
+        super(TestLockCleanup, self).tearDown()
+
+    def _get_dead_pid(self):
+        """get a pid for a process that does not exist"""
+
+        candidate_pid = self.pid - 1
+        while os.path.exists(os.path.join('/proc', str(candidate_pid))):
+            candidate_pid -= 1
+            if candidate_pid == 1:
+                return 0
+        return candidate_pid
+
+    def _get_sentinel_name(self, hostname, pid, thread='MainThread'):
+        return os.path.join(FLAGS.lock_path,
+                            '%s.%s-%d' % (hostname, thread, pid))
+
+    def _create_sentinel(self, hostname, pid, thread='MainThread'):
+        name = self._get_sentinel_name(hostname, pid, thread)
+        open(name, 'wb').close()
+        return name
+
+    def test_clean_stale_locks(self):
+        """verify locks for dead processes are cleaned up"""
+
+        # create sentinels for two processes, us and a 'dead' one
+        # no active lock
+        sentinel1 = self._create_sentinel(self.hostname, self.pid)
+        sentinel2 = self._create_sentinel(self.hostname, self.dead_pid)
+
+        utils.cleanup_file_locks()
+
+        self.assertTrue(os.path.exists(sentinel1))
+        self.assertFalse(os.path.exists(self.lock_file))
+        self.assertFalse(os.path.exists(sentinel2))
+
+        os.unlink(sentinel1)
+
+    def test_clean_stale_locks_active(self):
+        """verify locks for dead processes are cleaned with an active lock """
+
+        # create sentinels for two processes, us and a 'dead' one
+        # create an active lock for us
+        sentinel1 = self._create_sentinel(self.hostname, self.pid)
+        sentinel2 = self._create_sentinel(self.hostname, self.dead_pid)
+        os.link(sentinel1, self.lock_file)
+
+        utils.cleanup_file_locks()
+
+        self.assertTrue(os.path.exists(sentinel1))
+        self.assertTrue(os.path.exists(self.lock_file))
+        self.assertFalse(os.path.exists(sentinel2))
+
+        os.unlink(sentinel1)
+        os.unlink(self.lock_file)
+
+    def test_clean_stale_with_threads(self):
+        """verify locks for multiple threads are cleaned up """
+
+        # create sentinels for four threads in our process, and a 'dead'
+        # process.  no lock.
+        sentinel1 = self._create_sentinel(self.hostname, self.pid, 'Default-1')
+        sentinel2 = self._create_sentinel(self.hostname, self.pid, 'Default-2')
+        sentinel3 = self._create_sentinel(self.hostname, self.pid, 'Default-3')
+        sentinel4 = self._create_sentinel(self.hostname, self.pid, 'Default-4')
+        sentinel5 = self._create_sentinel(self.hostname, self.dead_pid,
+                                          'Default-1')
+
+        utils.cleanup_file_locks()
+
+        self.assertTrue(os.path.exists(sentinel1))
+        self.assertTrue(os.path.exists(sentinel2))
+        self.assertTrue(os.path.exists(sentinel3))
+        self.assertTrue(os.path.exists(sentinel4))
+        self.assertFalse(os.path.exists(self.lock_file))
+        self.assertFalse(os.path.exists(sentinel5))
+
+        os.unlink(sentinel1)
+        os.unlink(sentinel2)
+        os.unlink(sentinel3)
+        os.unlink(sentinel4)
+
+    def test_clean_stale_with_threads_active(self):
+        """verify locks for multiple threads are cleaned up """
+
+        # create sentinels for four threads in our process, and a 'dead'
+        # process
+        sentinel1 = self._create_sentinel(self.hostname, self.pid, 'Default-1')
+        sentinel2 = self._create_sentinel(self.hostname, self.pid, 'Default-2')
+        sentinel3 = self._create_sentinel(self.hostname, self.pid, 'Default-3')
+        sentinel4 = self._create_sentinel(self.hostname, self.pid, 'Default-4')
+        sentinel5 = self._create_sentinel(self.hostname, self.dead_pid,
+                                          'Default-1')
+
+        os.link(sentinel1, self.lock_file)
+
+        utils.cleanup_file_locks()
+
+        self.assertTrue(os.path.exists(sentinel1))
+        self.assertTrue(os.path.exists(sentinel2))
+        self.assertTrue(os.path.exists(sentinel3))
+        self.assertTrue(os.path.exists(sentinel4))
+        self.assertTrue(os.path.exists(self.lock_file))
+        self.assertFalse(os.path.exists(sentinel5))
+
+        os.unlink(sentinel1)
+        os.unlink(sentinel2)
+        os.unlink(sentinel3)
+        os.unlink(sentinel4)
+        os.unlink(self.lock_file)
+
+    def test_clean_bogus_lockfiles(self):
+        """verify lockfiles are cleaned """
+
+        lock1 = os.path.join(FLAGS.lock_path, 'cinder-testlock1.lock')
+        lock2 = os.path.join(FLAGS.lock_path, 'cinder-testlock2.lock')
+        lock3 = os.path.join(FLAGS.lock_path, 'testlock3.lock')
+
+        open(lock1, 'wb').close()
+        open(lock2, 'wb').close()
+        open(lock3, 'wb').close()
+
+        utils.cleanup_file_locks()
+
+        self.assertFalse(os.path.exists(lock1))
+        self.assertFalse(os.path.exists(lock2))
+        self.assertTrue(os.path.exists(lock3))
+
+        os.unlink(lock3)
+
+
+class AuditPeriodTest(test.TestCase):
+
+    def setUp(self):
+        super(AuditPeriodTest, self).setUp()
+        #a fairly random time to test with
+        self.test_time = datetime.datetime(second=23,
+                                           minute=12,
+                                           hour=8,
+                                           day=5,
+                                           month=3,
+                                           year=2012)
+        utils.set_time_override(override_time=self.test_time)
+
+    def tearDown(self):
+        utils.clear_time_override()
+        super(AuditPeriodTest, self).tearDown()
+
+    def test_hour(self):
+        begin, end = utils.last_completed_audit_period(unit='hour')
+        self.assertEquals(begin, datetime.datetime(
+                                           hour=7,
+                                           day=5,
+                                           month=3,
+                                           year=2012))
+        self.assertEquals(end, datetime.datetime(
+                                           hour=8,
+                                           day=5,
+                                           month=3,
+                                           year=2012))
+
+    def test_hour_with_offset_before_current(self):
+        begin, end = utils.last_completed_audit_period(unit='hour@10')
+        self.assertEquals(begin, datetime.datetime(
+                                           minute=10,
+                                           hour=7,
+                                           day=5,
+                                           month=3,
+                                           year=2012))
+        self.assertEquals(end, datetime.datetime(
+                                           minute=10,
+                                           hour=8,
+                                           day=5,
+                                           month=3,
+                                           year=2012))
+
+    def test_hour_with_offset_after_current(self):
+        begin, end = utils.last_completed_audit_period(unit='hour@30')
+        self.assertEquals(begin, datetime.datetime(
+                                           minute=30,
+                                           hour=6,
+                                           day=5,
+                                           month=3,
+                                           year=2012))
+        self.assertEquals(end, datetime.datetime(
+                                           minute=30,
+                                           hour=7,
+                                           day=5,
+                                           month=3,
+                                           year=2012))
+
+    def test_day(self):
+        begin, end = utils.last_completed_audit_period(unit='day')
+        self.assertEquals(begin, datetime.datetime(
+                                           day=4,
+                                           month=3,
+                                           year=2012))
+        self.assertEquals(end, datetime.datetime(
+                                           day=5,
+                                           month=3,
+                                           year=2012))
+
+    def test_day_with_offset_before_current(self):
+        begin, end = utils.last_completed_audit_period(unit='day@6')
+        self.assertEquals(begin, datetime.datetime(
+                                           hour=6,
+                                           day=4,
+                                           month=3,
+                                           year=2012))
+        self.assertEquals(end, datetime.datetime(
+                                           hour=6,
+                                           day=5,
+                                           month=3,
+                                           year=2012))
+
+    def test_day_with_offset_after_current(self):
+        begin, end = utils.last_completed_audit_period(unit='day@10')
+        self.assertEquals(begin, datetime.datetime(
+                                           hour=10,
+                                           day=3,
+                                           month=3,
+                                           year=2012))
+        self.assertEquals(end, datetime.datetime(
+                                           hour=10,
+                                           day=4,
+                                           month=3,
+                                           year=2012))
+
+    def test_month(self):
+        begin, end = utils.last_completed_audit_period(unit='month')
+        self.assertEquals(begin, datetime.datetime(
+                                           day=1,
+                                           month=2,
+                                           year=2012))
+        self.assertEquals(end, datetime.datetime(
+                                           day=1,
+                                           month=3,
+                                           year=2012))
+
+    def test_month_with_offset_before_current(self):
+        begin, end = utils.last_completed_audit_period(unit='month@2')
+        self.assertEquals(begin, datetime.datetime(
+                                           day=2,
+                                           month=2,
+                                           year=2012))
+        self.assertEquals(end, datetime.datetime(
+                                           day=2,
+                                           month=3,
+                                           year=2012))
+
+    def test_month_with_offset_after_current(self):
+        begin, end = utils.last_completed_audit_period(unit='month@15')
+        self.assertEquals(begin, datetime.datetime(
+                                           day=15,
+                                           month=1,
+                                           year=2012))
+        self.assertEquals(end, datetime.datetime(
+                                           day=15,
+                                           month=2,
+                                           year=2012))
+
+    def test_year(self):
+        begin, end = utils.last_completed_audit_period(unit='year')
+        self.assertEquals(begin, datetime.datetime(
+                                           day=1,
+                                           month=1,
+                                           year=2011))
+        self.assertEquals(end, datetime.datetime(
+                                           day=1,
+                                           month=1,
+                                           year=2012))
+
+    def test_year_with_offset_before_current(self):
+        begin, end = utils.last_completed_audit_period(unit='year@2')
+        self.assertEquals(begin, datetime.datetime(
+                                           day=1,
+                                           month=2,
+                                           year=2011))
+        self.assertEquals(end, datetime.datetime(
+                                           day=1,
+                                           month=2,
+                                           year=2012))
+
+    def test_year_with_offset_after_current(self):
+        begin, end = utils.last_completed_audit_period(unit='year@6')
+        self.assertEquals(begin, datetime.datetime(
+                                           day=1,
+                                           month=6,
+                                           year=2010))
+        self.assertEquals(end, datetime.datetime(
+                                           day=1,
+                                           month=6,
+                                           year=2011))
diff --git a/cinder/tests/test_versions.py b/cinder/tests/test_versions.py
new file mode 100644
index 000000000..c7a88c5a3
--- /dev/null
+++ b/cinder/tests/test_versions.py
@@ -0,0 +1,59 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+#    Copyright 2011 Ken Pepple
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+
+from cinder import test
+from cinder import version
+
+
+class VersionTestCase(test.TestCase):
+    """Test cases for Versions code"""
+    def setUp(self):
+        """setup test with unchanging values"""
+        super(VersionTestCase, self).setUp()
+        self.version = version
+        self.version.FINAL = False
+        self.version.CINDER_VERSION = ['2012', '10']
+        self.version.YEAR, self.version.COUNT = self.version.CINDER_VERSION
+        self.version.version_info = {'branch_nick': u'LOCALBRANCH',
+                                    'revision_id': 'LOCALREVISION',
+                                    'revno': 0}
+
+    def test_version_string_is_good(self):
+        """Ensure version string works"""
+        self.assertEqual("2012.10-dev", self.version.version_string())
+
+    def test_canonical_version_string_is_good(self):
+        """Ensure canonical version works"""
+        self.assertEqual("2012.10", self.version.canonical_version_string())
+
+    def test_final_version_strings_are_identical(self):
+        """Ensure final version strings match only at release"""
+        self.assertNotEqual(self.version.canonical_version_string(),
+                        self.version.version_string())
+        self.version.FINAL = True
+        self.assertEqual(self.version.canonical_version_string(),
+                        self.version.version_string())
+
+    def test_vcs_version_string_is_good(self):
+        """Ensure uninstalled code generates local """
+        self.assertEqual("LOCALBRANCH:LOCALREVISION",
+                        self.version.vcs_version_string())
+
+    def test_version_string_with_vcs_is_good(self):
+        """Ensure uninstalled code get version string"""
+        self.assertEqual("2012.10-LOCALBRANCH:LOCALREVISION",
+                        self.version.version_string_with_vcs())
diff --git a/cinder/tests/test_volume.py b/cinder/tests/test_volume.py
new file mode 100644
index 000000000..aebc25942
--- /dev/null
+++ b/cinder/tests/test_volume.py
@@ -0,0 +1,501 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+Tests for Volume Code.
+
+"""
+
+import cStringIO
+
+import mox
+
+from cinder import context
+from cinder import exception
+from cinder import db
+from cinder import flags
+from cinder import log as logging
+from cinder.openstack.common import importutils
+import cinder.policy
+from cinder import rpc
+from cinder import test
+import cinder.volume.api
+
+FLAGS = flags.FLAGS
+LOG = logging.getLogger(__name__)
+
+
+class VolumeTestCase(test.TestCase):
+    """Test Case for volumes."""
+
+    def setUp(self):
+        super(VolumeTestCase, self).setUp()
+        self.flags(connection_type='fake')
+        self.volume = importutils.import_object(FLAGS.volume_manager)
+        self.context = context.get_admin_context()
+
+    def tearDown(self):
+        super(VolumeTestCase, self).tearDown()
+
+    @staticmethod
+    def _create_volume(size='0', snapshot_id=None):
+        """Create a volume object."""
+        vol = {}
+        vol['size'] = size
+        vol['snapshot_id'] = snapshot_id
+        vol['user_id'] = 'fake'
+        vol['project_id'] = 'fake'
+        vol['availability_zone'] = FLAGS.storage_availability_zone
+        vol['status'] = "creating"
+        vol['attach_status'] = "detached"
+        return db.volume_create(context.get_admin_context(), vol)
+
+    def test_create_delete_volume(self):
+        """Test volume can be created and deleted."""
+        volume = self._create_volume()
+        volume_id = volume['id']
+        self.volume.create_volume(self.context, volume_id)
+        self.assertEqual(volume_id, db.volume_get(context.get_admin_context(),
+                         volume_id).id)
+
+        self.volume.delete_volume(self.context, volume_id)
+        self.assertRaises(exception.NotFound,
+                          db.volume_get,
+                          self.context,
+                          volume_id)
+
+    def test_delete_busy_volume(self):
+        """Test volume survives deletion if driver reports it as busy."""
+        volume = self._create_volume()
+        volume_id = volume['id']
+        self.volume.create_volume(self.context, volume_id)
+
+        self.mox.StubOutWithMock(self.volume.driver, 'delete_volume')
+        self.volume.driver.delete_volume(mox.IgnoreArg()) \
+                                              .AndRaise(exception.VolumeIsBusy)
+        self.mox.ReplayAll()
+        res = self.volume.delete_volume(self.context, volume_id)
+        self.assertEqual(True, res)
+        volume_ref = db.volume_get(context.get_admin_context(), volume_id)
+        self.assertEqual(volume_id, volume_ref.id)
+        self.assertEqual("available", volume_ref.status)
+
+        self.mox.UnsetStubs()
+        self.volume.delete_volume(self.context, volume_id)
+
+    def test_create_volume_from_snapshot(self):
+        """Test volume can be created from a snapshot."""
+        volume_src = self._create_volume()
+        self.volume.create_volume(self.context, volume_src['id'])
+        snapshot_id = self._create_snapshot(volume_src['id'])
+        self.volume.create_snapshot(self.context, volume_src['id'],
+                                    snapshot_id)
+        volume_dst = self._create_volume(0, snapshot_id)
+        self.volume.create_volume(self.context, volume_dst['id'], snapshot_id)
+        self.assertEqual(volume_dst['id'],
+                         db.volume_get(
+                             context.get_admin_context(),
+                             volume_dst['id']).id)
+        self.assertEqual(snapshot_id, db.volume_get(
+                context.get_admin_context(),
+                volume_dst['id']).snapshot_id)
+
+        self.volume.delete_volume(self.context, volume_dst['id'])
+        self.volume.delete_snapshot(self.context, snapshot_id)
+        self.volume.delete_volume(self.context, volume_src['id'])
+
+    def test_too_big_volume(self):
+        """Ensure failure if a too large of a volume is requested."""
+        # FIXME(vish): validation needs to move into the data layer in
+        #              volume_create
+        return True
+        try:
+            volume = self._create_volume('1001')
+            self.volume.create_volume(self.context, volume)
+            self.fail("Should have thrown TypeError")
+        except TypeError:
+            pass
+
+    def test_too_many_volumes(self):
+        """Ensure that NoMoreTargets is raised when we run out of volumes."""
+        vols = []
+        total_slots = FLAGS.iscsi_num_targets
+        for _index in xrange(total_slots):
+            volume = self._create_volume()
+            self.volume.create_volume(self.context, volume['id'])
+            vols.append(volume['id'])
+        volume = self._create_volume()
+        self.assertRaises(db.NoMoreTargets,
+                          self.volume.create_volume,
+                          self.context,
+                          volume['id'])
+        db.volume_destroy(context.get_admin_context(), volume['id'])
+        for volume_id in vols:
+            self.volume.delete_volume(self.context, volume_id)
+
+    def test_run_attach_detach_volume(self):
+        """Make sure volume can be attached and detached from instance."""
+        instance_id = 'fake-inst'
+        mountpoint = "/dev/sdf"
+        volume = self._create_volume()
+        volume_id = volume['id']
+        self.volume.create_volume(self.context, volume_id)
+        if FLAGS.fake_tests:
+            db.volume_attached(self.context, volume_id, instance_id,
+                                mountpoint)
+        else:
+            self.compute.attach_volume(self.context,
+                                       instance_id,
+                                       volume_id,
+                                       mountpoint)
+        vol = db.volume_get(context.get_admin_context(), volume_id)
+        self.assertEqual(vol['status'], "in-use")
+        self.assertEqual(vol['attach_status'], "attached")
+        self.assertEqual(vol['mountpoint'], mountpoint)
+        self.assertEqual(vol['instance_id'], instance_id)
+
+        self.assertRaises(exception.Error,
+                          self.volume.delete_volume,
+                          self.context,
+                          volume_id)
+        if FLAGS.fake_tests:
+            db.volume_detached(self.context, volume_id)
+        else:
+            pass
+            self.compute.detach_volume(self.context,
+                                       instance_id,
+                                       volume_id)
+        vol = db.volume_get(self.context, volume_id)
+        self.assertEqual(vol['status'], "available")
+
+        self.volume.delete_volume(self.context, volume_id)
+        self.assertRaises(exception.VolumeNotFound,
+                          db.volume_get,
+                          self.context,
+                          volume_id)
+
+    def test_concurrent_volumes_get_different_targets(self):
+        """Ensure multiple concurrent volumes get different targets."""
+        volume_ids = []
+        targets = []
+
+        def _check(volume_id):
+            """Make sure targets aren't duplicated."""
+            volume_ids.append(volume_id)
+            admin_context = context.get_admin_context()
+            iscsi_target = db.volume_get_iscsi_target_num(admin_context,
+                                                          volume_id)
+            self.assert_(iscsi_target not in targets)
+            targets.append(iscsi_target)
+            LOG.debug(_("Target %s allocated"), iscsi_target)
+        total_slots = FLAGS.iscsi_num_targets
+        for _index in xrange(total_slots):
+            volume = self._create_volume()
+            d = self.volume.create_volume(self.context, volume['id'])
+            _check(d)
+        for volume_id in volume_ids:
+            self.volume.delete_volume(self.context, volume_id)
+
+    def test_multi_node(self):
+        # TODO(termie): Figure out how to test with two nodes,
+        # each of them having a different FLAG for storage_node
+        # This will allow us to test cross-node interactions
+        pass
+
+    @staticmethod
+    def _create_snapshot(volume_id, size='0'):
+        """Create a snapshot object."""
+        snap = {}
+        snap['volume_size'] = size
+        snap['user_id'] = 'fake'
+        snap['project_id'] = 'fake'
+        snap['volume_id'] = volume_id
+        snap['status'] = "creating"
+        return db.snapshot_create(context.get_admin_context(), snap)['id']
+
+    def test_create_delete_snapshot(self):
+        """Test snapshot can be created and deleted."""
+        volume = self._create_volume()
+        self.volume.create_volume(self.context, volume['id'])
+        snapshot_id = self._create_snapshot(volume['id'])
+        self.volume.create_snapshot(self.context, volume['id'], snapshot_id)
+        self.assertEqual(snapshot_id,
+                         db.snapshot_get(context.get_admin_context(),
+                                         snapshot_id).id)
+
+        self.volume.delete_snapshot(self.context, snapshot_id)
+        self.assertRaises(exception.NotFound,
+                          db.snapshot_get,
+                          self.context,
+                          snapshot_id)
+        self.volume.delete_volume(self.context, volume['id'])
+
+    def test_cant_delete_volume_with_snapshots(self):
+        """Test snapshot can be created and deleted."""
+        volume = self._create_volume()
+        self.volume.create_volume(self.context, volume['id'])
+        snapshot_id = self._create_snapshot(volume['id'])
+        self.volume.create_snapshot(self.context, volume['id'], snapshot_id)
+        self.assertEqual(snapshot_id,
+                         db.snapshot_get(context.get_admin_context(),
+                                         snapshot_id).id)
+
+        volume['status'] = 'available'
+        volume['host'] = 'fakehost'
+
+        volume_api = cinder.volume.api.API()
+
+        self.assertRaises(exception.InvalidVolume,
+                          volume_api.delete,
+                          self.context,
+                          volume)
+        self.volume.delete_snapshot(self.context, snapshot_id)
+        self.volume.delete_volume(self.context, volume['id'])
+
+    def test_can_delete_errored_snapshot(self):
+        """Test snapshot can be created and deleted."""
+        volume = self._create_volume()
+        self.volume.create_volume(self.context, volume['id'])
+        snapshot_id = self._create_snapshot(volume['id'])
+        self.volume.create_snapshot(self.context, volume['id'], snapshot_id)
+        snapshot = db.snapshot_get(context.get_admin_context(),
+                                   snapshot_id)
+
+        volume_api = cinder.volume.api.API()
+
+        snapshot['status'] = 'badstatus'
+        self.assertRaises(exception.InvalidVolume,
+                          volume_api.delete_snapshot,
+                          self.context,
+                          snapshot)
+
+        snapshot['status'] = 'error'
+        self.volume.delete_snapshot(self.context, snapshot_id)
+        self.volume.delete_volume(self.context, volume['id'])
+
+    def test_create_snapshot_force(self):
+        """Test snapshot in use can be created forcibly."""
+
+        def fake_cast(ctxt, topic, msg):
+            pass
+        self.stubs.Set(rpc, 'cast', fake_cast)
+        instance_id = 'fake-inst'
+
+        volume = self._create_volume()
+        self.volume.create_volume(self.context, volume['id'])
+        db.volume_attached(self.context, volume['id'], instance_id,
+                           '/dev/sda1')
+
+        volume_api = cinder.volume.api.API()
+        volume = volume_api.get(self.context, volume['id'])
+        self.assertRaises(exception.InvalidVolume,
+                          volume_api.create_snapshot,
+                          self.context, volume,
+                          'fake_name', 'fake_description')
+        snapshot_ref = volume_api.create_snapshot_force(self.context,
+                                                        volume,
+                                                        'fake_name',
+                                                        'fake_description')
+        db.snapshot_destroy(self.context, snapshot_ref['id'])
+        db.volume_destroy(self.context, volume['id'])
+
+    def test_delete_busy_snapshot(self):
+        """Test snapshot can be created and deleted."""
+        volume = self._create_volume()
+        volume_id = volume['id']
+        self.volume.create_volume(self.context, volume_id)
+        snapshot_id = self._create_snapshot(volume_id)
+        self.volume.create_snapshot(self.context, volume_id, snapshot_id)
+
+        self.mox.StubOutWithMock(self.volume.driver, 'delete_snapshot')
+        self.volume.driver.delete_snapshot(mox.IgnoreArg()) \
+                                            .AndRaise(exception.SnapshotIsBusy)
+        self.mox.ReplayAll()
+        self.volume.delete_snapshot(self.context, snapshot_id)
+        snapshot_ref = db.snapshot_get(self.context, snapshot_id)
+        self.assertEqual(snapshot_id, snapshot_ref.id)
+        self.assertEqual("available", snapshot_ref.status)
+
+        self.mox.UnsetStubs()
+        self.volume.delete_snapshot(self.context, snapshot_id)
+        self.volume.delete_volume(self.context, volume_id)
+
+
+class DriverTestCase(test.TestCase):
+    """Base Test class for Drivers."""
+    driver_name = "cinder.volume.driver.FakeBaseDriver"
+
+    def setUp(self):
+        super(DriverTestCase, self).setUp()
+        self.flags(volume_driver=self.driver_name,
+                   logging_default_format_string="%(message)s")
+        self.volume = importutils.import_object(FLAGS.volume_manager)
+        self.context = context.get_admin_context()
+        self.output = ""
+
+        def _fake_execute(_command, *_args, **_kwargs):
+            """Fake _execute."""
+            return self.output, None
+        self.volume.driver.set_execute(_fake_execute)
+
+        log = logging.getLogger()
+        self.stream = cStringIO.StringIO()
+        log.logger.addHandler(logging.logging.StreamHandler(self.stream))
+
+    def _attach_volume(self):
+        """Attach volumes to an instance. This function also sets
+           a fake log message."""
+        return []
+
+    def _detach_volume(self, volume_id_list):
+        """Detach volumes from an instance."""
+        for volume_id in volume_id_list:
+            db.volume_detached(self.context, volume_id)
+            self.volume.delete_volume(self.context, volume_id)
+
+
+class VolumeDriverTestCase(DriverTestCase):
+    """Test case for VolumeDriver"""
+    driver_name = "cinder.volume.driver.VolumeDriver"
+
+    def test_delete_busy_volume(self):
+        """Test deleting a busy volume."""
+        self.stubs.Set(self.volume.driver, '_volume_not_present',
+                       lambda x: False)
+        self.stubs.Set(self.volume.driver, '_delete_volume',
+                       lambda x, y: False)
+        # Want DriverTestCase._fake_execute to return 'o' so that
+        # volume.driver.delete_volume() raises the VolumeIsBusy exception.
+        self.output = 'o'
+        self.assertRaises(exception.VolumeIsBusy,
+                          self.volume.driver.delete_volume,
+                          {'name': 'test1', 'size': 1024})
+        # when DriverTestCase._fake_execute returns something other than
+        # 'o' volume.driver.delete_volume() does not raise an exception.
+        self.output = 'x'
+        self.volume.driver.delete_volume({'name': 'test1', 'size': 1024})
+
+
+class ISCSITestCase(DriverTestCase):
+    """Test Case for ISCSIDriver"""
+    driver_name = "cinder.volume.driver.ISCSIDriver"
+
+    def _attach_volume(self):
+        """Attach volumes to an instance. This function also sets
+           a fake log message."""
+        volume_id_list = []
+        for index in xrange(3):
+            vol = {}
+            vol['size'] = 0
+            vol_ref = db.volume_create(self.context, vol)
+            self.volume.create_volume(self.context, vol_ref['id'])
+            vol_ref = db.volume_get(self.context, vol_ref['id'])
+
+            # each volume has a different mountpoint
+            mountpoint = "/dev/sd" + chr((ord('b') + index))
+            instance_id = 'fake-inst'
+            db.volume_attached(self.context, vol_ref['id'], instance_id,
+                               mountpoint)
+            volume_id_list.append(vol_ref['id'])
+
+        return volume_id_list
+
+    def test_check_for_export_with_no_volume(self):
+        """No log message when no volume is attached to an instance."""
+        self.stream.truncate(0)
+        instance_id = 'fake-inst'
+        self.volume.check_for_export(self.context, instance_id)
+        self.assertEqual(self.stream.getvalue(), '')
+
+    def test_check_for_export_with_all_volume_exported(self):
+        """No log message when all the processes are running."""
+        volume_id_list = self._attach_volume()
+
+        self.mox.StubOutWithMock(self.volume.driver.tgtadm, 'show_target')
+        for i in volume_id_list:
+            tid = db.volume_get_iscsi_target_num(self.context, i)
+            self.volume.driver.tgtadm.show_target(tid)
+
+        self.stream.truncate(0)
+        self.mox.ReplayAll()
+        instance_id = 'fake-inst'
+        self.volume.check_for_export(self.context, instance_id)
+        self.assertEqual(self.stream.getvalue(), '')
+        self.mox.UnsetStubs()
+
+        self._detach_volume(volume_id_list)
+
+    def test_check_for_export_with_some_volume_missing(self):
+        """Output a warning message when some volumes are not recognied
+           by ietd."""
+        volume_id_list = self._attach_volume()
+        instance_id = 'fake-inst'
+
+        tid = db.volume_get_iscsi_target_num(self.context, volume_id_list[0])
+        self.mox.StubOutWithMock(self.volume.driver.tgtadm, 'show_target')
+        self.volume.driver.tgtadm.show_target(tid).AndRaise(
+            exception.ProcessExecutionError())
+
+        self.mox.ReplayAll()
+        self.assertRaises(exception.ProcessExecutionError,
+                          self.volume.check_for_export,
+                          self.context,
+                          instance_id)
+        msg = _("Cannot confirm exported volume id:%s.") % volume_id_list[0]
+        self.assertTrue(0 <= self.stream.getvalue().find(msg))
+        self.mox.UnsetStubs()
+
+        self._detach_volume(volume_id_list)
+
+
+class VolumePolicyTestCase(test.TestCase):
+
+    def setUp(self):
+        super(VolumePolicyTestCase, self).setUp()
+
+        cinder.policy.reset()
+        cinder.policy.init()
+
+        self.context = context.get_admin_context()
+
+    def tearDown(self):
+        super(VolumePolicyTestCase, self).tearDown()
+        cinder.policy.reset()
+
+    def _set_rules(self, rules):
+        cinder.common.policy.set_brain(cinder.common.policy.HttpBrain(rules))
+
+    def test_check_policy(self):
+        self.mox.StubOutWithMock(cinder.policy, 'enforce')
+        target = {
+            'project_id': self.context.project_id,
+            'user_id': self.context.user_id,
+        }
+        cinder.policy.enforce(self.context, 'volume:attach', target)
+        self.mox.ReplayAll()
+        cinder.volume.api.check_policy(self.context, 'attach')
+
+    def test_check_policy_with_target(self):
+        self.mox.StubOutWithMock(cinder.policy, 'enforce')
+        target = {
+            'project_id': self.context.project_id,
+            'user_id': self.context.user_id,
+            'id': 2,
+        }
+        cinder.policy.enforce(self.context, 'volume:attach', target)
+        self.mox.ReplayAll()
+        cinder.volume.api.check_policy(self.context, 'attach', {'id': 2})
diff --git a/cinder/tests/test_volume_types.py b/cinder/tests/test_volume_types.py
new file mode 100644
index 000000000..494bd0c99
--- /dev/null
+++ b/cinder/tests/test_volume_types.py
@@ -0,0 +1,167 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 Zadara Storage Inc.
+# Copyright (c) 2011 OpenStack LLC.
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+Unit Tests for volume types code
+"""
+import time
+
+from cinder import context
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+from cinder import test
+from cinder.volume import volume_types
+from cinder.db.sqlalchemy import session as sql_session
+from cinder.db.sqlalchemy import models
+
+FLAGS = flags.FLAGS
+LOG = logging.getLogger(__name__)
+
+
+class VolumeTypeTestCase(test.TestCase):
+    """Test cases for volume type code"""
+    def setUp(self):
+        super(VolumeTypeTestCase, self).setUp()
+
+        self.ctxt = context.get_admin_context()
+        self.vol_type1_name = str(int(time.time()))
+        self.vol_type1_specs = dict(
+                    type="physical drive",
+                    drive_type="SAS",
+                    size="300",
+                    rpm="7200",
+                    visible="True")
+
+    def test_volume_type_create_then_destroy(self):
+        """Ensure volume types can be created and deleted"""
+        prev_all_vtypes = volume_types.get_all_types(self.ctxt)
+
+        volume_types.create(self.ctxt,
+                            self.vol_type1_name,
+                            self.vol_type1_specs)
+        new = volume_types.get_volume_type_by_name(self.ctxt,
+                                                   self.vol_type1_name)
+
+        LOG.info(_("Given data: %s"), self.vol_type1_specs)
+        LOG.info(_("Result data: %s"), new)
+
+        for k, v in self.vol_type1_specs.iteritems():
+            self.assertEqual(v, new['extra_specs'][k],
+                             'one of fields doesnt match')
+
+        new_all_vtypes = volume_types.get_all_types(self.ctxt)
+        self.assertEqual(len(prev_all_vtypes) + 1,
+                         len(new_all_vtypes),
+                         'drive type was not created')
+
+        volume_types.destroy(self.ctxt, self.vol_type1_name)
+        new_all_vtypes = volume_types.get_all_types(self.ctxt)
+        self.assertEqual(prev_all_vtypes,
+                         new_all_vtypes,
+                         'drive type was not deleted')
+
+    def test_get_all_volume_types(self):
+        """Ensures that all volume types can be retrieved"""
+        session = sql_session.get_session()
+        total_volume_types = session.query(models.VolumeTypes).count()
+        vol_types = volume_types.get_all_types(self.ctxt)
+        self.assertEqual(total_volume_types, len(vol_types))
+
+    def test_non_existant_vol_type_shouldnt_delete(self):
+        """Ensures that volume type creation fails with invalid args"""
+        self.assertRaises(exception.VolumeTypeNotFoundByName,
+                          volume_types.destroy, self.ctxt, "sfsfsdfdfs")
+
+    def test_repeated_vol_types_shouldnt_raise(self):
+        """Ensures that volume duplicates don't raise"""
+        new_name = self.vol_type1_name + "dup"
+        volume_types.create(self.ctxt, new_name)
+        volume_types.destroy(self.ctxt, new_name)
+        volume_types.create(self.ctxt, new_name)
+
+    def test_invalid_volume_types_params(self):
+        """Ensures that volume type creation fails with invalid args"""
+        self.assertRaises(exception.InvalidVolumeType,
+                          volume_types.destroy, self.ctxt, None)
+        self.assertRaises(exception.InvalidVolumeType,
+                          volume_types.get_volume_type, self.ctxt, None)
+        self.assertRaises(exception.InvalidVolumeType,
+                          volume_types.get_volume_type_by_name,
+                          self.ctxt, None)
+
+    def test_volume_type_get_by_id_and_name(self):
+        """Ensure volume types get returns same entry"""
+        volume_types.create(self.ctxt,
+                            self.vol_type1_name,
+                            self.vol_type1_specs)
+        new = volume_types.get_volume_type_by_name(self.ctxt,
+                                                   self.vol_type1_name)
+
+        new2 = volume_types.get_volume_type(self.ctxt, new['id'])
+        self.assertEqual(new, new2)
+
+    def test_volume_type_search_by_extra_spec(self):
+        """Ensure volume types get by extra spec returns correct type"""
+        volume_types.create(self.ctxt, "type1", {"key1": "val1",
+                                                 "key2": "val2"})
+        volume_types.create(self.ctxt, "type2", {"key2": "val2",
+                                                 "key3": "val3"})
+        volume_types.create(self.ctxt, "type3", {"key3": "another_value",
+                                                 "key4": "val4"})
+
+        vol_types = volume_types.get_all_types(self.ctxt,
+                        search_opts={'extra_specs': {"key1": "val1"}})
+        LOG.info("vol_types: %s" % vol_types)
+        self.assertEqual(len(vol_types), 1)
+        self.assertTrue("type1" in vol_types.keys())
+        self.assertEqual(vol_types['type1']['extra_specs'],
+                         {"key1": "val1", "key2": "val2"})
+
+        vol_types = volume_types.get_all_types(self.ctxt,
+                        search_opts={'extra_specs': {"key2": "val2"}})
+        LOG.info("vol_types: %s" % vol_types)
+        self.assertEqual(len(vol_types), 2)
+        self.assertTrue("type1" in vol_types.keys())
+        self.assertTrue("type2" in vol_types.keys())
+
+        vol_types = volume_types.get_all_types(self.ctxt,
+                        search_opts={'extra_specs': {"key3": "val3"}})
+        LOG.info("vol_types: %s" % vol_types)
+        self.assertEqual(len(vol_types), 1)
+        self.assertTrue("type2" in vol_types.keys())
+
+    def test_volume_type_search_by_extra_spec_multiple(self):
+        """Ensure volume types get by extra spec returns correct type"""
+        volume_types.create(self.ctxt, "type1", {"key1": "val1",
+                                                 "key2": "val2",
+                                                 "key3": "val3"})
+        volume_types.create(self.ctxt, "type2", {"key2": "val2",
+                                                 "key3": "val3"})
+        volume_types.create(self.ctxt, "type3", {"key1": "val1",
+                                                 "key3": "val3",
+                                                 "key4": "val4"})
+
+        vol_types = volume_types.get_all_types(self.ctxt,
+                        search_opts={'extra_specs': {"key1": "val1",
+                                                     "key3": "val3"}})
+        LOG.info("vol_types: %s" % vol_types)
+        self.assertEqual(len(vol_types), 2)
+        self.assertTrue("type1" in vol_types.keys())
+        self.assertTrue("type3" in vol_types.keys())
+        self.assertEqual(vol_types['type1']['extra_specs'],
+                         {"key1": "val1", "key2": "val2", "key3": "val3"})
+        self.assertEqual(vol_types['type3']['extra_specs'],
+                         {"key1": "val1", "key3": "val3", "key4": "val4"})
diff --git a/cinder/tests/test_volume_types_extra_specs.py b/cinder/tests/test_volume_types_extra_specs.py
new file mode 100644
index 000000000..e7241086f
--- /dev/null
+++ b/cinder/tests/test_volume_types_extra_specs.py
@@ -0,0 +1,130 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 Zadara Storage Inc.
+# Copyright (c) 2011 OpenStack LLC.
+# Copyright 2011 University of Southern California
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+Unit Tests for volume types extra specs code
+"""
+
+from cinder import context
+from cinder import db
+from cinder import test
+
+
+class VolumeTypeExtraSpecsTestCase(test.TestCase):
+
+    def setUp(self):
+        super(VolumeTypeExtraSpecsTestCase, self).setUp()
+        self.context = context.get_admin_context()
+        self.vol_type1 = dict(name="TEST: Regular volume test")
+        self.vol_type1_specs = dict(vol_extra1="value1",
+                                  vol_extra2="value2",
+                                  vol_extra3=3)
+        self.vol_type1['extra_specs'] = self.vol_type1_specs
+        ref = db.volume_type_create(self.context, self.vol_type1)
+        self.volume_type1_id = ref.id
+        for k, v in self.vol_type1_specs.iteritems():
+            self.vol_type1_specs[k] = str(v)
+
+        self.vol_type2_noextra = dict(name="TEST: Volume type without extra")
+        ref = db.volume_type_create(self.context, self.vol_type2_noextra)
+        self.vol_type2_id = ref.id
+
+    def tearDown(self):
+        # Remove the volume type from the database
+        db.volume_type_destroy(context.get_admin_context(),
+                               self.vol_type1['name'])
+        db.volume_type_destroy(context.get_admin_context(),
+                               self.vol_type2_noextra['name'])
+        super(VolumeTypeExtraSpecsTestCase, self).tearDown()
+
+    def test_volume_type_specs_get(self):
+        expected_specs = self.vol_type1_specs.copy()
+        actual_specs = db.volume_type_extra_specs_get(
+                              context.get_admin_context(),
+                              self.volume_type1_id)
+        self.assertEquals(expected_specs, actual_specs)
+
+    def test_volume_type_extra_specs_delete(self):
+        expected_specs = self.vol_type1_specs.copy()
+        del expected_specs['vol_extra2']
+        db.volume_type_extra_specs_delete(context.get_admin_context(),
+                                      self.volume_type1_id,
+                                      'vol_extra2')
+        actual_specs = db.volume_type_extra_specs_get(
+                              context.get_admin_context(),
+                              self.volume_type1_id)
+        self.assertEquals(expected_specs, actual_specs)
+
+    def test_volume_type_extra_specs_update(self):
+        expected_specs = self.vol_type1_specs.copy()
+        expected_specs['vol_extra3'] = "4"
+        db.volume_type_extra_specs_update_or_create(
+                              context.get_admin_context(),
+                              self.volume_type1_id,
+                              dict(vol_extra3=4))
+        actual_specs = db.volume_type_extra_specs_get(
+                              context.get_admin_context(),
+                              self.volume_type1_id)
+        self.assertEquals(expected_specs, actual_specs)
+
+    def test_volume_type_extra_specs_create(self):
+        expected_specs = self.vol_type1_specs.copy()
+        expected_specs['vol_extra4'] = 'value4'
+        expected_specs['vol_extra5'] = 'value5'
+        db.volume_type_extra_specs_update_or_create(
+                              context.get_admin_context(),
+                              self.volume_type1_id,
+                              dict(vol_extra4="value4",
+                                   vol_extra5="value5"))
+        actual_specs = db.volume_type_extra_specs_get(
+                              context.get_admin_context(),
+                              self.volume_type1_id)
+        self.assertEquals(expected_specs, actual_specs)
+
+    def test_volume_type_get_with_extra_specs(self):
+        volume_type = db.volume_type_get(
+                            context.get_admin_context(),
+                            self.volume_type1_id)
+        self.assertEquals(volume_type['extra_specs'],
+                          self.vol_type1_specs)
+
+        volume_type = db.volume_type_get(
+                            context.get_admin_context(),
+                            self.vol_type2_id)
+        self.assertEquals(volume_type['extra_specs'], {})
+
+    def test_volume_type_get_by_name_with_extra_specs(self):
+        volume_type = db.volume_type_get_by_name(
+                            context.get_admin_context(),
+                            self.vol_type1['name'])
+        self.assertEquals(volume_type['extra_specs'],
+                          self.vol_type1_specs)
+
+        volume_type = db.volume_type_get_by_name(
+                            context.get_admin_context(),
+                            self.vol_type2_noextra['name'])
+        self.assertEquals(volume_type['extra_specs'], {})
+
+    def test_volume_type_get_all(self):
+        expected_specs = self.vol_type1_specs.copy()
+
+        types = db.volume_type_get_all(context.get_admin_context())
+
+        self.assertEquals(
+            types[self.vol_type1['name']]['extra_specs'], expected_specs)
+
+        self.assertEquals(
+            types[self.vol_type2_noextra['name']]['extra_specs'], {})
diff --git a/cinder/tests/test_wsgi.py b/cinder/tests/test_wsgi.py
new file mode 100644
index 000000000..cc8fb6874
--- /dev/null
+++ b/cinder/tests/test_wsgi.py
@@ -0,0 +1,92 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Unit tests for `cinder.wsgi`."""
+
+import os.path
+import tempfile
+
+import unittest
+
+import cinder.exception
+from cinder import test
+import cinder.wsgi
+
+
+class TestLoaderNothingExists(test.TestCase):
+    """Loader tests where os.path.exists always returns False."""
+
+    def setUp(self):
+        super(TestLoaderNothingExists, self).setUp()
+        self.stubs.Set(os.path, 'exists', lambda _: False)
+
+    def test_config_not_found(self):
+        self.assertRaises(
+            cinder.exception.ConfigNotFound,
+            cinder.wsgi.Loader,
+        )
+
+
+class TestLoaderNormalFilesystem(unittest.TestCase):
+    """Loader tests with normal filesystem (unmodified os.path module)."""
+
+    _paste_config = """
+[app:test_app]
+use = egg:Paste#static
+document_root = /tmp
+    """
+
+    def setUp(self):
+        self.config = tempfile.NamedTemporaryFile(mode="w+t")
+        self.config.write(self._paste_config.lstrip())
+        self.config.seek(0)
+        self.config.flush()
+        self.loader = cinder.wsgi.Loader(self.config.name)
+
+    def test_config_found(self):
+        self.assertEquals(self.config.name, self.loader.config_path)
+
+    def test_app_not_found(self):
+        self.assertRaises(
+            cinder.exception.PasteAppNotFound,
+            self.loader.load_app,
+            "non-existant app",
+        )
+
+    def test_app_found(self):
+        url_parser = self.loader.load_app("test_app")
+        self.assertEquals("/tmp", url_parser.directory)
+
+    def tearDown(self):
+        self.config.close()
+
+
+class TestWSGIServer(unittest.TestCase):
+    """WSGI server tests."""
+
+    def test_no_app(self):
+        server = cinder.wsgi.Server("test_app", None)
+        self.assertEquals("test_app", server.name)
+
+    def test_start_random_port(self):
+        server = cinder.wsgi.Server("test_random_port", None, host="127.0.0.1")
+        self.assertEqual(0, server.port)
+        server.start()
+        self.assertNotEqual(0, server.port)
+        server.stop()
+        server.wait()
diff --git a/cinder/tests/utils.py b/cinder/tests/utils.py
new file mode 100644
index 000000000..5b9086b75
--- /dev/null
+++ b/cinder/tests/utils.py
@@ -0,0 +1,25 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+#
+#    Copyright 2011 OpenStack LLC
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#
+
+import cinder.context
+import cinder.db
+import cinder.flags
+
+FLAGS = cinder.flags.FLAGS
+
+
+def get_test_admin_context():
+    return cinder.context.get_admin_context()
diff --git a/cinder/utils.py b/cinder/utils.py
new file mode 100644
index 000000000..f80fb1431
--- /dev/null
+++ b/cinder/utils.py
@@ -0,0 +1,1678 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# Copyright 2011 Justin Santa Barbara
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Utilities and helper functions."""
+
+import contextlib
+import datetime
+import errno
+import functools
+import hashlib
+import inspect
+import itertools
+import json
+import os
+import pyclbr
+import random
+import re
+import shlex
+import shutil
+import socket
+import struct
+import sys
+import tempfile
+import threading
+import time
+import types
+import uuid
+import warnings
+from xml.sax import saxutils
+
+from eventlet import corolocal
+from eventlet import event
+from eventlet import greenthread
+from eventlet import semaphore
+from eventlet.green import subprocess
+import iso8601
+import lockfile
+import netaddr
+
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+from cinder.openstack.common import cfg
+from cinder.openstack.common import importutils
+
+
+LOG = logging.getLogger(__name__)
+ISO_TIME_FORMAT = "%Y-%m-%dT%H:%M:%S"
+PERFECT_TIME_FORMAT = "%Y-%m-%dT%H:%M:%S.%f"
+FLAGS = flags.FLAGS
+
+FLAGS.register_opt(
+    cfg.BoolOpt('disable_process_locking', default=False,
+                help='Whether to disable inter-process locks'))
+
+
+def find_config(config_path):
+    """Find a configuration file using the given hint.
+
+    :param config_path: Full or relative path to the config.
+    :returns: Full path of the config, if it exists.
+    :raises: `cinder.exception.ConfigNotFound`
+
+    """
+    possible_locations = [
+        config_path,
+        os.path.join(FLAGS.state_path, "etc", "cinder", config_path),
+        os.path.join(FLAGS.state_path, "etc", config_path),
+        os.path.join(FLAGS.state_path, config_path),
+        "/etc/cinder/%s" % config_path,
+    ]
+
+    for path in possible_locations:
+        if os.path.exists(path):
+            return os.path.abspath(path)
+
+    raise exception.ConfigNotFound(path=os.path.abspath(config_path))
+
+
+def vpn_ping(address, port, timeout=0.05, session_id=None):
+    """Sends a vpn negotiation packet and returns the server session.
+
+    Returns False on a failure. Basic packet structure is below.
+
+    Client packet (14 bytes)::
+
+         0 1      8 9  13
+        +-+--------+-----+
+        |x| cli_id |?????|
+        +-+--------+-----+
+        x = packet identifier 0x38
+        cli_id = 64 bit identifier
+        ? = unknown, probably flags/padding
+
+    Server packet (26 bytes)::
+
+         0 1      8 9  13 14    21 2225
+        +-+--------+-----+--------+----+
+        |x| srv_id |?????| cli_id |????|
+        +-+--------+-----+--------+----+
+        x = packet identifier 0x40
+        cli_id = 64 bit identifier
+        ? = unknown, probably flags/padding
+        bit 9 was 1 and the rest were 0 in testing
+
+    """
+    if session_id is None:
+        session_id = random.randint(0, 0xffffffffffffffff)
+    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+    data = struct.pack('!BQxxxxx', 0x38, session_id)
+    sock.sendto(data, (address, port))
+    sock.settimeout(timeout)
+    try:
+        received = sock.recv(2048)
+    except socket.timeout:
+        return False
+    finally:
+        sock.close()
+    fmt = '!BQxxxxxQxxxx'
+    if len(received) != struct.calcsize(fmt):
+        print struct.calcsize(fmt)
+        return False
+    (identifier, server_sess, client_sess) = struct.unpack(fmt, received)
+    if identifier == 0x40 and client_sess == session_id:
+        return server_sess
+
+
+def fetchfile(url, target):
+    LOG.debug(_('Fetching %s') % url)
+    execute('curl', '--fail', url, '-o', target)
+
+
+def execute(*cmd, **kwargs):
+    """Helper method to execute command with optional retry.
+
+    If you add a run_as_root=True command, don't forget to add the
+    corresponding filter to cinder.rootwrap !
+
+    :param cmd:                Passed to subprocess.Popen.
+    :param process_input:      Send to opened process.
+    :param check_exit_code:    Single bool, int, or list of allowed exit
+                               codes.  Defaults to [0].  Raise
+                               exception.ProcessExecutionError unless
+                               program exits with one of these code.
+    :param delay_on_retry:     True | False. Defaults to True. If set to
+                               True, wait a short amount of time
+                               before retrying.
+    :param attempts:           How many times to retry cmd.
+    :param run_as_root:        True | False. Defaults to False. If set to True,
+                               the command is prefixed by the command specified
+                               in the root_helper FLAG.
+
+    :raises exception.Error: on receiving unknown arguments
+    :raises exception.ProcessExecutionError:
+
+    :returns: a tuple, (stdout, stderr) from the spawned process, or None if
+             the command fails.
+    """
+
+    process_input = kwargs.pop('process_input', None)
+    check_exit_code = kwargs.pop('check_exit_code', [0])
+    ignore_exit_code = False
+    if isinstance(check_exit_code, bool):
+        ignore_exit_code = not check_exit_code
+        check_exit_code = [0]
+    elif isinstance(check_exit_code, int):
+        check_exit_code = [check_exit_code]
+    delay_on_retry = kwargs.pop('delay_on_retry', True)
+    attempts = kwargs.pop('attempts', 1)
+    run_as_root = kwargs.pop('run_as_root', False)
+    shell = kwargs.pop('shell', False)
+
+    if len(kwargs):
+        raise exception.Error(_('Got unknown keyword args '
+                                'to utils.execute: %r') % kwargs)
+
+    if run_as_root:
+        cmd = shlex.split(FLAGS.root_helper) + list(cmd)
+    cmd = map(str, cmd)
+
+    while attempts > 0:
+        attempts -= 1
+        try:
+            LOG.debug(_('Running cmd (subprocess): %s'), ' '.join(cmd))
+            _PIPE = subprocess.PIPE  # pylint: disable=E1101
+            obj = subprocess.Popen(cmd,
+                                   stdin=_PIPE,
+                                   stdout=_PIPE,
+                                   stderr=_PIPE,
+                                   close_fds=True,
+                                   shell=shell)
+            result = None
+            if process_input is not None:
+                result = obj.communicate(process_input)
+            else:
+                result = obj.communicate()
+            obj.stdin.close()  # pylint: disable=E1101
+            _returncode = obj.returncode  # pylint: disable=E1101
+            if _returncode:
+                LOG.debug(_('Result was %s') % _returncode)
+                if not ignore_exit_code and _returncode not in check_exit_code:
+                    (stdout, stderr) = result
+                    raise exception.ProcessExecutionError(
+                            exit_code=_returncode,
+                            stdout=stdout,
+                            stderr=stderr,
+                            cmd=' '.join(cmd))
+            return result
+        except exception.ProcessExecutionError:
+            if not attempts:
+                raise
+            else:
+                LOG.debug(_('%r failed. Retrying.'), cmd)
+                if delay_on_retry:
+                    greenthread.sleep(random.randint(20, 200) / 100.0)
+        finally:
+            # NOTE(termie): this appears to be necessary to let the subprocess
+            #               call clean something up in between calls, without
+            #               it two execute calls in a row hangs the second one
+            greenthread.sleep(0)
+
+
+def trycmd(*args, **kwargs):
+    """
+    A wrapper around execute() to more easily handle warnings and errors.
+
+    Returns an (out, err) tuple of strings containing the output of
+    the command's stdout and stderr.  If 'err' is not empty then the
+    command can be considered to have failed.
+
+    :discard_warnings   True | False. Defaults to False. If set to True,
+                        then for succeeding commands, stderr is cleared
+
+    """
+    discard_warnings = kwargs.pop('discard_warnings', False)
+
+    try:
+        out, err = execute(*args, **kwargs)
+        failed = False
+    except exception.ProcessExecutionError, exn:
+        out, err = '', str(exn)
+        LOG.debug(err)
+        failed = True
+
+    if not failed and discard_warnings and err:
+        # Handle commands that output to stderr but otherwise succeed
+        LOG.debug(err)
+        err = ''
+
+    return out, err
+
+
+def ssh_execute(ssh, cmd, process_input=None,
+                addl_env=None, check_exit_code=True):
+    LOG.debug(_('Running cmd (SSH): %s'), ' '.join(cmd))
+    if addl_env:
+        raise exception.Error(_('Environment not supported over SSH'))
+
+    if process_input:
+        # This is (probably) fixable if we need it...
+        raise exception.Error(_('process_input not supported over SSH'))
+
+    stdin_stream, stdout_stream, stderr_stream = ssh.exec_command(cmd)
+    channel = stdout_stream.channel
+
+    #stdin.write('process_input would go here')
+    #stdin.flush()
+
+    # NOTE(justinsb): This seems suspicious...
+    # ...other SSH clients have buffering issues with this approach
+    stdout = stdout_stream.read()
+    stderr = stderr_stream.read()
+    stdin_stream.close()
+
+    exit_status = channel.recv_exit_status()
+
+    # exit_status == -1 if no exit code was returned
+    if exit_status != -1:
+        LOG.debug(_('Result was %s') % exit_status)
+        if check_exit_code and exit_status != 0:
+            raise exception.ProcessExecutionError(exit_code=exit_status,
+                                                  stdout=stdout,
+                                                  stderr=stderr,
+                                                  cmd=' '.join(cmd))
+
+    return (stdout, stderr)
+
+
+def cinderdir():
+    import cinder
+    return os.path.abspath(cinder.__file__).split('cinder/__init__.py')[0]
+
+
+def default_flagfile(filename='cinder.conf', args=None):
+    if args is None:
+        args = sys.argv
+    for arg in args:
+        if arg.find('flagfile') != -1:
+            return arg[arg.index('flagfile') + len('flagfile') + 1:]
+    else:
+        if not os.path.isabs(filename):
+            # turn relative filename into an absolute path
+            script_dir = os.path.dirname(inspect.stack()[-1][1])
+            filename = os.path.abspath(os.path.join(script_dir, filename))
+        if not os.path.exists(filename):
+            filename = "./cinder.conf"
+            if not os.path.exists(filename):
+                filename = '/etc/cinder/cinder.conf'
+        if os.path.exists(filename):
+            flagfile = '--flagfile=%s' % filename
+            args.insert(1, flagfile)
+            return filename
+
+
+def debug(arg):
+    LOG.debug(_('debug in callback: %s'), arg)
+    return arg
+
+
+def generate_uid(topic, size=8):
+    characters = '01234567890abcdefghijklmnopqrstuvwxyz'
+    choices = [random.choice(characters) for x in xrange(size)]
+    return '%s-%s' % (topic, ''.join(choices))
+
+
+# Default symbols to use for passwords. Avoids visually confusing characters.
+# ~6 bits per symbol
+DEFAULT_PASSWORD_SYMBOLS = ('23456789',  # Removed: 0,1
+                            'ABCDEFGHJKLMNPQRSTUVWXYZ',   # Removed: I, O
+                            'abcdefghijkmnopqrstuvwxyz')  # Removed: l
+
+
+# ~5 bits per symbol
+EASIER_PASSWORD_SYMBOLS = ('23456789',  # Removed: 0, 1
+                           'ABCDEFGHJKLMNPQRSTUVWXYZ')  # Removed: I, O
+
+
+def last_completed_audit_period(unit=None):
+    """This method gives you the most recently *completed* audit period.
+
+    arguments:
+            units: string, one of 'hour', 'day', 'month', 'year'
+                    Periods normally begin at the beginning (UTC) of the
+                    period unit (So a 'day' period begins at midnight UTC,
+                    a 'month' unit on the 1st, a 'year' on Jan, 1)
+                    unit string may be appended with an optional offset
+                    like so:  'day@18'  This will begin the period at 18:00
+                    UTC.  'month@15' starts a monthly period on the 15th,
+                    and year@3 begins a yearly one on March 1st.
+
+
+    returns:  2 tuple of datetimes (begin, end)
+              The begin timestamp of this audit period is the same as the
+              end of the previous."""
+    if not unit:
+        unit = FLAGS.instance_usage_audit_period
+
+    offset = 0
+    if '@' in unit:
+        unit, offset = unit.split("@", 1)
+        offset = int(offset)
+
+    rightnow = utcnow()
+    if unit not in ('month', 'day', 'year', 'hour'):
+        raise ValueError('Time period must be hour, day, month or year')
+    if unit == 'month':
+        if offset == 0:
+            offset = 1
+        end = datetime.datetime(day=offset,
+                                month=rightnow.month,
+                                year=rightnow.year)
+        if end >= rightnow:
+            year = rightnow.year
+            if 1 >= rightnow.month:
+                year -= 1
+                month = 12 + (rightnow.month - 1)
+            else:
+                month = rightnow.month - 1
+            end = datetime.datetime(day=offset,
+                                    month=month,
+                                    year=year)
+        year = end.year
+        if 1 >= end.month:
+            year -= 1
+            month = 12 + (end.month - 1)
+        else:
+            month = end.month - 1
+        begin = datetime.datetime(day=offset, month=month, year=year)
+
+    elif unit == 'year':
+        if offset == 0:
+            offset = 1
+        end = datetime.datetime(day=1, month=offset, year=rightnow.year)
+        if end >= rightnow:
+            end = datetime.datetime(day=1,
+                                    month=offset,
+                                    year=rightnow.year - 1)
+            begin = datetime.datetime(day=1,
+                                      month=offset,
+                                      year=rightnow.year - 2)
+        else:
+            begin = datetime.datetime(day=1,
+                                      month=offset,
+                                      year=rightnow.year - 1)
+
+    elif unit == 'day':
+        end = datetime.datetime(hour=offset,
+                               day=rightnow.day,
+                               month=rightnow.month,
+                               year=rightnow.year)
+        if end >= rightnow:
+            end = end - datetime.timedelta(days=1)
+        begin = end - datetime.timedelta(days=1)
+
+    elif unit == 'hour':
+        end = rightnow.replace(minute=offset, second=0, microsecond=0)
+        if end >= rightnow:
+            end = end - datetime.timedelta(hours=1)
+        begin = end - datetime.timedelta(hours=1)
+
+    return (begin, end)
+
+
+def generate_password(length=20, symbolgroups=DEFAULT_PASSWORD_SYMBOLS):
+    """Generate a random password from the supplied symbol groups.
+
+    At least one symbol from each group will be included. Unpredictable
+    results if length is less than the number of symbol groups.
+
+    Believed to be reasonably secure (with a reasonable password length!)
+
+    """
+    r = random.SystemRandom()
+
+    # NOTE(jerdfelt): Some password policies require at least one character
+    # from each group of symbols, so start off with one random character
+    # from each symbol group
+    password = [r.choice(s) for s in symbolgroups]
+    # If length < len(symbolgroups), the leading characters will only
+    # be from the first length groups. Try our best to not be predictable
+    # by shuffling and then truncating.
+    r.shuffle(password)
+    password = password[:length]
+    length -= len(password)
+
+    # then fill with random characters from all symbol groups
+    symbols = ''.join(symbolgroups)
+    password.extend([r.choice(symbols) for _i in xrange(length)])
+
+    # finally shuffle to ensure first x characters aren't from a
+    # predictable group
+    r.shuffle(password)
+
+    return ''.join(password)
+
+
+def last_octet(address):
+    return int(address.split('.')[-1])
+
+
+def get_my_linklocal(interface):
+    try:
+        if_str = execute('ip', '-f', 'inet6', '-o', 'addr', 'show', interface)
+        condition = '\s+inet6\s+([0-9a-f:]+)/\d+\s+scope\s+link'
+        links = [re.search(condition, x) for x in if_str[0].split('\n')]
+        address = [w.group(1) for w in links if w is not None]
+        if address[0] is not None:
+            return address[0]
+        else:
+            raise exception.Error(_('Link Local address is not found.:%s')
+                                  % if_str)
+    except Exception as ex:
+        raise exception.Error(_("Couldn't get Link Local IP of %(interface)s"
+                                " :%(ex)s") % locals())
+
+
+def utcnow():
+    """Overridable version of utils.utcnow."""
+    if utcnow.override_time:
+        return utcnow.override_time
+    return datetime.datetime.utcnow()
+
+
+utcnow.override_time = None
+
+
+def is_older_than(before, seconds):
+    """Return True if before is older than seconds."""
+    return utcnow() - before > datetime.timedelta(seconds=seconds)
+
+
+def utcnow_ts():
+    """Timestamp version of our utcnow function."""
+    return time.mktime(utcnow().timetuple())
+
+
+def set_time_override(override_time=datetime.datetime.utcnow()):
+    """Override utils.utcnow to return a constant time."""
+    utcnow.override_time = override_time
+
+
+def advance_time_delta(timedelta):
+    """Advance overriden time using a datetime.timedelta."""
+    assert(not utcnow.override_time is None)
+    utcnow.override_time += timedelta
+
+
+def advance_time_seconds(seconds):
+    """Advance overriden time by seconds."""
+    advance_time_delta(datetime.timedelta(0, seconds))
+
+
+def clear_time_override():
+    """Remove the overridden time."""
+    utcnow.override_time = None
+
+
+def strtime(at=None, fmt=PERFECT_TIME_FORMAT):
+    """Returns formatted utcnow."""
+    if not at:
+        at = utcnow()
+    return at.strftime(fmt)
+
+
+def parse_strtime(timestr, fmt=PERFECT_TIME_FORMAT):
+    """Turn a formatted time back into a datetime."""
+    return datetime.datetime.strptime(timestr, fmt)
+
+
+def isotime(at=None):
+    """Stringify time in ISO 8601 format"""
+    if not at:
+        at = datetime.datetime.utcnow()
+    str = at.strftime(ISO_TIME_FORMAT)
+    tz = at.tzinfo.tzname(None) if at.tzinfo else 'UTC'
+    str += ('Z' if tz == 'UTC' else tz)
+    return str
+
+
+def parse_isotime(timestr):
+    """Turn an iso formatted time back into a datetime."""
+    try:
+        return iso8601.parse_date(timestr)
+    except (iso8601.ParseError, TypeError) as e:
+        raise ValueError(e.message)
+
+
+def normalize_time(timestamp):
+    """Normalize time in arbitrary timezone to UTC"""
+    offset = timestamp.utcoffset()
+    return timestamp.replace(tzinfo=None) - offset if offset else timestamp
+
+
+def parse_mailmap(mailmap='.mailmap'):
+    mapping = {}
+    if os.path.exists(mailmap):
+        fp = open(mailmap, 'r')
+        for l in fp:
+            l = l.strip()
+            if not l.startswith('#') and ' ' in l:
+                canonical_email, alias = l.split(' ')
+                mapping[alias.lower()] = canonical_email.lower()
+    return mapping
+
+
+def str_dict_replace(s, mapping):
+    for s1, s2 in mapping.iteritems():
+        s = s.replace(s1, s2)
+    return s
+
+
+class LazyPluggable(object):
+    """A pluggable backend loaded lazily based on some value."""
+
+    def __init__(self, pivot, **backends):
+        self.__backends = backends
+        self.__pivot = pivot
+        self.__backend = None
+
+    def __get_backend(self):
+        if not self.__backend:
+            backend_name = FLAGS[self.__pivot]
+            if backend_name not in self.__backends:
+                raise exception.Error(_('Invalid backend: %s') % backend_name)
+
+            backend = self.__backends[backend_name]
+            if isinstance(backend, tuple):
+                name = backend[0]
+                fromlist = backend[1]
+            else:
+                name = backend
+                fromlist = backend
+
+            self.__backend = __import__(name, None, None, fromlist)
+            LOG.debug(_('backend %s'), self.__backend)
+        return self.__backend
+
+    def __getattr__(self, key):
+        backend = self.__get_backend()
+        return getattr(backend, key)
+
+
+class LoopingCallDone(Exception):
+    """Exception to break out and stop a LoopingCall.
+
+    The poll-function passed to LoopingCall can raise this exception to
+    break out of the loop normally. This is somewhat analogous to
+    StopIteration.
+
+    An optional return-value can be included as the argument to the exception;
+    this return-value will be returned by LoopingCall.wait()
+
+    """
+
+    def __init__(self, retvalue=True):
+        """:param retvalue: Value that LoopingCall.wait() should return."""
+        self.retvalue = retvalue
+
+
+class LoopingCall(object):
+    def __init__(self, f=None, *args, **kw):
+        self.args = args
+        self.kw = kw
+        self.f = f
+        self._running = False
+
+    def start(self, interval, initial_delay=None):
+        self._running = True
+        done = event.Event()
+
+        def _inner():
+            if initial_delay:
+                greenthread.sleep(initial_delay)
+
+            try:
+                while self._running:
+                    self.f(*self.args, **self.kw)
+                    if not self._running:
+                        break
+                    greenthread.sleep(interval)
+            except LoopingCallDone, e:
+                self.stop()
+                done.send(e.retvalue)
+            except Exception:
+                LOG.exception(_('in looping call'))
+                done.send_exception(*sys.exc_info())
+                return
+            else:
+                done.send(True)
+
+        self.done = done
+
+        greenthread.spawn(_inner)
+        return self.done
+
+    def stop(self):
+        self._running = False
+
+    def wait(self):
+        return self.done.wait()
+
+
+def xhtml_escape(value):
+    """Escapes a string so it is valid within XML or XHTML.
+
+    """
+    return saxutils.escape(value, {'"': '&quot;', "'": '&apos;'})
+
+
+def utf8(value):
+    """Try to turn a string into utf-8 if possible.
+
+    Code is directly from the utf8 function in
+    http://github.com/facebook/tornado/blob/master/tornado/escape.py
+
+    """
+    if isinstance(value, unicode):
+        return value.encode('utf-8')
+    assert isinstance(value, str)
+    return value
+
+
+def to_primitive(value, convert_instances=False, level=0):
+    """Convert a complex object into primitives.
+
+    Handy for JSON serialization. We can optionally handle instances,
+    but since this is a recursive function, we could have cyclical
+    data structures.
+
+    To handle cyclical data structures we could track the actual objects
+    visited in a set, but not all objects are hashable. Instead we just
+    track the depth of the object inspections and don't go too deep.
+
+    Therefore, convert_instances=True is lossy ... be aware.
+
+    """
+    nasty = [inspect.ismodule, inspect.isclass, inspect.ismethod,
+             inspect.isfunction, inspect.isgeneratorfunction,
+             inspect.isgenerator, inspect.istraceback, inspect.isframe,
+             inspect.iscode, inspect.isbuiltin, inspect.isroutine,
+             inspect.isabstract]
+    for test in nasty:
+        if test(value):
+            return unicode(value)
+
+    # value of itertools.count doesn't get caught by inspects
+    # above and results in infinite loop when list(value) is called.
+    if type(value) == itertools.count:
+        return unicode(value)
+
+    # FIXME(vish): Workaround for LP bug 852095. Without this workaround,
+    #              tests that raise an exception in a mocked method that
+    #              has a @wrap_exception with a notifier will fail. If
+    #              we up the dependency to 0.5.4 (when it is released) we
+    #              can remove this workaround.
+    if getattr(value, '__module__', None) == 'mox':
+        return 'mock'
+
+    if level > 3:
+        return '?'
+
+    # The try block may not be necessary after the class check above,
+    # but just in case ...
+    try:
+        if isinstance(value, (list, tuple)):
+            o = []
+            for v in value:
+                o.append(to_primitive(v, convert_instances=convert_instances,
+                                      level=level))
+            return o
+        elif isinstance(value, dict):
+            o = {}
+            for k, v in value.iteritems():
+                o[k] = to_primitive(v, convert_instances=convert_instances,
+                                    level=level)
+            return o
+        elif isinstance(value, datetime.datetime):
+            return str(value)
+        elif hasattr(value, 'iteritems'):
+            return to_primitive(dict(value.iteritems()),
+                                convert_instances=convert_instances,
+                                level=level)
+        elif hasattr(value, '__iter__'):
+            return to_primitive(list(value), level)
+        elif convert_instances and hasattr(value, '__dict__'):
+            # Likely an instance of something. Watch for cycles.
+            # Ignore class member vars.
+            return to_primitive(value.__dict__,
+                                convert_instances=convert_instances,
+                                level=level + 1)
+        else:
+            return value
+    except TypeError, e:
+        # Class objects are tricky since they may define something like
+        # __iter__ defined but it isn't callable as list().
+        return unicode(value)
+
+
+def dumps(value):
+    try:
+        return json.dumps(value)
+    except TypeError:
+        pass
+    return json.dumps(to_primitive(value))
+
+
+def loads(s):
+    return json.loads(s)
+
+
+try:
+    import anyjson
+except ImportError:
+    pass
+else:
+    anyjson._modules.append(("cinder.utils", "dumps", TypeError,
+                                           "loads", ValueError))
+    anyjson.force_implementation("cinder.utils")
+
+
+class GreenLockFile(lockfile.FileLock):
+    """Implementation of lockfile that allows for a lock per greenthread.
+
+    Simply implements lockfile:LockBase init with an addiontall suffix
+    on the unique name of the greenthread identifier
+    """
+    def __init__(self, path, threaded=True):
+        self.path = path
+        self.lock_file = os.path.abspath(path) + ".lock"
+        self.hostname = socket.gethostname()
+        self.pid = os.getpid()
+        if threaded:
+            t = threading.current_thread()
+            # Thread objects in Python 2.4 and earlier do not have ident
+            # attrs.  Worm around that.
+            ident = getattr(t, "ident", hash(t)) or hash(t)
+            gident = corolocal.get_ident()
+            self.tname = "-%x-%x" % (ident & 0xffffffff, gident & 0xffffffff)
+        else:
+            self.tname = ""
+        dirname = os.path.dirname(self.lock_file)
+        self.unique_name = os.path.join(dirname,
+                                        "%s%s.%s" % (self.hostname,
+                                                     self.tname,
+                                                     self.pid))
+
+
+_semaphores = {}
+
+
+def synchronized(name, external=False):
+    """Synchronization decorator.
+
+    Decorating a method like so::
+
+        @synchronized('mylock')
+        def foo(self, *args):
+           ...
+
+    ensures that only one thread will execute the bar method at a time.
+
+    Different methods can share the same lock::
+
+        @synchronized('mylock')
+        def foo(self, *args):
+           ...
+
+        @synchronized('mylock')
+        def bar(self, *args):
+           ...
+
+    This way only one of either foo or bar can be executing at a time.
+
+    The external keyword argument denotes whether this lock should work across
+    multiple processes. This means that if two different workers both run a
+    a method decorated with @synchronized('mylock', external=True), only one
+    of them will execute at a time.
+
+    Important limitation: you can only have one external lock running per
+    thread at a time. For example the following will fail:
+
+        @utils.synchronized('testlock1', external=True)
+        def outer_lock():
+
+            @utils.synchronized('testlock2', external=True)
+            def inner_lock():
+                pass
+            inner_lock()
+
+        outer_lock()
+
+    """
+
+    def wrap(f):
+        @functools.wraps(f)
+        def inner(*args, **kwargs):
+            # NOTE(soren): If we ever go natively threaded, this will be racy.
+            #              See http://stackoverflow.com/questions/5390569/dyn
+            #              amically-allocating-and-destroying-mutexes
+            if name not in _semaphores:
+                _semaphores[name] = semaphore.Semaphore()
+            sem = _semaphores[name]
+            LOG.debug(_('Attempting to grab semaphore "%(lock)s" for method '
+                        '"%(method)s"...'), {'lock': name,
+                                             'method': f.__name__})
+            with sem:
+                LOG.debug(_('Got semaphore "%(lock)s" for method '
+                            '"%(method)s"...'), {'lock': name,
+                                                 'method': f.__name__})
+                if external and not FLAGS.disable_process_locking:
+                    LOG.debug(_('Attempting to grab file lock "%(lock)s" for '
+                                'method "%(method)s"...'),
+                              {'lock': name, 'method': f.__name__})
+                    lock_file_path = os.path.join(FLAGS.lock_path,
+                                                  'cinder-%s' % name)
+                    lock = GreenLockFile(lock_file_path)
+                    with lock:
+                        LOG.debug(_('Got file lock "%(lock)s" for '
+                                    'method "%(method)s"...'),
+                                  {'lock': name, 'method': f.__name__})
+                        retval = f(*args, **kwargs)
+                else:
+                    retval = f(*args, **kwargs)
+
+            # If no-one else is waiting for it, delete it.
+            # See note about possible raciness above.
+            if not sem.balance < 1:
+                del _semaphores[name]
+
+            return retval
+        return inner
+    return wrap
+
+
+def cleanup_file_locks():
+    """clean up stale locks left behind by process failures
+
+    The lockfile module, used by @synchronized, can leave stale lockfiles
+    behind after process failure. These locks can cause process hangs
+    at startup, when a process deadlocks on a lock which will never
+    be unlocked.
+
+    Intended to be called at service startup.
+
+    """
+
+    # NOTE(mikeyp) this routine incorporates some internal knowledge
+    #              from the lockfile module, and this logic really
+    #              should be part of that module.
+    #
+    # cleanup logic:
+    # 1) look for the lockfile modules's 'sentinel' files, of the form
+    #    hostname.[thread-.*]-pid, extract the pid.
+    #    if pid doesn't match a running process, delete the file since
+    #    it's from a dead process.
+    # 2) check for the actual lockfiles. if lockfile exists with linkcount
+    #    of 1, it's bogus, so delete it. A link count >= 2 indicates that
+    #    there are probably sentinels still linked to it from active
+    #    processes.  This check isn't perfect, but there is no way to
+    #    reliably tell which sentinels refer to which lock in the
+    #    lockfile implementation.
+
+    if FLAGS.disable_process_locking:
+        return
+
+    hostname = socket.gethostname()
+    sentinel_re = hostname + r'\..*-(\d+$)'
+    lockfile_re = r'cinder-.*\.lock'
+    files = os.listdir(FLAGS.lock_path)
+
+    # cleanup sentinels
+    for filename in files:
+        match = re.match(sentinel_re, filename)
+        if match is None:
+            continue
+        pid = match.group(1)
+        LOG.debug(_('Found sentinel %(filename)s for pid %(pid)s'),
+                  {'filename': filename, 'pid': pid})
+        try:
+            os.kill(int(pid), 0)
+        except OSError, e:
+            # PID wasn't found
+            delete_if_exists(os.path.join(FLAGS.lock_path, filename))
+            LOG.debug(_('Cleaned sentinel %(filename)s for pid %(pid)s'),
+                      {'filename': filename, 'pid': pid})
+
+    # cleanup lock files
+    for filename in files:
+        match = re.match(lockfile_re, filename)
+        if match is None:
+            continue
+        try:
+            stat_info = os.stat(os.path.join(FLAGS.lock_path, filename))
+        except OSError as e:
+            if e.errno == errno.ENOENT:
+                continue
+            else:
+                raise
+        LOG.debug(_('Found lockfile %(file)s with link count %(count)d'),
+                  {'file': filename, 'count': stat_info.st_nlink})
+        if stat_info.st_nlink == 1:
+            delete_if_exists(os.path.join(FLAGS.lock_path, filename))
+            LOG.debug(_('Cleaned lockfile %(file)s with link count %(count)d'),
+                      {'file': filename, 'count': stat_info.st_nlink})
+
+
+def delete_if_exists(pathname):
+    """delete a file, but ignore file not found error"""
+
+    try:
+        os.unlink(pathname)
+    except OSError as e:
+        if e.errno == errno.ENOENT:
+            return
+        else:
+            raise
+
+
+def get_from_path(items, path):
+    """Returns a list of items matching the specified path.
+
+    Takes an XPath-like expression e.g. prop1/prop2/prop3, and for each item
+    in items, looks up items[prop1][prop2][prop3].  Like XPath, if any of the
+    intermediate results are lists it will treat each list item individually.
+    A 'None' in items or any child expressions will be ignored, this function
+    will not throw because of None (anywhere) in items.  The returned list
+    will contain no None values.
+
+    """
+    if path is None:
+        raise exception.Error('Invalid mini_xpath')
+
+    (first_token, sep, remainder) = path.partition('/')
+
+    if first_token == '':
+        raise exception.Error('Invalid mini_xpath')
+
+    results = []
+
+    if items is None:
+        return results
+
+    if not isinstance(items, list):
+        # Wrap single objects in a list
+        items = [items]
+
+    for item in items:
+        if item is None:
+            continue
+        get_method = getattr(item, 'get', None)
+        if get_method is None:
+            continue
+        child = get_method(first_token)
+        if child is None:
+            continue
+        if isinstance(child, list):
+            # Flatten intermediate lists
+            for x in child:
+                results.append(x)
+        else:
+            results.append(child)
+
+    if not sep:
+        # No more tokens
+        return results
+    else:
+        return get_from_path(results, remainder)
+
+
+def flatten_dict(dict_, flattened=None):
+    """Recursively flatten a nested dictionary."""
+    flattened = flattened or {}
+    for key, value in dict_.iteritems():
+        if hasattr(value, 'iteritems'):
+            flatten_dict(value, flattened)
+        else:
+            flattened[key] = value
+    return flattened
+
+
+def partition_dict(dict_, keys):
+    """Return two dicts, one with `keys` the other with everything else."""
+    intersection = {}
+    difference = {}
+    for key, value in dict_.iteritems():
+        if key in keys:
+            intersection[key] = value
+        else:
+            difference[key] = value
+    return intersection, difference
+
+
+def map_dict_keys(dict_, key_map):
+    """Return a dict in which the dictionaries keys are mapped to new keys."""
+    mapped = {}
+    for key, value in dict_.iteritems():
+        mapped_key = key_map[key] if key in key_map else key
+        mapped[mapped_key] = value
+    return mapped
+
+
+def subset_dict(dict_, keys):
+    """Return a dict that only contains a subset of keys."""
+    subset = partition_dict(dict_, keys)[0]
+    return subset
+
+
+def check_isinstance(obj, cls):
+    """Checks that obj is of type cls, and lets PyLint infer types."""
+    if isinstance(obj, cls):
+        return obj
+    raise Exception(_('Expected object of type: %s') % (str(cls)))
+    # TODO(justinsb): Can we make this better??
+    return cls()  # Ugly PyLint hack
+
+
+def parse_server_string(server_str):
+    """
+    Parses the given server_string and returns a list of host and port.
+    If it's not a combination of host part and port, the port element
+    is a null string. If the input is invalid expression, return a null
+    list.
+    """
+    try:
+        # First of all, exclude pure IPv6 address (w/o port).
+        if netaddr.valid_ipv6(server_str):
+            return (server_str, '')
+
+        # Next, check if this is IPv6 address with a port number combination.
+        if server_str.find("]:") != -1:
+            (address, port) = server_str.replace('[', '', 1).split(']:')
+            return (address, port)
+
+        # Third, check if this is a combination of an address and a port
+        if server_str.find(':') == -1:
+            return (server_str, '')
+
+        # This must be a combination of an address and a port
+        (address, port) = server_str.split(':')
+        return (address, port)
+
+    except Exception:
+        LOG.debug(_('Invalid server_string: %s'), server_str)
+        return ('', '')
+
+
+def gen_uuid():
+    return uuid.uuid4()
+
+
+def is_uuid_like(val):
+    """For our purposes, a UUID is a string in canonical form:
+
+        aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
+    """
+    try:
+        uuid.UUID(val)
+        return True
+    except (TypeError, ValueError, AttributeError):
+        return False
+
+
+def bool_from_str(val):
+    """Convert a string representation of a bool into a bool value"""
+
+    if not val:
+        return False
+    try:
+        return True if int(val) else False
+    except ValueError:
+        return val.lower() == 'true'
+
+
+def is_valid_ipv4(address):
+    """valid the address strictly as per format xxx.xxx.xxx.xxx.
+    where xxx is a value between 0 and 255.
+    """
+    parts = address.split(".")
+    if len(parts) != 4:
+        return False
+    for item in parts:
+        try:
+            if not 0 <= int(item) <= 255:
+                return False
+        except ValueError:
+            return False
+    return True
+
+
+def is_valid_cidr(address):
+    """Check if the provided ipv4 or ipv6 address is a valid
+    CIDR address or not"""
+    try:
+        # Validate the correct CIDR Address
+        netaddr.IPNetwork(address)
+    except netaddr.core.AddrFormatError:
+        return False
+    except UnboundLocalError:
+        # NOTE(MotoKen): work around bug in netaddr 0.7.5 (see detail in
+        # https://github.com/drkjam/netaddr/issues/2)
+        return False
+
+    # Prior validation partially verify /xx part
+    # Verify it here
+    ip_segment = address.split('/')
+
+    if (len(ip_segment) <= 1 or
+        ip_segment[1] == ''):
+        return False
+
+    return True
+
+
+def monkey_patch():
+    """  If the Flags.monkey_patch set as True,
+    this function patches a decorator
+    for all functions in specified modules.
+    You can set decorators for each modules
+    using FLAGS.monkey_patch_modules.
+    The format is "Module path:Decorator function".
+    Example: 'cinder.api.ec2.cloud:cinder.notifier.api.notify_decorator'
+
+    Parameters of the decorator is as follows.
+    (See cinder.notifier.api.notify_decorator)
+
+    name - name of the function
+    function - object of the function
+    """
+    # If FLAGS.monkey_patch is not True, this function do nothing.
+    if not FLAGS.monkey_patch:
+        return
+    # Get list of modules and decorators
+    for module_and_decorator in FLAGS.monkey_patch_modules:
+        module, decorator_name = module_and_decorator.split(':')
+        # import decorator function
+        decorator = importutils.import_class(decorator_name)
+        __import__(module)
+        # Retrieve module information using pyclbr
+        module_data = pyclbr.readmodule_ex(module)
+        for key in module_data.keys():
+            # set the decorator for the class methods
+            if isinstance(module_data[key], pyclbr.Class):
+                clz = importutils.import_class("%s.%s" % (module, key))
+                for method, func in inspect.getmembers(clz, inspect.ismethod):
+                    setattr(clz, method,
+                        decorator("%s.%s.%s" % (module, key, method), func))
+            # set the decorator for the function
+            if isinstance(module_data[key], pyclbr.Function):
+                func = importutils.import_class("%s.%s" % (module, key))
+                setattr(sys.modules[module], key,
+                    decorator("%s.%s" % (module, key), func))
+
+
+def convert_to_list_dict(lst, label):
+    """Convert a value or list into a list of dicts"""
+    if not lst:
+        return None
+    if not isinstance(lst, list):
+        lst = [lst]
+    return [{label: x} for x in lst]
+
+
+def timefunc(func):
+    """Decorator that logs how long a particular function took to execute"""
+    @functools.wraps(func)
+    def inner(*args, **kwargs):
+        start_time = time.time()
+        try:
+            return func(*args, **kwargs)
+        finally:
+            total_time = time.time() - start_time
+            LOG.debug(_("timefunc: '%(name)s' took %(total_time).2f secs") %
+                      dict(name=func.__name__, total_time=total_time))
+    return inner
+
+
+def generate_glance_url():
+    """Generate the URL to glance."""
+    # TODO(jk0): This will eventually need to take SSL into consideration
+    # when supported in glance.
+    return "http://%s:%d" % (FLAGS.glance_host, FLAGS.glance_port)
+
+
+@contextlib.contextmanager
+def save_and_reraise_exception():
+    """Save current exception, run some code and then re-raise.
+
+    In some cases the exception context can be cleared, resulting in None
+    being attempted to be reraised after an exception handler is run. This
+    can happen when eventlet switches greenthreads or when running an
+    exception handler, code raises and catches an exception. In both
+    cases the exception context will be cleared.
+
+    To work around this, we save the exception state, run handler code, and
+    then re-raise the original exception. If another exception occurs, the
+    saved exception is logged and the new exception is reraised.
+    """
+    type_, value, traceback = sys.exc_info()
+    try:
+        yield
+    except Exception:
+        # NOTE(jkoelker): Using LOG.error here since it accepts exc_info
+        #                 as a kwargs.
+        LOG.error(_('Original exception being dropped'),
+                  exc_info=(type_, value, traceback))
+        raise
+    raise type_, value, traceback
+
+
+@contextlib.contextmanager
+def logging_error(message):
+    """Catches exception, write message to the log, re-raise.
+    This is a common refinement of save_and_reraise that writes a specific
+    message to the log.
+    """
+    try:
+        yield
+    except Exception as error:
+        with save_and_reraise_exception():
+            LOG.exception(message)
+
+
+@contextlib.contextmanager
+def remove_path_on_error(path):
+    """Protect code that wants to operate on PATH atomically.
+    Any exception will cause PATH to be removed.
+    """
+    try:
+        yield
+    except Exception:
+        with save_and_reraise_exception():
+            delete_if_exists(path)
+
+
+def make_dev_path(dev, partition=None, base='/dev'):
+    """Return a path to a particular device.
+
+    >>> make_dev_path('xvdc')
+    /dev/xvdc
+
+    >>> make_dev_path('xvdc', 1)
+    /dev/xvdc1
+    """
+    path = os.path.join(base, dev)
+    if partition:
+        path += str(partition)
+    return path
+
+
+def total_seconds(td):
+    """Local total_seconds implementation for compatibility with python 2.6"""
+    if hasattr(td, 'total_seconds'):
+        return td.total_seconds()
+    else:
+        return ((td.days * 86400 + td.seconds) * 10 ** 6 +
+                td.microseconds) / 10.0 ** 6
+
+
+def sanitize_hostname(hostname):
+    """Return a hostname which conforms to RFC-952 and RFC-1123 specs."""
+    if isinstance(hostname, unicode):
+        hostname = hostname.encode('latin-1', 'ignore')
+
+    hostname = re.sub('[ _]', '-', hostname)
+    hostname = re.sub('[^\w.-]+', '', hostname)
+    hostname = hostname.lower()
+    hostname = hostname.strip('.-')
+
+    return hostname
+
+
+def read_cached_file(filename, cache_info, reload_func=None):
+    """Read from a file if it has been modified.
+
+    :param cache_info: dictionary to hold opaque cache.
+    :param reload_func: optional function to be called with data when
+                        file is reloaded due to a modification.
+
+    :returns: data from file
+
+    """
+    mtime = os.path.getmtime(filename)
+    if not cache_info or mtime != cache_info.get('mtime'):
+        with open(filename) as fap:
+            cache_info['data'] = fap.read()
+        cache_info['mtime'] = mtime
+        if reload_func:
+            reload_func(cache_info['data'])
+    return cache_info['data']
+
+
+def hash_file(file_like_object):
+    """Generate a hash for the contents of a file."""
+    checksum = hashlib.sha1()
+    any(map(checksum.update, iter(lambda: file_like_object.read(32768), '')))
+    return checksum.hexdigest()
+
+
+@contextlib.contextmanager
+def temporary_mutation(obj, **kwargs):
+    """Temporarily set the attr on a particular object to a given value then
+    revert when finished.
+
+    One use of this is to temporarily set the read_deleted flag on a context
+    object:
+
+        with temporary_mutation(context, read_deleted="yes"):
+            do_something_that_needed_deleted_objects()
+    """
+    NOT_PRESENT = object()
+
+    old_values = {}
+    for attr, new_value in kwargs.items():
+        old_values[attr] = getattr(obj, attr, NOT_PRESENT)
+        setattr(obj, attr, new_value)
+
+    try:
+        yield
+    finally:
+        for attr, old_value in old_values.items():
+            if old_value is NOT_PRESENT:
+                del obj[attr]
+            else:
+                setattr(obj, attr, old_value)
+
+
+def warn_deprecated_class(cls, msg):
+    """
+    Issues a warning to indicate that the given class is deprecated.
+    If a message is given, it is appended to the deprecation warning.
+    """
+
+    fullname = '%s.%s' % (cls.__module__, cls.__name__)
+    if msg:
+        fullmsg = _("Class %(fullname)s is deprecated: %(msg)s")
+    else:
+        fullmsg = _("Class %(fullname)s is deprecated")
+
+    # Issue the warning
+    warnings.warn(fullmsg % locals(), DeprecationWarning, stacklevel=3)
+
+
+def warn_deprecated_function(func, msg):
+    """
+    Issues a warning to indicate that the given function is
+    deprecated.  If a message is given, it is appended to the
+    deprecation warning.
+    """
+
+    name = func.__name__
+
+    # Find the function's definition
+    sourcefile = inspect.getsourcefile(func)
+
+    # Find the line number, if possible
+    if inspect.ismethod(func):
+        code = func.im_func.func_code
+    else:
+        code = func.func_code
+    lineno = getattr(code, 'co_firstlineno', None)
+
+    if lineno is None:
+        location = sourcefile
+    else:
+        location = "%s:%d" % (sourcefile, lineno)
+
+    # Build up the message
+    if msg:
+        fullmsg = _("Function %(name)s in %(location)s is deprecated: %(msg)s")
+    else:
+        fullmsg = _("Function %(name)s in %(location)s is deprecated")
+
+    # Issue the warning
+    warnings.warn(fullmsg % locals(), DeprecationWarning, stacklevel=3)
+
+
+def _stubout(klass, message):
+    """
+    Scans a class and generates wrapping stubs for __new__() and every
+    class and static method.  Returns a dictionary which can be passed
+    to type() to generate a wrapping class.
+    """
+
+    overrides = {}
+
+    def makestub_class(name, func):
+        """
+        Create a stub for wrapping class methods.
+        """
+
+        def stub(cls, *args, **kwargs):
+            warn_deprecated_class(klass, message)
+            return func(*args, **kwargs)
+
+        # Overwrite the stub's name
+        stub.__name__ = name
+        stub.func_name = name
+
+        return classmethod(stub)
+
+    def makestub_static(name, func):
+        """
+        Create a stub for wrapping static methods.
+        """
+
+        def stub(*args, **kwargs):
+            warn_deprecated_class(klass, message)
+            return func(*args, **kwargs)
+
+        # Overwrite the stub's name
+        stub.__name__ = name
+        stub.func_name = name
+
+        return staticmethod(stub)
+
+    for name, kind, _klass, _obj in inspect.classify_class_attrs(klass):
+        # We're only interested in __new__(), class methods, and
+        # static methods...
+        if (name != '__new__' and
+            kind not in ('class method', 'static method')):
+            continue
+
+        # Get the function...
+        func = getattr(klass, name)
+
+        # Override it in the class
+        if kind == 'class method':
+            stub = makestub_class(name, func)
+        elif kind == 'static method' or name == '__new__':
+            stub = makestub_static(name, func)
+
+        # Save it in the overrides dictionary...
+        overrides[name] = stub
+
+    # Apply the overrides
+    for name, stub in overrides.items():
+        setattr(klass, name, stub)
+
+
+def deprecated(message=''):
+    """
+    Marks a function, class, or method as being deprecated.  For
+    functions and methods, emits a warning each time the function or
+    method is called.  For classes, generates a new subclass which
+    will emit a warning each time the class is instantiated, or each
+    time any class or static method is called.
+
+    If a message is passed to the decorator, that message will be
+    appended to the emitted warning.  This may be used to suggest an
+    alternate way of achieving the desired effect, or to explain why
+    the function, class, or method is deprecated.
+    """
+
+    def decorator(f_or_c):
+        # Make sure we can deprecate it...
+        if not callable(f_or_c) or isinstance(f_or_c, types.ClassType):
+            warnings.warn("Cannot mark object %r as deprecated" % f_or_c,
+                          DeprecationWarning, stacklevel=2)
+            return f_or_c
+
+        # If we're deprecating a class, create a subclass of it and
+        # stub out all the class and static methods
+        if inspect.isclass(f_or_c):
+            klass = f_or_c
+            _stubout(klass, message)
+            return klass
+
+        # OK, it's a function; use a traditional wrapper...
+        func = f_or_c
+
+        @functools.wraps(func)
+        def wrapper(*args, **kwargs):
+            warn_deprecated_function(func, message)
+
+            return func(*args, **kwargs)
+
+        return wrapper
+    return decorator
+
+
+def _showwarning(message, category, filename, lineno, file=None, line=None):
+    """
+    Redirect warnings into logging.
+    """
+
+    fmtmsg = warnings.formatwarning(message, category, filename, lineno, line)
+    LOG.warning(fmtmsg)
+
+
+# Install our warnings handler
+warnings.showwarning = _showwarning
+
+
+def service_is_up(service):
+    """Check whether a service is up based on last heartbeat."""
+    last_heartbeat = service['updated_at'] or service['created_at']
+    # Timestamps in DB are UTC.
+    elapsed = total_seconds(utcnow() - last_heartbeat)
+    return abs(elapsed) <= FLAGS.service_down_time
+
+
+def generate_mac_address():
+    """Generate an Ethernet MAC address."""
+    # NOTE(vish): We would prefer to use 0xfe here to ensure that linux
+    #             bridge mac addresses don't change, but it appears to
+    #             conflict with libvirt, so we use the next highest octet
+    #             that has the unicast and locally administered bits set
+    #             properly: 0xfa.
+    #             Discussion: https://bugs.launchpad.net/cinder/+bug/921838
+    mac = [0xfa, 0x16, 0x3e,
+           random.randint(0x00, 0x7f),
+           random.randint(0x00, 0xff),
+           random.randint(0x00, 0xff)]
+    return ':'.join(map(lambda x: "%02x" % x, mac))
+
+
+def read_file_as_root(file_path):
+    """Secure helper to read file as root."""
+    try:
+        out, _err = execute('cat', file_path, run_as_root=True)
+        return out
+    except exception.ProcessExecutionError:
+        raise exception.FileNotFound(file_path=file_path)
+
+
+@contextlib.contextmanager
+def temporary_chown(path, owner_uid=None):
+    """Temporarily chown a path.
+
+    :params owner_uid: UID of temporary owner (defaults to current user)
+    """
+    if owner_uid is None:
+        owner_uid = os.getuid()
+
+    orig_uid = os.stat(path).st_uid
+
+    if orig_uid != owner_uid:
+        execute('chown', owner_uid, path, run_as_root=True)
+    try:
+        yield
+    finally:
+        if orig_uid != owner_uid:
+            execute('chown', orig_uid, path, run_as_root=True)
+
+
+@contextlib.contextmanager
+def tempdir(**kwargs):
+    tmpdir = tempfile.mkdtemp(**kwargs)
+    try:
+        yield tmpdir
+    finally:
+        try:
+            shutil.rmtree(tmpdir)
+        except OSError, e:
+            LOG.debug(_('Could not remove tmpdir: %s'), str(e))
+
+
+def strcmp_const_time(s1, s2):
+    """Constant-time string comparison.
+
+    :params s1: the first string
+    :params s2: the second string
+
+    :return: True if the strings are equal.
+
+    This function takes two strings and compares them.  It is intended to be
+    used when doing a comparison for authentication purposes to help guard
+    against timing attacks.
+    """
+    if len(s1) != len(s2):
+        return False
+    result = 0
+    for (a, b) in zip(s1, s2):
+        result |= ord(a) ^ ord(b)
+    return result == 0
+
+
+class UndoManager(object):
+    """Provides a mechanism to facilitate rolling back a series of actions
+    when an exception is raised.
+    """
+    def __init__(self):
+        self.undo_stack = []
+
+    def undo_with(self, undo_func):
+        self.undo_stack.append(undo_func)
+
+    def _rollback(self):
+        for undo_func in reversed(self.undo_stack):
+            undo_func()
+
+    def rollback_and_reraise(self, msg=None, **kwargs):
+        """Rollback a series of actions then re-raise the exception.
+
+        .. note:: (sirp) This should only be called within an
+                  exception handler.
+        """
+        with save_and_reraise_exception():
+            if msg:
+                LOG.exception(msg, **kwargs)
+
+            self._rollback()
diff --git a/cinder/version.py b/cinder/version.py
new file mode 100644
index 000000000..45b85c5e8
--- /dev/null
+++ b/cinder/version.py
@@ -0,0 +1,38 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+#    Copyright 2011 OpenStack LLC
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+CINDER_VERSION = ['2012', '2', None]
+YEAR, COUNT, REVISION = CINDER_VERSION
+FINAL = False   # This becomes true at Release Candidate time
+
+
+def canonical_version_string():
+    return '.'.join(filter(None, CINDER_VERSION))
+
+
+def version_string():
+    if FINAL:
+        return canonical_version_string()
+    else:
+        return '%s-dev' % (canonical_version_string(),)
+
+
+def vcs_version_string():
+    return 'LOCALBRANCH:LOCALREVISION'
+
+
+def version_string_with_vcs():
+    return '%s-%s' % (canonical_version_string(), vcs_version_string())
diff --git a/cinder/volume/__init__.py b/cinder/volume/__init__.py
new file mode 100644
index 000000000..e810a93d4
--- /dev/null
+++ b/cinder/volume/__init__.py
@@ -0,0 +1,25 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+# Importing full names to not pollute the namespace and cause possible
+# collisions with use of 'from cinder.volume import <foo>' elsewhere.
+import cinder.flags
+import cinder.openstack.common.importutils
+
+API = cinder.openstack.common.importutils.import_class(
+        cinder.flags.FLAGS.volume_api_class)
diff --git a/cinder/volume/api.py b/cinder/volume/api.py
new file mode 100644
index 000000000..9c816e95b
--- /dev/null
+++ b/cinder/volume/api.py
@@ -0,0 +1,371 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""
+Handles all requests relating to volumes.
+"""
+
+import functools
+
+from eventlet import greenthread
+
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+import cinder.policy
+from cinder import quota
+from cinder import rpc
+from cinder import utils
+from cinder.db import base
+
+FLAGS = flags.FLAGS
+flags.DECLARE('storage_availability_zone', 'cinder.volume.manager')
+
+LOG = logging.getLogger(__name__)
+
+
+def wrap_check_policy(func):
+    """Check policy corresponding to the wrapped methods prior to execution
+
+    This decorator requires the first 3 args of the wrapped function
+    to be (self, context, volume)
+    """
+    @functools.wraps(func)
+    def wrapped(self, context, target_obj, *args, **kwargs):
+        check_policy(context, func.__name__, target_obj)
+        return func(self, context, target_obj, *args, **kwargs)
+
+    return wrapped
+
+
+def check_policy(context, action, target_obj=None):
+    target = {
+        'project_id': context.project_id,
+        'user_id': context.user_id,
+    }
+    target.update(target_obj or {})
+    _action = 'volume:%s' % action
+    cinder.policy.enforce(context, _action, target)
+
+
+class API(base.Base):
+    """API for interacting with the volume manager."""
+
+    def create(self, context, size, name, description, snapshot=None,
+                     volume_type=None, metadata=None, availability_zone=None):
+        check_policy(context, 'create')
+        if snapshot is not None:
+            if snapshot['status'] != "available":
+                msg = _("status must be available")
+                raise exception.InvalidSnapshot(reason=msg)
+            if not size:
+                size = snapshot['volume_size']
+
+            snapshot_id = snapshot['id']
+        else:
+            snapshot_id = None
+
+        if quota.allowed_volumes(context, 1, size) < 1:
+            pid = context.project_id
+            LOG.warn(_("Quota exceeded for %(pid)s, tried to create"
+                    " %(size)sG volume") % locals())
+            raise exception.QuotaError(code="VolumeSizeTooLarge")
+
+        if availability_zone is None:
+            availability_zone = FLAGS.storage_availability_zone
+
+        if volume_type is None:
+            volume_type_id = None
+        else:
+            volume_type_id = volume_type.get('id', None)
+
+        options = {
+            'size': size,
+            'user_id': context.user_id,
+            'project_id': context.project_id,
+            'snapshot_id': snapshot_id,
+            'availability_zone': availability_zone,
+            'status': "creating",
+            'attach_status': "detached",
+            'display_name': name,
+            'display_description': description,
+            'volume_type_id': volume_type_id,
+            'metadata': metadata,
+            }
+
+        volume = self.db.volume_create(context, options)
+        rpc.cast(context,
+                 FLAGS.scheduler_topic,
+                 {"method": "create_volume",
+                  "args": {"topic": FLAGS.volume_topic,
+                           "volume_id": volume['id'],
+                           "snapshot_id": snapshot_id}})
+        return volume
+
+    # TODO(yamahata): eliminate dumb polling
+    def wait_creation(self, context, volume):
+        volume_id = volume['id']
+        while True:
+            volume = self.get(context, volume_id)
+            if volume['status'] != 'creating':
+                return
+            greenthread.sleep(1)
+
+    @wrap_check_policy
+    def delete(self, context, volume):
+        volume_id = volume['id']
+        if not volume['host']:
+            # NOTE(vish): scheduling failed, so delete it
+            self.db.volume_destroy(context, volume_id)
+            return
+        if volume['status'] not in ["available", "error"]:
+            msg = _("Volume status must be available or error")
+            raise exception.InvalidVolume(reason=msg)
+
+        snapshots = self.db.snapshot_get_all_for_volume(context, volume_id)
+        if len(snapshots):
+            msg = _("Volume still has %d dependent snapshots") % len(snapshots)
+            raise exception.InvalidVolume(reason=msg)
+
+        now = utils.utcnow()
+        self.db.volume_update(context, volume_id, {'status': 'deleting',
+                                                   'terminated_at': now})
+        host = volume['host']
+        rpc.cast(context,
+                 self.db.queue_get_for(context, FLAGS.volume_topic, host),
+                 {"method": "delete_volume",
+                  "args": {"volume_id": volume_id}})
+
+    @wrap_check_policy
+    def update(self, context, volume, fields):
+        self.db.volume_update(context, volume['id'], fields)
+
+    def get(self, context, volume_id):
+        rv = self.db.volume_get(context, volume_id)
+        volume = dict(rv.iteritems())
+        check_policy(context, 'get', volume)
+        return volume
+
+    def get_all(self, context, search_opts={}):
+        check_policy(context, 'get_all')
+        if context.is_admin:
+            volumes = self.db.volume_get_all(context)
+        else:
+            volumes = self.db.volume_get_all_by_project(context,
+                                    context.project_id)
+
+        if search_opts:
+            LOG.debug(_("Searching by: %s") % str(search_opts))
+
+            def _check_metadata_match(volume, searchdict):
+                volume_metadata = {}
+                for i in volume.get('volume_metadata'):
+                    volume_metadata[i['key']] = i['value']
+
+                for k, v in searchdict.iteritems():
+                    if (k not in volume_metadata.keys() or
+                        volume_metadata[k] != v):
+                        return False
+                return True
+
+            # search_option to filter_name mapping.
+            filter_mapping = {'metadata': _check_metadata_match}
+
+            result = []
+            for volume in volumes:
+                # go over all filters in the list
+                for opt, values in search_opts.iteritems():
+                    try:
+                        filter_func = filter_mapping[opt]
+                    except KeyError:
+                        # no such filter - ignore it, go to next filter
+                        continue
+                    else:
+                        if filter_func(volume, values):
+                            result.append(volume)
+                            break
+            volumes = result
+        return volumes
+
+    def get_snapshot(self, context, snapshot_id):
+        check_policy(context, 'get_snapshot')
+        rv = self.db.snapshot_get(context, snapshot_id)
+        return dict(rv.iteritems())
+
+    def get_all_snapshots(self, context):
+        check_policy(context, 'get_all_snapshots')
+        if context.is_admin:
+            return self.db.snapshot_get_all(context)
+        return self.db.snapshot_get_all_by_project(context, context.project_id)
+
+    @wrap_check_policy
+    def check_attach(self, context, volume):
+        # TODO(vish): abstract status checking?
+        if volume['status'] != "available":
+            msg = _("status must be available")
+            raise exception.InvalidVolume(reason=msg)
+        if volume['attach_status'] == "attached":
+            msg = _("already attached")
+            raise exception.InvalidVolume(reason=msg)
+
+    @wrap_check_policy
+    def check_detach(self, context, volume):
+        # TODO(vish): abstract status checking?
+        if volume['status'] == "available":
+            msg = _("already detached")
+            raise exception.InvalidVolume(reason=msg)
+
+    def remove_from_compute(self, context, volume, instance_id, host):
+        """Remove volume from specified compute host."""
+        rpc.call(context,
+                 self.db.queue_get_for(context, FLAGS.compute_topic, host),
+                 {"method": "remove_volume_connection",
+                  "args": {'instance_id': instance_id,
+                           'volume_id': volume['id']}})
+
+    @wrap_check_policy
+    def reserve_volume(self, context, volume):
+        self.update(context, volume, {"status": "attaching"})
+
+    @wrap_check_policy
+    def unreserve_volume(self, context, volume):
+        if volume['status'] == "attaching":
+            self.update(context, volume, {"status": "available"})
+
+    @wrap_check_policy
+    def attach(self, context, volume, instance_id, mountpoint):
+        host = volume['host']
+        queue = self.db.queue_get_for(context, FLAGS.volume_topic, host)
+        return rpc.call(context, queue,
+                        {"method": "attach_volume",
+                         "args": {"volume_id": volume['id'],
+                                  "instance_id": instance_id,
+                                  "mountpoint": mountpoint}})
+
+    @wrap_check_policy
+    def detach(self, context, volume):
+        host = volume['host']
+        queue = self.db.queue_get_for(context, FLAGS.volume_topic, host)
+        return rpc.call(context, queue,
+                 {"method": "detach_volume",
+                  "args": {"volume_id": volume['id']}})
+
+    @wrap_check_policy
+    def initialize_connection(self, context, volume, connector):
+        host = volume['host']
+        queue = self.db.queue_get_for(context, FLAGS.volume_topic, host)
+        return rpc.call(context, queue,
+                        {"method": "initialize_connection",
+                         "args": {"volume_id": volume['id'],
+                                  "connector": connector}})
+
+    @wrap_check_policy
+    def terminate_connection(self, context, volume, connector):
+        self.unreserve_volume(context, volume)
+        host = volume['host']
+        queue = self.db.queue_get_for(context, FLAGS.volume_topic, host)
+        return rpc.call(context, queue,
+                        {"method": "terminate_connection",
+                         "args": {"volume_id": volume['id'],
+                                  "connector": connector}})
+
+    def _create_snapshot(self, context, volume, name, description,
+                         force=False):
+        check_policy(context, 'create_snapshot', volume)
+
+        if ((not force) and (volume['status'] != "available")):
+            msg = _("must be available")
+            raise exception.InvalidVolume(reason=msg)
+
+        options = {
+            'volume_id': volume['id'],
+            'user_id': context.user_id,
+            'project_id': context.project_id,
+            'status': "creating",
+            'progress': '0%',
+            'volume_size': volume['size'],
+            'display_name': name,
+            'display_description': description}
+
+        snapshot = self.db.snapshot_create(context, options)
+        host = volume['host']
+        rpc.cast(context,
+                 self.db.queue_get_for(context, FLAGS.volume_topic, host),
+                 {"method": "create_snapshot",
+                  "args": {"volume_id": volume['id'],
+                           "snapshot_id": snapshot['id']}})
+        return snapshot
+
+    def create_snapshot(self, context, volume, name, description):
+        return self._create_snapshot(context, volume, name, description,
+                                     False)
+
+    def create_snapshot_force(self, context, volume, name, description):
+        return self._create_snapshot(context, volume, name, description,
+                                     True)
+
+    @wrap_check_policy
+    def delete_snapshot(self, context, snapshot):
+        if snapshot['status'] not in ["available", "error"]:
+            msg = _("Volume Snapshot status must be available or error")
+            raise exception.InvalidVolume(reason=msg)
+        self.db.snapshot_update(context, snapshot['id'],
+                                {'status': 'deleting'})
+        volume = self.db.volume_get(context, snapshot['volume_id'])
+        host = volume['host']
+        rpc.cast(context,
+                 self.db.queue_get_for(context, FLAGS.volume_topic, host),
+                 {"method": "delete_snapshot",
+                  "args": {"snapshot_id": snapshot['id']}})
+
+    @wrap_check_policy
+    def get_volume_metadata(self, context, volume):
+        """Get all metadata associated with a volume."""
+        rv = self.db.volume_metadata_get(context, volume['id'])
+        return dict(rv.iteritems())
+
+    @wrap_check_policy
+    def delete_volume_metadata(self, context, volume, key):
+        """Delete the given metadata item from an volume."""
+        self.db.volume_metadata_delete(context, volume['id'], key)
+
+    @wrap_check_policy
+    def update_volume_metadata(self, context, volume, metadata, delete=False):
+        """Updates or creates volume metadata.
+
+        If delete is True, metadata items that are not specified in the
+        `metadata` argument will be deleted.
+
+        """
+        if delete:
+            _metadata = metadata
+        else:
+            _metadata = self.get_volume_metadata(context, volume['id'])
+            _metadata.update(metadata)
+
+        self.db.volume_metadata_update(context, volume['id'], _metadata, True)
+        return _metadata
+
+    def get_volume_metadata_value(self, volume, key):
+        """Get value of particular metadata key."""
+        metadata = volume.get('volume_metadata')
+        if metadata:
+            for i in volume['volume_metadata']:
+                if i['key'] == key:
+                    return i['value']
+        return None
diff --git a/cinder/volume/driver.py b/cinder/volume/driver.py
new file mode 100644
index 000000000..5e640bd8b
--- /dev/null
+++ b/cinder/volume/driver.py
@@ -0,0 +1,709 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+Drivers for volumes.
+
+"""
+
+import time
+
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+from cinder.openstack.common import cfg
+from cinder import utils
+from cinder.volume import iscsi
+
+
+LOG = logging.getLogger(__name__)
+
+volume_opts = [
+    cfg.StrOpt('volume_group',
+               default='cinder-volumes',
+               help='Name for the VG that will contain exported volumes'),
+    cfg.StrOpt('num_shell_tries',
+               default=3,
+               help='number of times to attempt to run flakey shell commands'),
+    cfg.StrOpt('num_iscsi_scan_tries',
+               default=3,
+               help='number of times to rescan iSCSI target to find volume'),
+    cfg.IntOpt('iscsi_num_targets',
+               default=100,
+               help='Number of iscsi target ids per host'),
+    cfg.StrOpt('iscsi_target_prefix',
+               default='iqn.2010-10.org.openstack:',
+               help='prefix for iscsi volumes'),
+    cfg.StrOpt('iscsi_ip_address',
+               default='$my_ip',
+               help='use this ip for iscsi'),
+    cfg.IntOpt('iscsi_port',
+               default=3260,
+               help='The port that the iSCSI daemon is listening on'),
+    cfg.StrOpt('rbd_pool',
+               default='rbd',
+               help='the RADOS pool in which rbd volumes are stored'),
+    cfg.StrOpt('rbd_user',
+               default=None,
+               help='the RADOS client name for accessing rbd volumes'),
+    cfg.StrOpt('rbd_secret_uuid',
+               default=None,
+               help='the libvirt uuid of the secret for the rbd_user'
+                    'volumes'),
+    ]
+
+FLAGS = flags.FLAGS
+FLAGS.register_opts(volume_opts)
+
+
+class VolumeDriver(object):
+    """Executes commands relating to Volumes."""
+    def __init__(self, execute=utils.execute, *args, **kwargs):
+        # NOTE(vish): db is set by Manager
+        self.db = None
+        self.set_execute(execute)
+
+    def set_execute(self, execute):
+        self._execute = execute
+
+    def _try_execute(self, *command, **kwargs):
+        # NOTE(vish): Volume commands can partially fail due to timing, but
+        #             running them a second time on failure will usually
+        #             recover nicely.
+        tries = 0
+        while True:
+            try:
+                self._execute(*command, **kwargs)
+                return True
+            except exception.ProcessExecutionError:
+                tries = tries + 1
+                if tries >= FLAGS.num_shell_tries:
+                    raise
+                LOG.exception(_("Recovering from a failed execute.  "
+                                "Try number %s"), tries)
+                time.sleep(tries ** 2)
+
+    def check_for_setup_error(self):
+        """Returns an error if prerequisites aren't met"""
+        out, err = self._execute('vgs', '--noheadings', '-o', 'name',
+                                run_as_root=True)
+        volume_groups = out.split()
+        if not FLAGS.volume_group in volume_groups:
+            raise exception.Error(_("volume group %s doesn't exist")
+                                  % FLAGS.volume_group)
+
+    def _create_volume(self, volume_name, sizestr):
+        self._try_execute('lvcreate', '-L', sizestr, '-n',
+                          volume_name, FLAGS.volume_group, run_as_root=True)
+
+    def _copy_volume(self, srcstr, deststr, size_in_g):
+        self._execute('dd', 'if=%s' % srcstr, 'of=%s' % deststr,
+                      'count=%d' % (size_in_g * 1024), 'bs=1M',
+                      run_as_root=True)
+
+    def _volume_not_present(self, volume_name):
+        path_name = '%s/%s' % (FLAGS.volume_group, volume_name)
+        try:
+            self._try_execute('lvdisplay', path_name, run_as_root=True)
+        except Exception as e:
+            # If the volume isn't present
+            return True
+        return False
+
+    def _delete_volume(self, volume, size_in_g):
+        """Deletes a logical volume."""
+        # zero out old volumes to prevent data leaking between users
+        # TODO(ja): reclaiming space should be done lazy and low priority
+        self._copy_volume('/dev/zero', self.local_path(volume), size_in_g)
+        self._try_execute('lvremove', '-f', "%s/%s" %
+                          (FLAGS.volume_group,
+                           self._escape_snapshot(volume['name'])),
+                          run_as_root=True)
+
+    def _sizestr(self, size_in_g):
+        if int(size_in_g) == 0:
+            return '100M'
+        return '%sG' % size_in_g
+
+    # Linux LVM reserves name that starts with snapshot, so that
+    # such volume name can't be created. Mangle it.
+    def _escape_snapshot(self, snapshot_name):
+        if not snapshot_name.startswith('snapshot'):
+            return snapshot_name
+        return '_' + snapshot_name
+
+    def create_volume(self, volume):
+        """Creates a logical volume. Can optionally return a Dictionary of
+        changes to the volume object to be persisted."""
+        self._create_volume(volume['name'], self._sizestr(volume['size']))
+
+    def create_volume_from_snapshot(self, volume, snapshot):
+        """Creates a volume from a snapshot."""
+        self._create_volume(volume['name'], self._sizestr(volume['size']))
+        self._copy_volume(self.local_path(snapshot), self.local_path(volume),
+                          snapshot['volume_size'])
+
+    def delete_volume(self, volume):
+        """Deletes a logical volume."""
+        if self._volume_not_present(volume['name']):
+            # If the volume isn't present, then don't attempt to delete
+            return True
+
+        # TODO(yamahata): lvm can't delete origin volume only without
+        # deleting derived snapshots. Can we do something fancy?
+        out, err = self._execute('lvdisplay', '--noheading',
+                                 '-C', '-o', 'Attr',
+                                 '%s/%s' % (FLAGS.volume_group,
+                                            volume['name']),
+                                 run_as_root=True)
+        # fake_execute returns None resulting unit test error
+        if out:
+            out = out.strip()
+            if (out[0] == 'o') or (out[0] == 'O'):
+                raise exception.VolumeIsBusy(volume_name=volume['name'])
+
+        self._delete_volume(volume, volume['size'])
+
+    def create_snapshot(self, snapshot):
+        """Creates a snapshot."""
+        orig_lv_name = "%s/%s" % (FLAGS.volume_group, snapshot['volume_name'])
+        self._try_execute('lvcreate', '-L',
+                          self._sizestr(snapshot['volume_size']),
+                          '--name', self._escape_snapshot(snapshot['name']),
+                          '--snapshot', orig_lv_name, run_as_root=True)
+
+    def delete_snapshot(self, snapshot):
+        """Deletes a snapshot."""
+        if self._volume_not_present(self._escape_snapshot(snapshot['name'])):
+            # If the snapshot isn't present, then don't attempt to delete
+            return True
+
+        # TODO(yamahata): zeroing out the whole snapshot triggers COW.
+        # it's quite slow.
+        self._delete_volume(snapshot, snapshot['volume_size'])
+
+    def local_path(self, volume):
+        # NOTE(vish): stops deprecation warning
+        escaped_group = FLAGS.volume_group.replace('-', '--')
+        escaped_name = self._escape_snapshot(volume['name']).replace('-', '--')
+        return "/dev/mapper/%s-%s" % (escaped_group, escaped_name)
+
+    def ensure_export(self, context, volume):
+        """Synchronously recreates an export for a logical volume."""
+        raise NotImplementedError()
+
+    def create_export(self, context, volume):
+        """Exports the volume. Can optionally return a Dictionary of changes
+        to the volume object to be persisted."""
+        raise NotImplementedError()
+
+    def remove_export(self, context, volume):
+        """Removes an export for a logical volume."""
+        raise NotImplementedError()
+
+    def check_for_export(self, context, volume_id):
+        """Make sure volume is exported."""
+        raise NotImplementedError()
+
+    def initialize_connection(self, volume, connector):
+        """Allow connection to connector and return connection info."""
+        raise NotImplementedError()
+
+    def terminate_connection(self, volume, connector):
+        """Disallow connection from connector"""
+        raise NotImplementedError()
+
+    def get_volume_stats(self, refresh=False):
+        """Return the current state of the volume service. If 'refresh' is
+           True, run the update first."""
+        return None
+
+    def do_setup(self, context):
+        """Any initialization the volume driver does while starting"""
+        pass
+
+
+class ISCSIDriver(VolumeDriver):
+    """Executes commands relating to ISCSI volumes.
+
+    We make use of model provider properties as follows:
+
+    ``provider_location``
+      if present, contains the iSCSI target information in the same
+      format as an ietadm discovery
+      i.e. '<ip>:<port>,<portal> <target IQN>'
+
+    ``provider_auth``
+      if present, contains a space-separated triple:
+      '<auth method> <auth username> <auth password>'.
+      `CHAP` is the only auth_method in use at the moment.
+    """
+
+    def __init__(self, *args, **kwargs):
+        self.tgtadm = iscsi.get_target_admin()
+        super(ISCSIDriver, self).__init__(*args, **kwargs)
+
+    def set_execute(self, execute):
+        super(ISCSIDriver, self).set_execute(execute)
+        self.tgtadm.set_execute(execute)
+
+    def ensure_export(self, context, volume):
+        """Synchronously recreates an export for a logical volume."""
+        try:
+            iscsi_target = self.db.volume_get_iscsi_target_num(context,
+                                                           volume['id'])
+        except exception.NotFound:
+            LOG.info(_("Skipping ensure_export. No iscsi_target "
+                       "provisioned for volume: %d"), volume['id'])
+            return
+
+        iscsi_name = "%s%s" % (FLAGS.iscsi_target_prefix, volume['name'])
+        volume_path = "/dev/%s/%s" % (FLAGS.volume_group, volume['name'])
+
+        self.tgtadm.new_target(iscsi_name, iscsi_target, check_exit_code=False)
+        self.tgtadm.new_logicalunit(iscsi_target, 0, volume_path,
+                                    check_exit_code=False)
+
+    def _ensure_iscsi_targets(self, context, host):
+        """Ensure that target ids have been created in datastore."""
+        host_iscsi_targets = self.db.iscsi_target_count_by_host(context, host)
+        if host_iscsi_targets >= FLAGS.iscsi_num_targets:
+            return
+        # NOTE(vish): Target ids start at 1, not 0.
+        for target_num in xrange(1, FLAGS.iscsi_num_targets + 1):
+            target = {'host': host, 'target_num': target_num}
+            self.db.iscsi_target_create_safe(context, target)
+
+    def create_export(self, context, volume):
+        """Creates an export for a logical volume."""
+        self._ensure_iscsi_targets(context, volume['host'])
+        iscsi_target = self.db.volume_allocate_iscsi_target(context,
+                                                      volume['id'],
+                                                      volume['host'])
+        iscsi_name = "%s%s" % (FLAGS.iscsi_target_prefix, volume['name'])
+        volume_path = "/dev/%s/%s" % (FLAGS.volume_group, volume['name'])
+
+        self.tgtadm.new_target(iscsi_name, iscsi_target)
+        self.tgtadm.new_logicalunit(iscsi_target, 0, volume_path)
+
+        model_update = {}
+        if FLAGS.iscsi_helper == 'tgtadm':
+            lun = 1
+        else:
+            lun = 0
+        model_update['provider_location'] = _iscsi_location(
+            FLAGS.iscsi_ip_address, iscsi_target, iscsi_name, lun)
+        return model_update
+
+    def remove_export(self, context, volume):
+        """Removes an export for a logical volume."""
+        try:
+            iscsi_target = self.db.volume_get_iscsi_target_num(context,
+                                                           volume['id'])
+        except exception.NotFound:
+            LOG.info(_("Skipping remove_export. No iscsi_target "
+                       "provisioned for volume: %d"), volume['id'])
+            return
+
+        try:
+            # ietadm show will exit with an error
+            # this export has already been removed
+            self.tgtadm.show_target(iscsi_target)
+        except Exception as e:
+            LOG.info(_("Skipping remove_export. No iscsi_target "
+                       "is presently exported for volume: %d"), volume['id'])
+            return
+
+        self.tgtadm.delete_logicalunit(iscsi_target, 0)
+        self.tgtadm.delete_target(iscsi_target)
+
+    def _do_iscsi_discovery(self, volume):
+        #TODO(justinsb): Deprecate discovery and use stored info
+        #NOTE(justinsb): Discovery won't work with CHAP-secured targets (?)
+        LOG.warn(_("ISCSI provider_location not stored, using discovery"))
+
+        volume_name = volume['name']
+
+        (out, _err) = self._execute('iscsiadm', '-m', 'discovery',
+                                    '-t', 'sendtargets', '-p', volume['host'],
+                                    run_as_root=True)
+        for target in out.splitlines():
+            if FLAGS.iscsi_ip_address in target and volume_name in target:
+                return target
+        return None
+
+    def _get_iscsi_properties(self, volume):
+        """Gets iscsi configuration
+
+        We ideally get saved information in the volume entity, but fall back
+        to discovery if need be. Discovery may be completely removed in future
+        The properties are:
+
+        :target_discovered:    boolean indicating whether discovery was used
+
+        :target_iqn:    the IQN of the iSCSI target
+
+        :target_portal:    the portal of the iSCSI target
+
+        :target_lun:    the lun of the iSCSI target
+
+        :volume_id:    the id of the volume (currently used by xen)
+
+        :auth_method:, :auth_username:, :auth_password:
+
+            the authentication details. Right now, either auth_method is not
+            present meaning no authentication, or auth_method == `CHAP`
+            meaning use CHAP with the specified credentials.
+        """
+
+        properties = {}
+
+        location = volume['provider_location']
+
+        if location:
+            # provider_location is the same format as iSCSI discovery output
+            properties['target_discovered'] = False
+        else:
+            location = self._do_iscsi_discovery(volume)
+
+            if not location:
+                raise exception.Error(_("Could not find iSCSI export "
+                                        " for volume %s") %
+                                      (volume['name']))
+
+            LOG.debug(_("ISCSI Discovery: Found %s") % (location))
+            properties['target_discovered'] = True
+
+        results = location.split(" ")
+        properties['target_portal'] = results[0].split(",")[0]
+        properties['target_iqn'] = results[1]
+        try:
+            properties['target_lun'] = int(results[2])
+        except (IndexError, ValueError):
+            if FLAGS.iscsi_helper == 'tgtadm':
+                properties['target_lun'] = 1
+            else:
+                properties['target_lun'] = 0
+
+        properties['volume_id'] = volume['id']
+
+        auth = volume['provider_auth']
+        if auth:
+            (auth_method, auth_username, auth_secret) = auth.split()
+
+            properties['auth_method'] = auth_method
+            properties['auth_username'] = auth_username
+            properties['auth_password'] = auth_secret
+
+        return properties
+
+    def _run_iscsiadm(self, iscsi_properties, iscsi_command):
+        (out, err) = self._execute('iscsiadm', '-m', 'node', '-T',
+                                   iscsi_properties['target_iqn'],
+                                   '-p', iscsi_properties['target_portal'],
+                                   *iscsi_command, run_as_root=True)
+        LOG.debug("iscsiadm %s: stdout=%s stderr=%s" %
+                  (iscsi_command, out, err))
+        return (out, err)
+
+    def _iscsiadm_update(self, iscsi_properties, property_key, property_value):
+        iscsi_command = ('--op', 'update', '-n', property_key,
+                         '-v', property_value)
+        return self._run_iscsiadm(iscsi_properties, iscsi_command)
+
+    def initialize_connection(self, volume, connector):
+        """Initializes the connection and returns connection info.
+
+        The iscsi driver returns a driver_volume_type of 'iscsi'.
+        The format of the driver data is defined in _get_iscsi_properties.
+        Example return value::
+
+            {
+                'driver_volume_type': 'iscsi'
+                'data': {
+                    'target_discovered': True,
+                    'target_iqn': 'iqn.2010-10.org.openstack:volume-00000001',
+                    'target_portal': '127.0.0.0.1:3260',
+                    'volume_id': 1,
+                }
+            }
+
+        """
+
+        iscsi_properties = self._get_iscsi_properties(volume)
+        return {
+            'driver_volume_type': 'iscsi',
+            'data': iscsi_properties
+        }
+
+    def terminate_connection(self, volume, connector):
+        pass
+
+    def check_for_export(self, context, volume_id):
+        """Make sure volume is exported."""
+
+        tid = self.db.volume_get_iscsi_target_num(context, volume_id)
+        try:
+            self.tgtadm.show_target(tid)
+        except exception.ProcessExecutionError, e:
+            # Instances remount read-only in this case.
+            # /etc/init.d/iscsitarget restart and rebooting cinder-volume
+            # is better since ensure_export() works at boot time.
+            LOG.error(_("Cannot confirm exported volume "
+                        "id:%(volume_id)s.") % locals())
+            raise
+
+
+class FakeISCSIDriver(ISCSIDriver):
+    """Logs calls instead of executing."""
+    def __init__(self, *args, **kwargs):
+        super(FakeISCSIDriver, self).__init__(execute=self.fake_execute,
+                                              *args, **kwargs)
+
+    def check_for_setup_error(self):
+        """No setup necessary in fake mode."""
+        pass
+
+    def initialize_connection(self, volume, connector):
+        return {
+            'driver_volume_type': 'iscsi',
+            'data': {}
+        }
+
+    def terminate_connection(self, volume, connector):
+        pass
+
+    @staticmethod
+    def fake_execute(cmd, *_args, **_kwargs):
+        """Execute that simply logs the command."""
+        LOG.debug(_("FAKE ISCSI: %s"), cmd)
+        return (None, None)
+
+
+class RBDDriver(VolumeDriver):
+    """Implements RADOS block device (RBD) volume commands"""
+
+    def check_for_setup_error(self):
+        """Returns an error if prerequisites aren't met"""
+        (stdout, stderr) = self._execute('rados', 'lspools')
+        pools = stdout.split("\n")
+        if not FLAGS.rbd_pool in pools:
+            raise exception.Error(_("rbd has no pool %s") %
+                                  FLAGS.rbd_pool)
+
+    def create_volume(self, volume):
+        """Creates a logical volume."""
+        if int(volume['size']) == 0:
+            size = 100
+        else:
+            size = int(volume['size']) * 1024
+        self._try_execute('rbd', '--pool', FLAGS.rbd_pool,
+                          '--size', size, 'create', volume['name'])
+
+    def delete_volume(self, volume):
+        """Deletes a logical volume."""
+        self._try_execute('rbd', '--pool', FLAGS.rbd_pool,
+                          'rm', volume['name'])
+
+    def create_snapshot(self, snapshot):
+        """Creates an rbd snapshot"""
+        self._try_execute('rbd', '--pool', FLAGS.rbd_pool,
+                          'snap', 'create', '--snap', snapshot['name'],
+                          snapshot['volume_name'])
+
+    def delete_snapshot(self, snapshot):
+        """Deletes an rbd snapshot"""
+        self._try_execute('rbd', '--pool', FLAGS.rbd_pool,
+                          'snap', 'rm', '--snap', snapshot['name'],
+                          snapshot['volume_name'])
+
+    def local_path(self, volume):
+        """Returns the path of the rbd volume."""
+        # This is the same as the remote path
+        # since qemu accesses it directly.
+        return "rbd:%s/%s" % (FLAGS.rbd_pool, volume['name'])
+
+    def ensure_export(self, context, volume):
+        """Synchronously recreates an export for a logical volume."""
+        pass
+
+    def create_export(self, context, volume):
+        """Exports the volume"""
+        pass
+
+    def remove_export(self, context, volume):
+        """Removes an export for a logical volume"""
+        pass
+
+    def initialize_connection(self, volume, connector):
+        return {
+            'driver_volume_type': 'rbd',
+            'data': {
+                'name': '%s/%s' % (FLAGS.rbd_pool, volume['name']),
+                'auth_enabled': FLAGS.rbd_secret_uuid is not None,
+                'auth_username': FLAGS.rbd_user,
+                'secret_type': 'ceph',
+                'secret_uuid': FLAGS.rbd_secret_uuid,
+            }
+        }
+
+    def terminate_connection(self, volume, connector):
+        pass
+
+
+class SheepdogDriver(VolumeDriver):
+    """Executes commands relating to Sheepdog Volumes"""
+
+    def check_for_setup_error(self):
+        """Returns an error if prerequisites aren't met"""
+        try:
+            #NOTE(francois-charlier) Since 0.24 'collie cluster info -r'
+            #  gives short output, but for compatibility reason we won't
+            #  use it and just check if 'running' is in the output.
+            (out, err) = self._execute('collie', 'cluster', 'info')
+            if not 'running' in out.split():
+                raise exception.Error(_("Sheepdog is not working: %s") % out)
+        except exception.ProcessExecutionError:
+            raise exception.Error(_("Sheepdog is not working"))
+
+    def create_volume(self, volume):
+        """Creates a sheepdog volume"""
+        self._try_execute('qemu-img', 'create',
+                          "sheepdog:%s" % volume['name'],
+                          self._sizestr(volume['size']))
+
+    def create_volume_from_snapshot(self, volume, snapshot):
+        """Creates a sheepdog volume from a snapshot."""
+        self._try_execute('qemu-img', 'create', '-b',
+                          "sheepdog:%s:%s" % (snapshot['volume_name'],
+                                              snapshot['name']),
+                          "sheepdog:%s" % volume['name'])
+
+    def delete_volume(self, volume):
+        """Deletes a logical volume"""
+        self._try_execute('collie', 'vdi', 'delete', volume['name'])
+
+    def create_snapshot(self, snapshot):
+        """Creates a sheepdog snapshot"""
+        self._try_execute('qemu-img', 'snapshot', '-c', snapshot['name'],
+                          "sheepdog:%s" % snapshot['volume_name'])
+
+    def delete_snapshot(self, snapshot):
+        """Deletes a sheepdog snapshot"""
+        self._try_execute('collie', 'vdi', 'delete', snapshot['volume_name'],
+                          '-s', snapshot['name'])
+
+    def local_path(self, volume):
+        return "sheepdog:%s" % volume['name']
+
+    def ensure_export(self, context, volume):
+        """Safely and synchronously recreates an export for a logical volume"""
+        pass
+
+    def create_export(self, context, volume):
+        """Exports the volume"""
+        pass
+
+    def remove_export(self, context, volume):
+        """Removes an export for a logical volume"""
+        pass
+
+    def initialize_connection(self, volume, connector):
+        return {
+            'driver_volume_type': 'sheepdog',
+            'data': {
+                'name': volume['name']
+            }
+        }
+
+    def terminate_connection(self, volume, connector):
+        pass
+
+
+class LoggingVolumeDriver(VolumeDriver):
+    """Logs and records calls, for unit tests."""
+
+    def check_for_setup_error(self):
+        pass
+
+    def create_volume(self, volume):
+        self.log_action('create_volume', volume)
+
+    def delete_volume(self, volume):
+        self.log_action('delete_volume', volume)
+
+    def local_path(self, volume):
+        print "local_path not implemented"
+        raise NotImplementedError()
+
+    def ensure_export(self, context, volume):
+        self.log_action('ensure_export', volume)
+
+    def create_export(self, context, volume):
+        self.log_action('create_export', volume)
+
+    def remove_export(self, context, volume):
+        self.log_action('remove_export', volume)
+
+    def initialize_connection(self, volume, connector):
+        self.log_action('initialize_connection', volume)
+
+    def terminate_connection(self, volume, connector):
+        self.log_action('terminate_connection', volume)
+
+    def check_for_export(self, context, volume_id):
+        self.log_action('check_for_export', volume_id)
+
+    _LOGS = []
+
+    @staticmethod
+    def clear_logs():
+        LoggingVolumeDriver._LOGS = []
+
+    @staticmethod
+    def log_action(action, parameters):
+        """Logs the command."""
+        LOG.debug(_("LoggingVolumeDriver: %s") % (action))
+        log_dictionary = {}
+        if parameters:
+            log_dictionary = dict(parameters)
+        log_dictionary['action'] = action
+        LOG.debug(_("LoggingVolumeDriver: %s") % (log_dictionary))
+        LoggingVolumeDriver._LOGS.append(log_dictionary)
+
+    @staticmethod
+    def all_logs():
+        return LoggingVolumeDriver._LOGS
+
+    @staticmethod
+    def logs_like(action, **kwargs):
+        matches = []
+        for entry in LoggingVolumeDriver._LOGS:
+            if entry['action'] != action:
+                continue
+            match = True
+            for k, v in kwargs.iteritems():
+                if entry.get(k) != v:
+                    match = False
+                    break
+            if match:
+                matches.append(entry)
+        return matches
+
+
+def _iscsi_location(ip, target, iqn, lun=None):
+    return "%s:%s,%s %s %s" % (ip, FLAGS.iscsi_port, target, iqn, lun)
diff --git a/cinder/volume/iscsi.py b/cinder/volume/iscsi.py
new file mode 100644
index 000000000..f79205971
--- /dev/null
+++ b/cinder/volume/iscsi.py
@@ -0,0 +1,160 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+Helper code for the iSCSI volume driver.
+
+"""
+
+from cinder import flags
+from cinder.openstack.common import cfg
+from cinder import utils
+
+
+iscsi_helper_opt = cfg.StrOpt('iscsi_helper',
+                              default='ietadm',
+                              help='iscsi target user-land tool to use')
+
+FLAGS = flags.FLAGS
+FLAGS.register_opt(iscsi_helper_opt)
+
+
+class TargetAdmin(object):
+    """iSCSI target administration.
+
+    Base class for iSCSI target admin helpers.
+    """
+
+    def __init__(self, cmd, execute):
+        self._cmd = cmd
+        self.set_execute(execute)
+
+    def set_execute(self, execute):
+        """Set the function to be used to execute commands."""
+        self._execute = execute
+
+    def _run(self, *args, **kwargs):
+        self._execute(self._cmd, *args, run_as_root=True, **kwargs)
+
+    def new_target(self, name, tid, **kwargs):
+        """Create a new iSCSI target."""
+        raise NotImplementedError()
+
+    def delete_target(self, tid, **kwargs):
+        """Delete a target."""
+        raise NotImplementedError()
+
+    def show_target(self, tid, **kwargs):
+        """Query the given target ID."""
+        raise NotImplementedError()
+
+    def new_logicalunit(self, tid, lun, path, **kwargs):
+        """Create a new LUN on a target using the supplied path."""
+        raise NotImplementedError()
+
+    def delete_logicalunit(self, tid, lun, **kwargs):
+        """Delete a logical unit from a target."""
+        raise NotImplementedError()
+
+
+class TgtAdm(TargetAdmin):
+    """iSCSI target administration using tgtadm."""
+
+    def __init__(self, execute=utils.execute):
+        super(TgtAdm, self).__init__('tgtadm', execute)
+
+    def new_target(self, name, tid, **kwargs):
+        self._run('--op', 'new',
+                  '--lld=iscsi', '--mode=target',
+                  '--tid=%s' % tid,
+                  '--targetname=%s' % name,
+                  **kwargs)
+        self._run('--op', 'bind',
+                  '--lld=iscsi', '--mode=target',
+                  '--initiator-address=ALL',
+                  '--tid=%s' % tid,
+                  **kwargs)
+
+    def delete_target(self, tid, **kwargs):
+        self._run('--op', 'delete',
+                  '--lld=iscsi', '--mode=target',
+                  '--tid=%s' % tid,
+                  **kwargs)
+
+    def show_target(self, tid, **kwargs):
+        self._run('--op', 'show',
+                  '--lld=iscsi', '--mode=target',
+                  '--tid=%s' % tid,
+                  **kwargs)
+
+    def new_logicalunit(self, tid, lun, path, **kwargs):
+        self._run('--op', 'new',
+                  '--lld=iscsi', '--mode=logicalunit',
+                  '--tid=%s' % tid,
+                  '--lun=%d' % (lun + 1),  # lun0 is reserved
+                  '--backing-store=%s' % path,
+                  **kwargs)
+
+    def delete_logicalunit(self, tid, lun, **kwargs):
+        self._run('--op', 'delete',
+                  '--lld=iscsi', '--mode=logicalunit',
+                  '--tid=%s' % tid,
+                  '--lun=%d' % (lun + 1),
+                  **kwargs)
+
+
+class IetAdm(TargetAdmin):
+    """iSCSI target administration using ietadm."""
+
+    def __init__(self, execute=utils.execute):
+        super(IetAdm, self).__init__('ietadm', execute)
+
+    def new_target(self, name, tid, **kwargs):
+        self._run('--op', 'new',
+                  '--tid=%s' % tid,
+                  '--params', 'Name=%s' % name,
+                  **kwargs)
+
+    def delete_target(self, tid, **kwargs):
+        self._run('--op', 'delete',
+                  '--tid=%s' % tid,
+                  **kwargs)
+
+    def show_target(self, tid, **kwargs):
+        self._run('--op', 'show',
+                  '--tid=%s' % tid,
+                  **kwargs)
+
+    def new_logicalunit(self, tid, lun, path, **kwargs):
+        self._run('--op', 'new',
+                  '--tid=%s' % tid,
+                  '--lun=%d' % lun,
+                  '--params', 'Path=%s,Type=fileio' % path,
+                  **kwargs)
+
+    def delete_logicalunit(self, tid, lun, **kwargs):
+        self._run('--op', 'delete',
+                  '--tid=%s' % tid,
+                  '--lun=%d' % lun,
+                  **kwargs)
+
+
+def get_target_admin():
+    if FLAGS.iscsi_helper == 'tgtadm':
+        return TgtAdm()
+    else:
+        return IetAdm()
diff --git a/cinder/volume/manager.py b/cinder/volume/manager.py
new file mode 100644
index 000000000..efb2eabf4
--- /dev/null
+++ b/cinder/volume/manager.py
@@ -0,0 +1,331 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+Volume manager manages creating, attaching, detaching, and persistent storage.
+
+Persistant storage volumes keep their state independent of instances.  You can
+attach to an instance, terminate the instance, spawn a new instance (even
+one from a different image) and re-attach the volume with the same data
+intact.
+
+**Related Flags**
+
+:volume_topic:  What :mod:`rpc` topic to listen to (default: `volume`).
+:volume_manager:  The module name of a class derived from
+                  :class:`manager.Manager` (default:
+                  :class:`cinder.volume.manager.Manager`).
+:storage_availability_zone:  Defaults to `cinder`.
+:volume_driver:  Used by :class:`Manager`.  Defaults to
+                 :class:`cinder.volume.driver.ISCSIDriver`.
+:volume_group:  Name of the group that will contain exported volumes (default:
+                `cinder-volumes`)
+:num_shell_tries:  Number of times to attempt to run commands (default: 3)
+
+"""
+
+from cinder import context
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+from cinder import manager
+from cinder.openstack.common import cfg
+from cinder.openstack.common import importutils
+from cinder import rpc
+from cinder import utils
+from cinder.volume import volume_types
+
+
+LOG = logging.getLogger(__name__)
+
+volume_manager_opts = [
+    cfg.StrOpt('storage_availability_zone',
+               default='cinder',
+               help='availability zone of this service'),
+    cfg.StrOpt('volume_driver',
+               default='cinder.volume.driver.ISCSIDriver',
+               help='Driver to use for volume creation'),
+    cfg.BoolOpt('use_local_volumes',
+                default=True,
+                help='if True, will not discover local volumes'),
+    cfg.BoolOpt('volume_force_update_capabilities',
+                default=False,
+                help='if True will force update capabilities on each check'),
+    ]
+
+FLAGS = flags.FLAGS
+FLAGS.register_opts(volume_manager_opts)
+
+
+class VolumeManager(manager.SchedulerDependentManager):
+    """Manages attachable block storage devices."""
+    def __init__(self, volume_driver=None, *args, **kwargs):
+        """Load the driver from the one specified in args, or from flags."""
+        if not volume_driver:
+            volume_driver = FLAGS.volume_driver
+        self.driver = importutils.import_object(volume_driver)
+        super(VolumeManager, self).__init__(service_name='volume',
+                                                    *args, **kwargs)
+        # NOTE(vish): Implementation specific db handling is done
+        #             by the driver.
+        self.driver.db = self.db
+        self._last_volume_stats = []
+
+    def init_host(self):
+        """Do any initialization that needs to be run if this is a
+           standalone service."""
+
+        ctxt = context.get_admin_context()
+        self.driver.do_setup(ctxt)
+        self.driver.check_for_setup_error()
+
+        volumes = self.db.volume_get_all_by_host(ctxt, self.host)
+        LOG.debug(_("Re-exporting %s volumes"), len(volumes))
+        for volume in volumes:
+            if volume['status'] in ['available', 'in-use']:
+                self.driver.ensure_export(ctxt, volume)
+            else:
+                LOG.info(_("volume %s: skipping export"), volume['name'])
+
+    def create_volume(self, context, volume_id, snapshot_id=None):
+        """Creates and exports the volume."""
+        context = context.elevated()
+        volume_ref = self.db.volume_get(context, volume_id)
+        LOG.info(_("volume %s: creating"), volume_ref['name'])
+
+        self.db.volume_update(context,
+                              volume_id,
+                              {'host': self.host})
+        # NOTE(vish): so we don't have to get volume from db again
+        #             before passing it to the driver.
+        volume_ref['host'] = self.host
+
+        try:
+            vol_name = volume_ref['name']
+            vol_size = volume_ref['size']
+            LOG.debug(_("volume %(vol_name)s: creating lv of"
+                    " size %(vol_size)sG") % locals())
+            if snapshot_id is None:
+                model_update = self.driver.create_volume(volume_ref)
+            else:
+                snapshot_ref = self.db.snapshot_get(context, snapshot_id)
+                model_update = self.driver.create_volume_from_snapshot(
+                    volume_ref,
+                    snapshot_ref)
+            if model_update:
+                self.db.volume_update(context, volume_ref['id'], model_update)
+
+            LOG.debug(_("volume %s: creating export"), volume_ref['name'])
+            model_update = self.driver.create_export(context, volume_ref)
+            if model_update:
+                self.db.volume_update(context, volume_ref['id'], model_update)
+        except Exception:
+            with utils.save_and_reraise_exception():
+                self.db.volume_update(context,
+                                      volume_ref['id'], {'status': 'error'})
+
+        now = utils.utcnow()
+        self.db.volume_update(context,
+                              volume_ref['id'], {'status': 'available',
+                                                 'launched_at': now})
+        LOG.debug(_("volume %s: created successfully"), volume_ref['name'])
+        self._reset_stats()
+        return volume_id
+
+    def delete_volume(self, context, volume_id):
+        """Deletes and unexports volume."""
+        context = context.elevated()
+        volume_ref = self.db.volume_get(context, volume_id)
+        if volume_ref['attach_status'] == "attached":
+            raise exception.Error(_("Volume is still attached"))
+        if volume_ref['host'] != self.host:
+            raise exception.Error(_("Volume is not local to this node"))
+
+        self._reset_stats()
+        try:
+            LOG.debug(_("volume %s: removing export"), volume_ref['name'])
+            self.driver.remove_export(context, volume_ref)
+            LOG.debug(_("volume %s: deleting"), volume_ref['name'])
+            self.driver.delete_volume(volume_ref)
+        except exception.VolumeIsBusy, e:
+            LOG.debug(_("volume %s: volume is busy"), volume_ref['name'])
+            self.driver.ensure_export(context, volume_ref)
+            self.db.volume_update(context, volume_ref['id'],
+                                  {'status': 'available'})
+            return True
+        except Exception:
+            with utils.save_and_reraise_exception():
+                self.db.volume_update(context,
+                                      volume_ref['id'],
+                                      {'status': 'error_deleting'})
+
+        self.db.volume_destroy(context, volume_id)
+        LOG.debug(_("volume %s: deleted successfully"), volume_ref['name'])
+        return True
+
+    def create_snapshot(self, context, volume_id, snapshot_id):
+        """Creates and exports the snapshot."""
+        context = context.elevated()
+        snapshot_ref = self.db.snapshot_get(context, snapshot_id)
+        LOG.info(_("snapshot %s: creating"), snapshot_ref['name'])
+
+        try:
+            snap_name = snapshot_ref['name']
+            LOG.debug(_("snapshot %(snap_name)s: creating") % locals())
+            model_update = self.driver.create_snapshot(snapshot_ref)
+            if model_update:
+                self.db.snapshot_update(context, snapshot_ref['id'],
+                                        model_update)
+
+        except Exception:
+            with utils.save_and_reraise_exception():
+                self.db.snapshot_update(context,
+                                        snapshot_ref['id'],
+                                        {'status': 'error'})
+
+        self.db.snapshot_update(context,
+                                snapshot_ref['id'], {'status': 'available',
+                                                     'progress': '100%'})
+        LOG.debug(_("snapshot %s: created successfully"), snapshot_ref['name'])
+        return snapshot_id
+
+    def delete_snapshot(self, context, snapshot_id):
+        """Deletes and unexports snapshot."""
+        context = context.elevated()
+        snapshot_ref = self.db.snapshot_get(context, snapshot_id)
+
+        try:
+            LOG.debug(_("snapshot %s: deleting"), snapshot_ref['name'])
+            self.driver.delete_snapshot(snapshot_ref)
+        except exception.SnapshotIsBusy:
+            LOG.debug(_("snapshot %s: snapshot is busy"), snapshot_ref['name'])
+            self.db.snapshot_update(context,
+                                    snapshot_ref['id'],
+                                    {'status': 'available'})
+            return True
+        except Exception:
+            with utils.save_and_reraise_exception():
+                self.db.snapshot_update(context,
+                                        snapshot_ref['id'],
+                                        {'status': 'error_deleting'})
+
+        self.db.snapshot_destroy(context, snapshot_id)
+        LOG.debug(_("snapshot %s: deleted successfully"), snapshot_ref['name'])
+        return True
+
+    def attach_volume(self, context, volume_id, instance_id, mountpoint):
+        """Updates db to show volume is attached"""
+        # TODO(vish): refactor this into a more general "reserve"
+        self.db.volume_attached(context,
+                                volume_id,
+                                instance_id,
+                                mountpoint)
+
+    def detach_volume(self, context, volume_id):
+        """Updates db to show volume is detached"""
+        # TODO(vish): refactor this into a more general "unreserve"
+        self.db.volume_detached(context, volume_id)
+
+    def initialize_connection(self, context, volume_id, connector):
+        """Prepare volume for connection from host represented by connector.
+
+        This method calls the driver initialize_connection and returns
+        it to the caller.  The connector parameter is a dictionary with
+        information about the host that will connect to the volume in the
+        following format::
+
+            {
+                'ip': ip,
+                'initiator': initiator,
+            }
+
+        ip: the ip address of the connecting machine
+
+        initiator: the iscsi initiator name of the connecting machine.
+        This can be None if the connecting machine does not support iscsi
+        connections.
+
+        driver is responsible for doing any necessary security setup and
+        returning a connection_info dictionary in the following format::
+
+            {
+                'driver_volume_type': driver_volume_type,
+                'data': data,
+            }
+
+        driver_volume_type: a string to identify the type of volume.  This
+                           can be used by the calling code to determine the
+                           strategy for connecting to the volume. This could
+                           be 'iscsi', 'rbd', 'sheepdog', etc.
+
+        data: this is the data that the calling code will use to connect
+              to the volume. Keep in mind that this will be serialized to
+              json in various places, so it should not contain any non-json
+              data types.
+        """
+        volume_ref = self.db.volume_get(context, volume_id)
+        return self.driver.initialize_connection(volume_ref, connector)
+
+    def terminate_connection(self, context, volume_id, connector):
+        """Cleanup connection from host represented by connector.
+
+        The format of connector is the same as for initialize_connection.
+        """
+        volume_ref = self.db.volume_get(context, volume_id)
+        self.driver.terminate_connection(volume_ref, connector)
+
+    def check_for_export(self, context, instance_id):
+        """Make sure whether volume is exported."""
+        volumes = self.db.volume_get_all_by_instance(context, instance_id)
+        for volume in volumes:
+            self.driver.check_for_export(context, volume['id'])
+
+    def _volume_stats_changed(self, stat1, stat2):
+        if FLAGS.volume_force_update_capabilities:
+            return True
+        if len(stat1) != len(stat2):
+            return True
+        for (k, v) in stat1.iteritems():
+            if (k, v) not in stat2.iteritems():
+                return True
+        return False
+
+    @manager.periodic_task
+    def _report_driver_status(self, context):
+        volume_stats = self.driver.get_volume_stats(refresh=True)
+        if volume_stats:
+            LOG.info(_("Checking volume capabilities"))
+
+            if self._volume_stats_changed(self._last_volume_stats,
+                                          volume_stats):
+                LOG.info(_("New capabilities found: %s"), volume_stats)
+                self._last_volume_stats = volume_stats
+
+                # This will grab info about the host and queue it
+                # to be sent to the Schedulers.
+                self.update_service_capabilities(self._last_volume_stats)
+            else:
+                # avoid repeating fanouts
+                self.update_service_capabilities(None)
+
+    def _reset_stats(self):
+        LOG.info(_("Clear capabilities"))
+        self._last_volume_stats = []
+
+    def notification(self, context, event):
+        LOG.info(_("Notification {%s} received"), event)
+        self._reset_stats()
diff --git a/cinder/volume/netapp.py b/cinder/volume/netapp.py
new file mode 100644
index 000000000..17f2f24f2
--- /dev/null
+++ b/cinder/volume/netapp.py
@@ -0,0 +1,676 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2012 NetApp, Inc.
+# Copyright (c) 2012 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+Volume driver for NetApp storage systems.
+
+This driver requires NetApp OnCommand 5.0 and one or more Data
+ONTAP 7-mode storage systems with installed iSCSI licenses.
+
+"""
+
+import time
+import string
+
+import suds
+from suds import client
+from suds.sax import text
+
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+from cinder.openstack.common import cfg
+from cinder.volume import driver
+
+LOG = logging.getLogger("cinder.volume.driver")
+
+netapp_opts = [
+    cfg.StrOpt('netapp_wsdl_url',
+               default=None,
+               help='URL of the WSDL file for the DFM server'),
+    cfg.StrOpt('netapp_login',
+               default=None,
+               help='User name for the DFM server'),
+    cfg.StrOpt('netapp_password',
+               default=None,
+               help='Password for the DFM server'),
+    cfg.StrOpt('netapp_server_hostname',
+               default=None,
+               help='Hostname for the DFM server'),
+    cfg.IntOpt('netapp_server_port',
+               default=8088,
+               help='Port number for the DFM server'),
+    cfg.StrOpt('netapp_storage_service',
+               default=None,
+               help='Storage service to use for provisioning'),
+    cfg.StrOpt('netapp_vfiler',
+               default=None,
+               help='Vfiler to use for provisioning'),
+    ]
+
+FLAGS = flags.FLAGS
+FLAGS.register_opts(netapp_opts)
+
+
+class NetAppISCSIDriver(driver.ISCSIDriver):
+    """NetApp iSCSI volume driver."""
+
+    def __init__(self, *args, **kwargs):
+        super(NetAppISCSIDriver, self).__init__(*args, **kwargs)
+
+    def _check_fail(self, request, response):
+        if 'failed' == response.Status:
+            name = request.Name
+            reason = response.Reason
+            msg = _('API %(name)sfailed: %(reason)s')
+            raise exception.Error(msg % locals())
+
+    def _create_client(self, wsdl_url, login, password, hostname, port):
+        """
+        Instantiate a "suds" client to make web services calls to the
+        DFM server. Note that the WSDL file is quite large and may take
+        a few seconds to parse.
+        """
+        self.client = client.Client(wsdl_url,
+                                    username=login,
+                                    password=password)
+        soap_url = 'http://%s:%s/apis/soap/v1' % (hostname, port)
+        self.client.set_options(location=soap_url)
+
+    def _set_storage_service(self, storage_service):
+        """Set the storage service to use for provisioning"""
+        self.storage_service = storage_service
+
+    def _set_vfiler(self, vfiler):
+        """Set the vfiler to use for provisioning"""
+        self.vfiler = vfiler
+
+    def _check_flags(self):
+        """Ensure that the flags we care about are set."""
+        required_flags = ['netapp_wsdl_url', 'netapp_login', 'netapp_password',
+                'netapp_server_hostname', 'netapp_server_port',
+                'netapp_storage_service']
+        for flag in required_flags:
+            if not getattr(FLAGS, flag, None):
+                raise exception.Error(_('%s is not set') % flag)
+
+    def do_setup(self, context):
+        """
+        Called one time by the manager after the driver is loaded.
+        Validate the flags we care about and setup the suds (web services)
+        client.
+        """
+        self._check_flags()
+        self._create_client(FLAGS.netapp_wsdl_url, FLAGS.netapp_login,
+            FLAGS.netapp_password, FLAGS.netapp_server_hostname,
+            FLAGS.netapp_server_port)
+        self._set_storage_service(FLAGS.netapp_storage_service)
+        if FLAGS.netapp_vfiler:
+            self._set_vfiler(FLAGS.netapp_vfiler)
+
+    def check_for_setup_error(self):
+        """Invoke a web services API to make sure we can talk to the server."""
+        res = self.client.service.DfmAbout()
+        LOG.debug(_("Connected to DFM server"))
+
+    def _get_job_progress(self, job_id):
+        """
+        Obtain the latest progress report for the job and return the
+        list of progress events.
+        """
+        server = self.client.service
+        res = server.DpJobProgressEventListIterStart(JobId=job_id)
+        tag = res.Tag
+        event_list = []
+        try:
+            while True:
+                res = server.DpJobProgressEventListIterNext(Tag=tag,
+                                                            Maximum=100)
+                if not hasattr(res, 'ProgressEvents'):
+                    break
+                event_list += res.ProgressEvents.DpJobProgressEventInfo
+        finally:
+            server.DpJobProgressEventListIterEnd(Tag=tag)
+        return event_list
+
+    def _wait_for_job(self, job_id):
+        """
+        Poll the job until it completes or an error is detected. Return the
+        final list of progress events if it completes successfully.
+        """
+        while True:
+            events = self._get_job_progress(job_id)
+            for event in events:
+                if event.EventStatus == 'error':
+                    raise exception.Error(_('Job failed: %s') %
+                        (event.ErrorMessage))
+                if event.EventType == 'job-end':
+                    return events
+            time.sleep(5)
+
+    def _dataset_name(self, project):
+        """Return the dataset name for a given project """
+        _project = string.replace(string.replace(project, ' ', '_'), '-', '_')
+        return 'OpenStack_' + _project
+
+    def _does_dataset_exist(self, dataset_name):
+        """Check if a dataset already exists"""
+        server = self.client.service
+        try:
+            res = server.DatasetListInfoIterStart(ObjectNameOrId=dataset_name)
+            tag = res.Tag
+        except suds.WebFault:
+            return False
+        try:
+            res = server.DatasetListInfoIterNext(Tag=tag, Maximum=1)
+            if hasattr(res, 'Datasets') and res.Datasets.DatasetInfo:
+                return True
+        finally:
+            server.DatasetListInfoIterEnd(Tag=tag)
+        return False
+
+    def _create_dataset(self, dataset_name):
+        """
+        Create a new dataset using the storage service. The export settings are
+        set to create iSCSI LUNs aligned for Linux.
+        """
+        server = self.client.service
+
+        lunmap = self.client.factory.create('DatasetLunMappingInfo')
+        lunmap.IgroupOsType = 'linux'
+        export = self.client.factory.create('DatasetExportInfo')
+        export.DatasetExportProtocol = 'iscsi'
+        export.DatasetLunMappingInfo = lunmap
+        detail = self.client.factory.create('StorageSetInfo')
+        detail.DpNodeName = 'Primary data'
+        detail.DatasetExportInfo = export
+        if hasattr(self, 'vfiler'):
+            detail.ServerNameOrId = self.vfiler
+        details = self.client.factory.create('ArrayOfStorageSetInfo')
+        details.StorageSetInfo = [detail]
+
+        server.StorageServiceDatasetProvision(
+                StorageServiceNameOrId=self.storage_service,
+                DatasetName=dataset_name,
+                AssumeConfirmation=True,
+                StorageSetDetails=details)
+
+    def _provision(self, name, description, project, size):
+        """
+        Provision a LUN through provisioning manager. The LUN will be created
+        inside a dataset associated with the project. If the dataset doesn't
+        already exist, we create it using the storage service specified in the
+        cinder conf.
+        """
+
+        dataset_name = self._dataset_name(project)
+        if not self._does_dataset_exist(dataset_name):
+            self._create_dataset(dataset_name)
+
+        info = self.client.factory.create('ProvisionMemberRequestInfo')
+        info.Name = name
+        if description:
+            info.Description = description
+        info.Size = size
+        info.MaximumSnapshotSpace = 2 * long(size)
+
+        server = self.client.service
+        lock_id = server.DatasetEditBegin(DatasetNameOrId=dataset_name)
+        try:
+            server.DatasetProvisionMember(EditLockId=lock_id,
+                                          ProvisionMemberRequestInfo=info)
+            res = server.DatasetEditCommit(EditLockId=lock_id,
+                                           AssumeConfirmation=True)
+        except (suds.WebFault, Exception):
+            server.DatasetEditRollback(EditLockId=lock_id)
+            raise exception.Error(_('Failed to provision dataset member'))
+
+        lun_id = None
+
+        for info in res.JobIds.JobInfo:
+            events = self._wait_for_job(info.JobId)
+            for event in events:
+                if event.EventType != 'lun-create':
+                    continue
+                lun_id = event.ProgressLunInfo.LunPathId
+
+        if not lun_id:
+            raise exception.Error(_('No LUN was created by the provision job'))
+
+    def _remove_destroy(self, name, project):
+        """
+        Remove the LUN from the dataset and destroy the actual LUN on the
+        storage system.
+        """
+        lun_id = self._get_lun_id(name, project)
+        if not lun_id:
+            raise exception.Error(_("Failed to find LUN ID for volume %s") %
+                (name))
+
+        member = self.client.factory.create('DatasetMemberParameter')
+        member.ObjectNameOrId = lun_id
+        members = self.client.factory.create('ArrayOfDatasetMemberParameter')
+        members.DatasetMemberParameter = [member]
+
+        dataset_name = self._dataset_name(project)
+
+        server = self.client.service
+        lock_id = server.DatasetEditBegin(DatasetNameOrId=dataset_name)
+        try:
+            server.DatasetRemoveMember(EditLockId=lock_id, Destroy=True,
+                                       DatasetMemberParameters=members)
+            server.DatasetEditCommit(EditLockId=lock_id,
+                                     AssumeConfirmation=True)
+        except (suds.WebFault, Exception):
+            server.DatasetEditRollback(EditLockId=lock_id)
+            msg = _('Failed to remove and delete dataset member')
+            raise exception.Error(msg)
+
+    def create_volume(self, volume):
+        """Driver entry point for creating a new volume"""
+        default_size = '104857600'  # 100 MB
+        gigabytes = 1073741824L  # 2^30
+        name = volume['name']
+        project = volume['project_id']
+        display_name = volume['display_name']
+        display_description = volume['display_description']
+        if display_name:
+            if display_description:
+                description = display_name + "\n" + display_description
+            else:
+                description = display_name
+        elif display_description:
+            description = display_description
+        if int(volume['size']) == 0:
+            size = default_size
+        else:
+            size = str(int(volume['size']) * gigabytes)
+        self._provision(name, description, project, size)
+
+    def delete_volume(self, volume):
+        """Driver entry point for destroying existing volumes"""
+        name = volume['name']
+        project = volume['project_id']
+        self._remove_destroy(name, project)
+
+    def _get_lun_id(self, name, project):
+        """
+        Given the name of a volume, find the DFM (OnCommand) ID of the LUN
+        corresponding to that volume. Currently we do this by enumerating
+        all of the LUNs in the dataset and matching the names against the
+        OpenStack volume name.
+
+        This could become a performance bottleneck in very large installations
+        in which case possible options for mitigating the problem are:
+        1) Store the LUN ID alongside the volume in the cinder DB (if possible)
+        2) Cache the list of LUNs in the dataset in driver memory
+        3) Store the volume to LUN ID mappings in a local file
+        """
+        dataset_name = self._dataset_name(project)
+
+        server = self.client.service
+        res = server.DatasetMemberListInfoIterStart(
+                DatasetNameOrId=dataset_name,
+                IncludeExportsInfo=True,
+                IncludeIndirect=True,
+                MemberType='lun_path')
+        tag = res.Tag
+        suffix = '/' + name
+        try:
+            while True:
+                res = server.DatasetMemberListInfoIterNext(Tag=tag,
+                                                           Maximum=100)
+                if (not hasattr(res, 'DatasetMembers') or
+                            not res.DatasetMembers):
+                    break
+                for member in res.DatasetMembers.DatasetMemberInfo:
+                    if member.MemberName.endswith(suffix):
+                        return member.MemberId
+        finally:
+            server.DatasetMemberListInfoIterEnd(Tag=tag)
+
+    def _get_lun_details(self, lun_id):
+        """Given the ID of a LUN, get the details about that LUN"""
+        server = self.client.service
+        res = server.LunListInfoIterStart(ObjectNameOrId=lun_id)
+        tag = res.Tag
+        try:
+            res = server.LunListInfoIterNext(Tag=tag, Maximum=1)
+            if hasattr(res, 'Luns') and res.Luns.LunInfo:
+                return res.Luns.LunInfo[0]
+        finally:
+            server.LunListInfoIterEnd(Tag=tag)
+
+    def _get_host_details(self, host_id):
+        """
+        Given the ID of a host (storage system), get the details about that
+        host.
+        """
+        server = self.client.service
+        res = server.HostListInfoIterStart(ObjectNameOrId=host_id)
+        tag = res.Tag
+        try:
+            res = server.HostListInfoIterNext(Tag=tag, Maximum=1)
+            if hasattr(res, 'Hosts') and res.Hosts.HostInfo:
+                return res.Hosts.HostInfo[0]
+        finally:
+            server.HostListInfoIterEnd(Tag=tag)
+
+    def _get_iqn_for_host(self, host_id):
+        """Get the iSCSI Target Name for a storage system"""
+        request = self.client.factory.create('Request')
+        request.Name = 'iscsi-node-get-name'
+        response = self.client.service.ApiProxy(Target=host_id,
+                                                Request=request)
+        self._check_fail(request, response)
+        return response.Results['node-name'][0]
+
+    def _api_elem_is_empty(self, elem):
+        """
+        Helper routine to figure out if a list returned from a proxy API
+        is empty. This is necessary because the API proxy produces nasty
+        looking XML.
+        """
+        if not type(elem) is list:
+            return True
+        if 0 == len(elem):
+            return True
+        child = elem[0]
+        if isinstance(child, text.Text):
+            return True
+        if type(child) is str:
+            return True
+        return False
+
+    def _get_target_portal_for_host(self, host_id, host_address):
+        """
+        Get the iSCSI Target Portal details for a particular IP address
+        on a storage system.
+        """
+        request = self.client.factory.create('Request')
+        request.Name = 'iscsi-portal-list-info'
+        response = self.client.service.ApiProxy(Target=host_id,
+                                                Request=request)
+        self._check_fail(request, response)
+        portal = {}
+        portals = response.Results['iscsi-portal-list-entries']
+        if self._api_elem_is_empty(portals):
+            return portal
+        portal_infos = portals[0]['iscsi-portal-list-entry-info']
+        for portal_info in portal_infos:
+            portal['address'] = portal_info['ip-address'][0]
+            portal['port'] = portal_info['ip-port'][0]
+            portal['portal'] = portal_info['tpgroup-tag'][0]
+            if host_address == portal['address']:
+                break
+        return portal
+
+    def _get_export(self, volume):
+        """
+        Looks up the LUN in DFM based on the volume and project name, then get
+        the LUN's ID. We store that value in the database instead of the iSCSI
+        details because we will not have the true iSCSI details until masking
+        time (when initialize_connection() is called).
+        """
+        name = volume['name']
+        project = volume['project_id']
+        lun_id = self._get_lun_id(name, project)
+        if not lun_id:
+            msg = _("Failed to find LUN ID for volume %s")
+            raise exception.Error(msg % name)
+        return {'provider_location': lun_id}
+
+    def ensure_export(self, context, volume):
+        """
+        Driver entry point to get the iSCSI details about an existing volume
+        """
+        return self._get_export(volume)
+
+    def create_export(self, context, volume):
+        """
+        Driver entry point to get the iSCSI details about a new volume
+        """
+        return self._get_export(volume)
+
+    def remove_export(self, context, volume):
+        """
+        Since exporting is idempotent in this driver, we have nothing
+        to do for unexporting.
+        """
+        pass
+
+    def _find_igroup_for_initiator(self, host_id, initiator_name):
+        """
+        Look for an existing igroup (initiator group) on the storage system
+        containing a given iSCSI initiator and return the name of the igroup.
+        """
+        request = self.client.factory.create('Request')
+        request.Name = 'igroup-list-info'
+        response = self.client.service.ApiProxy(Target=host_id,
+                                                Request=request)
+        self._check_fail(request, response)
+        igroups = response.Results['initiator-groups']
+        if self._api_elem_is_empty(igroups):
+            return None
+        igroup_infos = igroups[0]['initiator-group-info']
+        for igroup_info in igroup_infos:
+            if ('iscsi' != igroup_info['initiator-group-type'][0] or
+                'linux' != igroup_info['initiator-group-os-type'][0]):
+                continue
+            igroup_name = igroup_info['initiator-group-name'][0]
+            if not igroup_name.startswith('openstack-'):
+                continue
+            initiators = igroup_info['initiators'][0]['initiator-info']
+            for initiator in initiators:
+                if initiator_name == initiator['initiator-name'][0]:
+                    return igroup_name
+        return None
+
+    def _create_igroup(self, host_id, initiator_name):
+        """
+        Create a new igroup (initiator group) on the storage system to hold
+        the given iSCSI initiator. The group will only have 1 member and will
+        be named "openstack-${initiator_name}".
+        """
+        igroup_name = 'openstack-' + initiator_name
+        request = self.client.factory.create('Request')
+        request.Name = 'igroup-create'
+        igroup_create_xml = (
+            '<initiator-group-name>%s</initiator-group-name>'
+            '<initiator-group-type>iscsi</initiator-group-type>'
+            '<os-type>linux</os-type><ostype>linux</ostype>')
+        request.Args = text.Raw(igroup_create_xml % igroup_name)
+        response = self.client.service.ApiProxy(Target=host_id,
+                                                Request=request)
+        self._check_fail(request, response)
+        request = self.client.factory.create('Request')
+        request.Name = 'igroup-add'
+        igroup_add_xml = (
+            '<initiator-group-name>%s</initiator-group-name>'
+            '<initiator>%s</initiator>')
+        request.Args = text.Raw(igroup_add_xml % (igroup_name, initiator_name))
+        response = self.client.service.ApiProxy(Target=host_id,
+                                                Request=request)
+        self._check_fail(request, response)
+        return igroup_name
+
+    def _get_lun_mappping(self, host_id, lunpath, igroup_name):
+        """
+        Check if a given LUN is already mapped to the given igroup (initiator
+        group). If the LUN is mapped, also return the LUN number for the
+        mapping.
+        """
+        request = self.client.factory.create('Request')
+        request.Name = 'lun-map-list-info'
+        request.Args = text.Raw('<path>%s</path>' % (lunpath))
+        response = self.client.service.ApiProxy(Target=host_id,
+                                                 Request=request)
+        self._check_fail(request, response)
+        igroups = response.Results['initiator-groups']
+        if self._api_elem_is_empty(igroups):
+            return {'mapped': False}
+        igroup_infos = igroups[0]['initiator-group-info']
+        for igroup_info in igroup_infos:
+            if igroup_name == igroup_info['initiator-group-name'][0]:
+                return {'mapped': True, 'lun_num': igroup_info['lun-id'][0]}
+        return {'mapped': False}
+
+    def _map_initiator(self, host_id, lunpath, igroup_name):
+        """
+        Map the given LUN to the given igroup (initiator group). Return the LUN
+        number that the LUN was mapped to (the filer will choose the lowest
+        available number).
+        """
+        request = self.client.factory.create('Request')
+        request.Name = 'lun-map'
+        lun_map_xml = ('<initiator-group>%s</initiator-group>'
+                       '<path>%s</path>')
+        request.Args = text.Raw(lun_map_xml % (igroup_name, lunpath))
+        response = self.client.service.ApiProxy(Target=host_id,
+                                                Request=request)
+        self._check_fail(request, response)
+        return response.Results['lun-id-assigned'][0]
+
+    def _unmap_initiator(self, host_id, lunpath, igroup_name):
+        """Unmap the given LUN from the given igroup (initiator group)."""
+        request = self.client.factory.create('Request')
+        request.Name = 'lun-unmap'
+        lun_unmap_xml = ('<initiator-group>%s</initiator-group>'
+                         '<path>%s</path>')
+        request.Args = text.Raw(lun_unmap_xml % (igroup_name, lunpath))
+        response = self.client.service.ApiProxy(Target=host_id,
+                                                Request=request)
+        self._check_fail(request, response)
+
+    def _ensure_initiator_mapped(self, host_id, lunpath, initiator_name):
+        """
+        Check if a LUN is mapped to a given initiator already and create
+        the mapping if it is not. A new igroup will be created if needed.
+        Returns the LUN number for the mapping between the LUN and initiator
+        in both cases.
+        """
+        lunpath = '/vol/' + lunpath
+        igroup_name = self._find_igroup_for_initiator(host_id, initiator_name)
+        if not igroup_name:
+            igroup_name = self._create_igroup(host_id, initiator_name)
+
+        mapping = self._get_lun_mappping(host_id, lunpath, igroup_name)
+        if mapping['mapped']:
+            return mapping['lun_num']
+        return self._map_initiator(host_id, lunpath, igroup_name)
+
+    def _ensure_initiator_unmapped(self, host_id, lunpath, initiator_name):
+        """
+        Check if a LUN is mapped to a given initiator and remove the
+        mapping if it is. This does not destroy the igroup.
+        """
+        lunpath = '/vol/' + lunpath
+        igroup_name = self._find_igroup_for_initiator(host_id, initiator_name)
+        if not igroup_name:
+            return
+
+        mapping = self._get_lun_mappping(host_id, lunpath, igroup_name)
+        if mapping['mapped']:
+            self._unmap_initiator(host_id, lunpath, igroup_name)
+
+    def initialize_connection(self, volume, connector):
+        """
+        Do the LUN masking on the storage system so the initiator can access
+        the LUN on the target. Also return the iSCSI properties so the
+        initiator can find the LUN. This implementation does not call
+        _get_iscsi_properties() to get the properties because cannot store the
+        LUN number in the database. We only find out what the LUN number will
+        be during this method call so we construct the properties dictionary
+        ourselves.
+        """
+        initiator_name = connector['initiator']
+        lun_id = volume['provider_location']
+        if not lun_id:
+            msg = _("No LUN ID for volume %s")
+            raise exception.Error(msg % volume['name'])
+        lun = self._get_lun_details(lun_id)
+        if not lun:
+            msg = _('Failed to get LUN details for LUN ID %s')
+            raise exception.Error(msg % lun_id)
+        lun_num = self._ensure_initiator_mapped(lun.HostId, lun.LunPath,
+                                                initiator_name)
+
+        host = self._get_host_details(lun.HostId)
+        if not host:
+            msg = _('Failed to get host details for host ID %s')
+            raise exception.Error(msg % lun.HostId)
+
+        portal = self._get_target_portal_for_host(host.HostId,
+                                                  host.HostAddress)
+        if not portal:
+            msg = _('Failed to get target portal for filer: %s')
+            raise exception.Error(msg % host.HostName)
+
+        iqn = self._get_iqn_for_host(host.HostId)
+        if not iqn:
+            msg = _('Failed to get target IQN for filer: %s')
+            raise exception.Error(msg % host.HostName)
+
+        properties = {}
+        properties['target_discovered'] = False
+        (address, port) = (portal['address'], portal['port'])
+        properties['target_portal'] = '%s:%s' % (address, port)
+        properties['target_iqn'] = iqn
+        properties['target_lun'] = lun_num
+        properties['volume_id'] = volume['id']
+
+        auth = volume['provider_auth']
+        if auth:
+            (auth_method, auth_username, auth_secret) = auth.split()
+
+            properties['auth_method'] = auth_method
+            properties['auth_username'] = auth_username
+            properties['auth_password'] = auth_secret
+
+        return {
+            'driver_volume_type': 'iscsi',
+            'data': properties,
+        }
+
+    def terminate_connection(self, volume, connector):
+        """
+        Unmask the LUN on the storage system so the given intiator can no
+        longer access it.
+        """
+        initiator_name = connector['initiator']
+        lun_id = volume['provider_location']
+        if not lun_id:
+            msg = _('No LUN ID for volume %s')
+            raise exception.Error(msg % (volume['name']))
+        lun = self._get_lun_details(lun_id)
+        if not lun:
+            msg = _('Failed to get LUN details for LUN ID %s')
+            raise exception.Error(msg % (lun_id))
+        self._ensure_initiator_unmapped(lun.HostId, lun.LunPath,
+                                        initiator_name)
+
+    def create_volume_from_snapshot(self, volume, snapshot):
+        raise NotImplementedError()
+
+    def create_snapshot(self, snapshot):
+        raise NotImplementedError()
+
+    def delete_snapshot(self, snapshot):
+        raise NotImplementedError()
+
+    def check_for_export(self, context, volume_id):
+        raise NotImplementedError()
diff --git a/cinder/volume/nexenta/__init__.py b/cinder/volume/nexenta/__init__.py
new file mode 100644
index 000000000..3050df8f6
--- /dev/null
+++ b/cinder/volume/nexenta/__init__.py
@@ -0,0 +1,33 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+#
+# Copyright 2011 Nexenta Systems, Inc.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+:mod:`nexenta` -- Package contains Nexenta-specific modules
+=====================================================================
+
+.. automodule:: nexenta
+.. moduleauthor:: Yuriy Taraday <yorik.sar@gmail.com>
+"""
+
+
+class NexentaException(Exception):
+    MESSAGE = _('Nexenta SA returned the error')
+
+    def __init__(self, error=None):
+        super(NexentaException, self).__init__(self.message, error)
+
+    def __str__(self):
+        return '%s: %s' % self.args
diff --git a/cinder/volume/nexenta/jsonrpc.py b/cinder/volume/nexenta/jsonrpc.py
new file mode 100644
index 000000000..7a696f840
--- /dev/null
+++ b/cinder/volume/nexenta/jsonrpc.py
@@ -0,0 +1,84 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+#
+# Copyright 2011 Nexenta Systems, Inc.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+:mod:`nexenta.jsonrpc` -- Nexenta-specific JSON RPC client
+=====================================================================
+
+.. automodule:: nexenta.jsonrpc
+.. moduleauthor:: Yuriy Taraday <yorik.sar@gmail.com>
+"""
+
+import json
+import urllib2
+
+from cinder.volume import nexenta
+from cinder import log as logging
+
+LOG = logging.getLogger("cinder.volume.nexenta.jsonrpc")
+
+
+class NexentaJSONException(nexenta.NexentaException):
+    pass
+
+
+class NexentaJSONProxy(object):
+    def __init__(self, url, user, password, auto=False, obj=None, method=None):
+        self.url = url
+        self.user = user
+        self.password = password
+        self.auto = auto
+        self.obj = obj
+        self.method = method
+
+    def __getattr__(self, name):
+        if not self.obj:
+            obj, method = name, None
+        elif not self.method:
+            obj, method = self.obj, name
+        else:
+            obj, method = '%s.%s' % (self.obj, self.method), name
+        return NexentaJSONProxy(self.url, self.user, self.password, self.auto,
+                                obj, method)
+
+    def __call__(self, *args):
+        data = json.dumps({'object': self.obj,
+                           'method': self.method,
+                           'params': args})
+        auth = ('%s:%s' % (self.user, self.password)).encode('base64')[:-1]
+        headers = {'Content-Type': 'application/json',
+                   'Authorization': 'Basic %s' % (auth,)}
+        LOG.debug(_('Sending JSON data: %s'), data)
+        request = urllib2.Request(self.url, data, headers)
+        response_obj = urllib2.urlopen(request)
+        if response_obj.info().status == 'EOF in headers':
+            if self.auto and self.url.startswith('http://'):
+                LOG.info(_('Auto switching to HTTPS connection to %s'),
+                                                                      self.url)
+                self.url = 'https' + self.url[4:]
+                request = urllib2.Request(self.url, data, headers)
+                response_obj = urllib2.urlopen(request)
+            else:
+                LOG.error(_('No headers in server response'))
+                raise NexentaJSONException(_('Bad response from server'))
+
+        response_data = response_obj.read()
+        LOG.debug(_('Got response: %s'), response_data)
+        response = json.loads(response_data)
+        if response.get('error') is not None:
+            raise NexentaJSONException(response['error'].get('message', ''))
+        else:
+            return response.get('result')
diff --git a/cinder/volume/nexenta/volume.py b/cinder/volume/nexenta/volume.py
new file mode 100644
index 000000000..ad3b4e3c1
--- /dev/null
+++ b/cinder/volume/nexenta/volume.py
@@ -0,0 +1,282 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+#
+# Copyright 2011 Nexenta Systems, Inc.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+:mod:`nexenta.volume` -- Driver to store volumes on Nexenta Appliance
+=====================================================================
+
+.. automodule:: nexenta.volume
+.. moduleauthor:: Yuriy Taraday <yorik.sar@gmail.com>
+"""
+
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+from cinder.openstack.common import cfg
+from cinder.volume import driver
+from cinder.volume import nexenta
+from cinder.volume.nexenta import jsonrpc
+
+LOG = logging.getLogger("cinder.volume.nexenta.volume")
+FLAGS = flags.FLAGS
+
+nexenta_opts = [
+    cfg.StrOpt('nexenta_host',
+              default='',
+              help='IP address of Nexenta SA'),
+    cfg.IntOpt('nexenta_rest_port',
+               default=2000,
+               help='HTTP port to connect to Nexenta REST API server'),
+    cfg.StrOpt('nexenta_rest_protocol',
+               default='auto',
+               help='Use http or https for REST connection (default auto)'),
+    cfg.StrOpt('nexenta_user',
+               default='admin',
+               help='User name to connect to Nexenta SA'),
+    cfg.StrOpt('nexenta_password',
+               default='nexenta',
+               help='Password to connect to Nexenta SA'),
+    cfg.IntOpt('nexenta_iscsi_target_portal_port',
+               default=3260,
+               help='Nexenta target portal port'),
+    cfg.StrOpt('nexenta_volume',
+               default='cinder',
+               help='pool on SA that will hold all volumes'),
+    cfg.StrOpt('nexenta_target_prefix',
+               default='iqn.1986-03.com.sun:02:cinder-',
+               help='IQN prefix for iSCSI targets'),
+    cfg.StrOpt('nexenta_target_group_prefix',
+               default='cinder/',
+               help='prefix for iSCSI target groups on SA'),
+    cfg.StrOpt('nexenta_blocksize',
+               default='',
+               help='block size for volumes (blank=default,8KB)'),
+    cfg.BoolOpt('nexenta_sparse',
+                default=False,
+                help='flag to create sparse volumes'),
+]
+FLAGS.register_opts(nexenta_opts)
+
+
+class NexentaDriver(driver.ISCSIDriver):  # pylint: disable=R0921
+    """Executes volume driver commands on Nexenta Appliance."""
+
+    def __init__(self):
+        super(NexentaDriver, self).__init__()
+
+    def do_setup(self, context):
+        protocol = FLAGS.nexenta_rest_protocol
+        auto = protocol == 'auto'
+        if auto:
+            protocol = 'http'
+        self.nms = jsonrpc.NexentaJSONProxy(
+            '%s://%s:%s/rest/nms/' % (protocol, FLAGS.nexenta_host,
+                                      FLAGS.nexenta_rest_port),
+            FLAGS.nexenta_user, FLAGS.nexenta_password, auto=auto)
+
+    def check_for_setup_error(self):
+        """Verify that the volume for our zvols exists.
+
+        :raise: :py:exc:`LookupError`
+        """
+        if not self.nms.volume.object_exists(FLAGS.nexenta_volume):
+            raise LookupError(_("Volume %s does not exist in Nexenta SA"),
+                                    FLAGS.nexenta_volume)
+
+    @staticmethod
+    def _get_zvol_name(volume_name):
+        """Return zvol name that corresponds given volume name."""
+        return '%s/%s' % (FLAGS.nexenta_volume, volume_name)
+
+    @staticmethod
+    def _get_target_name(volume_name):
+        """Return iSCSI target name to access volume."""
+        return '%s%s' % (FLAGS.nexenta_target_prefix, volume_name)
+
+    @staticmethod
+    def _get_target_group_name(volume_name):
+        """Return Nexenta iSCSI target group name for volume."""
+        return '%s%s' % (FLAGS.nexenta_target_group_prefix, volume_name)
+
+    def create_volume(self, volume):
+        """Create a zvol on appliance.
+
+        :param volume: volume reference
+        """
+        self.nms.zvol.create(
+            self._get_zvol_name(volume['name']),
+            '%sG' % (volume['size'],),
+            FLAGS.nexenta_blocksize, FLAGS.nexenta_sparse)
+
+    def delete_volume(self, volume):
+        """Destroy a zvol on appliance.
+
+        :param volume: volume reference
+        """
+        try:
+            self.nms.zvol.destroy(self._get_zvol_name(volume['name']), '')
+        except nexenta.NexentaException as exc:
+            if "zvol has children" in exc.args[1]:
+                raise exception.VolumeIsBusy
+            else:
+                raise
+
+    def create_snapshot(self, snapshot):
+        """Create snapshot of existing zvol on appliance.
+
+        :param snapshot: shapshot reference
+        """
+        self.nms.zvol.create_snapshot(
+            self._get_zvol_name(snapshot['volume_name']),
+            snapshot['name'], '')
+
+    def create_volume_from_snapshot(self, volume, snapshot):
+        """Create new volume from other's snapshot on appliance.
+
+        :param volume: reference of volume to be created
+        :param snapshot: reference of source snapshot
+        """
+        self.nms.zvol.clone(
+            '%s@%s' % (self._get_zvol_name(snapshot['volume_name']),
+                       snapshot['name']),
+            self._get_zvol_name(volume['name']))
+
+    def delete_snapshot(self, snapshot):
+        """Delete volume's snapshot on appliance.
+
+        :param snapshot: shapshot reference
+        """
+        try:
+            self.nms.snapshot.destroy(
+                '%s@%s' % (self._get_zvol_name(snapshot['volume_name']),
+                           snapshot['name']),
+                '')
+        except nexenta.NexentaException as exc:
+            if "snapshot has dependent clones" in exc.args[1]:
+                raise exception.SnapshotIsBusy
+            else:
+                raise
+
+    def local_path(self, volume):
+        """Return local path to existing local volume.
+
+        We never have local volumes, so it raises NotImplementedError.
+
+        :raise: :py:exc:`NotImplementedError`
+        """
+        LOG.error(_("Call to local_path should not happen."
+                        " Verify that use_local_volumes flag is turned off."))
+        raise NotImplementedError
+
+    def _do_export(self, _ctx, volume, ensure=False):
+        """Do all steps to get zvol exported as LUN 0 at separate target.
+
+        :param volume: reference of volume to be exported
+        :param ensure: if True, ignore errors caused by already existing
+            resources
+        :return: iscsiadm-formatted provider location string
+        """
+        zvol_name = self._get_zvol_name(volume['name'])
+        target_name = self._get_target_name(volume['name'])
+        target_group_name = self._get_target_group_name(volume['name'])
+
+        try:
+            self.nms.iscsitarget.create_target({'target_name': target_name})
+        except nexenta.NexentaException as exc:
+            if not ensure or 'already configured' not in exc.args[1]:
+                raise
+            else:
+                LOG.info(_('Ignored target creation error "%s"'
+                                             ' while ensuring export'), exc)
+        try:
+            self.nms.stmf.create_targetgroup(target_group_name)
+        except nexenta.NexentaException as exc:
+            if not ensure or 'already exists' not in exc.args[1]:
+                raise
+            else:
+                LOG.info(_('Ignored target group creation error "%s"'
+                                             ' while ensuring export'), exc)
+        try:
+            self.nms.stmf.add_targetgroup_member(target_group_name,
+                                                 target_name)
+        except nexenta.NexentaException as exc:
+            if not ensure or 'already exists' not in exc.args[1]:
+                raise
+            else:
+                LOG.info(_('Ignored target group member addition error "%s"'
+                                             ' while ensuring export'), exc)
+        try:
+            self.nms.scsidisk.create_lu(zvol_name, {})
+        except nexenta.NexentaException as exc:
+            if not ensure or 'in use' not in exc.args[1]:
+                raise
+            else:
+                LOG.info(_('Ignored LU creation error "%s"'
+                                             ' while ensuring export'), exc)
+        try:
+            self.nms.scsidisk.add_lun_mapping_entry(zvol_name, {
+                'target_group': target_group_name,
+                'lun': '0'})
+        except nexenta.NexentaException as exc:
+            if not ensure or 'view entry exists' not in exc.args[1]:
+                raise
+            else:
+                LOG.info(_('Ignored LUN mapping entry addition error "%s"'
+                                             ' while ensuring export'), exc)
+        return '%s:%s,1 %s' % (FLAGS.nexenta_host,
+                               FLAGS.nexenta_iscsi_target_portal_port,
+                               target_name)
+
+    def create_export(self, _ctx, volume):
+        """Create new export for zvol.
+
+        :param volume: reference of volume to be exported
+        :return: iscsiadm-formatted provider location string
+        """
+        loc = self._do_export(_ctx, volume, ensure=False)
+        return {'provider_location': loc}
+
+    def ensure_export(self, _ctx, volume):
+        """Recreate parts of export if necessary.
+
+        :param volume: reference of volume to be exported
+        """
+        self._do_export(_ctx, volume, ensure=True)
+
+    def remove_export(self, _ctx, volume):
+        """Destroy all resources created to export zvol.
+
+        :param volume: reference of volume to be unexported
+        """
+        zvol_name = self._get_zvol_name(volume['name'])
+        target_name = self._get_target_name(volume['name'])
+        target_group_name = self._get_target_group_name(volume['name'])
+        self.nms.scsidisk.delete_lu(zvol_name)
+
+        try:
+            self.nms.stmf.destroy_targetgroup(target_group_name)
+        except nexenta.NexentaException as exc:
+            # We assume that target group is already gone
+            LOG.warn(_('Got error trying to destroy target group'
+                ' %(target_group)s, assuming it is already gone: %(exc)s'),
+                {'target_group': target_group_name, 'exc': exc})
+        try:
+            self.nms.iscsitarget.delete_target(target_name)
+        except nexenta.NexentaException as exc:
+            # We assume that target is gone as well
+            LOG.warn(_('Got error trying to delete target %(target)s,'
+                ' assuming it is already gone: %(exc)s'),
+                {'target': target_name, 'exc': exc})
diff --git a/cinder/volume/san.py b/cinder/volume/san.py
new file mode 100644
index 000000000..4edc81add
--- /dev/null
+++ b/cinder/volume/san.py
@@ -0,0 +1,897 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 Justin Santa Barbara
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+"""
+Drivers for san-stored volumes.
+
+The unique thing about a SAN is that we don't expect that we can run the volume
+controller on the SAN hardware.  We expect to access it over SSH or some API.
+"""
+
+import base64
+import httplib
+import json
+import os
+import paramiko
+import random
+import socket
+import string
+import uuid
+
+from lxml import etree
+
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+from cinder.openstack.common import cfg
+from cinder import utils
+import cinder.volume.driver
+
+
+LOG = logging.getLogger(__name__)
+
+san_opts = [
+    cfg.BoolOpt('san_thin_provision',
+                default='true',
+                help='Use thin provisioning for SAN volumes?'),
+    cfg.StrOpt('san_ip',
+               default='',
+               help='IP address of SAN controller'),
+    cfg.StrOpt('san_login',
+               default='admin',
+               help='Username for SAN controller'),
+    cfg.StrOpt('san_password',
+               default='',
+               help='Password for SAN controller'),
+    cfg.StrOpt('san_private_key',
+               default='',
+               help='Filename of private key to use for SSH authentication'),
+    cfg.StrOpt('san_clustername',
+               default='',
+               help='Cluster name to use for creating volumes'),
+    cfg.IntOpt('san_ssh_port',
+               default=22,
+               help='SSH port to use with SAN'),
+    cfg.BoolOpt('san_is_local',
+                default='false',
+                help='Execute commands locally instead of over SSH; '
+                     'use if the volume service is running on the SAN device'),
+    cfg.StrOpt('san_zfs_volume_base',
+               default='rpool/',
+               help='The ZFS path under which to create zvols for volumes.'),
+    ]
+
+FLAGS = flags.FLAGS
+FLAGS.register_opts(san_opts)
+
+
+class SanISCSIDriver(cinder.volume.driver.ISCSIDriver):
+    """Base class for SAN-style storage volumes
+
+    A SAN-style storage value is 'different' because the volume controller
+    probably won't run on it, so we need to access is over SSH or another
+    remote protocol.
+    """
+
+    def __init__(self):
+        super(SanISCSIDriver, self).__init__()
+        self.run_local = FLAGS.san_is_local
+
+    def _build_iscsi_target_name(self, volume):
+        return "%s%s" % (FLAGS.iscsi_target_prefix, volume['name'])
+
+    def _connect_to_ssh(self):
+        ssh = paramiko.SSHClient()
+        #TODO(justinsb): We need a better SSH key policy
+        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+        if FLAGS.san_password:
+            ssh.connect(FLAGS.san_ip,
+                        port=FLAGS.san_ssh_port,
+                        username=FLAGS.san_login,
+                        password=FLAGS.san_password)
+        elif FLAGS.san_private_key:
+            privatekeyfile = os.path.expanduser(FLAGS.san_private_key)
+            # It sucks that paramiko doesn't support DSA keys
+            privatekey = paramiko.RSAKey.from_private_key_file(privatekeyfile)
+            ssh.connect(FLAGS.san_ip,
+                        port=FLAGS.san_ssh_port,
+                        username=FLAGS.san_login,
+                        pkey=privatekey)
+        else:
+            raise exception.Error(_("Specify san_password or san_private_key"))
+        return ssh
+
+    def _execute(self, *cmd, **kwargs):
+        if self.run_local:
+            return utils.execute(*cmd, **kwargs)
+        else:
+            check_exit_code = kwargs.pop('check_exit_code', None)
+            command = ' '.join(*cmd)
+            return self._run_ssh(command, check_exit_code)
+
+    def _run_ssh(self, command, check_exit_code=True):
+        #TODO(justinsb): SSH connection caching (?)
+        ssh = self._connect_to_ssh()
+
+        #TODO(justinsb): Reintroduce the retry hack
+        ret = utils.ssh_execute(ssh, command, check_exit_code=check_exit_code)
+
+        ssh.close()
+
+        return ret
+
+    def ensure_export(self, context, volume):
+        """Synchronously recreates an export for a logical volume."""
+        pass
+
+    def create_export(self, context, volume):
+        """Exports the volume."""
+        pass
+
+    def remove_export(self, context, volume):
+        """Removes an export for a logical volume."""
+        pass
+
+    def check_for_setup_error(self):
+        """Returns an error if prerequisites aren't met."""
+        if not self.run_local:
+            if not (FLAGS.san_password or FLAGS.san_private_key):
+                raise exception.Error(_('Specify san_password or '
+                                        'san_private_key'))
+
+        # The san_ip must always be set, because we use it for the target
+        if not (FLAGS.san_ip):
+            raise exception.Error(_("san_ip must be set"))
+
+
+def _collect_lines(data):
+    """Split lines from data into an array, trimming them """
+    matches = []
+    for line in data.splitlines():
+        match = line.strip()
+        matches.append(match)
+
+    return matches
+
+
+def _get_prefixed_values(data, prefix):
+    """Collect lines which start with prefix; with trimming"""
+    matches = []
+    for line in data.splitlines():
+        line = line.strip()
+        if line.startswith(prefix):
+            match = line[len(prefix):]
+            match = match.strip()
+            matches.append(match)
+
+    return matches
+
+
+class SolarisISCSIDriver(SanISCSIDriver):
+    """Executes commands relating to Solaris-hosted ISCSI volumes.
+
+    Basic setup for a Solaris iSCSI server:
+
+    pkg install storage-server SUNWiscsit
+
+    svcadm enable stmf
+
+    svcadm enable -r svc:/network/iscsi/target:default
+
+    pfexec itadm create-tpg e1000g0 ${MYIP}
+
+    pfexec itadm create-target -t e1000g0
+
+
+    Then grant the user that will be logging on lots of permissions.
+    I'm not sure exactly which though:
+
+    zfs allow justinsb create,mount,destroy rpool
+
+    usermod -P'File System Management' justinsb
+
+    usermod -P'Primary Administrator' justinsb
+
+    Also make sure you can login using san_login & san_password/san_private_key
+    """
+
+    def _execute(self, *cmd, **kwargs):
+        new_cmd = ['pfexec']
+        new_cmd.extend(*cmd)
+        return super(SolarisISCSIDriver, self)._execute(self,
+                                                        *new_cmd,
+                                                        **kwargs)
+
+    def _view_exists(self, luid):
+        (out, _err) = self._execute('/usr/sbin/stmfadm',
+                                    'list-view', '-l', luid,
+                                    check_exit_code=False)
+        if "no views found" in out:
+            return False
+
+        if "View Entry:" in out:
+            return True
+
+        raise exception.Error("Cannot parse list-view output: %s" % (out))
+
+    def _get_target_groups(self):
+        """Gets list of target groups from host."""
+        (out, _err) = self._execute('/usr/sbin/stmfadm', 'list-tg')
+        matches = _get_prefixed_values(out, 'Target group: ')
+        LOG.debug("target_groups=%s" % matches)
+        return matches
+
+    def _target_group_exists(self, target_group_name):
+        return target_group_name not in self._get_target_groups()
+
+    def _get_target_group_members(self, target_group_name):
+        (out, _err) = self._execute('/usr/sbin/stmfadm',
+                                    'list-tg', '-v', target_group_name)
+        matches = _get_prefixed_values(out, 'Member: ')
+        LOG.debug("members of %s=%s" % (target_group_name, matches))
+        return matches
+
+    def _is_target_group_member(self, target_group_name, iscsi_target_name):
+        return iscsi_target_name in (
+            self._get_target_group_members(target_group_name))
+
+    def _get_iscsi_targets(self):
+        (out, _err) = self._execute('/usr/sbin/itadm', 'list-target')
+        matches = _collect_lines(out)
+
+        # Skip header
+        if len(matches) != 0:
+            assert 'TARGET NAME' in matches[0]
+            matches = matches[1:]
+
+        targets = []
+        for line in matches:
+            items = line.split()
+            assert len(items) == 3
+            targets.append(items[0])
+
+        LOG.debug("_get_iscsi_targets=%s" % (targets))
+        return targets
+
+    def _iscsi_target_exists(self, iscsi_target_name):
+        return iscsi_target_name in self._get_iscsi_targets()
+
+    def _build_zfs_poolname(self, volume):
+        zfs_poolname = '%s%s' % (FLAGS.san_zfs_volume_base, volume['name'])
+        return zfs_poolname
+
+    def create_volume(self, volume):
+        """Creates a volume."""
+        if int(volume['size']) == 0:
+            sizestr = '100M'
+        else:
+            sizestr = '%sG' % volume['size']
+
+        zfs_poolname = self._build_zfs_poolname(volume)
+
+        # Create a zfs volume
+        cmd = ['/usr/sbin/zfs', 'create']
+        if FLAGS.san_thin_provision:
+            cmd.append('-s')
+        cmd.extend(['-V', sizestr])
+        cmd.append(zfs_poolname)
+        self._execute(*cmd)
+
+    def _get_luid(self, volume):
+        zfs_poolname = self._build_zfs_poolname(volume)
+        zvol_name = '/dev/zvol/rdsk/%s' % zfs_poolname
+
+        (out, _err) = self._execute('/usr/sbin/sbdadm', 'list-lu')
+
+        lines = _collect_lines(out)
+
+        # Strip headers
+        if len(lines) >= 1:
+            if lines[0] == '':
+                lines = lines[1:]
+
+        if len(lines) >= 4:
+            assert 'Found' in lines[0]
+            assert '' == lines[1]
+            assert 'GUID' in lines[2]
+            assert '------------------' in lines[3]
+
+            lines = lines[4:]
+
+        for line in lines:
+            items = line.split()
+            assert len(items) == 3
+            if items[2] == zvol_name:
+                luid = items[0].strip()
+                return luid
+
+        raise Exception(_('LUID not found for %(zfs_poolname)s. '
+                          'Output=%(out)s') % locals())
+
+    def _is_lu_created(self, volume):
+        luid = self._get_luid(volume)
+        return luid
+
+    def delete_volume(self, volume):
+        """Deletes a volume."""
+        zfs_poolname = self._build_zfs_poolname(volume)
+        self._execute('/usr/sbin/zfs', 'destroy', zfs_poolname)
+
+    def local_path(self, volume):
+        # TODO(justinsb): Is this needed here?
+        escaped_group = FLAGS.volume_group.replace('-', '--')
+        escaped_name = volume['name'].replace('-', '--')
+        return "/dev/mapper/%s-%s" % (escaped_group, escaped_name)
+
+    def ensure_export(self, context, volume):
+        """Synchronously recreates an export for a logical volume."""
+        #TODO(justinsb): On bootup, this is called for every volume.
+        # It then runs ~5 SSH commands for each volume,
+        # most of which fetch the same info each time
+        # This makes initial start stupid-slow
+        return self._do_export(volume, force_create=False)
+
+    def create_export(self, context, volume):
+        return self._do_export(volume, force_create=True)
+
+    def _do_export(self, volume, force_create):
+        # Create a Logical Unit (LU) backed by the zfs volume
+        zfs_poolname = self._build_zfs_poolname(volume)
+
+        if force_create or not self._is_lu_created(volume):
+            zvol_name = '/dev/zvol/rdsk/%s' % zfs_poolname
+            self._execute('/usr/sbin/sbdadm', 'create-lu', zvol_name)
+
+        luid = self._get_luid(volume)
+        iscsi_name = self._build_iscsi_target_name(volume)
+        target_group_name = 'tg-%s' % volume['name']
+
+        # Create a iSCSI target, mapped to just this volume
+        if force_create or not self._target_group_exists(target_group_name):
+            self._execute('/usr/sbin/stmfadm', 'create-tg', target_group_name)
+
+        # Yes, we add the initiatior before we create it!
+        # Otherwise, it complains that the target is already active
+        if force_create or not self._is_target_group_member(target_group_name,
+                                                            iscsi_name):
+            self._execute('/usr/sbin/stmfadm',
+                          'add-tg-member', '-g', target_group_name, iscsi_name)
+
+        if force_create or not self._iscsi_target_exists(iscsi_name):
+            self._execute('/usr/sbin/itadm', 'create-target', '-n', iscsi_name)
+
+        if force_create or not self._view_exists(luid):
+            self._execute('/usr/sbin/stmfadm',
+                          'add-view', '-t', target_group_name, luid)
+
+        #TODO(justinsb): Is this always 1? Does it matter?
+        iscsi_portal_interface = '1'
+        iscsi_portal = FLAGS.san_ip + ":3260," + iscsi_portal_interface
+
+        db_update = {}
+        db_update['provider_location'] = ("%s %s" %
+                                          (iscsi_portal,
+                                           iscsi_name))
+
+        return db_update
+
+    def remove_export(self, context, volume):
+        """Removes an export for a logical volume."""
+
+        # This is the reverse of _do_export
+        luid = self._get_luid(volume)
+        iscsi_name = self._build_iscsi_target_name(volume)
+        target_group_name = 'tg-%s' % volume['name']
+
+        if self._view_exists(luid):
+            self._execute('/usr/sbin/stmfadm', 'remove-view', '-l', luid, '-a')
+
+        if self._iscsi_target_exists(iscsi_name):
+            self._execute('/usr/sbin/stmfadm', 'offline-target', iscsi_name)
+            self._execute('/usr/sbin/itadm', 'delete-target', iscsi_name)
+
+        # We don't delete the tg-member; we delete the whole tg!
+
+        if self._target_group_exists(target_group_name):
+            self._execute('/usr/sbin/stmfadm', 'delete-tg', target_group_name)
+
+        if self._is_lu_created(volume):
+            self._execute('/usr/sbin/sbdadm', 'delete-lu', luid)
+
+
+class HpSanISCSIDriver(SanISCSIDriver):
+    """Executes commands relating to HP/Lefthand SAN ISCSI volumes.
+
+    We use the CLIQ interface, over SSH.
+
+    Rough overview of CLIQ commands used:
+
+    :createVolume:    (creates the volume)
+
+    :getVolumeInfo:    (to discover the IQN etc)
+
+    :getClusterInfo:    (to discover the iSCSI target IP address)
+
+    :assignVolumeChap:    (exports it with CHAP security)
+
+    The 'trick' here is that the HP SAN enforces security by default, so
+    normally a volume mount would need both to configure the SAN in the volume
+    layer and do the mount on the compute layer.  Multi-layer operations are
+    not catered for at the moment in the cinder architecture, so instead we
+    share the volume using CHAP at volume creation time.  Then the mount need
+    only use those CHAP credentials, so can take place exclusively in the
+    compute layer.
+    """
+
+    def _cliq_run(self, verb, cliq_args):
+        """Runs a CLIQ command over SSH, without doing any result parsing"""
+        cliq_arg_strings = []
+        for k, v in cliq_args.items():
+            cliq_arg_strings.append(" %s=%s" % (k, v))
+        cmd = verb + ''.join(cliq_arg_strings)
+
+        return self._run_ssh(cmd)
+
+    def _cliq_run_xml(self, verb, cliq_args, check_cliq_result=True):
+        """Runs a CLIQ command over SSH, parsing and checking the output"""
+        cliq_args['output'] = 'XML'
+        (out, _err) = self._cliq_run(verb, cliq_args)
+
+        LOG.debug(_("CLIQ command returned %s"), out)
+
+        result_xml = etree.fromstring(out)
+        if check_cliq_result:
+            response_node = result_xml.find("response")
+            if response_node is None:
+                msg = (_("Malformed response to CLIQ command "
+                         "%(verb)s %(cliq_args)s. Result=%(out)s") %
+                       locals())
+                raise exception.Error(msg)
+
+            result_code = response_node.attrib.get("result")
+
+            if result_code != "0":
+                msg = (_("Error running CLIQ command %(verb)s %(cliq_args)s. "
+                         " Result=%(out)s") %
+                       locals())
+                raise exception.Error(msg)
+
+        return result_xml
+
+    def _cliq_get_cluster_info(self, cluster_name):
+        """Queries for info about the cluster (including IP)"""
+        cliq_args = {}
+        cliq_args['clusterName'] = cluster_name
+        cliq_args['searchDepth'] = '1'
+        cliq_args['verbose'] = '0'
+
+        result_xml = self._cliq_run_xml("getClusterInfo", cliq_args)
+
+        return result_xml
+
+    def _cliq_get_cluster_vip(self, cluster_name):
+        """Gets the IP on which a cluster shares iSCSI volumes"""
+        cluster_xml = self._cliq_get_cluster_info(cluster_name)
+
+        vips = []
+        for vip in cluster_xml.findall("response/cluster/vip"):
+            vips.append(vip.attrib.get('ipAddress'))
+
+        if len(vips) == 1:
+            return vips[0]
+
+        _xml = etree.tostring(cluster_xml)
+        msg = (_("Unexpected number of virtual ips for cluster "
+                 " %(cluster_name)s. Result=%(_xml)s") %
+               locals())
+        raise exception.Error(msg)
+
+    def _cliq_get_volume_info(self, volume_name):
+        """Gets the volume info, including IQN"""
+        cliq_args = {}
+        cliq_args['volumeName'] = volume_name
+        result_xml = self._cliq_run_xml("getVolumeInfo", cliq_args)
+
+        # Result looks like this:
+        #<gauche version="1.0">
+        #  <response description="Operation succeeded." name="CliqSuccess"
+        #            processingTime="87" result="0">
+        #    <volume autogrowPages="4" availability="online" blockSize="1024"
+        #       bytesWritten="0" checkSum="false" clusterName="Cluster01"
+        #       created="2011-02-08T19:56:53Z" deleting="false" description=""
+        #       groupName="Group01" initialQuota="536870912" isPrimary="true"
+        #       iscsiIqn="iqn.2003-10.com.lefthandnetworks:group01:25366:vol-b"
+        #       maxSize="6865387257856" md5="9fa5c8b2cca54b2948a63d833097e1ca"
+        #       minReplication="1" name="vol-b" parity="0" replication="2"
+        #       reserveQuota="536870912" scratchQuota="4194304"
+        #       serialNumber="9fa5c8b2cca54b2948a63d833097e1ca0000000000006316"
+        #       size="1073741824" stridePages="32" thinProvision="true">
+        #      <status description="OK" value="2"/>
+        #      <permission access="rw"
+        #            authGroup="api-34281B815713B78-(trimmed)51ADD4B7030853AA7"
+        #            chapName="chapusername" chapRequired="true" id="25369"
+        #            initiatorSecret="" iqn="" iscsiEnabled="true"
+        #            loadBalance="true" targetSecret="supersecret"/>
+        #    </volume>
+        #  </response>
+        #</gauche>
+
+        # Flatten the nodes into a dictionary; use prefixes to avoid collisions
+        volume_attributes = {}
+
+        volume_node = result_xml.find("response/volume")
+        for k, v in volume_node.attrib.items():
+            volume_attributes["volume." + k] = v
+
+        status_node = volume_node.find("status")
+        if not status_node is None:
+            for k, v in status_node.attrib.items():
+                volume_attributes["status." + k] = v
+
+        # We only consider the first permission node
+        permission_node = volume_node.find("permission")
+        if not permission_node is None:
+            for k, v in status_node.attrib.items():
+                volume_attributes["permission." + k] = v
+
+        LOG.debug(_("Volume info: %(volume_name)s => %(volume_attributes)s") %
+                  locals())
+        return volume_attributes
+
+    def create_volume(self, volume):
+        """Creates a volume."""
+        cliq_args = {}
+        cliq_args['clusterName'] = FLAGS.san_clustername
+        #TODO(justinsb): Should we default to inheriting thinProvision?
+        cliq_args['thinProvision'] = '1' if FLAGS.san_thin_provision else '0'
+        cliq_args['volumeName'] = volume['name']
+        if int(volume['size']) == 0:
+            cliq_args['size'] = '100MB'
+        else:
+            cliq_args['size'] = '%sGB' % volume['size']
+
+        self._cliq_run_xml("createVolume", cliq_args)
+
+        volume_info = self._cliq_get_volume_info(volume['name'])
+        cluster_name = volume_info['volume.clusterName']
+        iscsi_iqn = volume_info['volume.iscsiIqn']
+
+        #TODO(justinsb): Is this always 1? Does it matter?
+        cluster_interface = '1'
+
+        cluster_vip = self._cliq_get_cluster_vip(cluster_name)
+        iscsi_portal = cluster_vip + ":3260," + cluster_interface
+
+        model_update = {}
+        model_update['provider_location'] = ("%s %s" %
+                                             (iscsi_portal,
+                                              iscsi_iqn))
+
+        return model_update
+
+    def delete_volume(self, volume):
+        """Deletes a volume."""
+        cliq_args = {}
+        cliq_args['volumeName'] = volume['name']
+        cliq_args['prompt'] = 'false'  # Don't confirm
+
+        self._cliq_run_xml("deleteVolume", cliq_args)
+
+    def local_path(self, volume):
+        # TODO(justinsb): Is this needed here?
+        raise exception.Error(_("local_path not supported"))
+
+    def ensure_export(self, context, volume):
+        """Synchronously recreates an export for a logical volume."""
+        return self._do_export(context, volume, force_create=False)
+
+    def create_export(self, context, volume):
+        return self._do_export(context, volume, force_create=True)
+
+    def _do_export(self, context, volume, force_create):
+        """Supports ensure_export and create_export"""
+        volume_info = self._cliq_get_volume_info(volume['name'])
+
+        is_shared = 'permission.authGroup' in volume_info
+
+        model_update = {}
+
+        should_export = False
+
+        if force_create or not is_shared:
+            should_export = True
+            # Check that we have a project_id
+            project_id = volume['project_id']
+            if not project_id:
+                project_id = context.project_id
+
+            if project_id:
+                #TODO(justinsb): Use a real per-project password here
+                chap_username = 'proj_' + project_id
+                # HP/Lefthand requires that the password be >= 12 characters
+                chap_password = 'project_secret_' + project_id
+            else:
+                msg = (_("Could not determine project for volume %s, "
+                         "can't export") %
+                         (volume['name']))
+                if force_create:
+                    raise exception.Error(msg)
+                else:
+                    LOG.warn(msg)
+                    should_export = False
+
+        if should_export:
+            cliq_args = {}
+            cliq_args['volumeName'] = volume['name']
+            cliq_args['chapName'] = chap_username
+            cliq_args['targetSecret'] = chap_password
+
+            self._cliq_run_xml("assignVolumeChap", cliq_args)
+
+            model_update['provider_auth'] = ("CHAP %s %s" %
+                                             (chap_username, chap_password))
+
+        return model_update
+
+    def remove_export(self, context, volume):
+        """Removes an export for a logical volume."""
+        cliq_args = {}
+        cliq_args['volumeName'] = volume['name']
+
+        self._cliq_run_xml("unassignVolume", cliq_args)
+
+
+class SolidFireSanISCSIDriver(SanISCSIDriver):
+
+    def _issue_api_request(self, method_name, params):
+        """All API requests to SolidFire device go through this method
+
+        Simple json-rpc web based API calls.
+        each call takes a set of paramaters (dict)
+        and returns results in a dict as well.
+        """
+
+        host = FLAGS.san_ip
+        # For now 443 is the only port our server accepts requests on
+        port = 443
+
+        # NOTE(john-griffith): Probably don't need this, but the idea is
+        # we provide a request_id so we can correlate
+        # responses with requests
+        request_id = int(uuid.uuid4())  # just generate a random number
+
+        cluster_admin = FLAGS.san_login
+        cluster_password = FLAGS.san_password
+
+        command = {'method': method_name,
+                   'id': request_id}
+
+        if params is not None:
+            command['params'] = params
+
+        payload = json.dumps(command, ensure_ascii=False)
+        payload.encode('utf-8')
+        # we use json-rpc, webserver needs to see json-rpc in header
+        header = {'Content-Type': 'application/json-rpc; charset=utf-8'}
+
+        if cluster_password is not None:
+            # base64.encodestring includes a newline character
+            # in the result, make sure we strip it off
+            auth_key = base64.encodestring('%s:%s' % (cluster_admin,
+                                           cluster_password))[:-1]
+            header['Authorization'] = 'Basic %s' % auth_key
+
+        LOG.debug(_("Payload for SolidFire API call: %s"), payload)
+        connection = httplib.HTTPSConnection(host, port)
+        connection.request('POST', '/json-rpc/1.0', payload, header)
+        response = connection.getresponse()
+        data = {}
+
+        if response.status != 200:
+            connection.close()
+            raise exception.SolidFireAPIException(status=response.status)
+
+        else:
+            data = response.read()
+            try:
+                data = json.loads(data)
+
+            except (TypeError, ValueError), exc:
+                connection.close()
+                msg = _("Call to json.loads() raised an exception: %s") % exc
+                raise exception.SfJsonEncodeFailure(msg)
+
+            connection.close()
+
+        LOG.debug(_("Results of SolidFire API call: %s"), data)
+        return data
+
+    def _get_volumes_by_sfaccount(self, account_id):
+        params = {'accountID': account_id}
+        data = self._issue_api_request('ListVolumesForAccount', params)
+        if 'result' in data:
+            return data['result']['volumes']
+
+    def _get_sfaccount_by_name(self, sf_account_name):
+        sfaccount = None
+        params = {'username': sf_account_name}
+        data = self._issue_api_request('GetAccountByName', params)
+        if 'result' in data and 'account' in data['result']:
+            LOG.debug(_('Found solidfire account: %s'), sf_account_name)
+            sfaccount = data['result']['account']
+        return sfaccount
+
+    def _create_sfaccount(self, cinder_project_id):
+        """Create account on SolidFire device if it doesn't already exist.
+
+        We're first going to check if the account already exits, if it does
+        just return it.  If not, then create it.
+        """
+
+        sf_account_name = socket.gethostname() + '-' + cinder_project_id
+        sfaccount = self._get_sfaccount_by_name(sf_account_name)
+        if sfaccount is None:
+            LOG.debug(_('solidfire account: %s does not exist, create it...'),
+                      sf_account_name)
+            chap_secret = self._generate_random_string(12)
+            params = {'username': sf_account_name,
+                      'initiatorSecret': chap_secret,
+                      'targetSecret': chap_secret,
+                      'attributes': {}}
+            data = self._issue_api_request('AddAccount', params)
+            if 'result' in data:
+                sfaccount = self._get_sfaccount_by_name(sf_account_name)
+
+        return sfaccount
+
+    def _get_cluster_info(self):
+        params = {}
+        data = self._issue_api_request('GetClusterInfo', params)
+        if 'result' not in data:
+            raise exception.SolidFireAPIDataException(data=data)
+
+        return data['result']
+
+    def _do_export(self, volume):
+        """Gets the associated account, retrieves CHAP info and updates."""
+
+        sfaccount_name = '%s-%s' % (socket.gethostname(), volume['project_id'])
+        sfaccount = self._get_sfaccount_by_name(sfaccount_name)
+
+        model_update = {}
+        model_update['provider_auth'] = ('CHAP %s %s'
+                % (sfaccount['username'], sfaccount['targetSecret']))
+
+        return model_update
+
+    def _generate_random_string(self, length):
+        """Generates random_string to use for CHAP password."""
+
+        char_set = string.ascii_uppercase + string.digits
+        return ''.join(random.sample(char_set, length))
+
+    def create_volume(self, volume):
+        """Create volume on SolidFire device.
+
+        The account is where CHAP settings are derived from, volume is
+        created and exported.  Note that the new volume is immediately ready
+        for use.
+
+        One caveat here is that an existing user account must be specified
+        in the API call to create a new volume.  We use a set algorithm to
+        determine account info based on passed in cinder volume object.  First
+        we check to see if the account already exists (and use it), or if it
+        does not already exist, we'll go ahead and create it.
+
+        For now, we're just using very basic settings, QOS is
+        turned off, 512 byte emulation is off etc.  Will be
+        looking at extensions for these things later, or
+        this module can be hacked to suit needs.
+        """
+
+        LOG.debug(_("Enter SolidFire create_volume..."))
+        GB = 1048576 * 1024
+        slice_count = 1
+        enable_emulation = False
+        attributes = {}
+
+        cluster_info = self._get_cluster_info()
+        iscsi_portal = cluster_info['clusterInfo']['svip'] + ':3260'
+        sfaccount = self._create_sfaccount(volume['project_id'])
+        account_id = sfaccount['accountID']
+        account_name = sfaccount['username']
+        chap_secret = sfaccount['targetSecret']
+
+        params = {'name': volume['name'],
+                  'accountID': account_id,
+                  'sliceCount': slice_count,
+                  'totalSize': volume['size'] * GB,
+                  'enable512e': enable_emulation,
+                  'attributes': attributes}
+
+        data = self._issue_api_request('CreateVolume', params)
+
+        if 'result' not in data or 'volumeID' not in data['result']:
+            raise exception.SolidFireAPIDataException(data=data)
+
+        volume_id = data['result']['volumeID']
+
+        volume_list = self._get_volumes_by_sfaccount(account_id)
+        iqn = None
+        for v in volume_list:
+            if v['volumeID'] == volume_id:
+                iqn = 'iqn.2010-01.com.solidfire:' + v['iqn']
+                break
+
+        model_update = {}
+
+        # NOTE(john-griffith): SF volumes are always at lun 0
+        model_update['provider_location'] = ('%s %s %s'
+                % (iscsi_portal, iqn, 0))
+        model_update['provider_auth'] = ('CHAP %s %s'
+                % (account_name, chap_secret))
+
+        LOG.debug(_("Leaving SolidFire create_volume"))
+        return model_update
+
+    def delete_volume(self, volume):
+        """Delete SolidFire Volume from device.
+
+        SolidFire allows multipe volumes with same name,
+        volumeID is what's guaranteed unique.
+
+        What we'll do here is check volumes based on account. this
+        should work because cinder will increment its volume_id
+        so we should always get the correct volume. This assumes
+        that cinder does not assign duplicate ID's.
+        """
+
+        LOG.debug(_("Enter SolidFire delete_volume..."))
+        sf_account_name = socket.gethostname() + '-' + volume['project_id']
+        sfaccount = self._get_sfaccount_by_name(sf_account_name)
+        if sfaccount is None:
+            raise exception.SfAccountNotFound(account_name=sf_account_name)
+
+        params = {'accountID': sfaccount['accountID']}
+        data = self._issue_api_request('ListVolumesForAccount', params)
+        if 'result' not in data:
+            raise exception.SolidFireAPIDataException(data=data)
+
+        found_count = 0
+        volid = -1
+        for v in data['result']['volumes']:
+            if v['name'] == volume['name']:
+                found_count += 1
+                volid = v['volumeID']
+
+        if found_count != 1:
+            LOG.debug(_("Deleting volumeID: %s"), volid)
+            raise exception.DuplicateSfVolumeNames(vol_name=volume['name'])
+
+        params = {'volumeID': volid}
+        data = self._issue_api_request('DeleteVolume', params)
+        if 'result' not in data:
+            raise exception.SolidFireAPIDataException(data=data)
+
+        LOG.debug(_("Leaving SolidFire delete_volume"))
+
+    def ensure_export(self, context, volume):
+        LOG.debug(_("Executing SolidFire ensure_export..."))
+        return self._do_export(volume)
+
+    def create_export(self, context, volume):
+        LOG.debug(_("Executing SolidFire create_export..."))
+        return self._do_export(volume)
diff --git a/cinder/volume/volume_types.py b/cinder/volume/volume_types.py
new file mode 100644
index 000000000..5df9e6e60
--- /dev/null
+++ b/cinder/volume/volume_types.py
@@ -0,0 +1,125 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2011 Zadara Storage Inc.
+# Copyright (c) 2011 OpenStack LLC.
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# Copyright (c) 2010 Citrix Systems, Inc.
+# Copyright 2011 Ken Pepple
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Built-in volume type properties."""
+
+from cinder import context
+from cinder import db
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+
+FLAGS = flags.FLAGS
+LOG = logging.getLogger(__name__)
+
+
+def create(context, name, extra_specs={}):
+    """Creates volume types."""
+    try:
+        db.volume_type_create(context,
+                              dict(name=name,
+                                   extra_specs=extra_specs))
+    except exception.DBError, e:
+        LOG.exception(_('DB error: %s') % e)
+        raise exception.VolumeTypeCreateFailed(name=name,
+                                               extra_specs=extra_specs)
+
+
+def destroy(context, name):
+    """Marks volume types as deleted."""
+    if name is None:
+        msg = _("name cannot be None")
+        raise exception.InvalidVolumeType(reason=msg)
+    else:
+        db.volume_type_destroy(context, name)
+
+
+def get_all_types(context, inactive=0, search_opts={}):
+    """Get all non-deleted volume_types.
+
+    Pass true as argument if you want deleted volume types returned also.
+
+    """
+    vol_types = db.volume_type_get_all(context, inactive)
+
+    if search_opts:
+        LOG.debug(_("Searching by: %s") % str(search_opts))
+
+        def _check_extra_specs_match(vol_type, searchdict):
+            for k, v in searchdict.iteritems():
+                if (k not in vol_type['extra_specs'].keys()
+                    or vol_type['extra_specs'][k] != v):
+                    return False
+            return True
+
+        # search_option to filter_name mapping.
+        filter_mapping = {'extra_specs': _check_extra_specs_match}
+
+        result = {}
+        for type_name, type_args in vol_types.iteritems():
+            # go over all filters in the list
+            for opt, values in search_opts.iteritems():
+                try:
+                    filter_func = filter_mapping[opt]
+                except KeyError:
+                    # no such filter - ignore it, go to next filter
+                    continue
+                else:
+                    if filter_func(type_args, values):
+                        result[type_name] = type_args
+                        break
+        vol_types = result
+    return vol_types
+
+
+def get_volume_type(ctxt, id):
+    """Retrieves single volume type by id."""
+    if id is None:
+        msg = _("id cannot be None")
+        raise exception.InvalidVolumeType(reason=msg)
+
+    if ctxt is None:
+        ctxt = context.get_admin_context()
+
+    return db.volume_type_get(ctxt, id)
+
+
+def get_volume_type_by_name(context, name):
+    """Retrieves single volume type by name."""
+    if name is None:
+        msg = _("name cannot be None")
+        raise exception.InvalidVolumeType(reason=msg)
+
+    return db.volume_type_get_by_name(context, name)
+
+
+def is_key_value_present(volume_type_id, key, value, volume_type=None):
+    if volume_type_id is None:
+        return False
+
+    if volume_type is None:
+        volume_type = get_volume_type(context.get_admin_context(),
+                                      volume_type_id)
+    if (volume_type.get('extra_specs') is None or
+        volume_type['extra_specs'].get(key) != value):
+        return False
+    else:
+        return True
diff --git a/cinder/volume/xensm.py b/cinder/volume/xensm.py
new file mode 100644
index 000000000..ad21afe0e
--- /dev/null
+++ b/cinder/volume/xensm.py
@@ -0,0 +1,237 @@
+# Copyright (c) 2011 Citrix Systems, Inc.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+from cinder import utils
+from cinder.virt.xenapi import connection as xenapi_conn
+from cinder.virt.xenapi import volumeops
+import cinder.volume.driver
+
+LOG = logging.getLogger(__name__)
+FLAGS = flags.FLAGS
+
+
+class XenSMDriver(cinder.volume.driver.VolumeDriver):
+
+    def _convert_config_params(self, conf_str):
+        params = dict([item.split("=") for item in conf_str.split()])
+        return params
+
+    def _get_introduce_sr_keys(self, params):
+        if 'name_label' in params:
+            del params['name_label']
+        keys = params.keys()
+        keys.append('sr_type')
+        return keys
+
+    def _create_storage_repo(self, context, backend_ref):
+        """Either creates or introduces SR on host
+        depending on whether it exists in xapi db."""
+        params = self._convert_config_params(backend_ref['config_params'])
+        if 'name_label' in params:
+            label = params['name_label']
+            del params['name_label']
+        else:
+            label = 'SR-' + str(backend_ref['id'])
+
+        params['sr_type'] = backend_ref['sr_type']
+
+        if backend_ref['sr_uuid'] is None:
+            # run the sr create command
+            try:
+                LOG.debug(_('SR name = %s') % label)
+                LOG.debug(_('Params: %s') % str(params))
+                sr_uuid = self._volumeops.create_sr(label, params)
+            # update sr_uuid and created in db
+            except Exception as ex:
+                LOG.debug(_("Failed to create sr %s...continuing") %
+                          str(backend_ref['id']))
+                raise exception.Error(_('Create failed'))
+
+            LOG.debug(_('SR UUID of new SR is: %s') % sr_uuid)
+            try:
+                self.db.sm_backend_conf_update(context,
+                                               backend_ref['id'],
+                                               dict(sr_uuid=sr_uuid))
+            except Exception as ex:
+                LOG.exception(ex)
+                raise exception.Error(_("Failed to update db"))
+
+        else:
+            # sr introduce, if not already done
+            try:
+                self._volumeops.introduce_sr(backend_ref['sr_uuid'], label,
+                                              params)
+            except Exception as ex:
+                LOG.exception(ex)
+                LOG.debug(_("Failed to introduce sr %s...continuing")
+                          % str(backend_ref['id']))
+
+    def _create_storage_repos(self, context):
+        """Create/Introduce storage repositories at start."""
+        backends = self.db.sm_backend_conf_get_all(context)
+        for backend in backends:
+            try:
+                self._create_storage_repo(context, backend)
+            except Exception as ex:
+                LOG.exception(ex)
+                raise exception.Error(_('Failed to reach backend %d')
+                                      % backend['id'])
+
+    def __init__(self, *args, **kwargs):
+        """Connect to the hypervisor."""
+
+        # This driver leverages Xen storage manager, and hence requires
+        # hypervisor to be Xen
+        if FLAGS.connection_type != 'xenapi':
+            raise exception.Error(_('XenSMDriver requires xenapi connection'))
+
+        url = FLAGS.xenapi_connection_url
+        username = FLAGS.xenapi_connection_username
+        password = FLAGS.xenapi_connection_password
+        try:
+            session = xenapi_conn.XenAPISession(url, username, password)
+            self._volumeops = volumeops.VolumeOps(session)
+        except Exception as ex:
+            LOG.exception(ex)
+            raise exception.Error(_("Failed to initiate session"))
+
+        super(XenSMDriver, self).__init__(execute=utils.execute,
+                                          sync_exec=utils.execute,
+                                          *args, **kwargs)
+
+    def do_setup(self, ctxt):
+        """Setup includes creating or introducing storage repos
+           existing in the database and destroying deleted ones."""
+
+        # TODO(renukaapte) purge storage repos
+        self.ctxt = ctxt
+        self._create_storage_repos(ctxt)
+
+    def create_volume(self, volume):
+        """Creates a logical volume. Can optionally return a Dictionary of
+        changes to the volume object to be persisted."""
+
+        # For now the scheduling logic will be to try to fit the volume in
+        # the first available backend.
+        # TODO(renukaapte) better scheduling once APIs are in place
+        sm_vol_rec = None
+        backends = self.db.sm_backend_conf_get_all(self.ctxt)
+        for backend in backends:
+            # Ensure that storage repo exists, if not create.
+            # This needs to be done because if cinder compute and
+            # volume are both running on this host, then, as a
+            # part of detach_volume, compute could potentially forget SR
+            self._create_storage_repo(self.ctxt, backend)
+            sm_vol_rec = self._volumeops.create_volume_for_sm(volume,
+                                                  backend['sr_uuid'])
+            if sm_vol_rec:
+                LOG.debug(_('Volume will be created in backend - %d')
+                          % backend['id'])
+                break
+
+        if sm_vol_rec:
+            # Update db
+            sm_vol_rec['id'] = volume['id']
+            sm_vol_rec['backend_id'] = backend['id']
+            try:
+                self.db.sm_volume_create(self.ctxt, sm_vol_rec)
+            except Exception as ex:
+                LOG.exception(ex)
+                raise exception.Error(_("Failed to update volume in db"))
+
+        else:
+            raise exception.Error(_('Unable to create volume'))
+
+    def delete_volume(self, volume):
+
+        vol_rec = self.db.sm_volume_get(self.ctxt, volume['id'])
+
+        try:
+            # If compute runs on this node, detach could have disconnected SR
+            backend_ref = self.db.sm_backend_conf_get(self.ctxt,
+                                                      vol_rec['backend_id'])
+            self._create_storage_repo(self.ctxt, backend_ref)
+            self._volumeops.delete_volume_for_sm(vol_rec['vdi_uuid'])
+        except Exception as ex:
+            LOG.exception(ex)
+            raise exception.Error(_("Failed to delete vdi"))
+
+        try:
+            self.db.sm_volume_delete(self.ctxt, volume['id'])
+        except Exception as ex:
+            LOG.exception(ex)
+            raise exception.Error(_("Failed to delete volume in db"))
+
+    def local_path(self, volume):
+        return str(volume['id'])
+
+    def undiscover_volume(self, volume):
+        """Undiscover volume on a remote host."""
+        pass
+
+    def discover_volume(self, context, volume):
+        return str(volume['id'])
+
+    def check_for_setup_error(self):
+        pass
+
+    def create_export(self, context, volume):
+        """Exports the volume."""
+        pass
+
+    def remove_export(self, context, volume):
+        """Removes an export for a logical volume."""
+        pass
+
+    def ensure_export(self, context, volume):
+        """Safely, synchronously recreates an export for a logical volume."""
+        pass
+
+    def initialize_connection(self, volume, connector):
+        try:
+            xensm_properties = dict(self.db.sm_volume_get(self.ctxt,
+                                                          volume['id']))
+        except Exception as ex:
+            LOG.exception(ex)
+            raise exception.Error(_("Failed to find volume in db"))
+
+        # Keep the volume id key consistent with what ISCSI driver calls it
+        xensm_properties['volume_id'] = xensm_properties['id']
+        del xensm_properties['id']
+
+        try:
+            backend_conf = self.db.sm_backend_conf_get(self.ctxt,
+                                  xensm_properties['backend_id'])
+        except Exception as ex:
+            LOG.exception(ex)
+            raise exception.Error(_("Failed to find backend in db"))
+
+        params = self._convert_config_params(backend_conf['config_params'])
+
+        xensm_properties['flavor_id'] = backend_conf['flavor_id']
+        xensm_properties['sr_uuid'] = backend_conf['sr_uuid']
+        xensm_properties['sr_type'] = backend_conf['sr_type']
+        xensm_properties.update(params)
+        _introduce_sr_keys = self._get_introduce_sr_keys(params)
+        xensm_properties['introduce_sr_keys'] = _introduce_sr_keys
+        return {
+            'driver_volume_type': 'xensm',
+            'data': xensm_properties
+        }
+
+    def terminate_connection(self, volume, connector):
+        pass
diff --git a/cinder/wsgi.py b/cinder/wsgi.py
new file mode 100644
index 000000000..0bf63f9ee
--- /dev/null
+++ b/cinder/wsgi.py
@@ -0,0 +1,374 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# Copyright 2010 OpenStack LLC.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Utility methods for working with WSGI servers."""
+
+import sys
+
+import eventlet
+import eventlet.wsgi
+import greenlet
+from paste import deploy
+import routes.middleware
+import webob.dec
+import webob.exc
+
+from cinder import exception
+from cinder import flags
+from cinder import log as logging
+from cinder import utils
+
+
+FLAGS = flags.FLAGS
+LOG = logging.getLogger(__name__)
+
+
+class Server(object):
+    """Server class to manage a WSGI server, serving a WSGI application."""
+
+    default_pool_size = 1000
+
+    def __init__(self, name, app, host=None, port=None, pool_size=None,
+                       protocol=eventlet.wsgi.HttpProtocol):
+        """Initialize, but do not start, a WSGI server.
+
+        :param name: Pretty name for logging.
+        :param app: The WSGI application to serve.
+        :param host: IP address to serve the application.
+        :param port: Port number to server the application.
+        :param pool_size: Maximum number of eventlets to spawn concurrently.
+        :returns: None
+
+        """
+        self.name = name
+        self.app = app
+        self.host = host or "0.0.0.0"
+        self.port = port or 0
+        self._server = None
+        self._socket = None
+        self._protocol = protocol
+        self._pool = eventlet.GreenPool(pool_size or self.default_pool_size)
+        self._logger = logging.getLogger("eventlet.wsgi.server")
+        self._wsgi_logger = logging.WritableLogger(self._logger)
+
+    def _start(self):
+        """Run the blocking eventlet WSGI server.
+
+        :returns: None
+
+        """
+        eventlet.wsgi.server(self._socket,
+                             self.app,
+                             protocol=self._protocol,
+                             custom_pool=self._pool,
+                             log=self._wsgi_logger)
+
+    def start(self, backlog=128):
+        """Start serving a WSGI application.
+
+        :param backlog: Maximum number of queued connections.
+        :returns: None
+        :raises: cinder.exception.InvalidInput
+
+        """
+        if backlog < 1:
+            raise exception.InvalidInput(
+                    reason='The backlog must be more than 1')
+        self._socket = eventlet.listen((self.host, self.port), backlog=backlog)
+        self._server = eventlet.spawn(self._start)
+        (self.host, self.port) = self._socket.getsockname()
+        LOG.info(_("Started %(name)s on %(host)s:%(port)s") % self.__dict__)
+
+    def stop(self):
+        """Stop this server.
+
+        This is not a very nice action, as currently the method by which a
+        server is stopped is by killing its eventlet.
+
+        :returns: None
+
+        """
+        LOG.info(_("Stopping WSGI server."))
+        self._server.kill()
+
+    def wait(self):
+        """Block, until the server has stopped.
+
+        Waits on the server's eventlet to finish, then returns.
+
+        :returns: None
+
+        """
+        try:
+            self._server.wait()
+        except greenlet.GreenletExit:
+            LOG.info(_("WSGI server has stopped."))
+
+
+class Request(webob.Request):
+    pass
+
+
+class Application(object):
+    """Base WSGI application wrapper. Subclasses need to implement __call__."""
+
+    @classmethod
+    def factory(cls, global_config, **local_config):
+        """Used for paste app factories in paste.deploy config files.
+
+        Any local configuration (that is, values under the [app:APPNAME]
+        section of the paste config) will be passed into the `__init__` method
+        as kwargs.
+
+        A hypothetical configuration would look like:
+
+            [app:wadl]
+            latest_version = 1.3
+            paste.app_factory = cinder.api.fancy_api:Wadl.factory
+
+        which would result in a call to the `Wadl` class as
+
+            import cinder.api.fancy_api
+            fancy_api.Wadl(latest_version='1.3')
+
+        You could of course re-implement the `factory` method in subclasses,
+        but using the kwarg passing it shouldn't be necessary.
+
+        """
+        return cls(**local_config)
+
+    def __call__(self, environ, start_response):
+        r"""Subclasses will probably want to implement __call__ like this:
+
+        @webob.dec.wsgify(RequestClass=Request)
+        def __call__(self, req):
+          # Any of the following objects work as responses:
+
+          # Option 1: simple string
+          res = 'message\n'
+
+          # Option 2: a nicely formatted HTTP exception page
+          res = exc.HTTPForbidden(detail='Nice try')
+
+          # Option 3: a webob Response object (in case you need to play with
+          # headers, or you want to be treated like an iterable, or or or)
+          res = Response();
+          res.app_iter = open('somefile')
+
+          # Option 4: any wsgi app to be run next
+          res = self.application
+
+          # Option 5: you can get a Response object for a wsgi app, too, to
+          # play with headers etc
+          res = req.get_response(self.application)
+
+          # You can then just return your response...
+          return res
+          # ... or set req.response and return None.
+          req.response = res
+
+        See the end of http://pythonpaste.org/webob/modules/dec.html
+        for more info.
+
+        """
+        raise NotImplementedError(_('You must implement __call__'))
+
+
+class Middleware(Application):
+    """Base WSGI middleware.
+
+    These classes require an application to be
+    initialized that will be called next.  By default the middleware will
+    simply call its wrapped app, or you can override __call__ to customize its
+    behavior.
+
+    """
+
+    @classmethod
+    def factory(cls, global_config, **local_config):
+        """Used for paste app factories in paste.deploy config files.
+
+        Any local configuration (that is, values under the [filter:APPNAME]
+        section of the paste config) will be passed into the `__init__` method
+        as kwargs.
+
+        A hypothetical configuration would look like:
+
+            [filter:analytics]
+            redis_host = 127.0.0.1
+            paste.filter_factory = cinder.api.analytics:Analytics.factory
+
+        which would result in a call to the `Analytics` class as
+
+            import cinder.api.analytics
+            analytics.Analytics(app_from_paste, redis_host='127.0.0.1')
+
+        You could of course re-implement the `factory` method in subclasses,
+        but using the kwarg passing it shouldn't be necessary.
+
+        """
+        def _factory(app):
+            return cls(app, **local_config)
+        return _factory
+
+    def __init__(self, application):
+        self.application = application
+
+    def process_request(self, req):
+        """Called on each request.
+
+        If this returns None, the next application down the stack will be
+        executed. If it returns a response then that response will be returned
+        and execution will stop here.
+
+        """
+        return None
+
+    def process_response(self, response):
+        """Do whatever you'd like to the response."""
+        return response
+
+    @webob.dec.wsgify(RequestClass=Request)
+    def __call__(self, req):
+        response = self.process_request(req)
+        if response:
+            return response
+        response = req.get_response(self.application)
+        return self.process_response(response)
+
+
+class Debug(Middleware):
+    """Helper class for debugging a WSGI application.
+
+    Can be inserted into any WSGI application chain to get information
+    about the request and response.
+
+    """
+
+    @webob.dec.wsgify(RequestClass=Request)
+    def __call__(self, req):
+        print ('*' * 40) + ' REQUEST ENVIRON'
+        for key, value in req.environ.items():
+            print key, '=', value
+        print
+        resp = req.get_response(self.application)
+
+        print ('*' * 40) + ' RESPONSE HEADERS'
+        for (key, value) in resp.headers.iteritems():
+            print key, '=', value
+        print
+
+        resp.app_iter = self.print_generator(resp.app_iter)
+
+        return resp
+
+    @staticmethod
+    def print_generator(app_iter):
+        """Iterator that prints the contents of a wrapper string."""
+        print ('*' * 40) + ' BODY'
+        for part in app_iter:
+            sys.stdout.write(part)
+            sys.stdout.flush()
+            yield part
+        print
+
+
+class Router(object):
+    """WSGI middleware that maps incoming requests to WSGI apps."""
+
+    def __init__(self, mapper):
+        """Create a router for the given routes.Mapper.
+
+        Each route in `mapper` must specify a 'controller', which is a
+        WSGI app to call.  You'll probably want to specify an 'action' as
+        well and have your controller be an object that can route
+        the request to the action-specific method.
+
+        Examples:
+          mapper = routes.Mapper()
+          sc = ServerController()
+
+          # Explicit mapping of one route to a controller+action
+          mapper.connect(None, '/svrlist', controller=sc, action='list')
+
+          # Actions are all implicitly defined
+          mapper.resource('server', 'servers', controller=sc)
+
+          # Pointing to an arbitrary WSGI app.  You can specify the
+          # {path_info:.*} parameter so the target app can be handed just that
+          # section of the URL.
+          mapper.connect(None, '/v1.0/{path_info:.*}', controller=BlogApp())
+
+        """
+        self.map = mapper
+        self._router = routes.middleware.RoutesMiddleware(self._dispatch,
+                                                          self.map)
+
+    @webob.dec.wsgify(RequestClass=Request)
+    def __call__(self, req):
+        """Route the incoming request to a controller based on self.map.
+
+        If no match, return a 404.
+
+        """
+        return self._router
+
+    @staticmethod
+    @webob.dec.wsgify(RequestClass=Request)
+    def _dispatch(req):
+        """Dispatch the request to the appropriate controller.
+
+        Called by self._router after matching the incoming request to a route
+        and putting the information into req.environ.  Either returns 404
+        or the routed WSGI app's response.
+
+        """
+        match = req.environ['wsgiorg.routing_args'][1]
+        if not match:
+            return webob.exc.HTTPNotFound()
+        app = match['controller']
+        return app
+
+
+class Loader(object):
+    """Used to load WSGI applications from paste configurations."""
+
+    def __init__(self, config_path=None):
+        """Initialize the loader, and attempt to find the config.
+
+        :param config_path: Full or relative path to the paste config.
+        :returns: None
+
+        """
+        config_path = config_path or FLAGS.api_paste_config
+        self.config_path = utils.find_config(config_path)
+
+    def load_app(self, name):
+        """Return the paste URLMap wrapped WSGI application.
+
+        :param name: Name of the application to load.
+        :returns: Paste URLMap object wrapping the requested application.
+        :raises: `cinder.exception.PasteAppNotFound`
+
+        """
+        try:
+            return deploy.loadapp("config:%s" % self.config_path, name=name)
+        except LookupError as err:
+            LOG.error(err)
+            raise exception.PasteAppNotFound(name=name, path=self.config_path)
diff --git a/contrib/openstack-config b/contrib/openstack-config
new file mode 100755
index 000000000..d7979f7ff
--- /dev/null
+++ b/contrib/openstack-config
@@ -0,0 +1,65 @@
+#!/bin/sh -e
+### BEGIN INIT INFO
+# Provides:          openstack
+# Required-Start:    mountkernfs $local_fs
+# Required-Stop:     $local_fs
+# X-Start-Before:    networking
+# Should-Start:
+# Default-Start:     S
+# Default-Stop:
+# Short-Description: Apply configuration from OpenStack Config Drive
+### END INIT INFO
+
+PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
+
+. /lib/lsb/init-functions
+
+copy_cloud_config() {
+  LABEL="config"
+  if [ ! -e /dev/disk/by-label/${LABEL} ]; then
+    log_warning_msg "OpenStack Cloud Config drive not found"
+    return 1
+  fi
+
+  MNT=/tmp/config
+  mkdir -p ${MNT}
+  mount /dev/disk/by-label/${LABEL} ${MNT}
+  if [ -e ${MNT}/root/.ssh/authorized_keys ]; then
+    mkdir -m 700 -p /root/.ssh/
+    cp ${MNT}/root/.ssh/authorized_keys /root/.ssh/
+    chmod 600 ${MNT}/root/.ssh/authorized_keys
+  fi
+  if [ -e ${MNT}/etc/network/interfaces ]; then
+    cp ${MNT}/etc/network/interfaces /etc/network/
+    chmod 644 /etc/network/interfaces
+  fi
+  umount ${MNT}
+  return 0
+}
+
+case "$1" in
+  start|"")
+    log_action_begin_msg "Applying OpenStack Cloud Config"
+    if copy_cloud_config; then
+      log_action_end_msg $?
+    else
+      log_action_end_msg $?
+    fi
+  ;;
+
+  restart|reload|force-reload|status)
+    echo "Error: argument '$1' not supported" >&2
+    exit 3
+  ;;
+
+  stop)
+    # No-op
+  ;;
+
+  *)
+    echo "Usage: openstack.sh [start|stop]" >&2
+    exit 3
+  ;;
+esac
+
+:
diff --git a/contrib/redhat-eventlet.patch b/contrib/redhat-eventlet.patch
new file mode 100644
index 000000000..0b77e6f72
--- /dev/null
+++ b/contrib/redhat-eventlet.patch
@@ -0,0 +1,16 @@
+--- .cinder-venv/lib/python2.6/site-packages/eventlet/green/subprocess.py.orig
+2011-05-25
+23:31:34.597271402 +0000
++++ .cinder-venv/lib/python2.6/site-packages/eventlet/green/subprocess.py
+2011-05-25
+23:33:24.055602468 +0000
+@@ -32,7 +32,7 @@
+                     setattr(self, attr, wrapped_pipe)
+         __init__.__doc__ = subprocess_orig.Popen.__init__.__doc__
+
+-    def wait(self, check_interval=0.01):
++    def wait(self, check_interval=0.01, timeout=None):
+         # Instead of a blocking OS call, this version of wait() uses logic
+         # borrowed from the eventlet 0.2 processes.Process.wait() method.
+         try:
+
diff --git a/doc/.gitignore b/doc/.gitignore
new file mode 100644
index 000000000..291b04e45
--- /dev/null
+++ b/doc/.gitignore
@@ -0,0 +1,3 @@
+_build/*
+source/api/*
+.autogenerated
diff --git a/doc/Makefile b/doc/Makefile
new file mode 100644
index 000000000..ba789b5df
--- /dev/null
+++ b/doc/Makefile
@@ -0,0 +1,97 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+SPHINXSOURCE 	= source
+PAPER         =
+BUILDDIR      = build
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) $(SPHINXSOURCE)
+
+.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest
+
+.DEFAULT_GOAL 	= html
+
+help:
+	@echo "Please use \`make <target>' where <target> is one of"
+	@echo "  html      to make standalone HTML files"
+	@echo "  dirhtml   to make HTML files named index.html in directories"
+	@echo "  pickle    to make pickle files"
+	@echo "  json      to make JSON files"
+	@echo "  htmlhelp  to make HTML files and a HTML help project"
+	@echo "  qthelp    to make HTML files and a qthelp project"
+	@echo "  latex     to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+	@echo "  changes   to make an overview of all changed/added/deprecated items"
+	@echo "  linkcheck to check all external links for integrity"
+	@echo "  doctest   to run all doctests embedded in the documentation (if enabled)"
+
+clean:
+	-rm -rf $(BUILDDIR)/*
+	-rm -rf cinder.sqlite
+	if [ -f .autogenerated ] ; then \
+        cat .autogenerated | xargs rm ; \
+        rm .autogenerated ; \
+    fi
+
+html:
+	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:
+	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+pickle:
+	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+	@echo
+	@echo "Build finished; now you can process the pickle files."
+
+json:
+	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+	@echo
+	@echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+	@echo
+	@echo "Build finished; now you can run HTML Help Workshop with the" \
+	      ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+	@echo
+	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
+	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/cinder.qhcp"
+	@echo "To view the help file:"
+	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/cinder.qhc"
+
+latex:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo
+	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+	@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
+	      "run these through (pdf)latex."
+
+changes:
+	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+	@echo
+	@echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+	@echo
+	@echo "Link check complete; look for any errors in the above output " \
+	      "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+	@echo "Testing of doctests in the sources finished, look at the " \
+	      "results in $(BUILDDIR)/doctest/output.txt."
diff --git a/doc/README.rst b/doc/README.rst
new file mode 100644
index 000000000..835dbc5d9
--- /dev/null
+++ b/doc/README.rst
@@ -0,0 +1,55 @@
+=================
+Building the docs
+=================
+
+Dependencies
+============
+
+Sphinx_
+  You'll need sphinx (the python one) and if you are
+  using the virtualenv you'll need to install it in the virtualenv
+  specifically so that it can load the cinder modules.
+
+  ::
+
+    pip install Sphinx
+
+Graphviz_
+  Some of the diagrams are generated using the ``dot`` language
+  from Graphviz.
+
+  ::
+
+    sudo apt-get install graphviz
+
+.. _Sphinx: http://sphinx.pocoo.org
+
+.. _Graphviz: http://www.graphviz.org/
+
+
+Use `make`
+==========
+
+Just type make::
+
+  % make
+
+Look in the Makefile for more targets.
+
+
+Manually
+========
+
+  1. Generate the code.rst file so that Sphinx will pull in our docstrings::
+     
+      % ./generate_autodoc_index.sh > source/code.rst
+
+  2. Run `sphinx_build`::
+
+      % sphinx-build -b html source build/html
+
+
+The docs have been built
+========================
+
+Check out the `build` directory to find them. Yay!
diff --git a/doc/ext/__init__.py b/doc/ext/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/doc/ext/nova_autodoc.py b/doc/ext/nova_autodoc.py
new file mode 100644
index 000000000..a778f4a52
--- /dev/null
+++ b/doc/ext/nova_autodoc.py
@@ -0,0 +1,12 @@
+import gettext
+import os
+
+gettext.install('cinder')
+
+from cinder import utils
+
+
+def setup(app):
+    print "**Autodocumenting from %s" % os.path.abspath(os.curdir)
+    rv = utils.execute('./doc/generate_autodoc_index.sh')
+    print rv[0]
diff --git a/doc/ext/nova_todo.py b/doc/ext/nova_todo.py
new file mode 100644
index 000000000..2bd652071
--- /dev/null
+++ b/doc/ext/nova_todo.py
@@ -0,0 +1,101 @@
+# -*- coding: utf-8 -*-
+# This is a hack of the builtin todo extension, to make the todo_list more user friendly
+
+from sphinx.ext.todo import *
+import re
+
+def _(s):
+    return s
+
+
+def process_todo_nodes(app, doctree, fromdocname):
+    if not app.config['todo_include_todos']:
+        for node in doctree.traverse(todo_node):
+            node.parent.remove(node)
+
+    # Replace all todolist nodes with a list of the collected todos.
+    # Augment each todo with a backlink to the original location.
+    env = app.builder.env
+
+    if not hasattr(env, 'todo_all_todos'):
+        env.todo_all_todos = []
+
+
+    # remove the item that was added in the constructor, since I'm tired of
+    # reading through docutils for the proper way to construct an empty list
+    lists = []
+    for i in xrange(5):
+        lists.append(nodes.bullet_list("", nodes.Text('','')))
+        lists[i].remove(lists[i][0])
+        lists[i]['classes'].append('todo_list')
+
+    for node in doctree.traverse(todolist):
+        if not app.config['todo_include_todos']:
+            node.replace_self([])
+            continue
+
+        for todo_info in env.todo_all_todos:
+            para = nodes.paragraph()
+            filename = env.doc2path(todo_info['docname'], base=None)
+
+            # Create a reference
+            newnode = nodes.reference('', '')
+
+            line_info = todo_info['lineno']
+            link = _('%(filename)s, line %(line_info)d') % locals()
+            innernode = nodes.emphasis(link, link)
+            newnode['refdocname'] = todo_info['docname']
+
+            try:
+                newnode['refuri'] = app.builder.get_relative_uri(
+                    fromdocname, todo_info['docname'])
+                newnode['refuri'] += '#' + todo_info['target']['refid']
+            except NoUri:
+                # ignore if no URI can be determined, e.g. for LaTeX output
+                pass
+
+            newnode.append(innernode)
+            para += newnode
+            para['classes'].append('todo_link')
+
+            todo_entry = todo_info['todo']
+
+            env.resolve_references(todo_entry, todo_info['docname'], app.builder)
+
+            item = nodes.list_item('', para)
+            todo_entry[1]['classes'].append('details')
+
+            comment = todo_entry[1]
+
+            m = re.match(r"^P(\d)", comment.astext())
+            priority = 5
+            if m:
+                priority = int(m.group(1))
+                if (priority < 0): priority = 1
+                if (priority > 5): priority = 5
+
+            item['classes'].append('todo_p' + str(priority))
+            todo_entry['classes'].append('todo_p' + str(priority))
+
+            item.append(comment)
+
+            lists[priority-1].insert(0, item)
+
+
+        node.replace_self(lists)
+
+def setup(app):
+    app.add_config_value('todo_include_todos', False, False)
+
+    app.add_node(todolist)
+    app.add_node(todo_node,
+                 html=(visit_todo_node, depart_todo_node),
+                 latex=(visit_todo_node, depart_todo_node),
+                 text=(visit_todo_node, depart_todo_node))
+
+    app.add_directive('todo', Todo)
+    app.add_directive('todolist', TodoList)
+    app.connect('doctree-read', process_todos)
+    app.connect('doctree-resolved', process_todo_nodes)
+    app.connect('env-purge-doc', purge_todos)
+
diff --git a/doc/find_autodoc_modules.sh b/doc/find_autodoc_modules.sh
new file mode 100755
index 000000000..fb7e451a0
--- /dev/null
+++ b/doc/find_autodoc_modules.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+CINDER_DIR='cinder/' # include trailing slash
+DOCS_DIR='source'
+
+modules=''
+for x in `find ${CINDER_DIR} -name '*.py' | grep -v cinder/tests`; do
+    if [ `basename ${x} .py` == "__init__" ] ; then
+        continue
+    fi
+    relative=cinder.`echo ${x} | sed -e 's$^'${CINDER_DIR}'$$' -e 's/.py$//' -e 's$/$.$g'`
+    modules="${modules} ${relative}"
+done
+
+for mod in ${modules} ; do
+  if [ ! -f "${DOCS_DIR}/${mod}.rst" ];
+  then
+    echo ${mod}
+  fi
+done
diff --git a/doc/generate_autodoc_index.sh b/doc/generate_autodoc_index.sh
new file mode 100755
index 000000000..bdfa73a49
--- /dev/null
+++ b/doc/generate_autodoc_index.sh
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+SOURCEDIR=doc/source/api
+
+if [ ! -d ${SOURCEDIR} ] ; then
+    mkdir -p ${SOURCEDIR}
+fi
+
+for x in `./doc/find_autodoc_modules.sh`;
+do
+  echo "Generating ${SOURCEDIR}/${x}.rst"
+  echo "${SOURCEDIR}/${x}.rst" >> .autogenerated 
+  heading="The :mod:\`${x}\` Module"
+  # Figure out how long the heading is
+  # and make sure to emit that many '=' under
+  # it to avoid heading format errors
+  # in Sphinx.
+  heading_len=$(echo "$heading" | wc -c)
+  underline=$(head -c $heading_len < /dev/zero | tr '\0' '=')
+  ( cat <<EOF
+${heading}
+${underline}
+
+.. automodule:: ${x}
+  :members:
+  :undoc-members:
+  :show-inheritance:
+EOF
+) > ${SOURCEDIR}/${x}.rst
+
+done
+
+if [ ! -f ${SOURCEDIR}/autoindex.rst ] ; then
+
+    cat > ${SOURCEDIR}/autoindex.rst <<EOF 
+.. toctree::
+   :maxdepth: 1
+
+EOF
+    for f in `cat .autogenerated | sort` ; do
+        relative=`echo ${f} | sed -e 's$^'${SOURCEDIR}'/$$'`
+        echo "   ${relative}" >> ${SOURCEDIR}/autoindex.rst
+    done
+
+    echo ${SOURCEDIR}/autoindex.rst >> .autogenerated
+fi
diff --git a/doc/source/_ga/layout.html b/doc/source/_ga/layout.html
new file mode 100644
index 000000000..f29e90968
--- /dev/null
+++ b/doc/source/_ga/layout.html
@@ -0,0 +1,17 @@
+{% extends "!layout.html" %}
+
+{% block footer %}
+{{ super() }}
+<script type="text/javascript">
+var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
+document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
+</script>
+<script type="text/javascript">
+try {
+var pageTracker = _gat._getTracker("UA-17511903-3");
+pageTracker._setDomainName("none");
+pageTracker._setAllowLinker(true);
+pageTracker._trackPageview();
+} catch(err) {}</script>
+{% endblock %}
+
diff --git a/doc/source/_static/.gitignore b/doc/source/_static/.gitignore
new file mode 100644
index 000000000..e69de29bb
diff --git a/doc/source/_static/.placeholder b/doc/source/_static/.placeholder
new file mode 100644
index 000000000..e69de29bb
diff --git a/doc/source/_static/basic.css b/doc/source/_static/basic.css
new file mode 100644
index 000000000..d909ce37c
--- /dev/null
+++ b/doc/source/_static/basic.css
@@ -0,0 +1,416 @@
+/**
+ * Sphinx stylesheet -- basic theme
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+    clear: both;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+    width: 100%;
+    font-size: 90%;
+}
+
+div.related h3 {
+    display: none;
+}
+
+div.related ul {
+    margin: 0;
+    padding: 0 0 0 10px;
+    list-style: none;
+}
+
+div.related li {
+    display: inline;
+}
+
+div.related li.right {
+    float: right;
+    margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+    padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+    float: left;
+    width: 230px;
+    margin-left: -100%;
+    font-size: 90%;
+}
+
+div.sphinxsidebar ul {
+    list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+    margin-left: 20px;
+    list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+    margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #98dbcc;
+    font-family: sans-serif;
+    font-size: 1em;
+}
+
+img {
+    border: 0;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+    margin: 10px 0 0 20px;
+    padding: 0;
+}
+
+ul.search li {
+    padding: 5px 0 5px 20px;
+    background-image: url(file.png);
+    background-repeat: no-repeat;
+    background-position: 0 7px;
+}
+
+ul.search li a {
+    font-weight: bold;
+}
+
+ul.search li div.context {
+    color: #888;
+    margin: 2px 0 0 30px;
+    text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+    font-weight: bold;
+}
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+    width: 90%;
+}
+
+table.contentstable p.biglink {
+    line-height: 150%;
+}
+
+a.biglink {
+    font-size: 1.3em;
+}
+
+span.linkdescr {
+    font-style: italic;
+    padding-top: 5px;
+    font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable td {
+    text-align: left;
+    vertical-align: top;
+}
+
+table.indextable dl, table.indextable dd {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+table.indextable tr.pcap {
+    height: 10px;
+}
+
+table.indextable tr.cap {
+    margin-top: 10px;
+    background-color: #f2f2f2;
+}
+
+img.toggler {
+    margin-right: 3px;
+    margin-top: 3px;
+    cursor: pointer;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+a.headerlink {
+    visibility: hidden;
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink {
+    visibility: visible;
+}
+
+div.body p.caption {
+    text-align: inherit;
+}
+
+div.body td {
+    text-align: left;
+}
+
+.field-list ul {
+    padding-left: 1em;
+}
+
+.first {
+}
+
+p.rubric {
+    margin-top: 30px;
+    font-weight: bold;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar {
+    margin: 0 0 0.5em 1em;
+    border: 1px solid #ddb;
+    padding: 7px 7px 0 7px;
+    background-color: #ffe;
+    width: 40%;
+    float: right;
+}
+
+p.sidebar-title {
+    font-weight: bold;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+
+div.topic {
+    border: 1px solid #ccc;
+    padding: 7px 7px 0 7px;
+    margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+    font-size: 1.1em;
+    font-weight: bold;
+    margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    padding: 7px;
+}
+
+div.admonition dt {
+    font-weight: bold;
+}
+
+div.admonition dl {
+    margin-bottom: 0;
+}
+
+p.admonition-title {
+    margin: 0px 10px 5px 0px;
+    font-weight: bold;
+}
+
+div.body p.centered {
+    text-align: center;
+    margin-top: 25px;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+    border: 0;
+    border-collapse: collapse;
+}
+
+table.docutils td, table.docutils th {
+    padding: 1px 8px 1px 0;
+    border-top: 0;
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 1px solid #aaa;
+}
+
+table.field-list td, table.field-list th {
+    border: 0 !important;
+}
+
+table.footnote td, table.footnote th {
+    border: 0 !important;
+}
+
+th {
+    text-align: left;
+    padding-right: 5px;
+}
+
+/* -- other body styles ----------------------------------------------------- */
+
+dl {
+    margin-bottom: 15px;
+}
+
+dd p {
+    margin-top: 0px;
+}
+
+dd ul, dd table {
+    margin-bottom: 10px;
+}
+
+dd {
+    margin-top: 3px;
+    margin-bottom: 10px;
+    margin-left: 30px;
+}
+
+dt:target, .highlight {
+    background-color: #fbe54e;
+}
+
+dl.glossary dt {
+    font-weight: bold;
+    font-size: 1.1em;
+}
+
+.field-list ul {
+    margin: 0;
+    padding-left: 1em;
+}
+
+.field-list p {
+    margin: 0;
+}
+
+.refcount {
+    color: #060;
+}
+
+.optional {
+    font-size: 1.3em;
+}
+
+.versionmodified {
+    font-style: italic;
+}
+
+.system-message {
+    background-color: #fda;
+    padding: 5px;
+    border: 3px solid red;
+}
+
+.footnote:target  {
+    background-color: #ffa
+}
+
+.line-block {
+    display: block;
+    margin-top: 1em;
+    margin-bottom: 1em;
+}
+
+.line-block .line-block {
+    margin-top: 0;
+    margin-bottom: 0;
+    margin-left: 1.5em;
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+    overflow: auto;
+}
+
+td.linenos pre {
+    padding: 5px 0px;
+    border: 0;
+    background-color: transparent;
+    color: #aaa;
+}
+
+table.highlighttable {
+    margin-left: 0.5em;
+}
+
+table.highlighttable td {
+    padding: 0 0.5em 0 0.5em;
+}
+
+tt.descname {
+    background-color: transparent;
+    font-weight: bold;
+    font-size: 1.2em;
+}
+
+tt.descclassname {
+    background-color: transparent;
+}
+
+tt.xref, a tt {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
+    background-color: transparent;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+    vertical-align: middle;
+}
+
+div.body div.math p {
+    text-align: center;
+}
+
+span.eqno {
+    float: right;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+    div.document,
+    div.documentwrapper,
+    div.bodywrapper {
+        margin: 0 !important;
+        width: 100%;
+    }
+
+    div.sphinxsidebar,
+    div.related,
+    div.footer,
+    #top-link {
+        display: none;
+    }
+}
diff --git a/doc/source/_static/default.css b/doc/source/_static/default.css
new file mode 100644
index 000000000..c8091ecb4
--- /dev/null
+++ b/doc/source/_static/default.css
@@ -0,0 +1,230 @@
+/**
+ * Sphinx stylesheet -- default theme
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ */
+
+@import url("basic.css");
+
+/* -- page layout ----------------------------------------------------------- */
+
+body {
+    font-family: sans-serif;
+    font-size: 100%;
+    background-color: #11303d;
+    color: #000;
+    margin: 0;
+    padding: 0;
+}
+
+div.document {
+    background-color: #1c4e63;
+}
+
+div.documentwrapper {
+    float: left;
+    width: 100%;
+}
+
+div.bodywrapper {
+    margin: 0 0 0 230px;
+}
+
+div.body {
+    background-color: #ffffff;
+    color: #000000;
+    padding: 0 20px 30px 20px;
+}
+
+div.footer {
+    color: #ffffff;
+    width: 100%;
+    padding: 9px 0 9px 0;
+    text-align: center;
+    font-size: 75%;
+}
+
+div.footer a {
+    color: #ffffff;
+    text-decoration: underline;
+}
+
+div.related {
+    background-color: #133f52;
+    line-height: 30px;
+    color: #ffffff;
+}
+
+div.related a {
+    color: #ffffff;
+}
+
+div.sphinxsidebar {
+}
+
+div.sphinxsidebar h3 {
+    font-family: 'Trebuchet MS', sans-serif;
+    color: #ffffff;
+    font-size: 1.4em;
+    font-weight: normal;
+    margin: 0;
+    padding: 0;
+}
+
+div.sphinxsidebar h3 a {
+    color: #ffffff;
+}
+
+div.sphinxsidebar h4 {
+    font-family: 'Trebuchet MS', sans-serif;
+    color: #ffffff;
+    font-size: 1.3em;
+    font-weight: normal;
+    margin: 5px 0 0 0;
+    padding: 0;
+}
+
+div.sphinxsidebar p {
+    color: #ffffff;
+}
+
+div.sphinxsidebar p.topless {
+    margin: 5px 10px 10px 10px;
+}
+
+div.sphinxsidebar ul {
+    margin: 10px;
+    padding: 0;
+    color: #ffffff;
+}
+
+div.sphinxsidebar a {
+    color: #98dbcc;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #98dbcc;
+    font-family: sans-serif;
+    font-size: 1em;
+}
+
+/* -- body styles ----------------------------------------------------------- */
+
+a {
+    color: #355f7c;
+    text-decoration: none;
+}
+
+a:hover {
+    text-decoration: underline;
+}
+
+div.body p, div.body dd, div.body li {
+    text-align: left;
+    line-height: 130%;
+}
+
+div.body h1,
+div.body h2,
+div.body h3,
+div.body h4,
+div.body h5,
+div.body h6 {
+    font-family: 'Trebuchet MS', sans-serif;
+    background-color: #f2f2f2;
+    font-weight: normal;
+    color: #20435c;
+    border-bottom: 1px solid #ccc;
+    margin: 20px -20px 10px -20px;
+    padding: 3px 0 3px 10px;
+}
+
+div.body h1 { margin-top: 0; font-size: 200%; }
+div.body h2 { font-size: 160%; }
+div.body h3 { font-size: 140%; }
+div.body h4 { font-size: 120%; }
+div.body h5 { font-size: 110%; }
+div.body h6 { font-size: 100%; }
+
+a.headerlink {
+    color: #c60f0f;
+    font-size: 0.8em;
+    padding: 0 4px 0 4px;
+    text-decoration: none;
+}
+
+a.headerlink:hover {
+    background-color: #c60f0f;
+    color: white;
+}
+
+div.body p, div.body dd, div.body li {
+    text-align: left;
+    line-height: 130%;
+}
+
+div.admonition p.admonition-title + p {
+    display: inline;
+}
+
+div.admonition p {
+    margin-bottom: 5px;
+}
+
+div.admonition pre {
+    margin-bottom: 5px;
+}
+
+div.admonition ul, div.admonition ol {
+    margin-bottom: 5px;
+}
+
+div.note {
+    background-color: #eee;
+    border: 1px solid #ccc;
+}
+
+div.seealso {
+    background-color: #ffc;
+    border: 1px solid #ff6;
+}
+
+div.topic {
+    background-color: #eee;
+}
+
+div.warning {
+    background-color: #ffe4e4;
+    border: 1px solid #f66;
+}
+
+p.admonition-title {
+    display: inline;
+}
+
+p.admonition-title:after {
+    content: ":";
+}
+
+pre {
+    padding: 5px;
+    background-color: #eeffcc;
+    color: #333333;
+    line-height: 120%;
+    border: 1px solid #ac9;
+    border-left: none;
+    border-right: none;
+}
+
+tt {
+    background-color: #ecf0f3;
+    padding: 0 1px 0 1px;
+    font-size: 0.95em;
+}
+
+.warning tt {
+    background: #efc2c2;
+}
+
+.note tt {
+    background: #d6d6d6;
+}
diff --git a/doc/source/_static/jquery.tweet.js b/doc/source/_static/jquery.tweet.js
new file mode 100644
index 000000000..79bf0bdb4
--- /dev/null
+++ b/doc/source/_static/jquery.tweet.js
@@ -0,0 +1,154 @@
+(function($) {
+
+  $.fn.tweet = function(o){
+    var s = {
+      username: ["seaofclouds"],              // [string]   required, unless you want to display our tweets. :) it can be an array, just do ["username1","username2","etc"]
+      list: null,                              //[string]   optional name of list belonging to username
+      avatar_size: null,                      // [integer]  height and width of avatar if displayed (48px max)
+      count: 3,                               // [integer]  how many tweets to display?
+      intro_text: null,                       // [string]   do you want text BEFORE your your tweets?
+      outro_text: null,                       // [string]   do you want text AFTER your tweets?
+      join_text:  null,                       // [string]   optional text in between date and tweet, try setting to "auto"
+      auto_join_text_default: "i said,",      // [string]   auto text for non verb: "i said" bullocks
+      auto_join_text_ed: "i",                 // [string]   auto text for past tense: "i" surfed
+      auto_join_text_ing: "i am",             // [string]   auto tense for present tense: "i was" surfing
+      auto_join_text_reply: "i replied to",   // [string]   auto tense for replies: "i replied to" @someone "with"
+      auto_join_text_url: "i was looking at", // [string]   auto tense for urls: "i was looking at" http:...
+      loading_text: null,                     // [string]   optional loading text, displayed while tweets load
+      query: null                             // [string]   optional search query
+    };
+
+    if(o) $.extend(s, o);
+
+    $.fn.extend({
+      linkUrl: function() {
+        var returning = [];
+        var regexp = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
+        this.each(function() {
+          returning.push(this.replace(regexp,"<a href=\"$1\">$1</a>"));
+        });
+        return $(returning);
+      },
+      linkUser: function() {
+        var returning = [];
+        var regexp = /[\@]+([A-Za-z0-9-_]+)/gi;
+        this.each(function() {
+          returning.push(this.replace(regexp,"<a href=\"http://twitter.com/$1\">@$1</a>"));
+        });
+        return $(returning);
+      },
+      linkHash: function() {
+        var returning = [];
+        var regexp = / [\#]+([A-Za-z0-9-_]+)/gi;
+        this.each(function() {
+          returning.push(this.replace(regexp, ' <a href="http://search.twitter.com/search?q=&tag=$1&lang=all&from='+s.username.join("%2BOR%2B")+'">#$1</a>'));
+        });
+        return $(returning);
+      },
+      capAwesome: function() {
+        var returning = [];
+        this.each(function() {
+          returning.push(this.replace(/\b(awesome)\b/gi, '<span class="awesome">$1</span>'));
+        });
+        return $(returning);
+      },
+      capEpic: function() {
+        var returning = [];
+        this.each(function() {
+          returning.push(this.replace(/\b(epic)\b/gi, '<span class="epic">$1</span>'));
+        });
+        return $(returning);
+      },
+      makeHeart: function() {
+        var returning = [];
+        this.each(function() {
+          returning.push(this.replace(/(&lt;)+[3]/gi, "<tt class='heart'>&#x2665;</tt>"));
+        });
+        return $(returning);
+      }
+    });
+
+    function relative_time(time_value) {
+      var parsed_date = Date.parse(time_value);
+      var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
+      var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
+      var pluralize = function (singular, n) {
+        return '' + n + ' ' + singular + (n == 1 ? '' : 's');
+      };
+      if(delta < 60) {
+      return 'less than a minute ago';
+      } else if(delta < (45*60)) {
+      return 'about ' + pluralize("minute", parseInt(delta / 60)) + ' ago';
+      } else if(delta < (24*60*60)) {
+      return 'about ' + pluralize("hour", parseInt(delta / 3600)) + ' ago';
+      } else {
+      return 'about ' + pluralize("day", parseInt(delta / 86400)) + ' ago';
+      }
+    }
+
+    function build_url() {
+      var proto = ('https:' == document.location.protocol ? 'https:' : 'http:');
+      if (s.list) {
+        return proto+"//api.twitter.com/1/"+s.username[0]+"/lists/"+s.list+"/statuses.json?per_page="+s.count+"&callback=?";
+      } else if (s.query == null && s.username.length == 1) {
+        return proto+'//twitter.com/status/user_timeline/'+s.username[0]+'.json?count='+s.count+'&callback=?';
+      } else {
+        var query = (s.query || 'from:'+s.username.join('%20OR%20from:'));
+        return proto+'//search.twitter.com/search.json?&q='+query+'&rpp='+s.count+'&callback=?';
+      }
+    }
+
+    return this.each(function(){
+      var list = $('<ul class="tweet_list">').appendTo(this);
+      var intro = '<p class="tweet_intro">'+s.intro_text+'</p>';
+      var outro = '<p class="tweet_outro">'+s.outro_text+'</p>';
+      var loading = $('<p class="loading">'+s.loading_text+'</p>');
+
+      if(typeof(s.username) == "string"){
+        s.username = [s.username];
+      }
+
+      if (s.loading_text) $(this).append(loading);
+      $.getJSON(build_url(), function(data){
+        if (s.loading_text) loading.remove();
+        if (s.intro_text) list.before(intro);
+        $.each((data.results || data), function(i,item){
+          // auto join text based on verb tense and content
+          if (s.join_text == "auto") {
+            if (item.text.match(/^(@([A-Za-z0-9-_]+)) .*/i)) {
+              var join_text = s.auto_join_text_reply;
+            } else if (item.text.match(/(^\w+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+) .*/i)) {
+              var join_text = s.auto_join_text_url;
+            } else if (item.text.match(/^((\w+ed)|just) .*/im)) {
+              var join_text = s.auto_join_text_ed;
+            } else if (item.text.match(/^(\w*ing) .*/i)) {
+              var join_text = s.auto_join_text_ing;
+            } else {
+              var join_text = s.auto_join_text_default;
+            }
+          } else {
+            var join_text = s.join_text;
+          };
+
+          var from_user = item.from_user || item.user.screen_name;
+          var profile_image_url = item.profile_image_url || item.user.profile_image_url;
+          var join_template = '<span class="tweet_join"> '+join_text+' </span>';
+          var join = ((s.join_text) ? join_template : ' ');
+          var avatar_template = '<a class="tweet_avatar" href="http://twitter.com/'+from_user+'"><img src="'+profile_image_url+'" height="'+s.avatar_size+'" width="'+s.avatar_size+'" alt="'+from_user+'\'s avatar" title="'+from_user+'\'s avatar" border="0"/></a>';
+          var avatar = (s.avatar_size ? avatar_template : '');
+          var date = '<a href="http://twitter.com/'+from_user+'/statuses/'+item.id+'" title="view tweet on twitter">'+relative_time(item.created_at)+'</a>';
+          var text = '<span class="tweet_text">' +$([item.text]).linkUrl().linkUser().linkHash().makeHeart().capAwesome().capEpic()[0]+ '</span>';
+
+          // until we create a template option, arrange the items below to alter a tweet's display.
+          list.append('<li>' + avatar + date + join + text + '</li>');
+
+          list.children('li:first').addClass('tweet_first');
+          list.children('li:odd').addClass('tweet_even');
+          list.children('li:even').addClass('tweet_odd');
+        });
+        if (s.outro_text) list.after(outro);
+      });
+
+    });
+  };
+})(jQuery);
\ No newline at end of file
diff --git a/doc/source/_static/tweaks.css b/doc/source/_static/tweaks.css
new file mode 100644
index 000000000..046ead840
--- /dev/null
+++ b/doc/source/_static/tweaks.css
@@ -0,0 +1,218 @@
+ul.todo_list {
+    list-style-type: none;
+    margin: 0;
+    padding: 0;
+}
+
+ul.todo_list li {
+    display: block;
+    margin: 0;
+    padding: 7px 0;
+    border-top: 1px solid #eee;
+}
+
+ul.todo_list li p {
+    display: inline;
+}
+
+ul.todo_list li p.link {
+    font-weight: bold;
+}
+
+ul.todo_list li p.details {
+    font-style: italic;
+}
+
+ul.todo_list li {
+}
+
+div.admonition {
+    border: 1px solid #8F1000;
+}
+
+div.admonition p.admonition-title {
+    background-color: #8F1000;
+    border-bottom: 1px solid #8E8E8E;
+}
+
+a {
+	color: #CF2F19;
+}
+
+div.related ul li a {
+	color: #CF2F19;
+}
+
+div.sphinxsidebar h4 {
+	background-color:#8E8E8E;
+	border:1px solid #255E6E;
+	color:white;
+	font-size:1em;
+	margin:1em 0 0.5em;
+	padding:0.1em 0 0.1em 0.5em;
+}
+
+em {
+    font-style: normal;
+}
+
+table.docutils {
+	font-size: 11px;
+}
+
+.tweet_list li {
+    font-size: 0.9em;
+    border-bottom: 1px solid #eee;
+    padding: 5px 0;
+}
+
+.tweet_list li .tweet_avatar {
+    float: left;
+}
+
+/* ------------------------------------------
+PURE CSS SPEECH BUBBLES
+by Nicolas Gallagher
+- http://nicolasgallagher.com/pure-css-speech-bubbles/
+
+http://nicolasgallagher.com
+http://twitter.com/necolas
+
+Created: 02 March 2010
+Version: 1.1 (21 October 2010)
+
+Dual licensed under MIT and GNU GPLv2 © Nicolas Gallagher
+------------------------------------------ */
+/* THE SPEECH BUBBLE
+------------------------------------------------------------------------------------------------------------------------------- */
+
+/* THE SPEECH BUBBLE
+------------------------------------------------------------------------------------------------------------------------------- */
+
+.triangle-border {
+	position:relative;
+	padding:15px;
+	margin:1em 0 3em;
+	border:5px solid #BC1518;
+	color:#333;
+	background:#fff;
+
+	/* css3 */
+	-moz-border-radius:10px;
+	-webkit-border-radius:10px;
+	border-radius:10px;
+}
+
+/* Variant : for left positioned triangle
+------------------------------------------ */
+
+.triangle-border.left {
+	margin-left:30px;
+}
+
+/* Variant : for right positioned triangle
+------------------------------------------ */
+
+.triangle-border.right {
+	margin-right:30px;
+}
+
+/* THE TRIANGLE
+------------------------------------------------------------------------------------------------------------------------------- */
+
+.triangle-border:before {
+	content:"";
+	display:block; /* reduce the damage in FF3.0 */
+	position:absolute;
+	bottom:-40px; /* value = - border-top-width - border-bottom-width */
+	left:40px; /* controls horizontal position */
+	width:0;
+	height:0;
+	border:20px solid transparent;
+	border-top-color:#BC1518;
+}
+
+/* creates the smaller  triangle */
+.triangle-border:after {
+	content:"";
+	display:block; /* reduce the damage in FF3.0 */
+	position:absolute;
+	bottom:-26px; /* value = - border-top-width - border-bottom-width */
+	left:47px; /* value = (:before left) + (:before border-left) - (:after border-left) */
+	width:0;
+	height:0;
+	border:13px solid transparent;
+	border-top-color:#fff;
+}
+
+/* Variant : top
+------------------------------------------ */
+
+/* creates the larger triangle */
+.triangle-border.top:before {
+	top:-40px; /* value = - border-top-width - border-bottom-width */
+	right:40px; /* controls horizontal position */
+	bottom:auto;
+	left:auto;
+	border:20px solid transparent;
+	border-bottom-color:#BC1518;
+}
+
+/* creates the smaller  triangle */
+.triangle-border.top:after {
+	top:-26px; /* value = - border-top-width - border-bottom-width */
+	right:47px; /* value = (:before right) + (:before border-right) - (:after border-right) */
+	bottom:auto;
+	left:auto;
+	border:13px solid transparent;
+	border-bottom-color:#fff;
+}
+
+/* Variant : left
+------------------------------------------ */
+
+/* creates the larger triangle */
+.triangle-border.left:before {
+	top:10px; /* controls vertical position */
+	left:-30px; /* value = - border-left-width - border-right-width */
+	bottom:auto;
+	border-width:15px 30px 15px 0;
+	border-style:solid;
+	border-color:transparent #BC1518;
+}
+
+/* creates the smaller  triangle */
+.triangle-border.left:after {
+	top:16px; /* value = (:before top) + (:before border-top) - (:after border-top) */
+	left:-21px; /* value = - border-left-width - border-right-width */
+	bottom:auto;
+	border-width:9px 21px 9px 0;
+	border-style:solid;
+	border-color:transparent #fff;
+}
+
+/* Variant : right
+------------------------------------------ */
+
+/* creates the larger triangle */
+.triangle-border.right:before {
+	top:10px; /* controls vertical position */
+	right:-30px; /* value = - border-left-width - border-right-width */
+	bottom:auto;
+    left:auto;
+	border-width:15px 0 15px 30px;
+	border-style:solid;
+	border-color:transparent #BC1518;
+}
+
+/* creates the smaller  triangle */
+.triangle-border.right:after {
+	top:16px; /* value = (:before top) + (:before border-top) - (:after border-top) */
+	right:-21px; /* value = - border-left-width - border-right-width */
+	bottom:auto;
+    left:auto;
+	border-width:9px 0 9px 21px;
+	border-style:solid;
+	border-color:transparent #fff;
+}
+
diff --git a/doc/source/_templates/.gitignore b/doc/source/_templates/.gitignore
new file mode 100644
index 000000000..e69de29bb
diff --git a/doc/source/_templates/.placeholder b/doc/source/_templates/.placeholder
new file mode 100644
index 000000000..e69de29bb
diff --git a/doc/source/_theme/layout.html b/doc/source/_theme/layout.html
new file mode 100644
index 000000000..1e0e69e98
--- /dev/null
+++ b/doc/source/_theme/layout.html
@@ -0,0 +1,95 @@
+{% extends "sphinxdoc/layout.html" %}
+{% set css_files = css_files + ['_static/tweaks.css'] %}
+{% set script_files = script_files + ['_static/jquery.tweet.js'] %}
+{% block extrahead %}
+    <script type='text/javascript'>
+        $(document).ready(function(){
+            $("#twitter_feed").tweet({
+                username: "openstack",
+                query: "from:openstack",
+                avatar_size: 32,
+                count: 10,
+                loading_text: "loading tweets..."
+            });
+        });
+    </script>
+{% endblock %}
+
+{%- macro sidebar() %}
+      {%- if not embedded %}{% if not theme_nosidebar|tobool %}
+      <div class="sphinxsidebar">
+        <div class="sphinxsidebarwrapper">
+          {%- block sidebarlogo %}
+          {%- if logo %}
+            <p class="logo"><a href="{{ pathto(master_doc) }}">
+              <img class="logo" src="{{ pathto('_static/' + logo, 1) }}" alt="Logo"/>
+            </a></p>
+          {%- endif %}
+          {%- endblock %}
+          {%- block sidebartoc %}
+          {%- if display_toc %}
+            <h3><a href="{{ pathto(master_doc) }}">{{ _('Table Of Contents') }}</a></h3>
+            {{ toc }}
+          {%- endif %}
+          {%- endblock %}
+          {%- block sidebarrel %}
+          {%- if prev %}
+            <h4>{{ _('Previous topic') }}</h4>
+            <p class="topless"><a href="{{ prev.link|e }}"
+                                  title="{{ _('previous chapter') }}">{{ prev.title }}</a></p>
+          {%- endif %}
+          {%- if next %}
+            <h4>{{ _('Next topic') }}</h4>
+            <p class="topless"><a href="{{ next.link|e }}"
+                                  title="{{ _('next chapter') }}">{{ next.title }}</a></p>
+          {%- endif %}
+          {%- endblock %}
+          {%- block sidebarsourcelink %}
+          {%- if show_source and has_source and sourcename %}
+            <h3>{{ _('This Page') }}</h3>
+            <ul class="this-page-menu">
+              <li><a href="{{ pathto('_sources/' + sourcename, true)|e }}"
+                     rel="nofollow">{{ _('Show Source') }}</a></li>
+            </ul>
+          {%- endif %}
+          {%- endblock %}
+          {%- if customsidebar %}
+          {% include customsidebar %}
+          {%- endif %}
+          {%- block sidebarsearch %}
+          {%- if pagename != "search" %}
+          <div id="searchbox" style="display: none">
+            <h3>{{ _('Quick search') }}</h3>
+              <form class="search" action="{{ pathto('search') }}" method="get">
+                <input type="text" name="q" size="18" />
+                <input type="submit" value="{{ _('Go') }}" />
+                <input type="hidden" name="check_keywords" value="yes" />
+                <input type="hidden" name="area" value="default" />
+              </form>
+              <p class="searchtip" style="font-size: 90%">
+              {{ _('Enter search terms or a module, class or function name.') }}
+              </p>
+          </div>
+          <script type="text/javascript">$('#searchbox').show(0);</script>
+          
+          <p class="triangle-border right">
+				Psst... hey. You're reading the latest content, but it might be out of sync with code. You can read <a href="http://cinder.openstack.org/2011.2">Cinder 2011.2 docs</a> or <a href="http://docs.openstack.org">all OpenStack docs</a> too.
+			</p>
+          
+          {%- endif %}
+
+          {%- if pagename == "index" %}
+          
+          
+          <h3>{{ _('Twitter Feed') }}</h3>
+                <div id="twitter_feed" class='twitter_feed'></div>
+          {%- endif %}
+          
+          
+
+
+          {%- endblock %}
+        </div>
+      </div>
+      {%- endif %}{% endif %}
+{%- endmacro %}
diff --git a/doc/source/_theme/theme.conf b/doc/source/_theme/theme.conf
new file mode 100644
index 000000000..e039fe01f
--- /dev/null
+++ b/doc/source/_theme/theme.conf
@@ -0,0 +1,5 @@
+[theme]
+inherit = sphinxdoc
+stylesheet = sphinxdoc.css
+pygments_style = friendly
+
diff --git a/doc/source/conf.py b/doc/source/conf.py
new file mode 100644
index 000000000..6d55ed5e5
--- /dev/null
+++ b/doc/source/conf.py
@@ -0,0 +1,234 @@
+# -*- coding: utf-8 -*-
+#
+# cinder documentation build configuration file, created by
+# sphinx-quickstart on Sat May  1 15:17:47 2010.
+#
+# This file is execfile()d with the current directory set to its containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys, os
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+sys.path.insert(0, os.path.abspath('../../'))
+sys.path.insert(0, os.path.abspath('../'))
+sys.path.insert(0, os.path.abspath('./'))
+
+# -- General configuration -----------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+
+extensions = ['sphinx.ext.autodoc', 'sphinx.ext.intersphinx', 'ext.cinder_todo', 'sphinx.ext.coverage', 'sphinx.ext.pngmath', 'sphinx.ext.ifconfig','sphinx.ext.graphviz']
+
+# autodoc generation is a bit aggressive and a nuisance when doing heavy text edit cycles.
+# execute "export SPHINX_DEBUG=1" in your terminal to disable
+if not os.getenv('SPHINX_DEBUG'):
+    extensions += ['ext.cinder_autodoc']
+
+todo_include_todos = True
+
+# Add any paths that contain templates here, relative to this directory.
+# Changing the path so that the Hudson build output contains GA code and the source
+# docs do not contain the code so local, offline sphinx builds are "clean."
+templates_path = []
+if os.getenv('HUDSON_PUBLISH_DOCS'):
+  templates_path = ['_ga', '_templates']
+else:
+  templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'cinder'
+copyright = u'2010-present, OpenStack, LLC'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+from cinder import version as cinder_version
+#import cinder.version
+# The full version, including alpha/beta/rc tags.
+release = cinder_version.version_string()
+# The short X.Y version.
+version = cinder_version.canonical_version_string()
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of documents that shouldn't be included in the build.
+unused_docs = [
+    'api_ext/rst_extension_template',
+    'vmwareapi_readme',
+    'installer',
+    ]
+
+# List of directories, relative to source directory, that shouldn't be searched
+# for source files.
+exclude_trees = []
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+add_module_names = False
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+modindex_common_prefix = ['cinder.']
+
+# -- Options for man page output -----------------------------------------------
+
+# Grouping the document tree for man pages.
+# List of tuples 'sourcefile', 'target', u'title', u'Authors name', 'manual'
+
+man_pages = [
+    ('man/cinder-manage', 'cinder-manage', u'Cloud controller fabric',
+     [u'OpenStack'], 1)
+ ]
+
+# -- Options for HTML output ---------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  Major themes that come with
+# Sphinx are currently 'default' and 'sphinxdoc'.
+html_theme_path = ["."]
+html_theme = '_theme'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+git_cmd = "git log --pretty=format:'%ad, commit %h' --date=local -n1"
+html_last_updated_fmt = os.popen(git_cmd).read()
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_use_modindex = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = ''
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'cinderdoc'
+
+
+# -- Options for LaTeX output --------------------------------------------------
+
+# The paper size ('letter' or 'a4').
+#latex_paper_size = 'letter'
+
+# The font size ('10pt', '11pt' or '12pt').
+#latex_font_size = '10pt'
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, documentclass [howto/manual]).
+latex_documents = [
+  ('index', 'Cinder.tex', u'Cinder Documentation',
+   u'Anso Labs, LLC', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# Additional stuff for the LaTeX preamble.
+#latex_preamble = ''
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_use_modindex = True
+
+
+# Example configuration for intersphinx: refer to the Python standard library.
+intersphinx_mapping = {'python': ('http://docs.python.org/', None),
+                       'swift': ('http://swift.openstack.org', None)}
+
diff --git a/doc/source/devref/addmethod.openstackapi.rst b/doc/source/devref/addmethod.openstackapi.rst
new file mode 100644
index 000000000..579b295a0
--- /dev/null
+++ b/doc/source/devref/addmethod.openstackapi.rst
@@ -0,0 +1,56 @@
+..
+      Copyright 2010-2011 OpenStack LLC
+      All Rights Reserved.
+
+      Licensed under the Apache License, Version 2.0 (the "License"); you may
+      not use this file except in compliance with the License. You may obtain
+      a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+      License for the specific language governing permissions and limitations
+      under the License.
+
+Adding a Method to the OpenStack API
+====================================
+
+The interface is a mostly RESTful API. REST stands for Representational State Transfer and provides an architecture "style" for distributed systems using HTTP for transport. Figure out a way to express your request and response in terms of resources that are being created, modified, read, or destroyed.
+
+Routing
+-------
+
+To map URLs to controllers+actions, OpenStack uses the Routes package, a clone of Rails routes for Python implementations. See http://routes.groovie.org/ for more information.
+
+URLs are mapped to "action" methods on "controller" classes in ``cinder/api/openstack/__init__/ApiRouter.__init__`` .
+
+See http://routes.groovie.org/manual.html for all syntax, but you'll probably just need these two:
+   - mapper.connect() lets you map a single URL to a single action on a controller.
+   - mapper.resource() connects many standard URLs to actions on a controller.
+
+Controllers and actions
+-----------------------
+
+Controllers live in ``cinder/api/openstack``, and inherit from cinder.wsgi.Controller.
+
+See ``cinder/api/openstack/servers.py`` for an example.
+
+Action methods take parameters that are sucked out of the URL by mapper.connect() or .resource().  The first two parameters are self and the WebOb request, from which you can get the req.environ, req.body, req.headers, etc.
+
+Serialization
+-------------
+
+Actions return a dictionary, and wsgi.Controller serializes that to JSON or XML based on the request's content-type.
+
+If you define a new controller, you'll need to define a ``_serialization_metadata`` attribute on the class, to tell wsgi.Controller how to convert your dictionary to XML.  It needs to know the singular form of any list tag (e.g. ``<servers>`` list contains ``<server>`` tags) and which dictionary keys are to be XML attributes as opposed to subtags (e.g. ``<server id="4"/>`` instead of ``<server><id>4</id></server>``).
+
+See `cinder/api/openstack/servers.py` for an example.
+
+Faults
+------
+
+If you need to return a non-200, you should
+return faults.Fault(webob.exc.HTTPNotFound())
+replacing the exception as appropriate.
diff --git a/doc/source/devref/aggregates.rst b/doc/source/devref/aggregates.rst
new file mode 100644
index 000000000..616ff9826
--- /dev/null
+++ b/doc/source/devref/aggregates.rst
@@ -0,0 +1,65 @@
+..
+      Copyright 2012 OpenStack, LLC
+      Copyright 2012 Citrix Systems, Inc.
+      All Rights Reserved.
+
+      Licensed under the Apache License, Version 2.0 (the "License"); you may
+      not use this file except in compliance with the License. You may obtain
+      a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+      License for the specific language governing permissions and limitations
+      under the License.
+
+Host Aggregates
+===============
+
+This extension introduces the concept of aggregate into Cinder. Host aggregates are different from zones and availability zones: while the former allows the partition of Cinder deployments into logical groups for load balancing and instance distribution, the latter are for providing some form of physical isolation and redundancy from other availability zones (e.g. by using separate power supply and network gears). Availability zones do not necessarily mean geographic distribution whereas zones usually do. Host aggregates can be regarded as a mechanism to further partitioning an availability zone, i.e. into multiple groups of hosts that share common resources like storage and network. This enables a finer level of granularity in which to structure an entire OpenStack deployment. Aggregates allows higher availability of a single guest instance within an availability zone, it enables advanced VM placement strategies, and more importantly it enables hosts' zero-downtime upgrades (for example, via VM live migration across members of the aggregate, thus causing no disruption to guest instances).
+
+You can use this extension when you have multiple Compute nodes installed (only XenServer/XCP via xenapi driver is currently supported), and you want to leverage the capabilities of the underlying hypervisor resource pools. For example, you want to enable VM live migration (i.e. VM migration within the pool) or enable host maintenance with zero-downtime for guest instances. Please, note that VM migration across pools (i.e. storage migration) is not yet supported in XenServer/XCP, but will be added when available. Bear in mind that the two migration techniques are not mutually exclusive and can be used in combination for a higher level of flexibility in your cloud management.
+
+Design
+=======
+
+The OSAPI Admin API will be extended to support the following operations:
+
+    * Aggregates
+
+      * list aggregates: returns a list of all the host-aggregates (optionally filtered by availability zone)
+      * create aggregate: creates an aggregate, takes a friendly name, etc. returns an id
+      * show aggregate: shows the details of an aggregate (id, name, availability_zone, hosts and metadata)
+      * update aggregate: updates the name and availability zone of an aggregate
+      * set metadata: sets the metadata on an aggregate to the values supplied
+      * delete aggregate: deletes an aggregate, it fails if the aggregate is not empty
+      * add host: adds a host to the aggregate
+      * remove host: removes a host from the aggregate, it fails if the host is not disabled or
+
+    * Hosts
+
+      * start host maintenance (or evacuate-host): disallow a host to serve API requests and migrate instances to other hosts of the aggregate
+      * stop host maintenance: (or rebalance-host): put the host back into operational mode, migrating instances back onto that host
+
+Using the Cinder CLI
+==================
+
+Using the cinder command you can create, delete and manage aggregates. The following section outlines the list of available commands.
+
+Usage
+-----
+
+::
+
+  * aggregate-list                                                    Print a list of all aggregates.
+  * aggregate-create         <name> <availability_zone>               Create a new aggregate with the specified details.
+  * aggregate-delete         <id>                                     Delete the aggregate by its id.
+  * aggregate-details        <id>                                     Show details of the specified aggregate.
+  * aggregate-add-host       <id> <host>                              Add the host to the specified aggregate.
+  * aggregate-remove-host    <id> <host>                              Remove the specified host from the specfied aggregate.
+  * aggregate-set-metadata   <id> <key=value> [<key=value> ...]       Update the metadata associated with the aggregate.
+  * aggregate-update         <id> <name> [<availability_zone>]        Update the aggregate's name and optionally availablity zone.
+
+  * host-update              --maintenance [enable | disable]         Put/resume host into/from maintenance.
diff --git a/doc/source/devref/api.rst b/doc/source/devref/api.rst
new file mode 100644
index 000000000..f6edde88d
--- /dev/null
+++ b/doc/source/devref/api.rst
@@ -0,0 +1,270 @@
+..
+      Copyright 2010-2011 United States Government as represented by the
+      Administrator of the National Aeronautics and Space Administration. 
+      All Rights Reserved.
+
+      Licensed under the Apache License, Version 2.0 (the "License"); you may
+      not use this file except in compliance with the License. You may obtain
+      a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+      License for the specific language governing permissions and limitations
+      under the License.
+
+API Endpoint
+============
+
+Cinder has a system for managing multiple APIs on different subdomains.
+Currently there is support for the OpenStack API, as well as the Amazon EC2
+API.
+
+Common Components
+-----------------
+
+The :mod:`cinder.api` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. automodule:: cinder.api
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`cinder.api.cloud` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.api.cloud
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+OpenStack API
+-------------
+
+The :mod:`openstack` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. automodule:: cinder.api.openstack
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`auth` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. automodule:: cinder.api.openstack.auth
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`backup_schedules` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. automodule:: cinder.api.openstack.backup_schedules
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`faults` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. automodule:: cinder.api.openstack.faults
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`flavors` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. automodule:: cinder.api.openstack.flavors
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`images` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. automodule:: cinder.api.openstack.images
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`servers` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. automodule:: cinder.api.openstack.servers
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`sharedipgroups` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.. automodule:: cinder.api.openstack.sharedipgroups
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+EC2 API
+-------
+
+The :mod:`cinder.api.ec2` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.api.ec2
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`apirequest` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.api.ec2.apirequest
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`cloud` Module
+~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.api.ec2.cloud
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`images` Module
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.api.ec2.images
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`metadatarequesthandler` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.api.ec2.metadatarequesthandler
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+Tests
+-----
+
+The :mod:`api_unittest` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.api_unittest
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`api_integration` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.api_integration
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`cloud_unittest` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.cloud_unittest
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`api.fakes` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.api.fakes
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`api.test_wsgi` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.api.test_wsgi
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`test_api` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.api.openstack.test_api
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`test_auth` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.api.openstack.test_auth
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`test_faults` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.api.openstack.test_faults
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`test_flavors` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.api.openstack.test_flavors
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`test_images` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.api.openstack.test_images
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`test_servers` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.api.openstack.test_servers
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`test_sharedipgroups` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.api.openstack.test_sharedipgroups
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
diff --git a/doc/source/devref/architecture.rst b/doc/source/devref/architecture.rst
new file mode 100644
index 000000000..5715ee0ad
--- /dev/null
+++ b/doc/source/devref/architecture.rst
@@ -0,0 +1,52 @@
+..
+      Copyright 2010-2011 United States Government as represented by the
+      Administrator of the National Aeronautics and Space Administration.
+      All Rights Reserved.
+
+      Licensed under the Apache License, Version 2.0 (the "License"); you may
+      not use this file except in compliance with the License. You may obtain
+      a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+      License for the specific language governing permissions and limitations
+      under the License.
+
+Cinder System Architecture
+========================
+
+Cinder is built on a shared-nothing, messaging-based architecture. All of the major cinder components can be run on multiple servers. This means that most component to component communication must go via message queue. In order to avoid blocking each component while waiting for a response, we use deferred objects, with a callback that gets triggered when a response is received.
+
+Cinder recently moved to using a sql-based central database that is shared by all components in the system.  The amount and depth of the data fits into a sql database quite well.  For small deployments this seems like an optimal solution.  For larger deployments, and especially if security is a concern, cinder will be moving towards multiple data stores with some kind of aggregation system.
+
+Components
+----------
+
+Below you will find a helpful explanation of the different components.
+
+::
+
+                                      /- ( LDAP )
+                  [ Auth Manager ] ---
+                          |           \- ( DB )
+                          |
+                          |       [ scheduler ] - [ volume ]  - ( ATAoE/iSCSI )
+                          |                /
+  [ Web Dashboard ] -> [ api ] -- < AMQP > ------ [ network ] - ( Flat/Vlan )
+                          |                \
+                       < HTTP >   [ scheduler ] - [ compute ] - ( libvirt/xen )
+                          |                           |
+                   [ objectstore ] < - retrieves images
+
+* DB: sql database for data storage. Used by all components (LINKS NOT SHOWN)
+* Web Dashboard: potential external component that talks to the api
+* api: component that receives http requests, converts commands and communicates with other components via the queue or http (in the case of objectstore)
+* Auth Manager: component responsible for users/projects/and roles.  Can backend to DB or LDAP.  This is not a separate binary, but rather a python class that is used by most components in the system.
+* objectstore: http server that replicates s3 api and allows storage and retrieval of images
+* scheduler: decides which host gets each vm and volume
+* volume: manages dynamically attachable block devices.
+* network: manages ip forwarding, bridges, and vlans
+* compute: manages communication with hypervisor and virtual machines.
diff --git a/doc/source/devref/auth.rst b/doc/source/devref/auth.rst
new file mode 100644
index 000000000..625760929
--- /dev/null
+++ b/doc/source/devref/auth.rst
@@ -0,0 +1,276 @@
+..
+      Copyright 2010-2011 United States Government as represented by the
+      Administrator of the National Aeronautics and Space Administration.
+      All Rights Reserved.
+
+      Licensed under the Apache License, Version 2.0 (the "License"); you may
+      not use this file except in compliance with the License. You may obtain
+      a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+      License for the specific language governing permissions and limitations
+      under the License.
+
+.. _auth:
+
+Authentication and Authorization
+================================
+
+The :mod:`cinder.quota` Module
+----------------------------
+
+.. automodule:: cinder.quota
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`cinder.auth.signer` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.auth.signer
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Auth Manager
+------------
+
+The :mod:`cinder.auth.manager` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.auth.manager
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`cinder.auth.ldapdriver` Driver
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.auth.ldapdriver
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`cinder.auth.dbdriver` Driver
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.auth.dbdriver
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Tests
+-----
+
+
+The :mod:`auth_unittest` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.auth_unittest
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`access_unittest` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.access_unittest
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`quota_unittest` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.quota_unittest
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Legacy Docs
+-----------
+
+Cinder provides RBAC (Role-based access control) of the AWS-type APIs. We define the following roles:
+
+Roles-Based Access Control of AWS-style APIs using SAML Assertions
+“Achieving FIPS 199 Moderate certification of a hybrid cloud environment using CloudAudit and declarative C.I.A. classifications”
+
+
+Introduction
+------------
+
+We will investigate one method for integrating an AWS-style API with US eAuthentication-compatible federated authentication systems, to achieve access controls and limits based on traditional operational roles.
+Additionally, we will look at how combining this approach, with an implementation of the CloudAudit APIs, will allow us to achieve a certification under FIPS 199 Moderate classification for a hybrid cloud environment.
+
+
+Relationship of US eAuth to RBAC
+--------------------------------
+
+Typical implementations of US eAuth authentication systems are structured as follows::
+
+  [ MS Active Directory or other federated LDAP user store ]
+  	--> backends to…
+  [ SUN Identity Manager or other SAML Policy Controller ]
+  	--> maps URLs to groups…
+  [ Apache Policy Agent in front of eAuth-secured Web Application ]
+
+In more ideal implementations, the remainder of the application-specific account information is stored either in extended schema on the LDAP server itself, via the use of a translucent LDAP proxy, or in an independent datastore keyed off of the UID provided via SAML assertion.
+
+.. _auth_roles:
+
+
+Roles
+-----
+
+AWS API calls are traditionally secured via Access and Secret Keys, which are used to sign API calls, along with traditional timestamps to prevent replay attacks. The APIs can be logically grouped into sets that align with five typical roles:
+
+*	Base User
+*	System Administrator/Developer (currently have the same permissions)
+*	Network Administrator
+*	Project Manager
+*	Cloud Administrator/IT-Security (currently have the same permissions)
+
+There is an additional, conceptual end-user that may or may not have API access:
+
+*	(EXTERNAL) End-user / Third-party User
+
+Basic operations are available to any :
+
+*	Describe Instances
+*	Describe Images
+*	Describe Volumes
+*	Describe Keypairs
+*	Create Keypair
+*	Delete Keypair
+*	Create, Upload, Delete: Buckets and Keys (Object Store)
+
+System Administrators/Developers/Project Manager:
+
+*	Create, Attach, Delete Volume (Block Store)
+*	Launch, Reboot, Terminate Instance
+*	Register/Unregister Machine Image (project-wide)
+*	Request / Review CloudAudit Scans
+
+Project Manager:
+
+*	Add and remove other users (currently no api)
+*	Set roles (currently no api)
+
+Network Administrator:
+
+*	Change Machine Image properties (public / private)
+*	Change Firewall Rules, define Security Groups
+*	Allocate, Associate, Deassociate Public IP addresses
+
+Cloud Administrator/IT-Security:
+
+*	All permissions
+
+
+Enhancements
+------------
+
+*	SAML Token passing
+*	REST interfaces
+*	SOAP interfaces
+
+Wrapping the SAML token into the API calls.
+Then store the UID (fetched via backchannel) into the instance metadata, providing end-to-end auditability of ownership and responsibility, without PII.
+
+
+CloudAudit APIs
+---------------
+
+*	Request formats
+*	Response formats
+*	Stateless asynchronous queries
+
+CloudAudit queries may spawn long-running processes (similar to launching instances, etc.) They need to return a ReservationId in the same fashion, which can be returned in further queries for updates.
+RBAC of CloudAudit API calls is critical, since detailed system information is a system vulnerability.
+
+
+Type declarations
+-----------------
+*	Data declarations – Volumes and Objects
+*	System declarations – Instances
+
+Existing API calls to launch instances specific a single, combined “type” flag. We propose to extend this with three additional type declarations, mapping to the “Confidentiality, Integrity, Availability” classifications of FIPS 199. An example API call would look like::
+
+  RunInstances type=m1.large number=1 secgroup=default key=mykey confidentiality=low integrity=low availability=low
+
+These additional parameters would also apply to creation of block storage volumes (along with the existing parameter of ‘size’), and creation of object storage ‘buckets’. (C.I.A. classifications on a bucket would be inherited by the keys within this bucket.)
+
+
+Request Brokering
+-----------------
+
+*	Cloud Interop
+*	IMF Registration / PubSub
+*	Digital C&A
+
+Establishing declarative semantics for individual API calls will allow the cloud environment to seamlessly proxy these API calls to external, third-party vendors – when the requested CIA levels match.
+
+See related work within the Infrastructure 2.0 working group for more information on how the IMF Metadata specification could be utilized to manage registration of these vendors and their C&A credentials.
+
+
+Dirty Cloud – Hybrid Data Centers
+---------------------------------
+
+*	CloudAudit bridge interfaces
+*	Anything in the ARP table
+
+A hybrid cloud environment provides dedicated, potentially co-located physical hardware with a network interconnect to the project or users’ cloud virtual network.
+
+This interconnect is typically a bridged VPN connection. Any machines that can be bridged into a hybrid environment in this fashion (at Layer 2) must implement a minimum version of the CloudAudit spec, such that they can be queried to provide a complete picture of the IT-sec runtime environment.
+
+Network discovery protocols (ARP, CDP) can be applied in this case, and existing protocols (SNMP location data, DNS LOC records) overloaded to provide CloudAudit information.
+
+
+The Details
+-----------
+
+*	Preliminary Roles Definitions
+*	Categorization of available API calls
+*	SAML assertion vocabulary
+
+
+System limits
+-------------
+
+The following limits need to be defined and enforced:
+
+*	Total number of instances allowed (user / project)
+*	Total number of instances, per instance type (user / project)
+*	Total number of volumes (user / project)
+*	Maximum size of volume
+*	Cumulative size of all volumes
+*	Total use of object storage (GB)
+*	Total number of Public IPs
+
+
+Further Challenges
+------------------
+
+*	Prioritization of users / jobs in shared computing environments
+*	Incident response planning
+*	Limit launch of instances to specific security groups based on AMI
+*	Store AMIs in LDAP for added property control
diff --git a/doc/source/devref/cloudpipe.rst b/doc/source/devref/cloudpipe.rst
new file mode 100644
index 000000000..770807fbb
--- /dev/null
+++ b/doc/source/devref/cloudpipe.rst
@@ -0,0 +1,166 @@
+..
+      Copyright 2010-2011 United States Government as represented by the
+      Administrator of the National Aeronautics and Space Administration.
+      All Rights Reserved.
+
+      Licensed under the Apache License, Version 2.0 (the "License"); you may
+      not use this file except in compliance with the License. You may obtain
+      a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+      License for the specific language governing permissions and limitations
+      under the License.
+
+
+.. _cloudpipe:
+
+Cloudpipe -- Per Project Vpns
+=============================
+
+Cloudpipe is a method for connecting end users to their project instances in vlan mode.
+
+
+Overview
+--------
+
+The support code for cloudpipe implements admin commands (via cinder-manage) to automatically create a vm for a project that allows users to vpn into the private network of their project. Access to this vpn is provided through a public port on the network host for the project.  This allows users to have free access to the virtual machines in their project without exposing those machines to the public internet.
+
+
+Cloudpipe Image
+---------------
+
+The cloudpipe image is basically just a linux instance with openvpn installed.  It needs a simple script to grab user data from the metadata server, b64 decode it into a zip file, and run the autorun.sh script from inside the zip.  The autorun script will configure and run openvpn to run using the data from cinder.
+
+It is also useful to have a cron script that will periodically redownload the metadata and copy the new crl.  This will keep revoked users from connecting and will disconnect any users that are connected with revoked certificates when their connection is renegotiated (every hour).
+
+
+Creating a Cloudpipe Image
+--------------------------
+
+Making a cloudpipe image is relatively easy.
+
+# install openvpn on a base ubuntu image.
+# set up a server.conf.template in /etc/openvpn/
+
+.. literalinclude:: server.conf.template
+   :language: bash
+   :linenos:
+
+# set up.sh in /etc/openvpn/
+
+.. literalinclude:: up.sh
+   :language: bash
+   :linenos:
+
+# set down.sh in /etc/openvpn/
+
+.. literalinclude:: down.sh
+   :language: bash
+   :linenos:
+
+# download and run the payload on boot from /etc/rc.local
+
+.. literalinclude:: rc.local
+   :language: bash
+   :linenos:
+
+# setup /etc/network/interfaces
+
+.. literalinclude:: interfaces
+   :language: bash
+   :linenos:
+
+# register the image and set the image id in your flagfile::
+
+    --vpn_image_id=ami-xxxxxxxx
+
+# you should set a few other flags to make vpns work properly::
+
+    --use_project_ca
+    --cnt_vpn_clients=5
+
+
+Cloudpipe Launch
+----------------
+
+When you use cinder-manage to launch a cloudpipe for a user, it goes through the following process:
+
+#. creates a keypair called <project_id>-vpn and saves it in the keys directory
+#. creates a security group <project_id>-vpn and opens up 1194 and icmp
+#. creates a cert and private key for the vpn instance and saves it in the CA/projects/<project_id>/ directory
+#. zips up the info and puts it b64 encoded as user data
+#. launches an m1.tiny instance with the above settings using the flag-specified vpn image
+
+
+Vpn Access
+----------
+
+In vlan networking mode, the second ip in each private network is reserved for the cloudpipe instance.  This gives a consistent ip to the instance so that cinder-network can create forwarding rules for access from the outside world.  The network for each project is given a specific high-numbered port on the public ip of the network host.  This port is automatically forwarded to 1194 on the vpn instance.
+
+If specific high numbered ports do not work for your users, you can always allocate and associate a public ip to the instance, and then change the vpn_public_ip and vpn_public_port in the database.  This will be turned into a cinder-manage command or a flag soon.
+
+
+Certificates and Revocation
+---------------------------
+
+If the use_project_ca flag is set (required to for cloudpipes to work securely), then each project has its own ca.  This ca is used to sign the certificate for the vpn, and is also passed to the user for bundling images.  When a certificate is revoked using cinder-manage, a new Certificate Revocation List (crl) is generated.  As long as cloudpipe has an updated crl, it will block revoked users from connecting to the vpn.
+
+The userdata for cloudpipe isn't currently updated when certs are revoked, so it is necessary to restart the cloudpipe instance if a user's credentials are revoked.
+
+
+Restarting Cloudpipe VPN
+------------------------
+
+You can reboot a cloudpipe vpn through the api if something goes wrong (using euca-reboot-instances for example), but if you generate a new crl, you will have to terminate it and start it again using cinder-manage vpn run.  The cloudpipe instance always gets the first ip in the subnet and it can take up to 10 minutes for the ip to be recovered.  If you try to start the new vpn instance too soon, the instance will fail to start because of a NoMoreAddresses error.  If you can't wait 10 minutes, you can manually update the ip with something like the following (use the right ip for the project)::
+
+    euca-terminate-instances <instance_id>
+    mysql cinder -e "update fixed_ips set allocated=0, leased=0, instance_id=NULL where fixed_ip='10.0.0.2'"
+
+You also will need to terminate the dnsmasq running for the user (make sure you use the right pid file)::
+
+    sudo kill `cat /var/lib/cinder/br100.pid`
+
+Now you should be able to re-run the vpn::
+
+    cinder-manage vpn run <project_id>
+
+
+Logging into Cloudpipe VPN
+--------------------------
+
+The keypair that was used to launch the cloudpipe instance should be in the keys/<project_id> folder.  You can use this key to log into the cloudpipe instance for debugging purposes.
+
+
+The :mod:`cinder.cloudpipe.pipelib` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.cloudpipe.pipelib
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`cinder.api.cloudpipe` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.api.cloudpipe
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`cinder.crypto` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.crypto
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
diff --git a/doc/source/devref/database.rst b/doc/source/devref/database.rst
new file mode 100644
index 000000000..e723658ef
--- /dev/null
+++ b/doc/source/devref/database.rst
@@ -0,0 +1,63 @@
+..
+      Copyright 2010-2011 United States Government as represented by the
+      Administrator of the National Aeronautics and Space Administration. 
+      All Rights Reserved.
+
+      Licensed under the Apache License, Version 2.0 (the "License"); you may
+      not use this file except in compliance with the License. You may obtain
+      a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+      License for the specific language governing permissions and limitations
+      under the License.
+
+The Database Layer
+==================
+
+The :mod:`cinder.db.api` Module
+-----------------------------
+
+.. automodule:: cinder.db.api
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The Sqlalchemy Driver
+---------------------
+
+The :mod:`cinder.db.sqlalchemy.api` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.db.sqlalchemy.api
+    :noindex:
+
+The :mod:`cinder.db.sqlalchemy.models` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.db.sqlalchemy.models
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`cinder.db.sqlalchemy.session` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.db.sqlalchemy.session
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Tests
+-----
+
+Tests are lacking for the db api layer and for the sqlalchemy driver.
+Failures in the drivers would be detected in other test cases, though.
diff --git a/doc/source/devref/development.environment.rst b/doc/source/devref/development.environment.rst
new file mode 100644
index 000000000..739035a13
--- /dev/null
+++ b/doc/source/devref/development.environment.rst
@@ -0,0 +1,152 @@
+..
+      Copyright 2010-2011 United States Government as represented by the
+      Administrator of the National Aeronautics and Space Administration.
+      All Rights Reserved.
+
+      Licensed under the Apache License, Version 2.0 (the "License"); you may
+      not use this file except in compliance with the License. You may obtain
+      a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+      License for the specific language governing permissions and limitations
+      under the License.
+
+Setting Up a Development Environment
+====================================
+
+This page describes how to setup a working Python development
+environment that can be used in developing cinder on Ubuntu, Fedora or
+Mac OS X. These instructions assume you're already familiar with
+git. Refer to GettingTheCode_ for additional information.
+
+.. _GettingTheCode: http://wiki.openstack.org/GettingTheCode
+
+Following these instructions will allow you to run the cinder unit
+tests. If you want to be able to run cinder (i.e., launch VM instances),
+you will also need to install libvirt and at least one of the
+`supported hypervisors`_. Running cinder is currently only supported on
+Linux, although you can run the unit tests on Mac OS X. See
+:doc:`../quickstart` for how to get a working version of OpenStack
+Compute running as quickly as possible.
+
+.. _supported hypervisors: http://wiki.openstack.org/HypervisorSupportMatrix
+
+Virtual environments
+--------------------
+
+Cinder development uses `virtualenv <http://pypi.python.org/pypi/virtualenv>`__ to track and manage Python
+dependencies while in development and testing. This allows you to
+install all of the Python package dependencies in a virtual
+environment or "virtualenv" (a special subdirectory of your cinder
+directory), instead of installing the packages at the system level.
+
+.. note::
+
+   Virtualenv is useful for running the unit tests, but is not
+   typically used for full integration testing or production usage.
+
+Linux Systems
+-------------
+
+.. note::
+
+  This section is tested for Cinder on Ubuntu (10.10-64) and
+  Fedora-based (RHEL 6.1) distributions. Feel free to add notes and
+  change according to your experiences or operating system.
+
+Install the prerequisite packages.
+
+On Ubuntu::
+
+  sudo apt-get install python-dev libssl-dev python-pip git-core
+
+On Fedora-based distributions (e.g., Fedora/RHEL/CentOS/Scientific Linux)::
+
+  sudo yum install python-devel openssl-devel python-pip git
+
+
+Mac OS X Systems
+----------------
+
+Install virtualenv::
+
+    sudo easy_install virtualenv
+
+Check the version of OpenSSL you have installed::
+
+    openssl version
+
+If you have installed OpenSSL 1.0.0a, which can happen when installing a
+MacPorts package for OpenSSL, you will see an error when running
+``cinder.tests.auth_unittest.AuthTestCase.test_209_can_generate_x509``.
+
+The stock version of OpenSSL that ships with Mac OS X 10.6 (OpenSSL 0.9.8l)
+or Mac OS X 10.7 (OpenSSL 0.9.8r) works fine with cinder.
+
+
+Getting the code
+----------------
+Grab the code from GitHub::
+
+    git clone https://github.com/openstack/cinder.git
+    cd cinder
+
+
+Running unit tests
+------------------
+The unit tests will run by default inside a virtualenv in the ``.venv``
+directory. Run the unit tests by doing::
+
+    ./run_tests.sh
+
+The first time you run them, you will be asked if you want to create a virtual
+environment (hit "y")::
+
+    No virtual environment found...create one? (Y/n)
+
+See :doc:`unit_tests` for more details.
+
+.. _virtualenv:
+
+Manually installing and using the virtualenv
+--------------------------------------------
+
+You can manually install the virtual environment instead of having
+``run_tests.sh`` do it for you::
+
+  python tools/install_venv.py
+
+This will install all of the Python packages listed in the
+``tools/pip-requires`` file into your virtualenv. There will also be some
+additional packages (pip, distribute, greenlet) that are installed
+by the ``tools/install_venv.py`` file into the virutalenv.
+
+If all goes well, you should get a message something like this::
+
+  Cinder development environment setup is complete.
+
+To activate the Cinder virtualenv for the extent of your current shell session
+you can run::
+
+     $ source .venv/bin/activate
+
+Or, if you prefer, you can run commands in the virtualenv on a case by case
+basis by running::
+
+     $ tools/with_venv.sh <your command>
+
+Contributing Your Work
+----------------------
+
+Once your work is complete you may wish to contribute it to the project.  Add
+your name and email address to the ``Authors`` file, and also to the ``.mailmap``
+file if you use multiple email addresses. Your contributions can not be merged
+into trunk unless you are listed in the Authors file. Cinder uses the Gerrit
+code review system. For information on how to submit your branch to Gerrit,
+see GerritWorkflow_.
+
+.. _GerritWorkflow: http://wiki.openstack.org/GerritWorkflow
diff --git a/doc/source/devref/down.sh b/doc/source/devref/down.sh
new file mode 100644
index 000000000..5c1888870
--- /dev/null
+++ b/doc/source/devref/down.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+BR=$1
+DEV=$2
+
+/usr/sbin/brctl delif $BR $DEV
+/sbin/ifconfig $DEV down
diff --git a/doc/source/devref/fakes.rst b/doc/source/devref/fakes.rst
new file mode 100644
index 000000000..ecc3ce277
--- /dev/null
+++ b/doc/source/devref/fakes.rst
@@ -0,0 +1,85 @@
+..
+      Copyright 2010-2011 United States Government as represented by the
+      Administrator of the National Aeronautics and Space Administration. 
+      All Rights Reserved.
+
+      Licensed under the Apache License, Version 2.0 (the "License"); you may
+      not use this file except in compliance with the License. You may obtain
+      a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+      License for the specific language governing permissions and limitations
+      under the License.
+
+Fake Drivers
+============
+
+.. todo:: document general info about fakes
+
+When the real thing isn't available and you have some development to do these
+fake implementations of various drivers let you get on with your day.
+
+
+The :mod:`cinder.virt.fake` Module
+--------------------------------
+
+.. automodule:: cinder.virt.fake
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`cinder.auth.fakeldap` Module
+------------------------------------
+
+.. automodule:: cinder.auth.fakeldap
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+    
+
+The :mod:`cinder.testing.fake.rabbit` Module
+------------------------------------------
+
+.. automodule:: cinder.testing.fake.rabbit
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :class:`cinder.volume.driver.FakeAOEDriver` Class
+---------------------------------------------------
+
+.. autoclass:: cinder.volume.driver.FakeAOEDriver
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :class:`cinder.tests.service_unittest.FakeManager` Class
+----------------------------------------------------------
+
+.. autoclass:: cinder.tests.service_unittest.FakeManager
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`cinder.tests.api.openstack.fakes` Module
+------------------------------------------------
+
+.. automodule:: cinder.tests.api.openstack.fakes
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
diff --git a/doc/source/devref/filter_scheduler.rst b/doc/source/devref/filter_scheduler.rst
new file mode 100644
index 000000000..ef98e3b3b
--- /dev/null
+++ b/doc/source/devref/filter_scheduler.rst
@@ -0,0 +1,258 @@
+Filter Scheduler
+================
+
+The **Filter Scheduler** supports `filtering` and `weighting` to make informed
+decisions on where a new instance should be created. This Scheduler supports
+only working with Compute Nodes.
+
+Filtering
+---------
+
+.. image:: /images/filteringWorkflow1.png
+
+During its work Filter Scheduler firstly makes dictionary of unfiltered hosts,
+then filters them using filter properties and finally chooses hosts for the
+requested number of instances (each time it chooses the least costed host and
+appends it to the list of selected costs).
+
+If it turns up, that it can't find candidates for the next instance, it means
+that there are no more appropriate instances locally.
+
+If we speak about `filtering` and `weighting`, their work is quite flexible
+in the Filter Scheduler. There are a lot of filtering strategies for the
+Scheduler to support. Also you can even implement `your own algorithm of
+filtering`.
+
+There are some standard filter classes to use (:mod:`cinder.scheduler.filters`):
+
+* |AllHostsFilter| - frankly speaking, this filter does no operation. It
+  returns all the available hosts after its work.
+* |AvailabilityZoneFilter| - filters hosts by availability zone. It returns
+  hosts with the same availability zone as the requested instance has in its
+  properties.
+* |ComputeFilter| - checks that the capabilities provided by the compute
+  service satisfy the extra specifications, associated with the instance type.
+  It returns a list of hosts that can create instance type.
+* |CoreFilter| - filters based on CPU core utilization. It will approve host if
+  it has sufficient number of CPU cores.
+* |IsolatedHostsFilter| - filter based on "image_isolated" and "host_isolated"
+  flags.
+* |JsonFilter| - allows simple JSON-based grammar for selecting hosts.
+* |RamFilter| - filters hosts by their RAM. So, it returns only the hosts with
+  enough available RAM.
+* |SimpleCIDRAffinityFilter| - allows to put a new instance on a host within
+  the same IP block.
+* |DifferentHostFilter| - allows to put the instance on a different host from a
+  set of instances.
+* |SameHostFilter| - puts the instance on the same host as another instance in
+  a set of of instances.
+
+Now we can focus on these standard filter classes in details. I will pass the
+simplest ones, such as |AllHostsFilter|, |CoreFilter| and |RamFilter| are,
+because their functionality is quite simple and can be understood just from the
+code. For example class |RamFilter| has the next realization:
+
+::
+
+    class RamFilter(filters.BaseHostFilter):
+        """Ram Filter with over subscription flag"""
+
+        def host_passes(self, host_state, filter_properties):
+            """Only return hosts with sufficient available RAM."""
+            instance_type = filter_properties.get('instance_type')
+            requested_ram = instance_type['memory_mb']
+            free_ram_mb = host_state.free_ram_mb
+            return free_ram_mb * FLAGS.ram_allocation_ratio >= requested_ram
+
+Here `ram_allocation_ratio` means the virtual RAM to physical RAM allocation
+ratio (it is 1.5 by default). Really, nice and simple.
+
+Next standard filter to describe is |AvailabilityZoneFilter| and it isn't
+difficult too. This filter just looks at the availability zone of compute node
+and availability zone from the properties of the request. Each compute service
+has its own availability zone. So deployment engineers have an option to run
+scheduler with availability zones support and can configure availability zones
+on each compute host. This classes method `host_passes` returns `True` if
+availability zone mentioned in request is the same on the current compute host.
+
+|ComputeFilter| checks if host can create `instance_type`. Let's note that
+instance types describe the compute, memory and storage capacity of cinder
+compute nodes, it is the list of characteristics such as number of vCPUs,
+amount RAM and so on. So |ComputeFilter| looks at hosts' capabilities (host
+without requested specifications can't be chosen for the creating of the
+instance), checks if the hosts service is up based on last heartbeat. Finally,
+this Scheduler can verify if host satisfies some `extra specifications`
+associated with the instance type (of course if there are no such extra
+specifications, every host suits them).
+
+Now we are going to |IsolatedHostsFilter|. There can be some special hosts
+reserved for specific images. These hosts are called **isolated**. So the
+images to run on the isolated hosts are also called isolated. This Scheduler
+checks if `image_isolated` flag named in instance specifications is the same
+that the host has.
+
+|DifferentHostFilter| - its method `host_passes` returns `True` if host to
+place instance on is different from all the hosts used by set of instances.
+
+|SameHostFilter| does the opposite to what |DifferentHostFilter| does. So its
+`host_passes` returns `True` if the host we want to place instance on is one
+of the set of instances uses.
+
+|SimpleCIDRAffinityFilter| looks at the subnet mask and investigates if
+the network address of the current host is in the same sub network as it was
+defined in the request.
+
+|JsonFilter| - this filter provides the opportunity to write complicated
+queries for the hosts capabilities filtering, based on simple JSON-like syntax.
+There can be used the following operations for the host states properties:
+'=', '<', '>', 'in', '<=', '>=', that can be combined with the following
+logical operations: 'not', 'or', 'and'. For example, there is the query you can
+find in tests:
+
+::
+
+    ['and',
+        ['>=', '$free_ram_mb', 1024],
+        ['>=', '$free_disk_mb', 200 * 1024]
+    ]
+
+This query will filter all hosts with free RAM greater or equal than 1024 MB
+and at the same time with free disk space greater or equal than 200 GB.
+
+Many filters use data from `scheduler_hints`, that is defined in the moment of
+creation of the new server for the user. The only exeption for this rule is
+|JsonFilter|, that takes data in some strange difficult to understand way.
+
+To use filters you specify next two settings:
+
+* `scheduler_available_filters` - points available filters.
+* `scheduler_default_filters` - points filters to be used by default from the
+  list of available ones.
+
+Host Manager sets up these flags in `cinder.conf` by default on the next values:
+
+::
+
+    --scheduler_available_filters=cinder.scheduler.filters.standard_filters
+    --scheduler_default_filters=RamFilter,ComputeFilter,AvailabilityZoneFilter
+
+These two lines mean, that all the filters in the `cinder.scheduler.filters`
+would be available, and the default ones would be |RamFilter|, |ComputeFilter|
+and |AvailabilityZoneFilter|. 
+
+If you want to create **your own filter** you just need to inherit from
+|BaseHostFilter| and implement one method:
+`host_passes`. This method should return `True` if host passes the filter. It
+takes `host_state` (describes host) and `filter_properties` dictionary as the
+parameters.
+
+So in the end file cinder.conf should contain lines like these:
+
+::
+
+    --scheduler_driver=cinder.scheduler.distributed_scheduler.FilterScheduler
+    --scheduler_available_filters=cinder.scheduler.filters.standard_filters
+    --scheduler_available_filters=myfilter.MyFilter
+    --scheduler_default_filters=RamFilter,ComputeFilter,MyFilter
+
+As you see, flag `scheduler_driver` is set up for the `FilterSchedule`,
+available filters can be specified more than once and description of the
+default filters should not contain full paths with class names you need, only
+class names.
+
+Costs and weights
+-----------------
+
+Filter Scheduler uses so-called **weights** and **costs** during its work.
+
+`Costs` are the computed integers, expressing hosts measure of fitness to be
+chosen as a result of the request. Of course, costs are computed due to hosts
+characteristics compared with characteristics from the request. So trying to
+put instance on a not appropriate host (for example, trying to put really
+simple and plain instance on a high performance host) would have high cost, and
+putting instance on an appropriate host would have low.
+
+So let's find out, how does all this computing work happen.
+
+Before weighting Filter Scheduler creates the list of tuples containing weights
+and cost functions to use for weighing hosts. These functions can be got from
+cache, if this operation had been done before (this cache depends on `topic` of
+node, Filter Scheduler works with only the Compute Nodes, so the topic would be
+"`compute`" here). If there is no cost functions in cache associated with
+"compute", Filter Scheduler tries to get these cost functions from `cinder.conf`.
+Weight in tuple means weight of cost function matching with it. It also can be
+got from `cinder.conf`. After that Scheduler weights host, using selected cost
+functions. It does this using `weighted_sum` method, which parameters are:
+
+* `weighted_fns` - list of cost functions created with their weights;
+* `host_states` - hosts to be weighted;
+* `weighing_properties` - dictionary of values that can influence weights.
+
+This method firstly creates a grid of function results (it just counts value of
+each function using `host_state` and `weighing_properties`) - `scores`, where
+it would be one row per host and one function per column. The next step is to
+multiply value from the each cell of the grid by the weight of appropriate cost
+function. And the final step is to sum values in the each row - it would be the
+weight of host, described in this line. This method returns the host with the
+lowest weight - the best one.
+
+If we concentrate on cost functions, it would be important to say that we use
+`compute_fill_first_cost_fn` function by default, which simply returns hosts
+free RAM:
+
+::
+
+    def compute_fill_first_cost_fn(host_state, weighing_properties):
+        """More free ram = higher weight. So servers will less free ram will be
+           preferred."""
+        return host_state.free_ram_mb
+
+You can implement your own variant of cost function for the hosts capabilities
+you would like to mention. Using different cost functions (as you understand,
+there can be a lot of ones used in the same time) can make the chose of next
+host for the creating of the new instance flexible.
+
+These cost functions should be set up in the `cinder.conf` with the flag
+`least_cost_functions` (there can be more than one functions separated by
+commas). By default this line would look like this:
+
+::
+
+    --least_cost_functions=cinder.scheduler.least_cost.compute_fill_first_cost_fn
+
+As for weights of cost functions, they also should be described in `cinder.conf`.
+The line with this description looks the following way:
+**function_name_weight**.
+
+As for default cost function, it would be: `compute_fill_first_cost_fn_weight`,
+and by default it is 1.0.
+
+::
+
+    --compute_fill_first_cost_fn_weight=1.0
+
+Filter Scheduler finds local list of acceptable hosts by repeated filtering and
+weighing. Each time it chooses a host, it virtually consumes resources on it,
+so subsequent selections can adjust accordingly. It is useful if the customer
+asks for the some large amount of instances, because weight is computed for
+each instance requested.
+
+.. image:: /images/filteringWorkflow2.png
+
+In the end Filter Scheduler sorts selected hosts by their weight and provisions
+instances on them.
+
+P.S.: you can find more examples of using Filter Scheduler and standard filters
+in :mod:`cinder.tests.scheduler`.
+
+.. |AllHostsFilter| replace:: :class:`AllHostsFilter <cinder.scheduler.filters.all_hosts_filter.AllHostsFilter>`
+.. |AvailabilityZoneFilter| replace:: :class:`AvailabilityZoneFilter <cinder.scheduler.filters.availability_zone_filter.AvailabilityZoneFilter>`
+.. |BaseHostFilter| replace:: :class:`BaseHostFilter <cinder.scheduler.filters.BaseHostFilter>`
+.. |ComputeFilter| replace:: :class:`ComputeFilter <cinder.scheduler.filters.compute_filter.ComputeFilter>`
+.. |CoreFilter| replace:: :class:`CoreFilter <cinder.scheduler.filters.core_filter.CoreFilter>`
+.. |IsolatedHostsFilter| replace:: :class:`IsolatedHostsFilter <cinder.scheduler.filters.isolated_hosts_filter>`
+.. |JsonFilter| replace:: :class:`JsonFilter <cinder.scheduler.filters.json_filter.JsonFilter>`
+.. |RamFilter| replace:: :class:`RamFilter <cinder.scheduler.filters.ram_filter.RamFilter>`
+.. |SimpleCIDRAffinityFilter| replace:: :class:`SimpleCIDRAffinityFilter <cinder.scheduler.filters.affinity_filter.SimpleCIDRAffinityFilter>`
+.. |DifferentHostFilter| replace:: :class:`DifferentHostFilter <cinder.scheduler.filters.affinity_filter.DifferentHostFilter>`
+.. |SameHostFilter| replace:: :class:`SameHostFilter <cinder.scheduler.filters.affinity_filter.SameHostFilter>`
diff --git a/doc/source/devref/gerrit.rst b/doc/source/devref/gerrit.rst
new file mode 100644
index 000000000..ea4ffe019
--- /dev/null
+++ b/doc/source/devref/gerrit.rst
@@ -0,0 +1,16 @@
+Code Reviews with Gerrit
+========================
+
+Cinder uses the `Gerrit`_ tool to review proposed code changes. The review site
+is http://review.openstack.org.
+
+Gerrit is a complete replacement for Github pull requests. `All Github pull
+requests to the Cinder repository will be ignored`.
+
+See `Gerrit Workflow Quick Reference`_ for information about how to get
+started using Gerrit. See `Gerrit, Jenkins and Github`_ for more detailed
+documentation on how to work with Gerrit.
+
+.. _Gerrit: http://code.google.com/p/gerrit
+.. _Gerrit, Jenkins and Github: http://wiki.openstack.org/GerritJenkinsGithub
+.. _Gerrit Workflow Quick Reference: http://wiki.openstack.org/GerritWorkflow
diff --git a/doc/source/devref/glance.rst b/doc/source/devref/glance.rst
new file mode 100644
index 000000000..8e7aa2b71
--- /dev/null
+++ b/doc/source/devref/glance.rst
@@ -0,0 +1,28 @@
+..
+      Copyright 2010-2011 United States Government as represented by the
+      Administrator of the National Aeronautics and Space Administration. 
+      All Rights Reserved.
+
+      Licensed under the Apache License, Version 2.0 (the "License"); you may
+      not use this file except in compliance with the License. You may obtain
+      a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+      License for the specific language governing permissions and limitations
+      under the License.
+
+Glance Integration - The Future of File Storage
+===============================================
+
+The :mod:`cinder.image.service` Module
+------------------------------------
+
+.. automodule:: cinder.image.service
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/source/devref/il8n.rst b/doc/source/devref/il8n.rst
new file mode 100644
index 000000000..fabd2ce49
--- /dev/null
+++ b/doc/source/devref/il8n.rst
@@ -0,0 +1,34 @@
+Internationalization
+====================
+cinder uses `gettext <http://docs.python.org/library/gettext.html>`_ so that
+user-facing strings such as log messages appear in the appropriate
+language in different locales.
+
+To use gettext, make sure that the strings passed to the logger are wrapped
+in a ``_()`` function call. For example::
+
+    LOG.debug(_("block_device_mapping %s"), block_device_mapping)
+
+If you have multiple arguments, the convention is to use named parameters.
+It's common to use the ``locals()`` dict (which contains the names and values
+of the local variables in the current scope) to do the string interpolation.
+For example::
+
+    label = ...
+    sr_ref = ...
+    LOG.debug(_('Introduced %(label)s as %(sr_ref)s.') % locals())
+
+If you do not follow the project conventions, your code may cause the
+LocalizationTestCase.test_multiple_positional_format_placeholders test to fail
+in cinder/tests/test_localization.py.
+
+The ``_()`` function is brought into the global scope by doing::
+
+    import gettext
+    gettext.install("cinder", unicode=1)
+
+In general, you shouldn't need to add these to any cinder files, since the lines
+are present in ``cinder/__init__.py``. However, if this code is missing, it may
+result in an error that looks like like::
+
+    NameError: name '_' is not defined
diff --git a/doc/source/devref/index.rst b/doc/source/devref/index.rst
new file mode 100644
index 000000000..1688b7e09
--- /dev/null
+++ b/doc/source/devref/index.rst
@@ -0,0 +1,86 @@
+..
+      Copyright 2010-2011 United States Government as represented by the
+      Administrator of the National Aeronautics and Space Administration.
+      All Rights Reserved.
+
+      Licensed under the Apache License, Version 2.0 (the "License"); you may
+      not use this file except in compliance with the License. You may obtain
+      a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+      License for the specific language governing permissions and limitations
+      under the License.
+
+Developer Guide
+===============
+
+In this section you will find information on Cinder's lower level programming APIs.
+
+
+Programming HowTos and Tutorials
+--------------------------------
+.. toctree::
+    :maxdepth: 3
+
+    development.environment
+    unit_tests
+    addmethod.openstackapi
+
+
+Background Concepts for Cinder
+----------------------------
+.. toctree::
+   :maxdepth: 3
+
+   architecture
+   threading
+   il8n
+   filter_scheduler
+   multinic
+   rpc
+
+Other Resources
+---------------
+.. toctree::
+   :maxdepth: 3
+
+   launchpad
+   gerrit
+   jenkins
+
+API Reference
+-------------
+.. toctree::
+   :maxdepth: 3
+
+   ../api/autoindex
+
+Module Reference
+----------------
+.. toctree::
+   :maxdepth: 3
+
+   services
+   database
+   volume
+   xensmvolume
+   compute
+   network
+   auth
+   api
+   scheduler
+   fakes
+   cinder
+
+
+Indices and tables
+------------------
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
+
diff --git a/doc/source/devref/interfaces b/doc/source/devref/interfaces
new file mode 100644
index 000000000..b7116aeb7
--- /dev/null
+++ b/doc/source/devref/interfaces
@@ -0,0 +1,17 @@
+# This file describes the network interfaces available on your system
+# and how to activate them. For more information, see interfaces(5).
+
+# The loopback network interface
+auto lo
+iface lo inet loopback
+
+# The primary network interface
+auto eth0
+iface eth0 inet manual
+  up ifconfig $IFACE 0.0.0.0 up
+  down ifconfig $IFACE down
+
+auto br0
+iface br0 inet dhcp
+  bridge_ports eth0
+
diff --git a/doc/source/devref/jenkins.rst b/doc/source/devref/jenkins.rst
new file mode 100644
index 000000000..6e4a08c14
--- /dev/null
+++ b/doc/source/devref/jenkins.rst
@@ -0,0 +1,41 @@
+Continuous Integration with Jenkins
+===================================
+
+Cinder uses a `Jenkins`_ server to automate development tasks. The Jenkins
+front-end is at http://jenkins.openstack.org. You must have an
+account on `Launchpad`_ to be able to access the OpenStack Jenkins site.
+
+Jenkins performs tasks such as:
+
+`gate-cinder-unittests`_
+    Run unit tests on proposed code changes that have been reviewed.
+
+`gate-cinder-pep8`_
+    Run PEP8 checks on proposed code changes that have been reviewed.
+
+`gate-cinder-merge`_
+    Merge reviewed code into the git repository.
+
+`cinder-coverage`_
+    Calculate test coverage metrics.
+
+`cinder-docs`_
+    Build this documentation and push it to http://cinder.openstack.org.
+
+`cinder-pylint`_
+    Run `pylint <http://www.logilab.org/project/pylint>`_ on the cinder code and
+    report violations.
+
+`cinder-tarball`_
+    Do ``python setup.py sdist`` to create a tarball of the cinder code and upload
+    it to http://cinder.openstack.org/tarballs
+
+.. _Jenkins: http://jenkins-ci.org
+.. _Launchpad: http://launchpad.net
+.. _gate-cinder-merge: https://jenkins.openstack.org/view/Cinder/job/gate-cinder-merge
+.. _gate-cinder-pep8: https://jenkins.openstack.org/view/Cinder/job/gate-cinder-pep8
+.. _gate-cinder-unittests: https://jenkins.openstack.org/view/Cinder/job/gate-cinder-unittests
+.. _cinder-coverage: https://jenkins.openstack.org/view/Cinder/job/cinder-coverage
+.. _cinder-docs: https://jenkins.openstack.org/view/Cinder/job/cinder-docs
+.. _cinder-pylint: https://jenkins.openstack.org/job/cinder-pylint
+.. _cinder-tarball: https://jenkins.openstack.org/job/cinder-tarball
diff --git a/doc/source/devref/launchpad.rst b/doc/source/devref/launchpad.rst
new file mode 100644
index 000000000..a72ec35a9
--- /dev/null
+++ b/doc/source/devref/launchpad.rst
@@ -0,0 +1,54 @@
+Project hosting with Launchpad
+==============================
+
+`Launchpad`_ hosts the Cinder project. The Cinder project homepage on Launchpad is
+http://launchpad.net/cinder.
+
+Launchpad credentials
+---------------------
+
+Creating a login on Launchpad is important even if you don't use the Launchpad
+site itself, since Launchpad credentials are used for logging in on several
+OpenStack-related sites. These sites include:
+
+ * `Wiki`_
+ * Gerrit (see :doc:`gerrit`)
+ * Jenkins (see :doc:`jenkins`)
+
+Mailing list
+------------
+
+The mailing list email is ``openstack@lists.launchpad.net``. This is a common
+mailing list across the OpenStack projects. To participate in the mailing list:
+
+#. Join the `Cinder Team`_ on Launchpad.
+#. Subscribe to the list on the `OpenStack Team`_ page on Launchpad.
+
+The mailing list archives are at https://lists.launchpad.net/openstack.
+
+
+Bug tracking
+------------
+
+Report Cinder bugs at https://bugs.launchpad.net/cinder
+
+Feature requests (Blueprints)
+-----------------------------
+
+Cinder uses Launchpad Blueprints to track feature requests. Blueprints are at
+https://blueprints.launchpad.net/cinder.
+
+Technical support (Answers)
+---------------------------
+
+Cinder uses Launchpad Answers to track Cinder technical support questions. The Cinder
+Answers page is at https://answers.launchpad.net/cinder.
+
+Note that the `OpenStack Forums`_ (which are not hosted on Launchpad) can also
+be used for technical support requests.
+
+.. _Launchpad: http://launchpad.net
+.. _Wiki: http://wiki.openstack.org
+.. _Cinder Team: https://launchpad.net/~cinder
+.. _OpenStack Team: https://launchpad.net/~openstack
+.. _OpenStack Forums: http://forums.openstack.org/
\ No newline at end of file
diff --git a/doc/source/devref/multinic.rst b/doc/source/devref/multinic.rst
new file mode 100644
index 000000000..8772c3080
--- /dev/null
+++ b/doc/source/devref/multinic.rst
@@ -0,0 +1,39 @@
+MultiNic
+========
+
+What is it
+----------
+
+Multinic allows an instance to have more than one vif connected to it. Each vif is representative of a separate network with its own IP block.
+
+Managers
+--------
+
+Each of the network managers are designed to run independently of the compute manager. They expose a common API for the compute manager to call to determine and configure the network(s) for an instance. Direct calls to either the network api or especially the DB should be avoided by the virt layers.
+
+On startup a manager looks in the networks table for networks it is assigned and configures itself to support that network. Using the periodic task, they will claim new networks that have no host set. Only one network per network-host will be claimed at a time. This allows for psuedo-loadbalancing if there are multiple network-hosts running.
+
+Flat Manager 
+------------
+
+    .. image:: /images/multinic_flat.png
+
+The Flat manager is most similar to a traditional switched network environment. It assumes that the IP routing, DNS, DHCP (possibly) and bridge creation is handled by something else. That is it makes no attempt to configure any of this. It does keep track of a range of IPs for the instances that are connected to the network to be allocated.
+
+Each instance will get a fixed IP from each network's pool. The guest operating system may be configured to gather this information through an agent or by the hypervisor injecting the files, or it may ignore it completely and come up with only a layer 2 connection.
+
+Flat manager requires at least one cinder-network process running that will listen to the API queue and respond to queries. It does not need to sit on any of the networks but it does keep track of the IPs it hands out to instances.
+
+FlatDHCP Manager
+----------------
+
+    .. image:: /images/multinic_dhcp.png
+
+FlatDHCP manager builds on the the Flat manager adding dnsmask (DNS and DHCP) and radvd (Router Advertisement) servers on the bridge for that network. The services run on the host that is assigned to that network. The FlatDHCP manager will create its bridge as specified when the network was created on the network-host when the network host starts up or when a new network gets allocated to that host. Compute nodes will also create the bridges as necessary and connect instance VIFs to them.
+
+VLAN Manager
+------------
+
+    .. image:: /images/multinic_vlan.png
+
+The VLAN manager sets up forwarding to/from a cloudpipe instance in addition to providing dnsmask (DNS and DHCP) and radvd (Router Advertisement) services for each network. The manager will create its bridge as specified when the network was created on the network-host when the network host starts up or when a new network gets allocated to that host. Compute nodes will also create the bridges as necessary and connect instance VIFs to them.
diff --git a/doc/source/devref/network.rst b/doc/source/devref/network.rst
new file mode 100644
index 000000000..e54049e55
--- /dev/null
+++ b/doc/source/devref/network.rst
@@ -0,0 +1,128 @@
+..
+      Copyright 2010-2011 United States Government as represented by the
+      Administrator of the National Aeronautics and Space Administration.
+      All Rights Reserved.
+
+      Licensed under the Apache License, Version 2.0 (the "License"); you may
+      not use this file except in compliance with the License. You may obtain
+      a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+      License for the specific language governing permissions and limitations
+      under the License.
+
+Networking
+==========
+
+.. todo::
+
+    * document hardware specific commands (maybe in admin guide?) (todd)
+    * document a map between flags and managers/backends (todd)
+
+
+The :mod:`cinder.network.manager` Module
+--------------------------------------
+
+.. automodule:: cinder.network.manager
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`cinder.network.linux_net` Driver
+----------------------------------------
+
+.. automodule:: cinder.network.linux_net
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+Tests
+-----
+
+The :mod:`network_unittest` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.network_unittest
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Legacy docs
+-----------
+
+The cinder networking components manage private networks, public IP addressing, VPN connectivity, and firewall rules.
+
+Components
+----------
+There are several key components:
+
+* NetworkController (Manages address and vlan allocation)
+* RoutingNode (NATs public IPs to private IPs, and enforces firewall rules)
+* AddressingNode (runs DHCP services for private networks)
+* BridgingNode (a subclass of the basic cinder ComputeNode)
+* TunnelingNode (provides VPN connectivity)
+
+Component Diagram
+-----------------
+
+Overview::
+
+                                (PUBLIC INTERNET)
+                                 |              \
+                                / \             / \
+                  [RoutingNode] ... [RN]    [TunnelingNode] ... [TN]
+                        |             \    /       |              |
+                        |            < AMQP >      |              |
+ [AddressingNode]--  (VLAN) ...         |        (VLAN)...    (VLAN)      --- [AddressingNode]
+                        \               |           \           /
+                       / \             / \         / \         / \
+                        [BridgingNode] ...          [BridgingNode]
+
+
+                  [NetworkController]   ...    [NetworkController]
+                                    \          /
+                                      < AMQP >
+                                         |
+                                        / \
+                       [CloudController]...[CloudController]
+
+While this diagram may not make this entirely clear, nodes and controllers communicate exclusively across the message bus (AMQP, currently).
+
+State Model
+-----------
+Network State consists of the following facts:
+
+* VLAN assignment (to a project)
+* Private Subnet assignment (to a security group) in a VLAN
+* Private IP assignments (to running instances)
+* Public IP allocations (to a project)
+* Public IP associations (to a private IP / running instance)
+
+While copies of this state exist in many places (expressed in IPTables rule chains, DHCP hosts files, etc), the controllers rely only on the distributed "fact engine" for state, queried over RPC (currently AMQP).  The NetworkController inserts most records into this datastore (allocating addresses, etc) - however, individual nodes update state e.g. when running instances crash.
+
+The Public Traffic Path
+-----------------------
+
+Public Traffic::
+
+                (PUBLIC INTERNET)
+                       |
+                     <NAT>  <-- [RoutingNode]
+                       |
+ [AddressingNode] -->  |
+                    ( VLAN )
+                       |    <-- [BridgingNode]
+                       |
+                <RUNNING INSTANCE>
+
+The RoutingNode is currently implemented using IPTables rules, which implement both NATing of public IP addresses, and the appropriate firewall chains. We are also looking at using Netomata / Clusto to manage NATting within a switch or router, and/or to manage firewall rules within a hardware firewall appliance.
+
+Similarly, the AddressingNode currently manages running DNSMasq instances for DHCP services. However, we could run an internal DHCP server (using Scapy ala Clusto), or even switch to static addressing by inserting the private address into the disk image the same way we insert the SSH keys. (See compute for more details).
diff --git a/doc/source/devref/nova.rst b/doc/source/devref/nova.rst
new file mode 100644
index 000000000..57aba56be
--- /dev/null
+++ b/doc/source/devref/nova.rst
@@ -0,0 +1,215 @@
+..
+      Copyright 2010-2011 United States Government as represented by the
+      Administrator of the National Aeronautics and Space Administration. 
+      All Rights Reserved.
+
+      Licensed under the Apache License, Version 2.0 (the "License"); you may
+      not use this file except in compliance with the License. You may obtain
+      a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+      License for the specific language governing permissions and limitations
+      under the License.
+
+Common and Misc Libraries
+=========================
+
+Libraries common throughout Cinder or just ones that haven't been categorized
+very well yet.
+
+
+The :mod:`cinder.adminclient` Module
+----------------------------------
+
+.. automodule:: cinder.adminclient
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`cinder.context` Module
+------------------------------
+
+.. automodule:: cinder.context
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`cinder.exception` Module
+--------------------------------
+
+.. automodule:: cinder.exception
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`cinder.flags` Module
+----------------------------
+
+.. automodule:: cinder.flags
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`cinder.process` Module
+------------------------------
+
+.. automodule:: cinder.process
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`cinder.rpc` Module
+--------------------------
+
+.. automodule:: cinder.rpc
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`cinder.server` Module
+-----------------------------
+
+.. automodule:: cinder.server
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`cinder.test` Module
+---------------------------
+
+.. automodule:: cinder.test
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:  
+
+
+The :mod:`cinder.utils` Module
+----------------------------
+
+.. automodule:: cinder.utils
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`cinder.validate` Module
+-------------------------------
+
+.. automodule:: cinder.validate
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`cinder.wsgi` Module
+---------------------------
+
+.. automodule:: cinder.wsgi
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Tests
+-----
+
+The :mod:`declare_flags` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.declare_flags
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`fake_flags` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.fake_flags
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`flags_unittest` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.flags_unittest
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`process_unittest` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.process_unittest
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`real_flags` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.real_flags
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`rpc_unittest` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.rpc_unittest
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`runtime_flags` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.runtime_flags
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`validator_unittest` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.validator_unittest
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/source/devref/rc.local b/doc/source/devref/rc.local
new file mode 100644
index 000000000..d1ccf0cbc
--- /dev/null
+++ b/doc/source/devref/rc.local
@@ -0,0 +1,36 @@
+#!/bin/sh -e
+#
+# rc.local
+#
+# This script is executed at the end of each multiuser runlevel.
+# Make sure that the script will "exit 0" on success or any other
+# value on error.
+#
+# In order to enable or disable this script just change the execution
+# bits.
+#
+# By default this script does nothing.
+####### These lines go at the end of /etc/rc.local #######
+. /lib/lsb/init-functions
+
+echo Downloading payload from userdata
+wget http://169.254.169.254/latest/user-data -O /tmp/payload.b64
+echo Decrypting base64 payload
+openssl enc -d -base64 -in /tmp/payload.b64 -out /tmp/payload.zip
+
+mkdir -p /tmp/payload
+echo Unzipping payload file
+unzip -o /tmp/payload.zip -d /tmp/payload/
+
+# if the autorun.sh script exists, run it
+if [ -e /tmp/payload/autorun.sh ]; then
+  echo Running autorun.sh
+  cd /tmp/payload
+  sh /tmp/payload/autorun.sh
+
+else
+  echo rc.local : No autorun script to run
+fi
+
+
+exit 0
diff --git a/doc/source/devref/rpc.rst b/doc/source/devref/rpc.rst
new file mode 100644
index 000000000..f122ed3d3
--- /dev/null
+++ b/doc/source/devref/rpc.rst
@@ -0,0 +1,151 @@
+..
+      Copyright (c) 2010 Citrix Systems, Inc.
+      All Rights Reserved.
+
+      Licensed under the Apache License, Version 2.0 (the "License"); you may
+      not use this file except in compliance with the License. You may obtain
+      a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+      License for the specific language governing permissions and limitations
+      under the License.
+
+AMQP and Cinder
+=============
+
+AMQP is the messaging technology chosen by the OpenStack cloud.  The AMQP broker, either RabbitMQ or Qpid, sits between any two Cinder components and allows them to communicate in a loosely coupled fashion. More precisely, Cinder components (the compute fabric of OpenStack) use Remote Procedure Calls (RPC hereinafter) to communicate to one another; however such a paradigm is built atop the publish/subscribe paradigm so that the following benefits can be achieved:
+
+    * Decoupling between client and servant (such as the client does not need to know where the servant's reference is).
+    * Full a-synchronism between client and servant (such as the client does not need the servant to run at the same time of the remote call).
+    * Random balancing of remote calls (such as if more servants are up and running, one-way calls are transparently dispatched to the first available servant).
+
+Cinder uses direct, fanout, and topic-based exchanges. The architecture looks like the one depicted in the figure below:
+
+.. image:: /images/rpc/arch.png
+   :width: 60%
+
+..
+
+Cinder implements RPC (both request+response, and one-way, respectively nicknamed 'rpc.call' and 'rpc.cast') over AMQP by providing an adapter class which take cares of marshaling and unmarshaling of messages into function calls. Each Cinder service (for example Compute, Volume, etc.) create two queues at the initialization time, one which accepts messages with routing keys 'NODE-TYPE.NODE-ID' (for example compute.hostname) and another, which accepts messages with routing keys as generic 'NODE-TYPE' (for example compute). The former is used specifically when Cinder-API needs to redirect commands to a specific node like 'euca-terminate instance'. In this case, only the  compute node whose host's hypervisor is running the virtual machine can kill the instance. The API acts as a consumer when RPC calls are request/response, otherwise is acts as publisher only.
+
+Cinder RPC Mappings
+-----------------
+
+The figure below shows the internals of a message broker node (referred to as a RabbitMQ node in the diagrams) when a single instance is deployed and shared in an OpenStack cloud. Every Cinder component connects to the message broker and, depending on its personality (for example a compute node or a network node), may use the queue either as an Invoker (such as API or Scheduler) or a Worker (such as Compute, Volume or Network). Invokers and Workers do not actually exist in the Cinder object model, but we are going to use them as an abstraction for sake of clarity. An Invoker is a component that sends messages in the queuing system via two operations: 1) rpc.call and ii) rpc.cast; a Worker is a component that receives messages from the queuing system and reply accordingly to rcp.call operations.
+
+Figure 2 shows the following internal elements:
+
+    * Topic Publisher: a Topic Publisher comes to life when an rpc.call or an rpc.cast operation is executed; this object is instantiated and used to push a message to the queuing system. Every publisher connects always to the same topic-based exchange; its life-cycle is limited to the message delivery.
+    * Direct Consumer: a Direct Consumer comes to life if (an only if) a rpc.call operation is executed; this object is instantiated and used to receive a response message from the queuing system; Every consumer connects to a unique direct-based exchange via a unique exclusive queue; its life-cycle is limited to the message delivery; the exchange and queue identifiers are determined by a UUID generator, and are marshaled in the message sent by the Topic Publisher (only rpc.call operations).
+    * Topic Consumer: a Topic Consumer comes to life as soon as a Worker is instantiated and exists throughout its life-cycle; this object is used to receive messages from the queue and it invokes the appropriate action as defined by the Worker role. A Topic Consumer connects to the same topic-based exchange either via a shared queue or via a unique exclusive queue. Every Worker has two topic consumers, one that is addressed only during rpc.cast operations (and it connects to a shared queue whose exchange key is 'topic') and the other that is addressed only during rpc.call operations (and it connects to a unique queue whose exchange key is 'topic.host').
+    * Direct Publisher: a Direct Publisher comes to life only during rpc.call operations and it is instantiated to return the message required by the request/response operation. The object connects to a direct-based exchange whose identity is dictated by the incoming message.
+    * Topic Exchange: The Exchange is a routing table that exists in the context of a virtual host (the multi-tenancy mechanism provided by Qpid or RabbitMQ); its type (such as topic vs. direct) determines the routing policy; a message broker node will have only one topic-based exchange for every topic in Cinder.
+    * Direct Exchange: this is a routing table that is created during rpc.call operations; there are many instances of this kind of exchange throughout the life-cycle of a message broker node, one for each rpc.call invoked.
+    * Queue Element: A Queue is a message bucket. Messages are kept in the queue until a Consumer (either Topic or Direct Consumer) connects to the queue and fetch it. Queues can be shared or can be exclusive. Queues whose routing key is 'topic' are shared amongst Workers of the same personality.
+
+.. image:: /images/rpc/rabt.png
+   :width: 60%
+
+..
+
+RPC Calls
+---------
+
+The diagram below shows the message flow during an rp.call operation:
+
+    1. a Topic Publisher is instantiated to send the message request to the queuing system; immediately before the publishing operation, a Direct Consumer is instantiated to wait for the response message.
+    2. once the message is dispatched by the exchange, it is fetched by the Topic Consumer dictated by the routing key (such as 'topic.host') and passed to the Worker in charge of the task.
+    3. once the task is completed, a Direct Publisher is allocated to send the response message to the queuing system.
+    4. once the message is dispatched by the exchange, it is fetched by the Direct Consumer dictated by the routing key (such as 'msg_id') and passed to the Invoker.
+
+.. image:: /images/rpc/flow1.png
+   :width: 60%
+
+..
+
+RPC Casts
+---------
+
+The diagram below the message flow during an rp.cast operation:
+
+    1. A Topic Publisher is instantiated to send the message request to the queuing system.
+    2. Once the message is dispatched by the exchange, it is fetched by the Topic Consumer dictated by the routing key (such as 'topic') and passed to the Worker in charge of the task.
+
+.. image:: /images/rpc/flow2.png
+   :width: 60%
+
+..
+
+AMQP Broker Load
+----------------
+
+At any given time the load of a message broker node running either Qpid or RabbitMQ is function of the following parameters:
+
+    * Throughput of API calls: the number of API calls (more precisely rpc.call ops) being served by the OpenStack cloud dictates the number of direct-based exchanges, related queues and direct consumers connected to them.
+    * Number of Workers: there is one queue shared amongst workers with the same personality; however there are as many exclusive queues as the number of workers; the number of workers dictates also the number of routing keys within the topic-based exchange, which is shared amongst all workers.
+
+The figure below shows the status of a RabbitMQ node after Cinder components' bootstrap in a test environment. Exchanges and queues being created by Cinder components are:
+
+    * Exchanges
+       1. cinder (topic exchange)
+    * Queues
+       1. compute.phantom (phantom is hostname)
+       2. compute
+       3. network.phantom (phantom is hostname)
+       4. network
+       5. volume.phantom (phantom is hostname)
+       6. volume
+       7. scheduler.phantom (phantom is hostname)
+       8. scheduler
+
+.. image:: /images/rpc/state.png
+   :width: 60%
+
+..
+
+RabbitMQ Gotchas
+----------------
+
+Cinder uses Kombu to connect to the RabbitMQ environment. Kombu is a Python library that in turn uses AMQPLib, a library that implements the standard AMQP 0.8 at the time of writing. When using Kombu, Invokers and Workers need the following parameters in order to instantiate a Connection object that connects to the RabbitMQ server (please note that most of the following material can be also found in the Kombu documentation; it has been summarized and revised here for sake of clarity):
+
+    * Hostname: The hostname to the AMQP server.
+    * Userid: A valid username used to authenticate to the server.
+    * Password: The password used to authenticate to the server.
+    * Virtual_host: The name of the virtual host to work with. This virtual host must exist on the server, and the user must have access to it. Default is "/".
+    * Port: The port of the AMQP server. Default is 5672 (amqp).
+
+The following parameters are default:
+
+    * Insist: insist on connecting to a server. In a configuration with multiple load-sharing servers, the Insist option tells the server that the client is insisting on a connection to the specified server. Default is False.
+    * Connect_timeout: the timeout in seconds before the client gives up connecting to the server. The default is no timeout.
+    * SSL: use SSL to connect to the server. The default is False.
+
+More precisely Consumers need the following parameters:
+
+    * Connection: the above mentioned Connection object.
+    * Queue: name of the queue.
+    * Exchange: name of the exchange the queue binds to.
+    * Routing_key: the interpretation of the routing key depends on the value of the exchange_type attribute.
+
+      * Direct exchange: if the routing key property of the message and the routing_key attribute of the queue are identical, then the message is forwarded to the queue.
+      * Fanout exchange: messages are forwarded to the queues bound the exchange, even if the binding does not have a key.
+      * Topic exchange: if the routing key property of the message matches the routing key of the key according to a primitive pattern matching scheme, then the message is forwarded to the queue. The message routing key then consists of words separated by dots (".", like domain names), and two special characters are available; star ("") and hash ("#"). The star matches any word, and the hash matches zero or more words. For example ".stock.#" matches the routing keys "usd.stock" and "eur.stock.db" but not "stock.nasdaq".
+
+    * Durable: this flag determines the durability of both exchanges and queues; durable exchanges and queues remain active when a RabbitMQ server restarts. Non-durable exchanges/queues (transient exchanges/queues) are purged when a server restarts. It is worth noting that AMQP specifies that durable queues cannot bind to transient exchanges. Default is True.
+    * Auto_delete: if set, the exchange is deleted when all queues have finished using it. Default is False.
+    * Exclusive: exclusive queues (such as non-shared) may only be consumed from by the current connection. When exclusive is on, this also implies auto_delete. Default is False.
+    * Exchange_type: AMQP defines several default exchange types (routing algorithms) that covers most of the common messaging use cases.
+    * Auto_ack: acknowledgement is handled automatically once messages are received. By default auto_ack is set to False, and the receiver is required to manually handle acknowledgment.
+    * No_ack: it disable acknowledgement on the server-side. This is different from auto_ack in that acknowledgement is turned off altogether. This functionality increases performance but at the cost of reliability. Messages can get lost if a client dies before it can deliver them to the application.
+    * Auto_declare: if this is True and the exchange name is set, the exchange will be automatically declared at instantiation. Auto declare is on by default.
+      Publishers specify most the parameters of Consumers (such as they do not specify a queue name), but they can also specify the following:
+    * Delivery_mode: the default delivery mode used for messages. The value is an integer. The following delivery modes are supported by RabbitMQ:
+
+          * 1 or "transient": the message is transient. Which means it is stored in memory only, and is lost if the server dies or restarts.
+          * 2 or "persistent": the message is persistent. Which means the message is stored both in-memory, and on disk, and therefore preserved if the server dies or restarts.
+
+The default value is 2 (persistent). During a send operation, Publishers can override the delivery mode of messages so that, for example, transient messages can be sent over a durable queue.
diff --git a/doc/source/devref/scheduler.rst b/doc/source/devref/scheduler.rst
new file mode 100644
index 000000000..e63b7aeb4
--- /dev/null
+++ b/doc/source/devref/scheduler.rst
@@ -0,0 +1,71 @@
+..
+      Copyright 2010-2011 United States Government as represented by the
+      Administrator of the National Aeronautics and Space Administration. 
+      All Rights Reserved.
+
+      Licensed under the Apache License, Version 2.0 (the "License"); you may
+      not use this file except in compliance with the License. You may obtain
+      a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+      License for the specific language governing permissions and limitations
+      under the License.
+
+Scheduler
+=========
+
+The :mod:`cinder.scheduler.manager` Module
+----------------------------------------
+
+.. automodule:: cinder.scheduler.manager
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`cinder.scheduler.driver` Module
+---------------------------------------
+
+.. automodule:: cinder.scheduler.driver
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`cinder.scheduler.chance` Driver
+---------------------------------------
+
+.. automodule:: cinder.scheduler.chance
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`cinder.scheduler.simple` Driver
+---------------------------------------
+
+.. automodule:: cinder.scheduler.simple
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Tests
+-----
+
+The :mod:`scheduler_unittest` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.scheduler_unittest
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/source/devref/server.conf.template b/doc/source/devref/server.conf.template
new file mode 100644
index 000000000..feee3185b
--- /dev/null
+++ b/doc/source/devref/server.conf.template
@@ -0,0 +1,34 @@
+port 1194
+proto udp
+dev tap0
+up "/etc/openvpn/up.sh br0"
+down "/etc/openvpn/down.sh br0"
+
+persist-key
+persist-tun
+
+ca ca.crt
+cert server.crt
+key server.key  # This file should be kept secret
+
+dh dh1024.pem
+ifconfig-pool-persist ipp.txt
+
+server-bridge VPN_IP DHCP_SUBNET DHCP_LOWER DHCP_UPPER
+
+client-to-client
+keepalive 10 120
+comp-lzo
+
+max-clients 1
+
+user nobody
+group nogroup
+
+persist-key
+persist-tun
+
+status openvpn-status.log
+
+verb 3
+mute 20
\ No newline at end of file
diff --git a/doc/source/devref/services.rst b/doc/source/devref/services.rst
new file mode 100644
index 000000000..801f7c7a7
--- /dev/null
+++ b/doc/source/devref/services.rst
@@ -0,0 +1,55 @@
+..
+      Copyright 2010-2011 United States Government as represented by the
+      Administrator of the National Aeronautics and Space Administration.
+      All Rights Reserved.
+
+      Licensed under the Apache License, Version 2.0 (the "License"); you may
+      not use this file except in compliance with the License. You may obtain
+      a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+      License for the specific language governing permissions and limitations
+      under the License.
+
+.. _service_manager_driver:
+
+Services, Managers and Drivers
+==============================
+
+The responsibilities of Services, Managers, and Drivers, can be a bit confusing to people that are new to cinder.  This document attempts to outline the division of responsibilities to make understanding the system a little bit easier.
+
+Currently, Managers and Drivers are specified by flags and loaded using utils.load_object().  This method allows for them to be implemented as singletons, classes, modules or objects.  As long as the path specified by the flag leads to an object (or a callable that returns an object) that responds to getattr, it should work as a manager or driver.
+
+
+The :mod:`cinder.service` Module
+------------------------------
+
+.. automodule:: cinder.service
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+The :mod:`cinder.manager` Module
+------------------------------
+
+.. automodule:: cinder.manager
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+
+Implementation-Specific Drivers
+-------------------------------
+
+A manager will generally load a driver for some of its tasks. The driver is responsible for specific implementation details.  Anything running shell commands on a host, or dealing with other non-python code should probably be happening in a driver.
+
+Drivers should minimize touching the database, although it is currently acceptable for implementation specific data. This may be reconsidered at some point.
+
+It usually makes sense to define an Abstract Base Class for the specific driver (i.e. VolumeDriver), to define the methods that a different driver would need to implement.
diff --git a/doc/source/devref/threading.rst b/doc/source/devref/threading.rst
new file mode 100644
index 000000000..c48d353e0
--- /dev/null
+++ b/doc/source/devref/threading.rst
@@ -0,0 +1,51 @@
+Threading model
+===============
+
+All OpenStack services use *green thread* model of threading, implemented
+through using the Python `eventlet <http://eventlet.net/>`_ and
+`greenlet <http://packages.python.org/greenlet/>`_ libraries.
+
+Green threads use a cooperative model of threading: thread context
+switches can only occur when specific eventlet or greenlet library calls are
+made (e.g., sleep, certain I/O calls). From the operating system's point of
+view, each OpenStack service runs in a single thread.
+
+The use of green threads reduces the likelihood of race conditions, but does
+not completely eliminate them. In some cases, you may need to use the
+``@utils.synchronized(...)`` decorator to avoid races.
+
+In addition, since there is only one operating system thread, a call that
+blocks that main thread will block the entire process.
+
+Yielding the thread in long-running tasks
+-----------------------------------------
+If a code path takes a long time to execute and does not contain any methods
+that trigger an eventlet context switch, the long-running thread will block
+any pending threads.
+
+This scenario can be avoided by adding calls to the eventlet sleep method
+in the long-running code path. The sleep call will trigger a context switch
+if there are pending threads, and using an argument of 0 will avoid introducing
+delays in the case that there is only a single green thread::
+
+	from eventlet import greenthread
+	...
+	greenthread.sleep(0)
+
+
+MySQL access and eventlet
+-------------------------
+Queries to the MySQL database will block the main thread of a service. This is
+because OpenStack services use an external C library for accessing the MySQL
+database. Since eventlet cannot use monkey-patching to intercept blocking
+calls in a C library, the resulting database query blocks the thread.
+
+The Diablo release contained a thread-pooling implementation that did not
+block, but this implementation resulted in a `bug`_ and was removed.
+
+See this `mailing list thread`_ for a discussion of this issue, including
+a discussion of the `impact on performance`_.
+
+.. _bug: https://bugs.launchpad.net/cinder/+bug/838581
+.. _mailing list thread: https://lists.launchpad.net/openstack/msg08118.html
+.. _impact on performance: https://lists.launchpad.net/openstack/msg08217.html
diff --git a/doc/source/devref/unit_tests.rst b/doc/source/devref/unit_tests.rst
new file mode 100644
index 000000000..b42386b0d
--- /dev/null
+++ b/doc/source/devref/unit_tests.rst
@@ -0,0 +1,159 @@
+Unit Tests
+==========
+
+Cinder contains a suite of unit tests, in the cinder/tests directory.
+
+Any proposed code change will be automatically rejected by the OpenStack
+Jenkins server [#f1]_ if the change causes unit test failures.
+
+Running the tests
+-----------------
+Run the unit tests by doing::
+
+    ./run_tests.sh
+
+This script is a wrapper around the `nose`_ testrunner and the `pep8`_ checker.
+
+.. _nose: http://code.google.com/p/python-nose/
+.. _pep8: https://github.com/jcrocholl/pep8
+
+Flags
+-----
+
+The ``run_tests.sh`` script supports several flags. You can view a list of
+flags by doing::
+
+    run_tests.sh -h
+
+This will show the following help information::
+
+    Usage: ./run_tests.sh [OPTION]...
+    Run Cinder's test suite(s)
+
+      -V, --virtual-env        Always use virtualenv.  Install automatically if not present
+      -N, --no-virtual-env     Don't use virtualenv.  Run tests in local environment
+      -s, --no-site-packages   Isolate the virtualenv from the global Python environment
+      -r, --recreate-db        Recreate the test database (deprecated, as this is now the default).
+      -n, --no-recreate-db     Don't recreate the test database.
+      -x, --stop               Stop running tests after the first error or failure.
+      -f, --force              Force a clean re-build of the virtual environment. Useful when dependencies have been added.
+      -p, --pep8               Just run pep8
+      -P, --no-pep8            Don't run pep8
+      -c, --coverage           Generate coverage report
+      -h, --help               Print this usage message
+      --hide-elapsed           Don't print the elapsed time for each test along with slow test list
+
+Because ``run_tests.sh`` is a wrapper around nose, it also accepts the same
+flags as nosetests. See the `nose options documentation`_ for details about
+these additional flags.
+
+.. _nose options documentation: http://readthedocs.org/docs/nose/en/latest/usage.html#options
+
+Running a subset of tests
+-------------------------
+
+Instead of running all tests, you can specify an individual directory, file,
+class, or method that contains test code.
+
+To run the tests in the ``cinder/tests/scheduler`` directory::
+
+    ./run_tests.sh scheduler
+
+To run the tests in the ``cinder/tests/test_libvirt.py`` file::
+
+    ./run_tests.sh test_libvirt
+
+To run the tests in the `HostStateTestCase` class in
+``cinder/tests/test_libvirt.py``::
+
+    ./run_tests.sh test_libvirt:HostStateTestCase
+
+To run the `ToPrimitiveTestCase.test_dict` test method in
+``cinder/tests/test_utils.py``::
+
+    ./run_tests.sh test_utils:ToPrimitiveTestCase.test_dict
+
+
+Suppressing logging output when tests fail
+------------------------------------------
+
+By default, when one or more unit test fails, all of the data sent to the
+logger during the failed tests will appear on standard output, which typically
+consists of many lines of texts. The logging output can make it difficult to
+identify which specific tests have failed, unless your terminal has a large
+scrollback buffer or you have redirected output to a file.
+
+You can suppress the logging output by calling ``run_tests.sh`` with the nose
+flag::
+
+    --nologcapture
+
+Virtualenv
+----------
+
+By default, the tests use the Python packages installed inside a
+virtualenv [#f2]_. (This is equivalent to using the ``-V, --virtualenv`` flag).
+If the virtualenv does not exist, it will be created the first time the tests are run.
+
+If you wish to recreate the virtualenv, call ``run_tests.sh`` with the flag::
+
+    -f, --force
+
+Recreating the virtualenv is useful if the package dependencies have changed
+since the virtualenv was last created. If the ``tools/pip-requires`` or
+``tools/install_venv.py`` files have changed, it's a good idea to recreate the
+virtualenv.
+
+By default, the unit tests will see both the packages in the virtualenv and
+the packages that have been installed in the Python global environment. In
+some cases, the packages in the Python global environment may cause a conflict
+with the packages in the virtualenv. If this occurs, you can isolate the
+virtualenv from the global environment by using the flag::
+
+    -s, --no-site packages
+
+If you do not wish to use a virtualenv at all, use the flag::
+
+    -N, --no-virtual-env
+
+Database
+--------
+
+Some of the unit tests make queries against an sqlite database [#f3]_. By
+default, the test database (``tests.sqlite``) is deleted and recreated each
+time ``run_tests.sh`` is invoked (This is equivalent to using the
+``-r, --recreate-db`` flag). To reduce testing time if a database already
+exists it can be reused by using the flag::
+
+    -n, --no-recreate-db
+
+Reusing an existing database may cause tests to fail if the schema has
+changed. If any files in the ``cinder/db/sqlalchemy`` have changed, it's a good
+idea to recreate the test database.
+
+Gotchas
+-------
+
+**Running Tests from Shared Folders**
+
+If you are running the unit tests from a shared folder, you may see tests start
+to fail or stop completely as a result of Python lockfile issues [#f4]_. You
+can get around this by manually setting or updating the following line in
+``cinder/tests/fake_flags.py``::
+
+    FLAGS['lock_path'].SetDefault('/tmp')
+
+Note that you may use any location (not just ``/tmp``!) as long as it is not
+a shared folder.
+
+.. rubric:: Footnotes
+
+.. [#f1] See :doc:`jenkins`.
+
+.. [#f2] See :doc:`development.environment` for more details about the use of
+   virtualenv.
+
+.. [#f3] There is an effort underway to use a fake DB implementation for the
+   unit tests. See https://lists.launchpad.net/openstack/msg05604.html
+
+.. [#f4] See Vish's comment in this bug report: https://bugs.launchpad.net/cinder/+bug/882933
diff --git a/doc/source/devref/up.sh b/doc/source/devref/up.sh
new file mode 100644
index 000000000..073a58e15
--- /dev/null
+++ b/doc/source/devref/up.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+BR=$1
+DEV=$2
+MTU=$3
+/sbin/ifconfig $DEV mtu $MTU promisc up
+/usr/sbin/brctl addif $BR $DEV
diff --git a/doc/source/devref/volume.rst b/doc/source/devref/volume.rst
new file mode 100644
index 000000000..09badeef7
--- /dev/null
+++ b/doc/source/devref/volume.rst
@@ -0,0 +1,66 @@
+..
+      Copyright 2010-2011 United States Government as represented by the
+      Administrator of the National Aeronautics and Space Administration. 
+      All Rights Reserved.
+
+      Licensed under the Apache License, Version 2.0 (the "License"); you may
+      not use this file except in compliance with the License. You may obtain
+      a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+      License for the specific language governing permissions and limitations
+      under the License.
+
+Storage Volumes, Disks
+======================
+
+.. todo:: rework after iSCSI merge (see 'Old Docs') (todd or vish)
+
+
+The :mod:`cinder.volume.manager` Module
+-------------------------------------
+
+.. automodule:: cinder.volume.manager
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+The :mod:`cinder.volume.driver` Module
+-------------------------------------
+
+.. automodule:: cinder.volume.driver
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+    :exclude-members: FakeAOEDriver
+
+Tests
+-----
+
+The :mod:`volume_unittest` Module
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. automodule:: cinder.tests.volume_unittest
+    :noindex:
+    :members:
+    :undoc-members:
+    :show-inheritance:
+
+Old Docs
+--------
+
+Cinder uses ata-over-ethernet (AoE) to export storage volumes from multiple storage nodes. These AoE exports are attached (using libvirt) directly to running instances.
+
+Cinder volumes are exported over the primary system VLAN (usually VLAN 1), and not over individual VLANs.
+
+AoE exports are numbered according to a "shelf and blade" syntax. In order to avoid collisions, we currently perform an AoE-discover of existing exports, and then grab the next unused number. (This obviously has race condition problems, and should be replaced by allocating a shelf-id to each storage node.)
+
+The underlying volumes are LVM logical volumes, created on demand within a single large volume group. 
+
+
diff --git a/doc/source/devref/xensmvolume.rst b/doc/source/devref/xensmvolume.rst
new file mode 100644
index 000000000..4b736dcaf
--- /dev/null
+++ b/doc/source/devref/xensmvolume.rst
@@ -0,0 +1,88 @@
+Xen Storage Manager Volume Driver
+=================================
+
+The Xen Storage Manager (xensm) driver for Cinder-Volume is based on XenAPI Storage Manager. This will not only provide basic storage functionality (like volume creation, and destruction) on a number of different storage back-ends, such as Netapp, NFS, etc. but it will also enable the capability of using more sophisticated storage back-ends for operations like cloning/snapshotting etc. To have an idea of the benefits of using XenAPI SM to provide back-end storage services, the list below shows some of the storage plugins already supported in XenServer/XCP:
+
+-   NFS VHD: SR plugin which stores disks as VHD files on a remote NFS filesystem
+-   Local VHD on LVM: SR plugin which represents disks as VHD disks on Logical Volumes within a locally-attached Volume Group
+-   HBA LUN-per-VDI driver: SR plugin which represents LUNs as VDIs sourced by hardware HBA adapters, e.g. hardware-based iSCSI or FC support
+-   NetApp: SR driver for mapping of LUNs to VDIs on a NETAPP server, providing use of fast snapshot and clone features on the filer
+-   LVHD over FC: SR plugin which represents disks as VHDs on Logical Volumes within a Volume Group created on an HBA LUN, e.g. hardware-based iSCSI or FC support
+-   iSCSI: Base ISCSI SR driver, provides a LUN-per-VDI. Does not support creation of VDIs but accesses existing LUNs on a target.
+-   LVHD over iSCSI: SR plugin which represents disks as Logical Volumes within a Volume Group created on an iSCSI LUN
+-   EqualLogic: SR driver for mapping of LUNs to VDIs on a EQUALLOGIC array group, providing use of fast snapshot and clone features on the array 
+
+Glossary
+=========
+
+    XenServer: Commercial, supported product from Citrix
+
+    Xen Cloud Platform (XCP): Open-source equivalent of XenServer (and the development project for the toolstack). Everything said about XenServer below applies equally to XCP
+
+    XenAPI: The management API exposed by XenServer and XCP
+
+    xapi: The primary daemon on XenServer and Xen Cloud Platform; the one that exposes the XenAPI 
+
+
+Design
+=======
+
+Definitions
+-----------
+
+Backend: A term for a particular storage backend. This could be iSCSI, NFS, Netapp etc.
+Backend-config: All the parameters required to connect to a specific backend. For e.g. For NFS, this would be the server, path, etc.
+Flavor: This term is equivalent to volume "types". A user friendly term to specify some notion of quality of service. For example, "gold" might mean that the volumes will use a backend where backups are possible.
+
+A flavor can be associated with multiple backends. The volume scheduler, with the help of the driver, will decide which backend will be used to create a volume of a particular flavor. Currently, the driver uses a simple "first-fit" policy, where the first backend that can successfully create this volume is the one that is used.
+
+Operation
+----------
+
+Using the cinder-manage command detailed in the implementation, an admin can add flavors and backends.
+
+One or more cinder-volume service instances will be deployed per availability zone. When an instance is started, it will create storage repositories (SRs) to connect to the backends available within that zone. All cinder-volume instances within a zone can see all the available backends. These instances are completely symmetric and hence should be able to service any create_volume request within the zone.
+
+
+Commands
+=========
+
+A category called "sm" has been added to cinder-manage in the class StorageManagerCommands.
+
+The following actions will be added:
+
+-    flavor_list
+-    flavor_create
+-    flavor_delete
+-    backend_list
+-    backend_add
+-    backend_remove 
+
+Usage:
+------
+
+cinder-manage sm flavor_create <label> <description>
+
+cinder-manage sm flavor_delete<label>
+
+cinder-manage sm backend_add <flavor label> <SR type> [config connection parameters]
+
+Note: SR type and config connection parameters are in keeping with the Xen Command Line Interface. http://support.citrix.com/article/CTX124887
+
+cinder-manage sm backend_delete <backend-id>
+
+Examples:
+---------
+
+cinder-manage sm flavor_create gold "Not all that glitters"
+
+cinder-manage sm flavor_delete gold
+
+cinder-manage sm backend_add gold nfs name_label=toybox-renuka server=myserver serverpath=/local/scratch/myname
+
+cinder-manage sm backend_remove 1
+
+API Changes
+===========
+
+No API changes have been introduced so far. The existing euca-create-volume and euca-delete-volume commands (or equivalent Openstack API commands) should be used.
diff --git a/doc/source/image_src/multinic_1.odg b/doc/source/image_src/multinic_1.odg
new file mode 100644
index 0000000000000000000000000000000000000000..bbd76b10eaa54987a6171a8ac827c0aee6376258
GIT binary patch
literal 12363
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

literal 0
HcmV?d00001

diff --git a/doc/source/image_src/multinic_2.odg b/doc/source/image_src/multinic_2.odg
new file mode 100644
index 0000000000000000000000000000000000000000..1f1e4251ad7d2c75879ceb9c0f2f984c1ceb975a
GIT binary patch
literal 13425
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
Z{$X-fmP16k6T`XvaNjO6KW4qV`aj|o#&ZAw

literal 0
HcmV?d00001

diff --git a/doc/source/image_src/multinic_3.odg b/doc/source/image_src/multinic_3.odg
new file mode 100644
index 0000000000000000000000000000000000000000..d29e163534f1f6a139734982c49413b4682f0bef
GIT binary patch
literal 13598
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

literal 0
HcmV?d00001

diff --git a/doc/source/images/NOVA_ARCH.png b/doc/source/images/NOVA_ARCH.png
new file mode 100644
index 0000000000000000000000000000000000000000..617ec42110a04cf2f67dbbd0d1477488f1f14065
GIT binary patch
literal 191332
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
XLLc&=jQ<n`{!>%YI+Cq)+UNfO=r|vV

literal 0
HcmV?d00001

diff --git a/doc/source/images/NOVA_ARCH.svg b/doc/source/images/NOVA_ARCH.svg
new file mode 100644
index 000000000..3175eeeb9
--- /dev/null
+++ b/doc/source/images/NOVA_ARCH.svg
@@ -0,0 +1,5854 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="744.09448819"
+   height="1052.3622047"
+   id="svg2"
+   inkscape:label="Pozadí"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="CINDER_ARCH.svg"
+   inkscape:export-filename="/home/t/work/lho/CINDER_ARCH.png"
+   inkscape:export-xdpi="200"
+   inkscape:export-ydpi="200">
+  <defs
+     id="defs3">
+    <marker
+       inkscape:stockid="Arrow2Mstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mstart"
+       style="overflow:visible">
+      <path
+         id="path9345"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) translate(0,0)" />
+    </marker>
+    <linearGradient
+       id="linearGradient12067">
+      <stop
+         id="stop12069"
+         style="stop-color:#ad96cc;stop-opacity:1;"
+         offset="0" />
+      <stop
+         id="stop12071"
+         style="stop-color:#e9afaf;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lend"
+       style="overflow:visible;">
+      <path
+         id="path9324"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         transform="scale(0.8) rotate(180) translate(12.5,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path9321"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern5307"
+       id="pattern5310"
+       patternTransform="matrix(0,5.5342899,-6.6960605,3.3480303,466.66297,104.02755)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern118687-1"
+       id="pattern5307"
+       patternTransform="matrix(0,5.5342899,-7.4864232,0,521.74506,337.35904)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern5286"
+       id="pattern5289"
+       patternTransform="matrix(0,5.5342899,-6.6960605,3.3480303,466.66297,104.02755)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern118687-1"
+       id="pattern5286"
+       patternTransform="matrix(0,5.5342899,-7.4864232,0,521.74506,337.35904)" />
+    <linearGradient
+       id="linearGradient2817">
+      <stop
+         style="stop-color:#cccccc;stop-opacity:1;"
+         offset="0"
+         id="stop2819" />
+      <stop
+         style="stop-color:#f6f6f1;stop-opacity:1;"
+         offset="1"
+         id="stop2821" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="627.46067 : 602.89763 : 1"
+       inkscape:vp_y="0 : 691.34383 : 0"
+       inkscape:vp_z="854.09747 : 666.1591 : 1"
+       inkscape:persp3d-origin="737.53684 : 544.90176 : 1"
+       id="perspective9" />
+    <linearGradient
+       gradientTransform="matrix(0.56832948,0,0,0.57917444,-18.000341,286.5989)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69151-9-1-8"
+       id="linearGradient4204"
+       y2="300.91547"
+       x2="211.24152"
+       y1="-19.084036"
+       x1="355.55502" />
+    <linearGradient
+       gradientTransform="matrix(0.56832948,0,0,0.57917444,-18.000341,286.5989)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69151-9-1-8"
+       id="linearGradient4191"
+       y2="300.91547"
+       x2="211.24152"
+       y1="-19.084036"
+       x1="355.55502" />
+    <linearGradient
+       gradientTransform="matrix(0.98127514,0,0,1,3.1523805,5.2287503)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69151-9-1-8"
+       id="linearGradient4157"
+       y2="300.91547"
+       x2="211.24152"
+       y1="-19.084036"
+       x1="355.55502" />
+    <linearGradient
+       id="linearGradient69151-9-1-8">
+      <stop
+         offset="0"
+         style="stop-color:#f9f9f9;stop-opacity:1"
+         id="stop69153-4-0-5-6" />
+      <stop
+         offset="1"
+         style="stop-color:#f9f9f9;stop-opacity:0"
+         id="stop69155-8-8-0" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.98127514,0,0,1,3.1523805,5.2287503)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69151-9-1-8"
+       id="linearGradient4102-7"
+       y2="300.91547"
+       x2="211.24152"
+       y1="-19.084036"
+       x1="355.55502" />
+    <filter
+       id="filter69132-4-0-7"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         id="feGaussianBlur69134-0-3-4"
+         stdDeviation="4.3795246" />
+    </filter>
+    <linearGradient
+       gradientTransform="matrix(0.98127514,0,0,1,3.1523805,5.2287503)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69151-9-1"
+       id="linearGradient4102"
+       y2="300.91547"
+       x2="211.24152"
+       y1="-19.084036"
+       x1="355.55502" />
+    <linearGradient
+       id="linearGradient69151-9-1">
+      <stop
+         offset="0"
+         style="stop-color:#f9f9f9;stop-opacity:1"
+         id="stop69153-4-0-5" />
+      <stop
+         offset="1"
+         style="stop-color:#f9f9f9;stop-opacity:0"
+         id="stop69155-8-8" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.98127514,0,0,1,3.1523805,5.2287503)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69151-9-1"
+       id="linearGradient4047-3"
+       y2="300.91547"
+       x2="211.24152"
+       y1="-19.084036"
+       x1="355.55502" />
+    <filter
+       id="filter69132-4-0"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         id="feGaussianBlur69134-0-3"
+         stdDeviation="4.3795246" />
+    </filter>
+    <linearGradient
+       gradientTransform="matrix(0.98127514,0,0,1,3.1523805,5.2287503)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69151-9"
+       id="linearGradient4047"
+       y2="300.91547"
+       x2="211.24152"
+       y1="-19.084036"
+       x1="355.55502" />
+    <linearGradient
+       id="linearGradient69151-9">
+      <stop
+         offset="0"
+         style="stop-color:#f9f9f9;stop-opacity:1"
+         id="stop69153-4-0" />
+      <stop
+         offset="1"
+         style="stop-color:#f9f9f9;stop-opacity:0"
+         id="stop69155-8" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.98127514,0,0,1,3.1523805,5.2287503)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69151-9"
+       id="linearGradient69168-2"
+       y2="300.91547"
+       x2="211.24152"
+       y1="-19.084036"
+       x1="355.55502" />
+    <filter
+       id="filter69132-4"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         id="feGaussianBlur69134-0"
+         stdDeviation="4.3795246" />
+    </filter>
+    <linearGradient
+       id="linearGradient69012-7">
+      <stop
+         offset="0"
+         style="stop-color:#f9f9f9;stop-opacity:1"
+         id="stop69014-3" />
+      <stop
+         offset="1"
+         style="stop-color:#f9f9f9;stop-opacity:0"
+         id="stop69016-4" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69012-7"
+       id="linearGradient69047-4"
+       y2="327.05923"
+       x2="558.43054"
+       y1="91.76548"
+       x1="614.901" />
+    <linearGradient
+       id="linearGradient68896-7">
+      <stop
+         offset="0"
+         style="stop-color:#f9f9f9;stop-opacity:1"
+         id="stop68898-9" />
+      <stop
+         offset="1"
+         style="stop-color:#f9f9f9;stop-opacity:0"
+         id="stop68900-8" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="translate(-69.019504,213.33301)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient68896-7"
+       id="linearGradient68931-9"
+       y2="311.37299"
+       x2="644.18201"
+       y1="30.066221"
+       x1="646.27356" />
+    <linearGradient
+       id="linearGradient68881-9">
+      <stop
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1"
+         id="stop68883-3" />
+      <stop
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0"
+         id="stop68885-5" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="translate(-69.019504,213.33301)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient68881-9"
+       id="linearGradient68929-1"
+       y2="222.48422"
+       x2="590.84882"
+       y1="349.01999"
+       x1="546.92725" />
+    <linearGradient
+       id="linearGradient69151-4">
+      <stop
+         offset="0"
+         style="stop-color:#f9f9f9;stop-opacity:1"
+         id="stop69153-4" />
+      <stop
+         offset="1"
+         style="stop-color:#f9f9f9;stop-opacity:0"
+         id="stop69155-2" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.98127514,0,0,1,3.1523805,5.2287503)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69151-4"
+       id="linearGradient3539"
+       y2="300.91547"
+       x2="211.24152"
+       y1="-19.084036"
+       x1="355.55502" />
+    <filter
+       id="filter69132-2"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         id="feGaussianBlur69134-4"
+         stdDeviation="4.3795246" />
+    </filter>
+    <linearGradient
+       id="linearGradient69185-1">
+      <stop
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1"
+         id="stop69187-2" />
+      <stop
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0"
+         id="stop69189-5" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="translate(644.80647,-1048.55)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69185-1"
+       id="linearGradient3594"
+       y2="223.52998"
+       x2="334.64001"
+       y1="-60.91404"
+       x1="403.65952" />
+    <filter
+       id="filter69132-1"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         id="feGaussianBlur69134-7"
+         stdDeviation="4.3795246" />
+    </filter>
+    <linearGradient
+       gradientTransform="translate(-69.019504,213.33301)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient68896"
+       id="linearGradient69890"
+       y2="311.37299"
+       x2="644.18201"
+       y1="30.066221"
+       x1="646.27356" />
+    <linearGradient
+       gradientTransform="translate(-69.019504,213.33301)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient68881"
+       id="linearGradient69888"
+       y2="222.48422"
+       x2="590.84882"
+       y1="349.01999"
+       x1="546.92725" />
+    <linearGradient
+       gradientTransform="translate(62.745003,105.62076)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69425"
+       id="linearGradient69874"
+       y2="273.72598"
+       x2="246.79701"
+       y1="183.79149"
+       x1="236.33952" />
+    <linearGradient
+       gradientTransform="translate(130.71876,-5.2287503)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69425"
+       id="linearGradient69872"
+       y2="273.72598"
+       x2="246.79701"
+       y1="183.79149"
+       x1="236.33952" />
+    <linearGradient
+       gradientTransform="translate(-3.2766244e-6,-2.0915001)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69425"
+       id="linearGradient69870"
+       y2="273.72598"
+       x2="246.79701"
+       y1="183.79149"
+       x1="236.33952" />
+    <linearGradient
+       gradientTransform="translate(-3.2766244e-6,-2.0915001)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69406"
+       id="linearGradient69868"
+       y2="258.03973"
+       x2="392.15628"
+       y1="27.974716"
+       x1="260.39178" />
+    <linearGradient
+       gradientTransform="translate(-336.73152,-126.53575)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69425"
+       id="linearGradient69828"
+       y2="273.72598"
+       x2="246.79701"
+       y1="183.79149"
+       x1="236.33952" />
+    <linearGradient
+       gradientTransform="translate(-268.75776,-237.38526)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69425"
+       id="linearGradient69826"
+       y2="273.72598"
+       x2="246.79701"
+       y1="183.79149"
+       x1="236.33952" />
+    <linearGradient
+       gradientTransform="translate(-399.47652,-234.24801)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69425"
+       id="linearGradient69824"
+       y2="273.72598"
+       x2="246.79701"
+       y1="183.79149"
+       x1="236.33952" />
+    <linearGradient
+       gradientTransform="translate(-399.47652,-234.24801)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69406"
+       id="linearGradient69822"
+       y2="258.03973"
+       x2="392.15628"
+       y1="27.974716"
+       x1="260.39178" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69012"
+       id="linearGradient69780"
+       y2="327.05923"
+       x2="558.43054"
+       y1="91.76548"
+       x1="614.901" />
+    <linearGradient
+       gradientTransform="matrix(0.98127514,0,0,1,3.1523805,5.2287503)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69151"
+       id="linearGradient69768"
+       y2="300.91547"
+       x2="211.24152"
+       y1="-19.084036"
+       x1="355.55502" />
+    <linearGradient
+       gradientTransform="translate(81.5685,519.73778)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69425"
+       id="linearGradient69733"
+       y2="273.72598"
+       x2="246.79701"
+       y1="183.79149"
+       x1="236.33952" />
+    <linearGradient
+       gradientTransform="translate(149.54225,408.88827)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69425"
+       id="linearGradient69731"
+       y2="273.72598"
+       x2="246.79701"
+       y1="183.79149"
+       x1="236.33952" />
+    <linearGradient
+       gradientTransform="translate(18.823494,412.02552)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69425"
+       id="linearGradient69729"
+       y2="273.72598"
+       x2="246.79701"
+       y1="183.79149"
+       x1="236.33952" />
+    <linearGradient
+       gradientTransform="translate(18.823494,412.02552)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69406"
+       id="linearGradient69727"
+       y2="258.03973"
+       x2="392.15628"
+       y1="27.974716"
+       x1="260.39178" />
+    <linearGradient
+       gradientTransform="translate(62.745003,105.62076)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69425"
+       id="linearGradient69652"
+       y2="273.72598"
+       x2="246.79701"
+       y1="183.79149"
+       x1="236.33952" />
+    <linearGradient
+       gradientTransform="translate(130.71876,-5.2287503)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69425"
+       id="linearGradient69650"
+       y2="273.72598"
+       x2="246.79701"
+       y1="183.79149"
+       x1="236.33952" />
+    <linearGradient
+       gradientTransform="translate(-3.276625e-6,-2.0915001)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69425"
+       id="linearGradient69648"
+       y2="273.72598"
+       x2="246.79701"
+       y1="183.79149"
+       x1="236.33952" />
+    <linearGradient
+       gradientTransform="translate(-3.276625e-6,-2.0915001)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69406"
+       id="linearGradient69646"
+       y2="258.03973"
+       x2="392.15628"
+       y1="27.974716"
+       x1="260.39178" />
+    <linearGradient
+       gradientTransform="translate(-336.73152,-126.53575)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69425"
+       id="linearGradient69487"
+       y2="273.72598"
+       x2="246.79701"
+       y1="183.79149"
+       x1="236.33952" />
+    <linearGradient
+       gradientTransform="translate(-268.75776,-237.38526)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69425"
+       id="linearGradient69485"
+       y2="273.72598"
+       x2="246.79701"
+       y1="183.79149"
+       x1="236.33952" />
+    <linearGradient
+       gradientTransform="translate(-399.47652,-234.24801)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69425"
+       id="linearGradient69483"
+       y2="273.72598"
+       x2="246.79701"
+       y1="183.79149"
+       x1="236.33952" />
+    <linearGradient
+       gradientTransform="translate(-399.47652,-234.24801)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69406"
+       id="linearGradient69481"
+       y2="258.03973"
+       x2="392.15628"
+       y1="27.974716"
+       x1="260.39178" />
+    <filter
+       id="filter69400"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         id="feGaussianBlur69402"
+         stdDeviation="4.8539841" />
+    </filter>
+    <linearGradient
+       gradientTransform="translate(644.80647,-1048.55)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69185"
+       id="linearGradient69203"
+       y2="223.52998"
+       x2="334.64001"
+       y1="-60.91404"
+       x1="403.65952" />
+    <linearGradient
+       gradientTransform="matrix(0.98127514,0,0,1,3.1523805,5.2287503)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69151"
+       id="linearGradient69168"
+       y2="300.91547"
+       x2="211.24152"
+       y1="-19.084036"
+       x1="355.55502" />
+    <filter
+       id="filter69132"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         id="feGaussianBlur69134"
+         stdDeviation="4.3795246" />
+    </filter>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69012"
+       id="linearGradient69047"
+       y2="327.05923"
+       x2="558.43054"
+       y1="91.76548"
+       x1="614.901" />
+    <linearGradient
+       gradientTransform="translate(238.43101,-292.81002)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient69012"
+       id="linearGradient69039"
+       y2="327.05923"
+       x2="558.43054"
+       y1="91.76548"
+       x1="614.901" />
+    <linearGradient
+       gradientTransform="translate(-69.019504,213.33301)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient68896"
+       id="linearGradient68931"
+       y2="311.37299"
+       x2="644.18201"
+       y1="30.066221"
+       x1="646.27356" />
+    <linearGradient
+       gradientTransform="translate(-69.019504,213.33301)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient68881"
+       id="linearGradient68929"
+       y2="222.48422"
+       x2="590.84882"
+       y1="349.01999"
+       x1="546.92725" />
+    <linearGradient
+       gradientTransform="translate(-69.019504,213.33301)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient68896"
+       id="linearGradient68902"
+       y2="311.37299"
+       x2="644.18201"
+       y1="30.066221"
+       x1="646.27356" />
+    <linearGradient
+       gradientTransform="translate(-69.019504,213.33301)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient68881"
+       id="linearGradient68889"
+       y2="222.48422"
+       x2="590.84882"
+       y1="349.01999"
+       x1="546.92725" />
+    <linearGradient
+       gradientTransform="matrix(0.94766,0,0,0.93975812,-498.89341,-720.21802)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient63927"
+       id="linearGradient65727"
+       y2="661.03473"
+       x2="370.64758"
+       y1="280.84256"
+       x1="407.23511" />
+    <linearGradient
+       id="linearGradient63927">
+      <stop
+         offset="0"
+         style="stop-color:#e6e6e6;stop-opacity:1"
+         id="stop63929" />
+      <stop
+         offset="1"
+         style="stop-color:#e6e6e6;stop-opacity:0"
+         id="stop63931" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient62493"
+       id="linearGradient63086"
+       y2="-23.348454"
+       x2="-928.76868"
+       y1="-135.02313"
+       x1="-963.9256" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient62493"
+       id="linearGradient62995"
+       y2="-23.348454"
+       x2="-928.76868"
+       y1="-135.02313"
+       x1="-963.9256" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient62493"
+       id="linearGradient62499"
+       y2="-23.348454"
+       x2="-928.76868"
+       y1="-135.02313"
+       x1="-963.9256" />
+    <filter
+       id="filter25721"
+       color-interpolation-filters="sRGB"
+       height="1"
+       width="1"
+       y="0"
+       x="0">
+      <feMorphology
+         result="result0"
+         in="SourceGraphic"
+         radius="4"
+         id="feMorphology25723" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur25725" />
+      <feComposite
+         id="feComposite25727"
+         in="SourceGraphic"
+         operator="in"
+         in2="result91" />
+    </filter>
+    <filter
+       id="filter25793"
+       color-interpolation-filters="sRGB"
+       height="1"
+       width="1"
+       y="0"
+       x="0">
+      <feMorphology
+         result="result0"
+         in="SourceGraphic"
+         radius="4"
+         id="feMorphology25795" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur25797" />
+      <feComposite
+         id="feComposite25799"
+         in="SourceGraphic"
+         operator="in"
+         in2="result91" />
+    </filter>
+    <filter
+       id="filter25817"
+       color-interpolation-filters="sRGB"
+       height="1"
+       width="1"
+       y="0"
+       x="0">
+      <feMorphology
+         result="result0"
+         in="SourceGraphic"
+         radius="4"
+         id="feMorphology25819" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur25821" />
+      <feComposite
+         id="feComposite25823"
+         in="SourceGraphic"
+         operator="in"
+         in2="result91" />
+    </filter>
+    <filter
+       id="filter25849"
+       color-interpolation-filters="sRGB"
+       height="1"
+       width="1"
+       y="0"
+       x="0">
+      <feMorphology
+         result="result0"
+         in="SourceGraphic"
+         radius="4"
+         id="feMorphology25851" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur25853" />
+      <feComposite
+         id="feComposite25855"
+         in="SourceGraphic"
+         operator="in"
+         in2="result91" />
+    </filter>
+    <filter
+       id="filter25961"
+       color-interpolation-filters="sRGB"
+       height="1"
+       width="1"
+       y="0"
+       x="0">
+      <feMorphology
+         result="result0"
+         in="SourceGraphic"
+         radius="4"
+         id="feMorphology25963" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur25965" />
+      <feComposite
+         id="feComposite25967"
+         in="SourceGraphic"
+         operator="in"
+         in2="result91" />
+    </filter>
+    <filter
+       id="filter45689"
+       color-interpolation-filters="sRGB"
+       height="1"
+       width="1"
+       y="0"
+       x="0">
+      <feMorphology
+         result="result0"
+         in="SourceGraphic"
+         radius="4"
+         id="feMorphology45691" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur45693" />
+      <feComposite
+         id="feComposite45695"
+         result="fbSourceGraphic"
+         in="SourceGraphic"
+         operator="in"
+         in2="result91" />
+      <feColorMatrix
+         id="feColorMatrix57073"
+         values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
+         in="fbSourceGraphic"
+         result="fbSourceGraphicAlpha" />
+      <feMorphology
+         result="result0"
+         in="fbSourceGraphic"
+         radius="4"
+         id="feMorphology57075" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur57077" />
+      <feComposite
+         id="feComposite57079"
+         in="fbSourceGraphic"
+         operator="in"
+         in2="result91" />
+    </filter>
+    <filter
+       id="filter46185"
+       color-interpolation-filters="sRGB"
+       height="1"
+       width="1"
+       y="0"
+       x="0">
+      <feMorphology
+         result="result0"
+         in="SourceGraphic"
+         radius="4"
+         id="feMorphology46187" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur46189" />
+      <feComposite
+         id="feComposite46191"
+         result="fbSourceGraphic"
+         in="SourceGraphic"
+         operator="in"
+         in2="result91" />
+      <feColorMatrix
+         id="feColorMatrix57569"
+         values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
+         in="fbSourceGraphic"
+         result="fbSourceGraphicAlpha" />
+      <feMorphology
+         result="result0"
+         in="fbSourceGraphic"
+         radius="4"
+         id="feMorphology57571" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur57573" />
+      <feComposite
+         id="feComposite57575"
+         in="fbSourceGraphic"
+         operator="in"
+         in2="result91" />
+    </filter>
+    <filter
+       id="filter46329"
+       color-interpolation-filters="sRGB"
+       height="1"
+       width="1"
+       y="0"
+       x="0">
+      <feMorphology
+         result="result0"
+         in="SourceGraphic"
+         radius="4"
+         id="feMorphology46331" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur46333" />
+      <feComposite
+         id="feComposite46335"
+         result="fbSourceGraphic"
+         in="SourceGraphic"
+         operator="in"
+         in2="result91" />
+      <feColorMatrix
+         id="feColorMatrix57713"
+         values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
+         in="fbSourceGraphic"
+         result="fbSourceGraphicAlpha" />
+      <feMorphology
+         result="result0"
+         in="fbSourceGraphic"
+         radius="4"
+         id="feMorphology57715" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur57717" />
+      <feComposite
+         id="feComposite57719"
+         in="fbSourceGraphic"
+         operator="in"
+         in2="result91" />
+    </filter>
+    <filter
+       id="filter46345"
+       color-interpolation-filters="sRGB"
+       height="1"
+       width="1"
+       y="0"
+       x="0">
+      <feMorphology
+         result="result0"
+         in="SourceGraphic"
+         radius="4"
+         id="feMorphology46347" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur46349" />
+      <feComposite
+         id="feComposite46351"
+         result="fbSourceGraphic"
+         in="SourceGraphic"
+         operator="in"
+         in2="result91" />
+      <feColorMatrix
+         id="feColorMatrix57729"
+         values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
+         in="fbSourceGraphic"
+         result="fbSourceGraphicAlpha" />
+      <feMorphology
+         result="result0"
+         in="fbSourceGraphic"
+         radius="4"
+         id="feMorphology57731" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur57733" />
+      <feComposite
+         id="feComposite57735"
+         in="fbSourceGraphic"
+         operator="in"
+         in2="result91" />
+    </filter>
+    <filter
+       id="filter46457"
+       color-interpolation-filters="sRGB"
+       height="1"
+       width="1"
+       y="0"
+       x="0">
+      <feMorphology
+         result="result0"
+         in="SourceGraphic"
+         radius="4"
+         id="feMorphology46459" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur46461" />
+      <feComposite
+         id="feComposite46463"
+         result="fbSourceGraphic"
+         in="SourceGraphic"
+         operator="in"
+         in2="result91" />
+      <feColorMatrix
+         id="feColorMatrix57841"
+         values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
+         in="fbSourceGraphic"
+         result="fbSourceGraphicAlpha" />
+      <feMorphology
+         result="result0"
+         in="fbSourceGraphic"
+         radius="4"
+         id="feMorphology57843" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur57845" />
+      <feComposite
+         id="feComposite57847"
+         in="fbSourceGraphic"
+         operator="in"
+         in2="result91" />
+    </filter>
+    <filter
+       id="filter28937"
+       color-interpolation-filters="sRGB"
+       height="1"
+       width="1"
+       y="0"
+       x="0">
+      <feMorphology
+         result="result0"
+         in="SourceGraphic"
+         radius="4"
+         id="feMorphology28939" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur28941" />
+      <feComposite
+         id="feComposite28943"
+         result="fbSourceGraphic"
+         in="SourceGraphic"
+         operator="in"
+         in2="result91" />
+      <feColorMatrix
+         id="feColorMatrix58409"
+         values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
+         in="fbSourceGraphic"
+         result="fbSourceGraphicAlpha" />
+      <feMorphology
+         result="result0"
+         in="fbSourceGraphic"
+         radius="4"
+         id="feMorphology58411" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur58413" />
+      <feComposite
+         id="feComposite58415"
+         in="fbSourceGraphic"
+         operator="in"
+         in2="result91" />
+    </filter>
+    <filter
+       id="filter28945"
+       color-interpolation-filters="sRGB"
+       height="1"
+       width="1"
+       y="0"
+       x="0">
+      <feMorphology
+         result="result0"
+         in="SourceGraphic"
+         radius="4"
+         id="feMorphology28947" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur28949" />
+      <feComposite
+         id="feComposite28951"
+         result="fbSourceGraphic"
+         in="SourceGraphic"
+         operator="in"
+         in2="result91" />
+      <feColorMatrix
+         id="feColorMatrix58417"
+         values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
+         in="fbSourceGraphic"
+         result="fbSourceGraphicAlpha" />
+      <feMorphology
+         result="result0"
+         in="fbSourceGraphic"
+         radius="4"
+         id="feMorphology58419" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur58421" />
+      <feComposite
+         id="feComposite58423"
+         in="fbSourceGraphic"
+         operator="in"
+         in2="result91" />
+    </filter>
+    <filter
+       id="filter28969"
+       color-interpolation-filters="sRGB"
+       height="1"
+       width="1"
+       y="0"
+       x="0">
+      <feMorphology
+         result="result0"
+         in="SourceGraphic"
+         radius="4"
+         id="feMorphology28971" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur28973" />
+      <feComposite
+         id="feComposite28975"
+         result="fbSourceGraphic"
+         in="SourceGraphic"
+         operator="in"
+         in2="result91" />
+      <feColorMatrix
+         id="feColorMatrix58441"
+         values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
+         in="fbSourceGraphic"
+         result="fbSourceGraphicAlpha" />
+      <feMorphology
+         result="result0"
+         in="fbSourceGraphic"
+         radius="4"
+         id="feMorphology58443" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur58445" />
+      <feComposite
+         id="feComposite58447"
+         in="fbSourceGraphic"
+         operator="in"
+         in2="result91" />
+    </filter>
+    <filter
+       id="filter28993"
+       color-interpolation-filters="sRGB"
+       height="1"
+       width="1"
+       y="0"
+       x="0">
+      <feMorphology
+         result="result0"
+         in="SourceGraphic"
+         radius="4"
+         id="feMorphology28995" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur28997" />
+      <feComposite
+         id="feComposite28999"
+         result="fbSourceGraphic"
+         in="SourceGraphic"
+         operator="in"
+         in2="result91" />
+      <feColorMatrix
+         id="feColorMatrix58465"
+         values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
+         in="fbSourceGraphic"
+         result="fbSourceGraphicAlpha" />
+      <feMorphology
+         result="result0"
+         in="fbSourceGraphic"
+         radius="4"
+         id="feMorphology58467" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur58469" />
+      <feComposite
+         id="feComposite58471"
+         in="fbSourceGraphic"
+         operator="in"
+         in2="result91" />
+    </filter>
+    <filter
+       id="filter29001"
+       color-interpolation-filters="sRGB"
+       height="1"
+       width="1"
+       y="0"
+       x="0">
+      <feMorphology
+         result="result0"
+         in="SourceGraphic"
+         radius="4"
+         id="feMorphology29003" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur29005" />
+      <feComposite
+         id="feComposite29007"
+         result="fbSourceGraphic"
+         in="SourceGraphic"
+         operator="in"
+         in2="result91" />
+      <feColorMatrix
+         id="feColorMatrix58473"
+         values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
+         in="fbSourceGraphic"
+         result="fbSourceGraphicAlpha" />
+      <feMorphology
+         result="result0"
+         in="fbSourceGraphic"
+         radius="4"
+         id="feMorphology58475" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur58477" />
+      <feComposite
+         id="feComposite58479"
+         in="fbSourceGraphic"
+         operator="in"
+         in2="result91" />
+    </filter>
+    <filter
+       id="filter58481"
+       color-interpolation-filters="sRGB"
+       height="1"
+       width="1"
+       y="0"
+       x="0">
+      <feMorphology
+         result="result0"
+         in="SourceGraphic"
+         radius="4"
+         id="feMorphology58483" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur58485" />
+      <feComposite
+         id="feComposite58487"
+         in="SourceGraphic"
+         operator="in"
+         in2="result91" />
+    </filter>
+    <filter
+       id="filter58489"
+       color-interpolation-filters="sRGB"
+       height="1"
+       width="1"
+       y="0"
+       x="0">
+      <feMorphology
+         result="result0"
+         in="SourceGraphic"
+         radius="4"
+         id="feMorphology58491" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur58493" />
+      <feComposite
+         id="feComposite58495"
+         in="SourceGraphic"
+         operator="in"
+         in2="result91" />
+    </filter>
+    <filter
+       id="filter58505"
+       color-interpolation-filters="sRGB"
+       height="1"
+       width="1"
+       y="0"
+       x="0">
+      <feMorphology
+         result="result0"
+         in="SourceGraphic"
+         radius="4"
+         id="feMorphology58507" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur58509" />
+      <feComposite
+         id="feComposite58511"
+         in="SourceGraphic"
+         operator="in"
+         in2="result91" />
+    </filter>
+    <filter
+       id="filter29017"
+       color-interpolation-filters="sRGB"
+       height="1"
+       width="1"
+       y="0"
+       x="0">
+      <feMorphology
+         result="result0"
+         in="SourceGraphic"
+         radius="4"
+         id="feMorphology29019" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur29021" />
+      <feComposite
+         id="feComposite29023"
+         result="fbSourceGraphic"
+         in="SourceGraphic"
+         operator="in"
+         in2="result91" />
+      <feColorMatrix
+         id="feColorMatrix58513"
+         values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
+         in="fbSourceGraphic"
+         result="fbSourceGraphicAlpha" />
+      <feMorphology
+         result="result0"
+         in="fbSourceGraphic"
+         radius="4"
+         id="feMorphology58515" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur58517" />
+      <feComposite
+         id="feComposite58519"
+         in="fbSourceGraphic"
+         operator="in"
+         in2="result91" />
+    </filter>
+    <filter
+       id="filter58545"
+       color-interpolation-filters="sRGB"
+       height="1"
+       width="1"
+       y="0"
+       x="0">
+      <feMorphology
+         result="result0"
+         in="SourceGraphic"
+         radius="4"
+         id="feMorphology58547" />
+      <feGaussianBlur
+         result="result91"
+         stdDeviation="8"
+         in="result0"
+         id="feGaussianBlur58549" />
+      <feComposite
+         id="feComposite58551"
+         in="SourceGraphic"
+         operator="in"
+         in2="result91" />
+    </filter>
+    <linearGradient
+       id="linearGradient62493">
+      <stop
+         offset="0"
+         style="stop-color:#686762;stop-opacity:1"
+         id="stop62495" />
+      <stop
+         offset="1"
+         style="stop-color:#686762;stop-opacity:0"
+         id="stop62497" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient68881">
+      <stop
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1"
+         id="stop68883" />
+      <stop
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0"
+         id="stop68885" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient68896">
+      <stop
+         offset="0"
+         style="stop-color:#f9f9f9;stop-opacity:1"
+         id="stop68898" />
+      <stop
+         offset="1"
+         style="stop-color:#f9f9f9;stop-opacity:0"
+         id="stop68900" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient69012">
+      <stop
+         offset="0"
+         style="stop-color:#f9f9f9;stop-opacity:1"
+         id="stop69014" />
+      <stop
+         offset="1"
+         style="stop-color:#f9f9f9;stop-opacity:0"
+         id="stop69016" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient69151">
+      <stop
+         offset="0"
+         style="stop-color:#f9f9f9;stop-opacity:1"
+         id="stop69153" />
+      <stop
+         offset="1"
+         style="stop-color:#f9f9f9;stop-opacity:0"
+         id="stop69155" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient69185">
+      <stop
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1"
+         id="stop69187" />
+      <stop
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0"
+         id="stop69189" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient69406">
+      <stop
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1"
+         id="stop69408" />
+      <stop
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0"
+         id="stop69410" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient69425">
+      <stop
+         offset="0"
+         style="stop-color:#f9f9f9;stop-opacity:1"
+         id="stop69427" />
+      <stop
+         offset="1"
+         style="stop-color:#f9f9f9;stop-opacity:0"
+         id="stop69429" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective3330"
+       inkscape:persp3d-origin="400 : 200 : 1"
+       inkscape:vp_z="800 : 300 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 300 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       gradientTransform="translate(-479.99928,518.99082)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4371"
+       id="linearGradient4716"
+       y2="118.80616"
+       x2="639.10272"
+       y1="-33.126385"
+       x1="645.82532" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4260"
+       id="linearGradient4714"
+       y2="678.4082"
+       x2="159.7227"
+       y1="921.79523"
+       x1="160.99034" />
+    <linearGradient
+       gradientTransform="translate(-0.44817674,684.36872)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4371"
+       id="linearGradient4698"
+       y2="118.80616"
+       x2="639.10272"
+       y1="-33.126385"
+       x1="645.82532" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4296"
+       id="linearGradient4696"
+       y2="1122.0824"
+       x2="467.75937"
+       y1="1307.158"
+       x1="475.3652" />
+    <linearGradient
+       gradientTransform="translate(0.44818046,519.439)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4371"
+       id="linearGradient4694"
+       y2="118.80616"
+       x2="639.10272"
+       y1="-33.126385"
+       x1="645.82532" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4242"
+       id="linearGradient4692"
+       y2="698.69049"
+       x2="794.81061"
+       y1="929.40106"
+       x1="807.487" />
+    <linearGradient
+       gradientTransform="translate(-0.44817674,341.96027)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4371"
+       id="linearGradient4690"
+       y2="118.80616"
+       x2="639.10272"
+       y1="-33.126385"
+       x1="645.82532" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4224"
+       id="linearGradient4688"
+       y2="481.92395"
+       x2="785.93713"
+       y1="724.04327"
+       x1="791.00769" />
+    <linearGradient
+       gradientTransform="translate(-239.32737,342.40845)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4371"
+       id="linearGradient4686"
+       y2="118.80616"
+       x2="639.10272"
+       y1="-33.126385"
+       x1="645.82532" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4090"
+       id="linearGradient4684"
+       y2="749.39606"
+       x2="546.35303"
+       y1="1037.1505"
+       x1="557.76184" />
+    <linearGradient
+       gradientTransform="translate(-239.77555,519.439)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4371"
+       id="linearGradient4682"
+       y2="118.80616"
+       x2="639.10272"
+       y1="-33.126385"
+       x1="645.82532" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4278"
+       id="linearGradient4680"
+       y2="684.74646"
+       x2="458.88586"
+       y1="839.39856"
+       x1="470.29462" />
+    <linearGradient
+       gradientTransform="translate(-240.22373,684.8169)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4371"
+       id="linearGradient4678"
+       y2="118.80616"
+       x2="639.10272"
+       y1="-33.126385"
+       x1="645.82532" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4198"
+       id="linearGradient4676"
+       y2="892.63947"
+       x2="527.33844"
+       y1="1104.3354"
+       x1="540.01483" />
+    <linearGradient
+       gradientTransform="translate(-479.5511,684.36872)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4371"
+       id="linearGradient4674"
+       y2="118.80616"
+       x2="639.10272"
+       y1="-33.126385"
+       x1="645.82532" />
+    <linearGradient
+       gradientTransform="translate(-46.902699,135.63753)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4180"
+       id="linearGradient4672"
+       y2="872.35724"
+       x2="215.49889"
+       y1="1106.8707"
+       x1="209.16068" />
+    <linearGradient
+       gradientTransform="translate(-479.99928,518.99082)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4371"
+       id="linearGradient4670"
+       y2="118.80616"
+       x2="639.10272"
+       y1="-33.126385"
+       x1="645.82532" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4260"
+       id="linearGradient4668"
+       y2="678.4082"
+       x2="159.7227"
+       y1="921.79523"
+       x1="160.99034" />
+    <linearGradient
+       gradientTransform="translate(-480.44746,342.85663)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4371"
+       id="linearGradient4666"
+       y2="118.80616"
+       x2="639.10272"
+       y1="-33.126385"
+       x1="645.82532" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4018"
+       id="linearGradient4664"
+       y2="771.80237"
+       x2="186.44229"
+       y1="1007.5443"
+       x1="187.33865" />
+    <linearGradient
+       gradientTransform="translate(-479.10292,169.85969)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4371"
+       id="linearGradient4662"
+       y2="118.80616"
+       x2="639.10272"
+       y1="-33.126385"
+       x1="645.82532" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4074"
+       id="linearGradient4660"
+       y2="295.58078"
+       x2="536.21191"
+       y1="541.50305"
+       x1="537.47955" />
+    <linearGradient
+       gradientTransform="translate(-480.44746,1.3445382)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4371"
+       id="linearGradient4658"
+       y2="118.80616"
+       x2="639.10272"
+       y1="-33.126385"
+       x1="645.82532" />
+    <linearGradient
+       gradientTransform="translate(145.20987,64.537718)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient3948"
+       id="linearGradient4656"
+       y2="140.76692"
+       x2="51.988716"
+       y1="0.93518841"
+       x1="57.366859" />
+    <linearGradient
+       gradientTransform="translate(-239.77555,2.3885373e-6)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4371"
+       id="linearGradient4654"
+       y2="118.80616"
+       x2="639.10272"
+       y1="-33.126385"
+       x1="645.82532" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4066"
+       id="linearGradient4652"
+       y2="26.841015"
+       x2="547.62073"
+       y1="271.49564"
+       x1="543.81781" />
+    <linearGradient
+       gradientTransform="translate(-239.32737,170.30787)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4371"
+       id="linearGradient4650"
+       y2="118.80616"
+       x2="639.10272"
+       y1="-33.126385"
+       x1="645.82532" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4000"
+       id="linearGradient4648"
+       y2="521.71875"
+       x2="220.50388"
+       y1="752.08252"
+       x1="228.57109" />
+    <linearGradient
+       gradientTransform="translate(0,169.41151)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4371"
+       id="linearGradient4646"
+       y2="118.80616"
+       x2="639.10272"
+       y1="-33.126385"
+       x1="645.82532" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4082"
+       id="linearGradient4644"
+       y2="550.37653"
+       x2="538.74719"
+       y1="802.63702"
+       x1="548.88831" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4371"
+       id="linearGradient4642"
+       y2="118.80616"
+       x2="639.10272"
+       y1="-33.126385"
+       x1="645.82532" />
+    <linearGradient
+       gradientTransform="matrix(0.77146086,0,0,0.77146086,473.62706,-225.83335)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient3982"
+       id="linearGradient4640"
+       y2="260.87878"
+       x2="198.9913"
+       y1="542.3349"
+       x1="199.88765" />
+    <filter
+       id="filter3968"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         stdDeviation="3.3747421"
+         id="feGaussianBlur3970" />
+    </filter>
+    <linearGradient
+       id="linearGradient3948">
+      <stop
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1"
+         id="stop3950" />
+      <stop
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0"
+         id="stop3952" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3982">
+      <stop
+         offset="0"
+         style="stop-color:#d40000;stop-opacity:1"
+         id="stop3984" />
+      <stop
+         offset="1"
+         style="stop-color:#d40000;stop-opacity:0"
+         id="stop3986" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4000">
+      <stop
+         offset="0"
+         style="stop-color:#ff6600;stop-opacity:1"
+         id="stop4002" />
+      <stop
+         offset="1"
+         style="stop-color:#ff6600;stop-opacity:0"
+         id="stop4004" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4018">
+      <stop
+         offset="0"
+         style="stop-color:#ffd42a;stop-opacity:1"
+         id="stop4020" />
+      <stop
+         offset="1"
+         style="stop-color:#ffd42a;stop-opacity:0"
+         id="stop4022" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4066">
+      <stop
+         offset="0"
+         style="stop-color:#333333;stop-opacity:1"
+         id="stop4068" />
+      <stop
+         offset="1"
+         style="stop-color:#333333;stop-opacity:0"
+         id="stop4070" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4074">
+      <stop
+         offset="0"
+         style="stop-color:#aad400;stop-opacity:1"
+         id="stop4076" />
+      <stop
+         offset="1"
+         style="stop-color:#aad400;stop-opacity:0"
+         id="stop4078" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4082">
+      <stop
+         offset="0"
+         style="stop-color:#0000d4;stop-opacity:1"
+         id="stop4084" />
+      <stop
+         offset="1"
+         style="stop-color:#0000d4;stop-opacity:0"
+         id="stop4086" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4090">
+      <stop
+         offset="0"
+         style="stop-color:#ff00cc;stop-opacity:1"
+         id="stop4092" />
+      <stop
+         offset="1"
+         style="stop-color:#ff00cc;stop-opacity:0"
+         id="stop4094" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4180">
+      <stop
+         offset="0"
+         style="stop-color:#d40055;stop-opacity:1"
+         id="stop4182" />
+      <stop
+         offset="1"
+         style="stop-color:#d40055;stop-opacity:0"
+         id="stop4184" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4198">
+      <stop
+         offset="0"
+         style="stop-color:#cc00ff;stop-opacity:1"
+         id="stop4200" />
+      <stop
+         offset="1"
+         style="stop-color:#cc00ff;stop-opacity:0"
+         id="stop4202" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4224">
+      <stop
+         offset="0"
+         style="stop-color:#00ffcc;stop-opacity:1"
+         id="stop4226" />
+      <stop
+         offset="1"
+         style="stop-color:#00ffcc;stop-opacity:0"
+         id="stop4228" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4242">
+      <stop
+         offset="0"
+         style="stop-color:#0066ff;stop-opacity:1"
+         id="stop4244" />
+      <stop
+         offset="1"
+         style="stop-color:#0066ff;stop-opacity:0"
+         id="stop4246" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4260">
+      <stop
+         offset="0"
+         style="stop-color:#00d400;stop-opacity:1"
+         id="stop4262" />
+      <stop
+         offset="1"
+         style="stop-color:#00d400;stop-opacity:0"
+         id="stop4264" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4278">
+      <stop
+         offset="0"
+         style="stop-color:#ad96cc;stop-opacity:0.5933333;"
+         id="stop4280" />
+      <stop
+         offset="1"
+         style="stop-color:#ccff00;stop-opacity:0"
+         id="stop4282" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4296">
+      <stop
+         offset="0"
+         style="stop-color:#a02c2c;stop-opacity:1"
+         id="stop4298" />
+      <stop
+         offset="1"
+         style="stop-color:#a02c2c;stop-opacity:0"
+         id="stop4300" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4371">
+      <stop
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1"
+         id="stop4373" />
+      <stop
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0"
+         id="stop4375" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective3871"
+       inkscape:persp3d-origin="450 : 266.66667 : 1"
+       inkscape:vp_z="900 : 400 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 400 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective2403" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective2390" />
+    <inkscape:perspective
+       id="perspective10"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective19261"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <radialGradient
+       r="3"
+       fy="265.86209"
+       fx="97.48214"
+       cy="265.86209"
+       cx="97.48214"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient14784"
+       xlink:href="#linearGradient2202"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient2202">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206" />
+    </linearGradient>
+    <radialGradient
+       r="3"
+       fy="265.86209"
+       fx="97.48214"
+       cy="265.86209"
+       cx="97.48214"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4338"
+       xlink:href="#linearGradient2202"
+       inkscape:collect="always" />
+    <radialGradient
+       r="3"
+       fy="265.86209"
+       fx="97.48214"
+       cy="265.86209"
+       cx="97.48214"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3297"
+       xlink:href="#linearGradient2202"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="207.36218"
+       x2="195"
+       y1="207.36218"
+       x1="175"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,177.55089,360.10086)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4318"
+       xlink:href="#linearGradient2202"
+       inkscape:collect="always" />
+    <radialGradient
+       r="4.5"
+       fy="349.86218"
+       fx="109"
+       cy="349.86218"
+       cx="109"
+       gradientTransform="matrix(2.7721412,0,0,4.3122209,343.74329,-552.89392)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4320"
+       xlink:href="#linearGradient2202"
+       inkscape:collect="always" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Strips1_1"
+       id="pattern118687"
+       patternTransform="matrix(0,5.5342899,-7.4864232,0,521.74506,337.35904)" />
+    <pattern
+       inkscape:stockid="Stripes 1:1"
+       id="Strips1_1"
+       patternTransform="matrix(0,5.5342899,-7.4864229,0,31.668795,357.00572)"
+       height="1"
+       width="2"
+       patternUnits="userSpaceOnUse"
+       inkscape:collect="always">
+      <rect
+         id="rect5260"
+         height="2"
+         width="1"
+         y="-0.5"
+         x="0"
+         style="fill:black;stroke:none" />
+    </pattern>
+    <linearGradient
+       y2="207.36218"
+       x2="195"
+       y1="207.36218"
+       x1="175"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,177.55089,360.10086)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4322"
+       xlink:href="#linearGradient2202"
+       inkscape:collect="always" />
+    <radialGradient
+       r="4.5"
+       fy="349.86218"
+       fx="109"
+       cy="349.86218"
+       cx="109"
+       gradientTransform="matrix(2.7721412,0,0,4.3122209,343.74329,-552.89392)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4324"
+       xlink:href="#linearGradient2202"
+       inkscape:collect="always" />
+    <radialGradient
+       r="3"
+       fy="265.86209"
+       fx="97.48214"
+       cy="265.86209"
+       cx="97.48214"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3277"
+       xlink:href="#linearGradient2202"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="387.43924"
+       x2="332.02466"
+       y1="369.97995"
+       x1="314.56537"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4330"
+       xlink:href="#linearGradient4886"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient4886">
+      <stop
+         id="stop4888"
+         offset="0.0000000"
+         style="stop-color:#1c97e1;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4890"
+         offset="1.0000000"
+         style="stop-color:#006798;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       y2="390.78342"
+       x2="311.27377"
+       y1="377.9527"
+       x1="302.73621"
+       gradientTransform="matrix(1.9519,0,0,1.84182,-297.02235,74.95322)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4332"
+       xlink:href="#linearGradient4554"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient4554">
+      <stop
+         id="stop4556"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4558"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.0000000;" />
+    </linearGradient>
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4262"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient4068">
+      <stop
+         id="stop4070-3"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop4490"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop4492"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop4072"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4264"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4266"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4268"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4270"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4272"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4274"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4276"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4278-2"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4280"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4282"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4284"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4286"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4288"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4290"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4292"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4294"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4296-1"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4298"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4300"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4302"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4304"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4306"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4308"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4310"
+       xlink:href="#linearGradient4068"
+       inkscape:collect="always" />
+    <radialGradient
+       r="24.998358"
+       fy="571.95715"
+       fx="384.69696"
+       cy="571.95715"
+       cx="384.69696"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4312"
+       xlink:href="#linearGradient5178"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient5178">
+      <stop
+         id="stop5180"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop5186"
+         offset="0.89021850"
+         style="stop-color:#ffffff;stop-opacity:0.49803922;" />
+      <stop
+         id="stop5188"
+         offset="0.95396262"
+         style="stop-color:#ffffff;stop-opacity:0.24705882;" />
+      <stop
+         id="stop5182"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       r="24.998358"
+       fy="571.95715"
+       fx="384.69696"
+       cy="571.95715"
+       cx="384.69696"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient7730"
+       xlink:href="#linearGradient5178-1"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7728"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7726"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7724"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7722"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7720"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7718"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7716"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7714"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7712"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7710"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7708"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7706"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7704"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7702"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7700"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7698"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7696"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7694"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7692"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7690"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7688"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7686"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7684"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7682"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7680"
+       xlink:href="#linearGradient4068-8"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient114975">
+      <stop
+         style="stop-color:#3465a4;stop-opacity:1"
+         offset="0"
+         id="stop114977" />
+      <stop
+         style="stop-color:#3465a4;stop-opacity:0;"
+         offset="1"
+         id="stop114979" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient114953">
+      <stop
+         style="stop-color:#191a19;stop-opacity:1;"
+         offset="0"
+         id="stop114955" />
+      <stop
+         style="stop-color:#191a19;stop-opacity:0;"
+         offset="1"
+         id="stop114957" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient114931">
+      <stop
+         style="stop-color:#2e3436;stop-opacity:1;"
+         offset="0"
+         id="stop114933" />
+      <stop
+         style="stop-color:#2e3436;stop-opacity:0;"
+         offset="1"
+         id="stop114935" />
+    </linearGradient>
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Strips1_1-9"
+       id="pattern118687-1"
+       patternTransform="matrix(0,5.5342899,-7.4864232,0,521.74506,337.35904)" />
+    <pattern
+       inkscape:stockid="Stripes 1:1"
+       id="Strips1_1-9"
+       patternTransform="matrix(0,5.5342899,-7.4864229,0,31.668795,357.00572)"
+       height="1"
+       width="2"
+       patternUnits="userSpaceOnUse"
+       inkscape:collect="always">
+      <rect
+         id="rect5260-2"
+         height="2"
+         width="1"
+         y="-0.5"
+         x="0"
+         style="fill:black;stroke:none" />
+    </pattern>
+    <radialGradient
+       r="4.5"
+       fy="349.86218"
+       fx="109"
+       cy="349.86218"
+       cx="109"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient117519"
+       xlink:href="#linearGradient2202-9"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="207.36218"
+       x2="195"
+       y1="207.36218"
+       x1="175"
+       gradientTransform="translate(-153,-176.36218)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient117517"
+       xlink:href="#linearGradient2202-9"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient2202-9">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-9" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4886-9">
+      <stop
+         id="stop4888-0"
+         offset="0.0000000"
+         style="stop-color:#1c97e1;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4890-0"
+         offset="1.0000000"
+         style="stop-color:#006798;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4554-4">
+      <stop
+         id="stop4556-5"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4558-0"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4738">
+      <stop
+         id="stop4740"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.72656250;" />
+      <stop
+         id="stop4742"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       y2="387.43924"
+       x2="332.02466"
+       y1="369.97995"
+       x1="314.56537"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient109180"
+       xlink:href="#linearGradient4568"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient4568">
+      <stop
+         id="stop4570"
+         offset="0"
+         style="stop-color:#e12b1c;stop-opacity:1;" />
+      <stop
+         id="stop4572"
+         offset="1.0000000"
+         style="stop-color:#980b00;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       y2="390.49332"
+       x2="414.38986"
+       y1="376.13748"
+       x1="401.93405"
+       gradientTransform="matrix(0.999946,0,0,1.000054,-175.79715,404.73102)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient109182"
+       xlink:href="#linearGradient4738"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="390.78342"
+       x2="311.27377"
+       y1="377.9527"
+       x1="302.73621"
+       gradientTransform="matrix(1.9519,0,0,1.84182,-382.19925,74.95322)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient109184"
+       xlink:href="#linearGradient4554-4"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient4068-8">
+      <stop
+         id="stop4070-0"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop4490-3"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop4492-8"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop4072-3"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5178-1">
+      <stop
+         id="stop5180-3"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop5186-7"
+         offset="0.89021850"
+         style="stop-color:#ffffff;stop-opacity:0.49803922;" />
+      <stop
+         id="stop5188-7"
+         offset="0.95396262"
+         style="stop-color:#ffffff;stop-opacity:0.24705882;" />
+      <stop
+         id="stop5182-9"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective838"
+       inkscape:persp3d-origin="750.79663 : 307.92326 : 1"
+       inkscape:vp_z="1501.5933 : 461.88489 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 461.88489 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective19535"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       y2="683.92651"
+       x2="482.37622"
+       y1="298.85724"
+       x1="332.67328"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient14778"
+       xlink:href="#linearGradient114931-9"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient114931-9"
+       inkscape:collect="always">
+      <stop
+         id="stop114933-4"
+         offset="0"
+         style="stop-color:#2e3436;stop-opacity:1;" />
+      <stop
+         id="stop114935-5"
+         offset="1"
+         style="stop-color:#2e3436;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       y2="399.49088"
+       x2="335.66339"
+       y1="237.31267"
+       x1="218.73267"
+       gradientTransform="matrix(1.1048951,0,0,1.1048951,67.985466,73.286385)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient14780"
+       xlink:href="#linearGradient114953-9"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient114953-9"
+       inkscape:collect="always">
+      <stop
+         id="stop114955-4"
+         offset="0"
+         style="stop-color:#191a19;stop-opacity:1;" />
+      <stop
+         id="stop114957-2"
+         offset="1"
+         style="stop-color:#191a19;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       y2="166.61961"
+       x2="236.19801"
+       y1="224.83743"
+       x1="273.62375"
+       gradientTransform="matrix(0.9983345,0,0,1.0398445,80.706264,173.27788)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient14782"
+       xlink:href="#linearGradient114975-9"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient114975-9"
+       inkscape:collect="always">
+      <stop
+         id="stop114977-3"
+         offset="0"
+         style="stop-color:#3465a4;stop-opacity:1" />
+      <stop
+         id="stop114979-1"
+         offset="1"
+         style="stop-color:#3465a4;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       y2="207.36218"
+       x2="195"
+       y1="207.36218"
+       x1="175"
+       gradientTransform="translate(-153,-176.36218)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient14847"
+       xlink:href="#linearGradient2202-1"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient2202-1">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-0" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-0" />
+    </linearGradient>
+    <radialGradient
+       r="4.5"
+       fy="349.86218"
+       fx="109"
+       cy="349.86218"
+       cx="109"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient14849"
+       xlink:href="#linearGradient2202-1"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="207.36218"
+       x2="195"
+       y1="207.36218"
+       x1="175"
+       gradientTransform="translate(-153,-176.36218)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient14786"
+       xlink:href="#linearGradient2202-1"
+       inkscape:collect="always" />
+    <radialGradient
+       r="4.5"
+       fy="349.86218"
+       fx="109"
+       cy="349.86218"
+       cx="109"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient14788"
+       xlink:href="#linearGradient2202-1"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="-321.47269"
+       x2="909.21588"
+       y1="-320.49728"
+       x1="838.01013"
+       gradientTransform="translate(32.697924,534.73628)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient14790"
+       xlink:href="#linearGradient4886-2"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient4886-2">
+      <stop
+         id="stop4888-4"
+         offset="0.0000000"
+         style="stop-color:#1c97e1;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4890-5"
+         offset="1.0000000"
+         style="stop-color:#006798;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       y2="258.76886"
+       x2="1333.0073"
+       y1="237.96057"
+       x1="1313.4297"
+       gradientTransform="matrix(0.638597,0,0,1.565933,-355.04905,402.57752)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient14792"
+       xlink:href="#linearGradient4738-8"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient4738-8">
+      <stop
+         id="stop4740-4"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.72656250;" />
+      <stop
+         id="stop4742-8"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       y2="400.04047"
+       x2="832.68341"
+       y1="362.58139"
+       x1="808.12592"
+       gradientTransform="translate(-354.99455,401.23652)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient14794"
+       xlink:href="#linearGradient4554-2"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient4554-2">
+      <stop
+         id="stop4556-9"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4558-2"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.0000000;" />
+    </linearGradient>
+    <linearGradient
+       y2="207.36218"
+       x2="195"
+       y1="207.36218"
+       x1="175"
+       gradientTransform="translate(-153,-176.36218)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient14888"
+       xlink:href="#linearGradient2202-1"
+       inkscape:collect="always" />
+    <radialGradient
+       r="4.5"
+       fy="349.86218"
+       fx="109"
+       cy="349.86218"
+       cx="109"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient14890"
+       xlink:href="#linearGradient2202-1"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1"
+       id="linearGradient4176"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1"
+       id="radialGradient4178"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1"
+       id="linearGradient3512"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1"
+       id="radialGradient3514"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1"
+       id="linearGradient3462"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1"
+       id="radialGradient3464"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       y2="207.36218"
+       x2="195"
+       y1="207.36218"
+       x1="175"
+       gradientTransform="translate(-153,-176.36218)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3434"
+       xlink:href="#linearGradient2202-1"
+       inkscape:collect="always" />
+    <radialGradient
+       r="4.5"
+       fy="349.86218"
+       fx="109"
+       cy="349.86218"
+       cx="109"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3436"
+       xlink:href="#linearGradient2202-1"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="487.91693"
+       x2="-124.93314"
+       y1="472.52106"
+       x1="-137.36061"
+       gradientTransform="matrix(0.5806141,-0.290307,0,0.8294487,1235.5061,-245.10175)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3438"
+       xlink:href="#linearGradient414"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient414">
+      <stop
+         id="stop415"
+         offset="0.00000000"
+         style="stop-color:#ffd800;stop-opacity:1.0000000;" />
+      <stop
+         id="stop416"
+         offset="1.0000000"
+         style="stop-color:#e77900;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       y2="207.36218"
+       x2="195"
+       y1="207.36218"
+       x1="175"
+       gradientTransform="translate(-153,-176.36218)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3492"
+       xlink:href="#linearGradient2202-1"
+       inkscape:collect="always" />
+    <radialGradient
+       r="4.5"
+       fy="349.86218"
+       fx="109"
+       cy="349.86218"
+       cx="109"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3494"
+       xlink:href="#linearGradient2202-1"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="207.36218"
+       x2="195"
+       y1="207.36218"
+       x1="175"
+       gradientTransform="translate(-153,-176.36218)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3374"
+       xlink:href="#linearGradient2202-1"
+       inkscape:collect="always" />
+    <radialGradient
+       r="4.5"
+       fy="349.86218"
+       fx="109"
+       cy="349.86218"
+       cx="109"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3376"
+       xlink:href="#linearGradient2202-1"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="207.36218"
+       x2="195"
+       y1="207.36218"
+       x1="175"
+       gradientTransform="translate(-153,-176.36218)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4208"
+       xlink:href="#linearGradient2202-1"
+       inkscape:collect="always" />
+    <radialGradient
+       r="4.5"
+       fy="349.86218"
+       fx="109"
+       cy="349.86218"
+       cx="109"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4210"
+       xlink:href="#linearGradient2202-1"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="387.43924"
+       x2="332.02466"
+       y1="369.97995"
+       x1="314.56537"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4238"
+       xlink:href="#linearGradient4568-1"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient4568-1">
+      <stop
+         id="stop4570-6"
+         offset="0"
+         style="stop-color:#e12b1c;stop-opacity:1;" />
+      <stop
+         id="stop4572-5"
+         offset="1.0000000"
+         style="stop-color:#980b00;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       y2="390.49332"
+       x2="414.38986"
+       y1="376.13748"
+       x1="401.93405"
+       gradientTransform="matrix(0.999946,0,0,1.000054,-175.79715,404.73102)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4240"
+       xlink:href="#linearGradient4738-8"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="390.78342"
+       x2="311.27377"
+       y1="377.9527"
+       x1="302.73621"
+       gradientTransform="matrix(1.9519,0,0,1.84182,-382.19925,74.95322)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4242-6"
+       xlink:href="#linearGradient4554-2"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="207.36218"
+       x2="195"
+       y1="207.36218"
+       x1="175"
+       gradientTransform="translate(-153,-176.36218)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3332"
+       xlink:href="#linearGradient2202-1"
+       inkscape:collect="always" />
+    <radialGradient
+       r="4.5"
+       fy="349.86218"
+       fx="109"
+       cy="349.86218"
+       cx="109"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3334"
+       xlink:href="#linearGradient2202-1"
+       inkscape:collect="always" />
+    <radialGradient
+       r="199.63403"
+       fy="1736.9607"
+       fx="127.83543"
+       cy="1736.9607"
+       cx="127.83543"
+       gradientTransform="matrix(1.105165,1.228066,-0.8683345,0.7814343,1473.1011,172.79095)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3336"
+       xlink:href="#linearGradient3175"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3175">
+      <stop
+         id="stop3177"
+         offset="0"
+         style="stop-color:#41a0ee;stop-opacity:1;" />
+      <stop
+         style="stop-color:#378be4;stop-opacity:1;"
+         offset="0.64377683"
+         id="stop3191" />
+      <stop
+         id="stop3179"
+         offset="1"
+         style="stop-color:#2d77db;stop-opacity:1;" />
+    </linearGradient>
+    <radialGradient
+       r="195.94841"
+       fy="1808.0941"
+       fx="65.333183"
+       cy="1808.0941"
+       cx="65.333183"
+       gradientTransform="matrix(0.5002429,1.4674024,-1.2539857,0.4274882,2324.404,828.29789)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3338"
+       xlink:href="#linearGradient3159"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3159">
+      <stop
+         id="stop3161"
+         offset="0"
+         style="stop-color:#b0dc18;stop-opacity:1;" />
+      <stop
+         style="stop-color:#3ea20c;stop-opacity:1;"
+         offset="0.56223178"
+         id="stop3187" />
+      <stop
+         id="stop3163"
+         offset="1"
+         style="stop-color:#006900;stop-opacity:1;" />
+    </linearGradient>
+    <radialGradient
+       r="199.13403"
+       fy="1679.6958"
+       fx="13.846332"
+       cy="1679.6958"
+       cx="13.846332"
+       gradientTransform="matrix(0.1992334,1.195744,-1.1829727,0.1971052,1996.7215,1257.5875)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3340"
+       xlink:href="#linearGradient3195"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3195">
+      <stop
+         id="stop3199"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3201" />
+    </linearGradient>
+    <radialGradient
+       r="199.13403"
+       fy="1673.207"
+       fx="5.8389463"
+       cy="1673.207"
+       cx="5.8389463"
+       gradientTransform="matrix(-0.1087803,1.4752039,-1.9297648,-0.1423,3255.8728,1823.5882)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3342"
+       xlink:href="#linearGradient3273"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3273">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="0"
+         id="stop3275" />
+      <stop
+         id="stop3289"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.21602787;"
+         offset="1"
+         id="stop3283" />
+      <stop
+         id="stop3277"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0.59233451;" />
+    </linearGradient>
+    <radialGradient
+       r="199.13403"
+       fy="1676.9956"
+       fx="-90.184074"
+       cy="1676.9956"
+       cx="-90.184074"
+       gradientTransform="matrix(0.466646,1.4600162,-1.3948135,0.4458064,2272.5859,931.37623)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3344"
+       xlink:href="#linearGradient3180"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3180">
+      <stop
+         id="stop3186"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3188" />
+    </linearGradient>
+    <linearGradient
+       y2="207.36218"
+       x2="195"
+       y1="207.36218"
+       x1="175"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient4216"
+       xlink:href="#linearGradient2202-1"
+       inkscape:collect="always" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024"
+       id="pattern6042"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy"
+       id="pattern6024"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       patternUnits="userSpaceOnUse"
+       width="30.066020"
+       height="5.1805778"
+       id="Wavy"
+       inkscape:stockid="Wavy">
+      <path
+         style="fill:black;stroke:none;"
+         d="M 7.597,0.061 C 5.079,-0.187 2.656,0.302 -0.01,1.788 L -0.01,3.061 C 2.773,1.431 5.173,1.052 7.472,1.280 C 9.770,1.508 11.969,2.361 14.253,3.218 C 18.820,4.931 23.804,6.676 30.066,3.061 L 30.062,1.788 C 23.622,5.497 19.246,3.770 14.691,2.061 C 12.413,1.207 10.115,0.311 7.597,0.061 z "
+         id="path6343" />
+    </pattern>
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024"
+       id="pattern6040"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024"
+       id="pattern6038"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024"
+       id="pattern6036"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024"
+       id="pattern6034"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024"
+       id="pattern6032"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024"
+       id="pattern6030"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024"
+       id="pattern6028"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3982"
+       id="linearGradient8849"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.77146086,0,0,0.77146086,473.62706,-225.83335)"
+       x1="199.88765"
+       y1="542.3349"
+       x2="198.9913"
+       y2="260.87878" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4371"
+       id="linearGradient8851"
+       gradientUnits="userSpaceOnUse"
+       x1="645.82532"
+       y1="-33.126385"
+       x2="639.10272"
+       y2="118.80616" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="linearGradient8853"
+       gradientUnits="userSpaceOnUse"
+       x1="548.88831"
+       y1="802.63702"
+       x2="538.74719"
+       y2="550.37653" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4371"
+       id="linearGradient8855"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,169.41151)"
+       x1="645.82532"
+       y1="-33.126385"
+       x2="639.10272"
+       y2="118.80616" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4000"
+       id="linearGradient8857"
+       gradientUnits="userSpaceOnUse"
+       x1="228.57109"
+       y1="752.08252"
+       x2="220.50388"
+       y2="521.71875" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4371"
+       id="linearGradient8859"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-239.32737,170.30787)"
+       x1="645.82532"
+       y1="-33.126385"
+       x2="639.10272"
+       y2="118.80616" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4066"
+       id="linearGradient8861"
+       gradientUnits="userSpaceOnUse"
+       x1="543.81781"
+       y1="271.49564"
+       x2="547.62073"
+       y2="26.841015" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4371"
+       id="linearGradient8863"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-239.77555,2.3885373e-6)"
+       x1="645.82532"
+       y1="-33.126385"
+       x2="639.10272"
+       y2="118.80616" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3948"
+       id="linearGradient8976"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(145.20987,64.537718)"
+       x1="57.366859"
+       y1="0.93518841"
+       x2="51.988716"
+       y2="140.76692" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4371"
+       id="linearGradient8978"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-480.44746,1.3445382)"
+       x1="645.82532"
+       y1="-33.126385"
+       x2="639.10272"
+       y2="118.80616" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="linearGradient5072"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="radialGradient5082"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="linearGradient5096"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="radialGradient5106"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="linearGradient5123"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="radialGradient5133"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="linearGradient5149"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="radialGradient5159"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="radialGradient5178"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5191"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.17998545,0,0,0.14918688,502.1893,-24.02897)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5194"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.28503107,0,0,0.19252569,407.7236,-73.15871)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5197"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.34178919,0,0,0.23086363,396.3144,-88.95173)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5200"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.25086058,0,0,0.16944441,406.7992,-32.10751)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5203"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.26134748,0,0,0.17652771,412.2819,-25.25605)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5206"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.10450367,-0.15138107,-0.14618876,0.07058814,668.335,91.43843)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5209"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.15523199,-0.22486363,-0.21715137,0.10485269,738.2325,88.88709)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5212"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.13850655,-0.20063507,-0.19375423,0.09355524,722.8067,97.77468)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5215"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.11821823,-0.17124787,-0.16537317,0.07985124,677.6847,122.0894)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5218"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.09649358,-0.13977614,-0.1349824,0.06517688,635.5166,142.1226)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5221"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.16528031,-0.23941723,0.23120639,-0.11163907,265.1906,314.0698)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5224"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.17347291,-0.25128512,0.24266582,-0.117172,239.7257,330.3731)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5227"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.17787482,-0.25766417,0.24882648,-0.12014721,225.1178,318.3329)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5230"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.16712798,-0.24209591,0.23379201,-0.11288754,227.7161,329.1711)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5233"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.11258989,-0.16309441,0.15750073,-0.07604949,314.1776,290.1886)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5236"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.11868893,0.17192833,0.16603178,0.0801691,311.5686,16.07786)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5239"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.09470054,0.13717975,0.1324755,0.06396614,331.8395,50.2111)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5242"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1147788,0.16626286,0.16056063,0.07752752,322.2702,30.08746)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5245"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.14121233,0.20455424,0.19753851,0.09538236,286.7172,18.15027)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5248"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.16277324,0.23578711,0.22770011,0.10994621,259.9411,6.05945)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5251"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.16116543,0.23345669,-0.22545126,-0.10885916,748.0707,211.5833)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5254"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.12673802,0.18358546,-0.17729095,-0.08560556,697.8146,196.7379)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5257"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.13824761,0.20026072,-0.19339155,-0.09337933,714.1281,221.8225)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5260"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.12141779,0.17588262,-0.16984994,-0.08201292,662.6019,207.1803)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-8"
+       id="linearGradient5263"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.14486352,0.20984435,-0.20264797,-0.09784905,735.5011,232.5166)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5178-1"
+       id="radialGradient5266"
+       gradientUnits="userSpaceOnUse"
+       cx="384.69696"
+       cy="571.95715"
+       fx="384.69696"
+       fy="571.95715"
+       r="24.998358"
+       gradientTransform="matrix(1.155532,0,0,1.155532,26.16756,-503.197)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="linearGradient5275"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,177.55089,360.10086)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="radialGradient5278"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,4.3122209,343.74329,-552.89392)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="linearGradient5296"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,177.55089,360.10086)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="radialGradient5299"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,4.3122209,343.74329,-552.89392)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="radialGradient5323"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="radialGradient5337"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="radialGradient5356"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="linearGradient5369"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="radialGradient5379"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="linearGradient5402"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="radialGradient5412"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4886-9"
+       id="linearGradient5422"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7071068,0.7071068,-0.7071068,0.7071068,-354.99474,401.23658)"
+       x1="838.01013"
+       y1="-320.49728"
+       x2="909.21588"
+       y2="-321.47269" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4738"
+       id="linearGradient5425"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.638597,0,0,1.565933,-355.04905,402.57752)"
+       x1="1313.4297"
+       y1="237.96057"
+       x2="1333.0073"
+       y2="258.76886" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4554-4"
+       id="linearGradient5428"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-354.99455,401.23652)"
+       x1="808.12592"
+       y1="362.58139"
+       x2="832.68341"
+       y2="400.04047" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient114931"
+       id="linearGradient5448"
+       gradientUnits="userSpaceOnUse"
+       x1="332.67328"
+       y1="298.85724"
+       x2="482.37622"
+       y2="683.92651" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient114953"
+       id="linearGradient5451"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1048951,0,0,1.1048951,67.985466,73.286385)"
+       x1="218.73267"
+       y1="237.31267"
+       x2="335.66339"
+       y2="399.49088" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient114975"
+       id="linearGradient5454"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9983345,0,0,1.0398445,80.706264,173.27788)"
+       x1="273.62375"
+       y1="224.83743"
+       x2="236.19801"
+       y2="166.61961" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="radialGradient5471"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="linearGradient5488"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="radialGradient5498"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="linearGradient5512"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="radialGradient5522"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="linearGradient5536"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-9"
+       id="radialGradient5546"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <inkscape:perspective
+       id="perspective8000"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082"
+       id="linearGradient9152"
+       gradientUnits="userSpaceOnUse"
+       x1="525.26874"
+       y1="1174.7026"
+       x2="538.74719"
+       y2="550.37653" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4371"
+       id="linearGradient9154"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,169.41151)"
+       x1="645.82532"
+       y1="-33.126385"
+       x2="639.10272"
+       y2="118.80616" />
+    <inkscape:perspective
+       id="perspective9182"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <filter
+       id="filter3968-6"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         stdDeviation="3.3747421"
+         id="feGaussianBlur3970-7" />
+    </filter>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082-4"
+       id="linearGradient9152-7"
+       gradientUnits="userSpaceOnUse"
+       x1="525.26874"
+       y1="1174.7026"
+       x2="538.74719"
+       y2="550.37653" />
+    <linearGradient
+       id="linearGradient4082-4">
+      <stop
+         offset="0"
+         style="stop-color:#0000d4;stop-opacity:1"
+         id="stop4084-0" />
+      <stop
+         offset="1"
+         style="stop-color:#0000d4;stop-opacity:0"
+         id="stop4086-6" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4371-7"
+       id="linearGradient9154-4"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,169.41151)"
+       x1="645.82532"
+       y1="-33.126385"
+       x2="639.10272"
+       y2="118.80616" />
+    <linearGradient
+       id="linearGradient4371-7">
+      <stop
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1"
+         id="stop4373-4" />
+      <stop
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0"
+         id="stop4375-8" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective10330"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lstart-5"
+       style="overflow:visible">
+      <path
+         id="path9321-3"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(0.8,0,0,0.8,10,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend-9"
+       style="overflow:visible">
+      <path
+         id="path9324-4"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+    </marker>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4066"
+       id="linearGradient10380"
+       gradientUnits="userSpaceOnUse"
+       x1="543.81781"
+       y1="271.49564"
+       x2="547.62073"
+       y2="26.841015" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4371"
+       id="linearGradient10382"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-239.77555,2.3885373e-6)"
+       x1="645.82532"
+       y1="-33.126385"
+       x2="639.10272"
+       y2="118.80616" />
+    <inkscape:perspective
+       id="perspective10392"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <filter
+       id="filter3968-6-7"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         stdDeviation="3.3747421"
+         id="feGaussianBlur3970-7-0" />
+    </filter>
+    <linearGradient
+       id="linearGradient4082-4-8">
+      <stop
+         offset="0"
+         style="stop-color:#0000d4;stop-opacity:1"
+         id="stop4084-0-4" />
+      <stop
+         offset="1"
+         style="stop-color:#0000d4;stop-opacity:0"
+         id="stop4086-6-8" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4371-7-6">
+      <stop
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1"
+         id="stop4373-4-8" />
+      <stop
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0"
+         id="stop4375-8-5" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective12102"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient2817-2">
+      <stop
+         style="stop-color:#cccccc;stop-opacity:1;"
+         offset="0"
+         id="stop2819-2" />
+      <stop
+         style="stop-color:#cccccc;stop-opacity:0;"
+         offset="1"
+         id="stop2821-2" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective13556"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient12067-5">
+      <stop
+         id="stop12069-4"
+         style="stop-color:#ad96cc;stop-opacity:0.5933333;"
+         offset="0" />
+      <stop
+         id="stop12071-6"
+         style="stop-color:#e9afaf;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective15770"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <filter
+       id="filter3968-7"
+       color-interpolation-filters="sRGB">
+      <feGaussianBlur
+         stdDeviation="3.3747421"
+         id="feGaussianBlur3970-0" />
+    </filter>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4278-9"
+       id="linearGradient4680-4"
+       y2="684.74646"
+       x2="458.88586"
+       y1="839.39856"
+       x1="470.29462" />
+    <linearGradient
+       id="linearGradient4278-9">
+      <stop
+         offset="0"
+         style="stop-color:#ad96cc;stop-opacity:0.5933333;"
+         id="stop4280-6" />
+      <stop
+         offset="1"
+         style="stop-color:#ccff00;stop-opacity:0"
+         id="stop4282-9" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="translate(-239.77555,519.439)"
+       gradientUnits="userSpaceOnUse"
+       xlink:href="#linearGradient4371-1"
+       id="linearGradient4682-5"
+       y2="118.80616"
+       x2="639.10272"
+       y1="-33.126385"
+       x1="645.82532" />
+    <linearGradient
+       id="linearGradient4371-1">
+      <stop
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1"
+         id="stop4373-6" />
+      <stop
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0"
+         id="stop4375-0" />
+    </linearGradient>
+    <linearGradient
+       y2="118.80616"
+       x2="639.10272"
+       y1="-33.126385"
+       x1="645.82532"
+       gradientTransform="translate(-239.77555,519.439)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient15791"
+       xlink:href="#linearGradient4371-1"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4371"
+       id="linearGradient15859"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.88885013,0,0,0.88885013,168.13259,220.68371)"
+       x1="645.82532"
+       y1="-33.126385"
+       x2="639.10272"
+       y2="118.80616" />
+    <inkscape:perspective
+       id="perspective16199"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient12067-57">
+      <stop
+         id="stop12069-0"
+         style="stop-color:#ad96cc;stop-opacity:0.5933333;"
+         offset="0" />
+      <stop
+         id="stop12071-2"
+         style="stop-color:#e9afaf;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2817"
+       id="linearGradient16680"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.88408881,0,0,0.66263018,-70.400599,-249.7195)"
+       x1="247.14285"
+       y1="484.50504"
+       x2="213.57144"
+       y2="350.93359" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2817"
+       id="linearGradient16698"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.88408881,0,0,0.66263018,279.9044,-264.59654)"
+       x1="247.14285"
+       y1="484.50504"
+       x2="213.57144"
+       y2="350.93359" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2817-2"
+       id="linearGradient16739"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.88408881,0,0,0.66263018,-143.75719,176.83724)"
+       x1="247.14285"
+       y1="484.50504"
+       x2="213.57144"
+       y2="350.93359" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2817"
+       id="linearGradient16756"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.88408881,0,0,0.66263018,300.85528,217.70027)"
+       x1="247.14285"
+       y1="484.50504"
+       x2="213.57144"
+       y2="350.93359" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2817"
+       id="linearGradient16765"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.88408881,0,0,0.66263018,300.85528,375.65549)"
+       x1="247.14285"
+       y1="484.50504"
+       x2="213.57144"
+       y2="350.93359" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2817"
+       id="linearGradient16802"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.49114184,0,0,0.6629986,189.52223,210.60917)"
+       x1="247.14285"
+       y1="484.50504"
+       x2="213.57144"
+       y2="350.93359" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2817"
+       id="linearGradient16991"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.88408881,0,0,0.66263018,-0.708975,60.94437)"
+       x1="247.14285"
+       y1="484.50504"
+       x2="213.57144"
+       y2="350.93359" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2817"
+       id="linearGradient16993"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.88408881,0,0,0.66263018,-144.505,53.31895)"
+       x1="247.14285"
+       y1="484.50504"
+       x2="213.57144"
+       y2="350.93359" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2817"
+       id="linearGradient17005"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.88408881,0,0,0.66263018,150.5255,-4.52637)"
+       x1="247.14285"
+       y1="484.50504"
+       x2="213.57144"
+       y2="350.93359" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2817"
+       id="linearGradient17433"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.88408881,0,0,0.66263018,300.85528,375.65549)"
+       x1="247.14285"
+       y1="484.50504"
+       x2="213.57144"
+       y2="350.93359" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2817"
+       id="linearGradient20271"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.88408881,0,0,0.66263018,300.85528,217.70027)"
+       x1="247.14285"
+       y1="484.50504"
+       x2="213.57144"
+       y2="350.93359" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082-4-8"
+       id="linearGradient20722"
+       gradientUnits="userSpaceOnUse"
+       x1="525.26874"
+       y1="1174.7026"
+       x2="538.74719"
+       y2="550.37653" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4082-4-8"
+       id="linearGradient21714"
+       gradientUnits="userSpaceOnUse"
+       x1="525.26874"
+       y1="1174.7026"
+       x2="538.74719"
+       y2="550.37653"
+       gradientTransform="matrix(0.7481581,0,0,0.9471927,233.23862,163.03297)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4066"
+       id="linearGradient21756"
+       gradientUnits="userSpaceOnUse"
+       x1="543.81781"
+       y1="271.49564"
+       x2="547.62073"
+       y2="26.841015" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4371"
+       id="linearGradient21758"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-239.77555,2.3885373e-6)"
+       x1="645.82532"
+       y1="-33.126385"
+       x2="639.10272"
+       y2="118.80616" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4371"
+       id="linearGradient21761"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.6893672,0,0,1.245506,-704.28431,73.380251)"
+       x1="645.82532"
+       y1="-33.126385"
+       x2="639.10272"
+       y2="118.80616" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4066"
+       id="linearGradient21768"
+       gradientUnits="userSpaceOnUse"
+       x1="543.81781"
+       y1="271.49564"
+       x2="547.62073"
+       y2="26.841015" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4066"
+       id="linearGradient21771"
+       gradientUnits="userSpaceOnUse"
+       x1="543.81781"
+       y1="271.49564"
+       x2="547.62073"
+       y2="26.841015"
+       gradientTransform="matrix(1.3032807,0,0,0.96085913,-346.6082,37.566254)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4066"
+       id="linearGradient21785"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.3032807,0,0,0.96085913,-346.6082,37.566254)"
+       x1="543.81781"
+       y1="271.49564"
+       x2="547.62073"
+       y2="26.841015" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4371"
+       id="linearGradient21787"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.6893672,0,0,1.245506,-704.28431,73.380251)"
+       x1="645.82532"
+       y1="-33.126385"
+       x2="639.10272"
+       y2="118.80616" />
+    <filter
+       inkscape:collect="always"
+       id="filter21805"
+       x="-0.15145693"
+       width="1.3029139"
+       y="-0.014428231"
+       height="1.0288565">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.74912805"
+         id="feGaussianBlur21807" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter21809"
+       x="-0.16034819"
+       width="1.3206964"
+       y="-0.015197877"
+       height="1.0303958">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.74912805"
+         id="feGaussianBlur21811" />
+    </filter>
+    <filter
+       inkscape:collect="always"
+       id="filter21813"
+       x="-0.18043325"
+       width="1.3608665"
+       y="-0.016119204"
+       height="1.0322384">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.74912805"
+         id="feGaussianBlur21815" />
+    </filter>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.6491111"
+     inkscape:cx="219.31218"
+     inkscape:cy="664.4532"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1145"
+     inkscape:window-height="934"
+     inkscape:window-x="34"
+     inkscape:window-y="39"
+     inkscape:window-maximized="0"
+     showguides="true"
+     inkscape:guide-bbox="true" />
+  <metadata
+     id="metadata6">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="bg">
+    <rect
+       style="opacity:0.29761903;fill:#ffffff;fill-opacity:1;stroke:none"
+       id="rect3885"
+       width="720.9859"
+       height="710.20197"
+       x="12.324539"
+       y="26.343679"
+       rx="0"
+       ry="0" />
+  </g>
+  <g
+     inkscape:label="Vrstva 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="display:inline">
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot2829"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"><flowRegion
+         id="flowRegion2831"><rect
+           id="rect2833"
+           width="265.71429"
+           height="177.85715"
+           x="155.71428"
+           y="404.50504" /></flowRegion><flowPara
+         id="flowPara2835" /></flowRoot>    <g
+       id="g16794"
+       transform="translate(-24.010968,-5.3372475)">
+      <rect
+         ry="11.945394"
+         rx="8.8490124"
+         y="496.79114"
+         x="276.52448"
+         height="70.088417"
+         width="89.808792"
+         id="rect2815"
+         style="fill:url(#linearGradient16802);fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+      <text
+         id="text2825"
+         y="519.22876"
+         x="321.64371"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           style="font-size:16px;stroke:none"
+           y="519.22876"
+           x="321.64371"
+           id="tspan2827"
+           sodipodi:role="line">AMQP</tspan></text>
+      <text
+         id="text2837"
+         y="544.44421"
+         x="321.43179"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           y="544.44421"
+           x="321.43179"
+           id="tspan2839"
+           sodipodi:role="line"
+           style="font-size:12px;stroke:none">Messaging</tspan><tspan
+           y="559.44421"
+           x="321.43179"
+           sodipodi:role="line"
+           style="font-size:12px;stroke:none"
+           id="tspan9256">(RabbitMQ)</tspan></text>
+    </g>
+    <g
+       id="g16889"
+       transform="translate(0.50596409,-29.325539)">
+      <rect
+         ry="11.938755"
+         rx="15.928825"
+         y="346.96732"
+         x="155.90103"
+         height="70.049469"
+         width="161.66194"
+         id="rect8725"
+         style="fill:url(#linearGradient16991);fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+      <text
+         id="text8727"
+         y="369.38547"
+         x="236.94684"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           style="font-size:16px;stroke:none"
+           y="369.38547"
+           x="236.94684"
+           id="tspan8729"
+           sodipodi:role="line">cinder-api</tspan></text>
+      <text
+         id="text8731"
+         y="398.95828"
+         x="236.73492"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           y="398.95828"
+           x="236.73492"
+           id="tspan8733"
+           sodipodi:role="line"
+           style="font-size:12px;stroke:none">(Public API server)</tspan></text>
+    </g>
+    <g
+       id="g16932"
+       transform="translate(3.4001987,4.4121277)">
+      <rect
+         style="fill:url(#linearGradient16993);fill-opacity:1;stroke:#000000;stroke-opacity:1"
+         id="rect8648"
+         width="161.66194"
+         height="70.049469"
+         x="12.105004"
+         y="339.34192"
+         rx="15.928825"
+         ry="11.938755" />
+      <text
+         xml:space="preserve"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         x="93.15081"
+         y="361.76007"
+         id="text8650"><tspan
+           sodipodi:role="line"
+           id="tspan8652"
+           x="93.15081"
+           y="361.76007"
+           style="font-size:16px;stroke:none">cinder-api</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         x="92.938896"
+         y="391.33289"
+         id="text8654"><tspan
+           style="font-size:12px;stroke:none"
+           sodipodi:role="line"
+           id="tspan8656"
+           x="92.938896"
+           y="391.33289">(Public API server)</tspan></text>
+    </g>
+    <path
+       sodipodi:nodetypes="csc"
+       id="path16669"
+       d="m 512.9762,107.60868 c 0,0 -19.88364,73.77843 -19.14762,133.13834 0.74982,60.47338 73.49977,177.42206 73.49977,177.42206"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow1Lend-9)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow1Lend-9)"
+       d="m 512.87991,107.60868 c -4.71799,19.64225 -24.01824,85.99818 -24.05251,138.04039 -0.0398,60.47802 68.47123,180.49754 68.47123,180.49754"
+       id="path11656"
+       sodipodi:nodetypes="csc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart-5);marker-mid:none;marker-end:url(#Arrow1Lend-9)"
+       d="m 512.78363,107.60868 c -2.31085,9.24341 -17.6719,77.28342 -13.89346,135.31703 3.89289,60.35262 78.01669,167.97005 78.01669,167.97005"
+       id="path16671"
+       sodipodi:nodetypes="csc" />
+    <g
+       id="g21776"
+       transform="translate(6.5360776,1.0893463)">
+      <path
+         style="opacity:0.26984127;fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3968)"
+         id="path8232"
+         transform="matrix(1.3322638,0,0,1.0031175,88.993121,34.164002)"
+         d="m 222.51946,60.989827 c -26.62399,0 -48.63303,8.548333 -52.22594,19.65625 -6.69546,-1.106666 -13.97205,-1.71875 -21.60756,-1.71875 -32.53011,0 -58.907419,11.042529 -58.907419,24.656233 0,0.75473 0.08653,1.48131 0.245192,2.21875 -0.08202,-3.9e-4 -0.163046,0 -0.245192,0 -21.363059,0 -38.679067,13.25729 -38.679067,29.59375 0,9.68721 6.096934,18.26069 15.508406,23.65625 -0.365836,1.92843 -0.582332,3.88678 -0.582332,5.90625 0,19.80178 18.308926,35.875 40.885792,35.875 4.46135,0 8.76139,-0.65378 12.78065,-1.8125 0.48146,16.9154 14.64139,30.5 32.05888,30.5 6.3283,0 12.22292,-1.81426 17.1941,-4.90625 4.34571,4.21099 9.62161,6.6875 15.32451,6.6875 6.04314,0 11.63741,-2.78914 16.12138,-7.46875 10.6727,7.90405 25.89396,12.84375 42.78604,12.84375 32.28736,0 58.47834,-18.06675 58.47834,-40.34375 0,-1.24407 -0.0854,-2.47215 -0.24519,-3.6875 14.00459,-4.26594 23.96754,-15.2465 23.96754,-28.125 0,-11.93982 -8.55473,-22.25444 -20.96393,-27.09375 6.63334,-4.33556 10.42066,-9.30406 10.42066,-14.59375 0,-6.50703 -5.7256,-12.51858 -15.4471,-17.46875 1.99862,-2.68052 3.1262,-5.727807 3.1262,-8.968735 0,-10.643452 -12.19574,-19.281248 -27.24699,-19.281248 -0.7631,0 -1.52079,0.05025 -2.26802,0.09375 -6.57023,-9.381491 -26.683,-16.21875 -50.47895,-16.21875 z" />
+      <path
+         style="opacity:0.29761903;fill:#cccccc;fill-opacity:1;stroke:none"
+         id="path8234"
+         d="m 386.15762,100.47525 c -34.69853,0 -63.38249,8.21374 -68.06506,18.88689 -8.72606,-1.06335 -18.2095,-1.65148 -28.16072,-1.65148 -42.39586,0 -76.7729,10.61032 -76.7729,23.69118 0,0.72519 0.11273,1.42333 0.31955,2.13191 -0.10687,-3.8e-4 -0.2125,0 -0.31955,0 -27.84206,0 -50.40968,12.73839 -50.40968,28.43542 0,9.30805 7.94601,17.54595 20.21181,22.73033 -0.4768,1.85295 -0.75896,3.73464 -0.75896,5.67507 0,19.02672 23.86168,34.47082 53.28568,34.47082 5.81439,0 11.41855,-0.62819 16.65677,-1.74155 0.62748,16.25331 19.08184,29.3062 41.78172,29.3062 8.24755,0 15.9299,-1.74325 22.40874,-4.71422 5.66368,4.04617 12.53966,6.42575 19.97214,6.42575 7.87591,0 15.16681,-2.67997 21.01068,-7.17642 13.90953,7.59468 33.7471,12.34104 55.76222,12.34104 42.0795,0 76.21369,-17.35961 76.21369,-38.76466 0,-1.19538 -0.1113,-2.37539 -0.31955,-3.54317 18.25192,-4.09897 31.23644,-14.64974 31.23644,-27.02416 0,-11.47249 -11.14922,-21.38339 -27.32189,-26.03328 8.6451,-4.16586 13.58105,-8.93989 13.58105,-14.02254 0,-6.25234 -7.46207,-12.02859 -20.13191,-16.78501 2.60476,-2.5756 4.07431,-5.50362 4.07431,-8.6177 0,-10.22686 -15.89447,-18.52657 -35.51047,-18.52657 -0.99454,0 -1.98202,0.0483 -2.95587,0.0901 -8.56285,-9.01429 -34.77544,-15.58393 -65.78824,-15.58393 z" />
+      <path
+         style="opacity:0.5674603;fill:#cccccc;fill-opacity:1;stroke:none"
+         id="path8236"
+         d="m 375.20571,95.674419 c -20.30087,0.52671 -44.63816,2.336897 -56.73344,15.824151 -7.77932,5.45494 -18.72353,0.64029 -27.93908,1.35121 -26.25523,-0.81492 -55.2717,0.94667 -75.95684,14.02253 -4.21055,4.5643 1.05482,10.07046 7.08659,12.10083 -16.73873,-1.44814 -35.86195,-1.23819 -49.32103,7.17641 -9.49694,5.28455 -14.29217,15.64261 -7.20877,23.30084 4.11932,5.10929 10.95197,9.01215 18.69393,10.68955 -8.95226,15.99047 9.50229,33.99299 31.36019,36.60273 13.24633,1.81305 26.98139,0.52381 39.17989,-3.6933 -7.81013,13.84905 7.80651,29.16437 26.47289,31.88851 8.47083,1.74611 16.91892,-0.29015 24.11069,-3.51314 5.7717,-1.85581 11.63161,0.40738 15.39501,3.54317 9.34531,4.03619 21.41479,0.6773 28.59072,-4.53406 11.12891,-1.19569 18.16623,7.34084 28.87581,8.10725 32.01903,7.76142 72.12284,3.44795 94.48785,-16.09439 5.80294,-6.20705 7.78549,-14.47269 3.78766,-21.55927 19.12596,0.27067 39.26768,-14.40125 31.84892,-28.7357 -6.7557,-11.19695 -23.63984,-15.93279 -39.30206,-17.23541 8.95688,-4.93264 24.29301,-6.8814 26.59508,-16.2145 -2.30454,-8.78724 -16.55309,-10.99986 -25.53616,-15.22361 -5.72916,-1.87775 3.74245,-1.22421 5.33531,-3.30295 7.99435,-5.32026 2.50692,-15.38236 -7.20878,-17.11531 -10.01676,-2.92966 -22.58718,-0.81989 -30.50491,-7.17641 C 420.53639,95.503998 396.01115,95.671823 375.20571,95.674419 z" />
+      <path
+         style="opacity:0.28968255;fill:url(#linearGradient21785);fill-opacity:1;stroke:none"
+         id="path8238"
+         d="m 375.20571,95.674419 c -20.30087,0.52671 -44.63816,2.336897 -56.73344,15.824151 -7.77932,5.45494 -18.72353,0.64029 -27.93908,1.35121 -26.25523,-0.81492 -55.2717,0.94667 -75.95684,14.02253 -4.21055,4.5643 1.05482,10.07046 7.08659,12.10083 -16.73873,-1.44814 -35.86195,-1.23819 -49.32103,7.17641 -9.49694,5.28455 -14.29217,15.64261 -7.20877,23.30084 4.11932,5.10929 10.95197,9.01215 18.69393,10.68955 -8.95226,15.99047 9.50229,33.99299 31.36019,36.60273 13.24633,1.81305 26.98139,0.52381 39.17989,-3.6933 -7.81013,13.84905 7.80651,29.16437 26.47289,31.88851 8.47083,1.74611 16.91892,-0.29015 24.11069,-3.51314 5.7717,-1.85581 11.63161,0.40738 15.39501,3.54317 9.34531,4.03619 21.41479,0.6773 28.59072,-4.53406 11.12891,-1.19569 18.16623,7.34084 28.87581,8.10725 32.01903,7.76142 72.12284,3.44795 94.48785,-16.09439 5.80294,-6.20705 7.78549,-14.47269 3.78766,-21.55927 19.12596,0.27067 39.26768,-14.40125 31.84892,-28.7357 -6.7557,-11.19695 -23.63984,-15.93279 -39.30206,-17.23541 8.95688,-4.93264 24.29301,-6.8814 26.59508,-16.2145 -2.30454,-8.78724 -16.55309,-10.99986 -25.53616,-15.22361 -5.72916,-1.87775 3.74245,-1.22421 5.33531,-3.30295 7.99435,-5.32026 2.50692,-15.38236 -7.20878,-17.11531 -10.01676,-2.92966 -22.58718,-0.81989 -30.50491,-7.17641 C 420.53639,95.503998 396.01115,95.671823 375.20571,95.674419 z" />
+      <path
+         d="m 378.17772,97.978994 c -20.29884,-0.746257 -42.75508,2.187766 -56.85776,13.739486 -5.35143,5.37908 -15.90284,4.75331 -23.9273,4.0565 -25.83806,-2.50785 -54.16704,-0.82004 -76.06212,10.34467 -3.02319,1.4398 -7.31508,3.44621 -4.90973,6.42214 1.79656,3.23547 8.29522,3.85778 9.60828,7.16165 -1.48543,2.80361 -7.20246,0.99682 -10.28961,1.12089 -9.38434,-0.58805 -18.99005,-0.61648 -28.14349,1.21444 40.73064,19.45562 94.57638,19.96884 138.68649,6.49998 34.66458,-6.74734 71.855,-0.63812 102.52779,12.06107 9.6536,3.23527 48.99589,10.38806 58.77125,13.41587 1.13272,-1.711 -0.7863,-3.1314 -22.15369,-7.70656 -11.65832,-2.49626 20.54303,-8.26695 26.09587,-16.99194 -2.2742,-7.93582 -14.26212,-9.64595 -22.4369,-13.19457 -3.87129,-0.62833 -5.78892,-5.95644 -0.79189,-6.30538 5.35647,-0.95769 8.77398,-5.43924 6.17674,-9.26345 -2.89922,-5.8006 -12.12725,-7.04579 -19.59383,-6.90313 -11.55222,-1.21285 -21.20146,-6.0701 -30.66484,-10.76749 -14.22984,-5.030533 -30.53876,-5.021552 -46.03526,-4.904176 z"
+         id="path8240"
+         style="opacity:0.5674603;fill:url(#linearGradient21787);fill-opacity:1;stroke:none" />
+      <text
+         xml:space="preserve"
+         style="font-size:22.42008591px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;opacity:0.76448729;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         x="342.94745"
+         y="142.13666"
+         id="text7423"><tspan
+           sodipodi:role="line"
+           id="tspan7425"
+           x="342.94745"
+           y="142.13666">Internet</tspan></text>
+    </g>
+    <g
+       id="g16682"
+       transform="translate(10.848402,-0.63264792)">
+      <rect
+         style="fill:url(#linearGradient16680);fill-opacity:1;stroke:#000000;stroke-opacity:1"
+         id="rect9008"
+         width="161.66194"
+         height="70.049469"
+         x="86.209404"
+         y="36.303455"
+         rx="15.928825"
+         ry="11.938755" />
+      <text
+         xml:space="preserve"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         x="167.2552"
+         y="58.721607"
+         id="text9010"><tspan
+           sodipodi:role="line"
+           id="tspan9012"
+           x="167.2552"
+           y="58.721607"
+           style="font-size:16px;stroke:none">Cloud users</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         x="167.04329"
+         y="82.132156"
+         id="text9014"><tspan
+           style="font-size:12px;stroke:none"
+           sodipodi:role="line"
+           id="tspan9016"
+           x="167.04329"
+           y="82.132156">Using tools to manage</tspan><tspan
+           style="font-size:12px;stroke:none"
+           sodipodi:role="line"
+           x="167.04329"
+           y="97.132156"
+           id="tspan7018">virtual guests</tspan><tspan
+           style="font-size:12px;stroke:none"
+           sodipodi:role="line"
+           x="167.04329"
+           y="112.13216"
+           id="tspan7020" /></text>
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="209.5202"
+       y="266.69235"
+       id="text8731-0"><tspan
+         style="font-size:12px"
+         sodipodi:role="line"
+         id="tspan8733-5"
+         x="209.5202"
+         y="266.69235" /></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow1Lstart);marker-mid:none;marker-end:url(#Arrow1Lend)"
+       d="m 198.3248,107.59465 c 0,0 0.0334,61.30615 -12.67029,115.01394 -12.4729,52.73189 -77.81473,120.32191 -77.81473,120.32191"
+       id="path9316"
+       sodipodi:nodetypes="csc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-mid:none;marker-end:url(#Arrow1Lend);display:inline"
+       d="m 198.28949,107.52657 c 0,0 -0.91296,53.23484 4.06099,93.36586 5.74342,46.33928 44.61511,113.98877 44.61511,113.98877"
+       id="path9316-1"
+       sodipodi:nodetypes="csc" />
+    <g
+       style="opacity:0.84126988;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;display:inline"
+       id="g9125"
+       transform="translate(-25.132382,-9.2981524)">
+      <g
+         id="g8299"
+         transform="matrix(0.56548207,0,0,0.56548207,-104.34915,96.818268)"
+         style="stroke-width:1.7684027;stroke-miterlimit:4;stroke-dasharray:none">
+        <g
+           id="g8301"
+           transform="matrix(0.77146086,0,0,0.77146086,210.15747,-250.94342)"
+           style="stroke-width:2.29227781;stroke-miterlimit:4;stroke-dasharray:none">
+          <path
+             style="fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3968)"
+             id="path8303"
+             transform="matrix(1.0222386,0,0,1.0439798,336.02717,504.69369)"
+             d="m 222.51946,60.989827 c -26.62399,0 -48.63303,8.548333 -52.22594,19.65625 -6.69546,-1.106666 -13.97205,-1.71875 -21.60756,-1.71875 -32.53011,0 -58.907419,11.042529 -58.907419,24.656233 0,0.75473 0.08653,1.48131 0.245192,2.21875 -0.08202,-3.9e-4 -0.163046,0 -0.245192,0 -21.363059,0 -38.679067,13.25729 -38.679067,29.59375 0,9.68721 6.096934,18.26069 15.508406,23.65625 -0.365836,1.92843 -0.582332,3.88678 -0.582332,5.90625 0,19.80178 18.308926,35.875 40.885792,35.875 4.46135,0 8.76139,-0.65378 12.78065,-1.8125 0.48146,16.9154 14.64139,30.5 32.05888,30.5 6.3283,0 12.22292,-1.81426 17.1941,-4.90625 4.34571,4.21099 9.62161,6.6875 15.32451,6.6875 6.04314,0 11.63741,-2.78914 16.12138,-7.46875 10.6727,7.90405 25.89396,12.84375 42.78604,12.84375 32.28736,0 58.47834,-18.06675 58.47834,-40.34375 0,-1.24407 -0.0854,-2.47215 -0.24519,-3.6875 14.00459,-4.26594 23.96754,-15.2465 23.96754,-28.125 0,-11.93982 -8.55473,-22.25444 -20.96393,-27.09375 6.63334,-4.33556 10.42066,-9.30406 10.42066,-14.59375 0,-6.50703 -5.7256,-12.51858 -15.4471,-17.46875 1.99862,-2.68052 3.1262,-5.727807 3.1262,-8.968735 0,-10.643452 -12.19574,-19.281248 -27.24699,-19.281248 -0.7631,0 -1.52079,0.05025 -2.26802,0.09375 -6.57023,-9.381491 -26.683,-16.21875 -50.47895,-16.21875 z" />
+          <path
+             style="fill:#000055;fill-opacity:1;stroke:none"
+             id="path8305"
+             d="m 564.03984,573.70614 c -26.62399,0 -48.63303,8.54834 -52.22594,19.65625 -6.69546,-1.10666 -13.97205,-1.71875 -21.60756,-1.71875 -32.53011,0 -58.90743,11.04253 -58.90743,24.65625 0,0.75473 0.0865,1.48131 0.24519,2.21875 -0.082,-3.9e-4 -0.16304,0 -0.24519,0 -21.36306,0 -38.67907,13.25729 -38.67907,29.59375 0,9.68721 6.09694,18.26069 15.50841,23.65625 -0.36584,1.92843 -0.58233,3.88678 -0.58233,5.90625 0,19.80178 18.30892,35.875 40.88579,35.875 4.46136,0 8.7614,-0.65378 12.78066,-1.8125 0.48146,16.9154 14.64139,30.5 32.05888,30.5 6.3283,0 12.22292,-1.81426 17.1941,-4.90625 4.34571,4.21099 9.62161,6.6875 15.32451,6.6875 6.04314,0 11.63741,-2.78914 16.12138,-7.46875 10.6727,7.90405 25.89396,12.84375 42.78604,12.84375 32.28736,0 58.47834,-18.06675 58.47834,-40.34375 0,-1.24407 -0.0854,-2.47215 -0.24519,-3.6875 14.00459,-4.26594 23.96754,-15.2465 23.96754,-28.125 0,-11.93982 -8.55473,-22.25444 -20.96393,-27.09375 6.63334,-4.33556 10.42066,-9.30406 10.42066,-14.59375 0,-6.50703 -5.7256,-12.51858 -15.4471,-17.46875 1.99862,-2.68052 3.1262,-5.72781 3.1262,-8.96875 0,-10.64345 -12.19574,-19.28125 -27.24699,-19.28125 -0.7631,0 -1.52079,0.0503 -2.26802,0.0937 -6.57023,-9.38149 -26.683,-16.21875 -50.47895,-16.21875 z" />
+          <path
+             style="fill:#cccccc;fill-opacity:1;stroke:none"
+             id="path8307"
+             d="m 555.6365,568.70975 c -15.57674,0.54816 -34.25061,2.43209 -43.53125,16.46875 -5.96903,5.67715 -14.36646,0.66637 -21.4375,1.40625 -20.14549,-0.84811 -42.40968,0.98524 -58.28126,14.59375 -3.23074,4.75022 0.80936,10.48068 5.4375,12.59375 -12.84354,-1.50713 -27.51668,-1.28862 -37.84375,7.46875 -7.28696,5.49982 -10.96631,16.27981 -5.53125,24.25 3.16073,5.31742 8.40339,9.37927 14.34375,11.125 -6.86902,16.64184 7.29104,35.3777 24.0625,38.09375 10.16382,1.8869 20.70267,0.54515 30.06251,-3.84375 -5.99267,14.4132 5.98989,30.35239 20.3125,33.1875 6.49962,1.81724 12.98179,-0.30197 18.5,-3.65625 4.42859,-1.93141 8.92487,0.42397 11.8125,3.6875 7.17061,4.20061 16.43145,0.70489 21.9375,-4.71875 8.53915,-1.2444 13.93885,7.63987 22.15625,8.4375 24.56802,8.07758 55.33945,3.5884 72.5,-16.75 4.45256,-6.4599 5.97376,-15.06224 2.90625,-22.4375 14.67524,0.2817 30.12987,-14.98788 24.4375,-29.90625 -5.18361,-11.65306 -18.13872,-16.58182 -30.15625,-17.9375 6.87256,-5.13357 18.63989,-7.16172 20.40625,-16.875 -1.76826,-9.1452 -12.70109,-11.44795 -19.59375,-15.84375 -4.39595,-1.95424 2.87156,-1.27408 4.09375,-3.4375 6.13402,-5.53698 1.92355,-16.00896 -5.53125,-17.8125 -7.68581,-3.049 -17.33102,-0.85329 -23.40625,-7.46875 -12.87427,-10.80236 -31.69235,-10.6277 -47.65625,-10.625 z" />
+          <path
+             style="fill:url(#linearGradient9152);fill-opacity:1;stroke:none"
+             id="path8309"
+             d="m 555.6365,568.70975 c -15.57674,0.54816 -34.25061,2.43209 -43.53125,16.46875 -5.96903,5.67715 -14.36646,0.66637 -21.4375,1.40625 -20.14549,-0.84811 -42.40968,0.98524 -58.28126,14.59375 -3.23074,4.75022 0.80936,10.48068 5.4375,12.59375 -12.84354,-1.50713 -27.51668,-1.28862 -37.84375,7.46875 -7.28696,5.49982 -10.96631,16.27981 -5.53125,24.25 3.16073,5.31742 8.40339,9.37927 14.34375,11.125 -6.86902,16.64184 7.29104,35.3777 24.0625,38.09375 10.16382,1.8869 20.70267,0.54515 30.06251,-3.84375 -5.99267,14.4132 5.98989,30.35239 20.3125,33.1875 6.49962,1.81724 12.98179,-0.30197 18.5,-3.65625 4.42859,-1.93141 8.92487,0.42397 11.8125,3.6875 7.17061,4.20061 16.43145,0.70489 21.9375,-4.71875 8.53915,-1.2444 13.93885,7.63987 22.15625,8.4375 24.56802,8.07758 55.33945,3.5884 72.5,-16.75 4.45256,-6.4599 5.97376,-15.06224 2.90625,-22.4375 14.67524,0.2817 30.12987,-14.98788 24.4375,-29.90625 -5.18361,-11.65306 -18.13872,-16.58182 -30.15625,-17.9375 6.87256,-5.13357 18.63989,-7.16172 20.40625,-16.875 -1.76826,-9.1452 -12.70109,-11.44795 -19.59375,-15.84375 -4.39595,-1.95424 2.87156,-1.27408 4.09375,-3.4375 6.13402,-5.53698 1.92355,-16.00896 -5.53125,-17.8125 -7.68581,-3.049 -17.33102,-0.85329 -23.40625,-7.46875 -12.87427,-10.80236 -31.69235,-10.6277 -47.65625,-10.625 z" />
+        </g>
+        <path
+           style="fill:url(#linearGradient9154);fill-opacity:1;stroke:none"
+           id="path8311"
+           d="m 640.75,189.16151 c -12.01565,-0.59916 -25.30834,1.75653 -33.65625,11.03125 -3.16771,4.31879 -9.41349,3.81637 -14.16347,3.25691 -15.29452,-2.01352 -32.06351,-0.6584 -45.02403,8.30559 -1.78954,1.156 -4.33007,2.76692 -2.90625,5.15625 1.06345,2.59772 4.91025,3.09736 5.6875,5.75 -0.87928,2.25098 -4.26341,0.80033 -6.09081,0.89994 -5.55494,-0.47213 -11.24092,-0.49496 -16.65919,0.97506 24.11,15.62066 55.98332,16.03271 82.09375,5.21875 20.51927,-5.41735 42.53368,-0.51234 60.69006,9.68367 5.71433,2.59755 29.00251,8.34043 34.78891,10.77142 0.6705,-1.37374 -0.46544,-2.51416 -13.1136,-6.18749 -6.901,-2.00422 12.16019,-6.63743 15.44713,-13.6426 -1.34619,-6.37157 -8.44229,-7.74461 -13.28125,-10.59375 -2.29156,-0.50447 -3.42668,-4.78234 -0.46875,-5.0625 3.1707,-0.76892 5.19365,-4.36709 3.65625,-7.4375 -1.71616,-4.65722 -7.17858,-5.65697 -11.59833,-5.54243 -6.83819,-0.97378 -12.54994,-4.8736 -18.15167,-8.64507 -8.42318,-4.03895 -18.07704,-4.03174 -27.25,-3.9375 z" />
+      </g>
+      <text
+         id="text8317"
+         y="225.54834"
+         x="244.01357"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           style="font-size:16px"
+           y="225.54834"
+           x="246.56044"
+           id="tspan8319"
+           sodipodi:role="line">Admin </tspan><tspan
+           style="font-size:16px"
+           id="tspan8321"
+           y="245.54834"
+           x="244.01357"
+           sodipodi:role="line">network</tspan></text>
+    </g>
+    <g
+       id="g16700"
+       transform="translate(17.38448,14.244393)">
+      <rect
+         ry="11.938755"
+         rx="15.928825"
+         y="21.426414"
+         x="436.5144"
+         height="70.049469"
+         width="161.66194"
+         id="rect9158"
+         style="fill:url(#linearGradient16698);fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+      <text
+         id="text9160"
+         y="43.844566"
+         x="517.56018"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           style="font-size:16px;stroke:none"
+           y="43.844566"
+           x="517.56018"
+           id="tspan9162"
+           sodipodi:role="line">Internet EndUsers</tspan></text>
+      <text
+         id="text9164"
+         y="67.255119"
+         x="517.34827"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           y="67.255119"
+           x="517.34827"
+           id="tspan9166"
+           sodipodi:role="line"
+           style="font-size:12px;stroke:none">Using services provided</tspan><tspan
+           id="tspan9168"
+           y="82.255119"
+           x="517.34827"
+           sodipodi:role="line"
+           style="font-size:12px;stroke:none">by virtual guests</tspan><tspan
+           id="tspan9170"
+           y="97.255119"
+           x="517.34827"
+           sodipodi:role="line"
+           style="font-size:12px;stroke:none" /></text>
+    </g>
+    <g
+       style="opacity:0.84126988;display:inline"
+       id="g9125-5"
+       transform="translate(261.58723,-9.2669558)">
+      <g
+         id="g8299-8"
+         transform="matrix(0.56548207,0,0,0.56548207,-104.34915,96.818268)">
+        <g
+           id="g8301-2"
+           transform="matrix(0.77146086,0,0,0.77146086,210.15747,-250.94342)">
+          <path
+             style="fill:#000000;fill-opacity:1;stroke:none;filter:url(#filter3968-6)"
+             id="path8303-6"
+             transform="matrix(1.0222386,0,0,1.0439798,336.02717,504.69369)"
+             d="m 222.51946,60.989827 c -26.62399,0 -48.63303,8.548333 -52.22594,19.65625 -6.69546,-1.106666 -13.97205,-1.71875 -21.60756,-1.71875 -32.53011,0 -58.907419,11.042529 -58.907419,24.656233 0,0.75473 0.08653,1.48131 0.245192,2.21875 -0.08202,-3.9e-4 -0.163046,0 -0.245192,0 -21.363059,0 -38.679067,13.25729 -38.679067,29.59375 0,9.68721 6.096934,18.26069 15.508406,23.65625 -0.365836,1.92843 -0.582332,3.88678 -0.582332,5.90625 0,19.80178 18.308926,35.875 40.885792,35.875 4.46135,0 8.76139,-0.65378 12.78065,-1.8125 0.48146,16.9154 14.64139,30.5 32.05888,30.5 6.3283,0 12.22292,-1.81426 17.1941,-4.90625 4.34571,4.21099 9.62161,6.6875 15.32451,6.6875 6.04314,0 11.63741,-2.78914 16.12138,-7.46875 10.6727,7.90405 25.89396,12.84375 42.78604,12.84375 32.28736,0 58.47834,-18.06675 58.47834,-40.34375 0,-1.24407 -0.0854,-2.47215 -0.24519,-3.6875 14.00459,-4.26594 23.96754,-15.2465 23.96754,-28.125 0,-11.93982 -8.55473,-22.25444 -20.96393,-27.09375 6.63334,-4.33556 10.42066,-9.30406 10.42066,-14.59375 0,-6.50703 -5.7256,-12.51858 -15.4471,-17.46875 1.99862,-2.68052 3.1262,-5.727807 3.1262,-8.968735 0,-10.643452 -12.19574,-19.281248 -27.24699,-19.281248 -0.7631,0 -1.52079,0.05025 -2.26802,0.09375 -6.57023,-9.381491 -26.683,-16.21875 -50.47895,-16.21875 z" />
+          <path
+             style="fill:#000055;fill-opacity:1;stroke:none"
+             id="path8305-0"
+             d="m 564.03984,573.70614 c -26.62399,0 -48.63303,8.54834 -52.22594,19.65625 -6.69546,-1.10666 -13.97205,-1.71875 -21.60756,-1.71875 -32.53011,0 -58.90743,11.04253 -58.90743,24.65625 0,0.75473 0.0865,1.48131 0.24519,2.21875 -0.082,-3.9e-4 -0.16304,0 -0.24519,0 -21.36306,0 -38.67907,13.25729 -38.67907,29.59375 0,9.68721 6.09694,18.26069 15.50841,23.65625 -0.36584,1.92843 -0.58233,3.88678 -0.58233,5.90625 0,19.80178 18.30892,35.875 40.88579,35.875 4.46136,0 8.7614,-0.65378 12.78066,-1.8125 0.48146,16.9154 14.64139,30.5 32.05888,30.5 6.3283,0 12.22292,-1.81426 17.1941,-4.90625 4.34571,4.21099 9.62161,6.6875 15.32451,6.6875 6.04314,0 11.63741,-2.78914 16.12138,-7.46875 10.6727,7.90405 25.89396,12.84375 42.78604,12.84375 32.28736,0 58.47834,-18.06675 58.47834,-40.34375 0,-1.24407 -0.0854,-2.47215 -0.24519,-3.6875 14.00459,-4.26594 23.96754,-15.2465 23.96754,-28.125 0,-11.93982 -8.55473,-22.25444 -20.96393,-27.09375 6.63334,-4.33556 10.42066,-9.30406 10.42066,-14.59375 0,-6.50703 -5.7256,-12.51858 -15.4471,-17.46875 1.99862,-2.68052 3.1262,-5.72781 3.1262,-8.96875 0,-10.64345 -12.19574,-19.28125 -27.24699,-19.28125 -0.7631,0 -1.52079,0.0503 -2.26802,0.0937 -6.57023,-9.38149 -26.683,-16.21875 -50.47895,-16.21875 z" />
+          <path
+             style="fill:#cccccc;fill-opacity:1;stroke:none"
+             id="path8307-6"
+             d="m 555.6365,568.70975 c -15.57674,0.54816 -34.25061,2.43209 -43.53125,16.46875 -5.96903,5.67715 -14.36646,0.66637 -21.4375,1.40625 -20.14549,-0.84811 -42.40968,0.98524 -58.28126,14.59375 -3.23074,4.75022 0.80936,10.48068 5.4375,12.59375 -12.84354,-1.50713 -27.51668,-1.28862 -37.84375,7.46875 -7.28696,5.49982 -10.96631,16.27981 -5.53125,24.25 3.16073,5.31742 8.40339,9.37927 14.34375,11.125 -6.86902,16.64184 7.29104,35.3777 24.0625,38.09375 10.16382,1.8869 20.70267,0.54515 30.06251,-3.84375 -5.99267,14.4132 5.98989,30.35239 20.3125,33.1875 6.49962,1.81724 12.98179,-0.30197 18.5,-3.65625 4.42859,-1.93141 8.92487,0.42397 11.8125,3.6875 7.17061,4.20061 16.43145,0.70489 21.9375,-4.71875 8.53915,-1.2444 13.93885,7.63987 22.15625,8.4375 24.56802,8.07758 55.33945,3.5884 72.5,-16.75 4.45256,-6.4599 5.97376,-15.06224 2.90625,-22.4375 14.67524,0.2817 30.12987,-14.98788 24.4375,-29.90625 -5.18361,-11.65306 -18.13872,-16.58182 -30.15625,-17.9375 6.87256,-5.13357 18.63989,-7.16172 20.40625,-16.875 -1.76826,-9.1452 -12.70109,-11.44795 -19.59375,-15.84375 -4.39595,-1.95424 2.87156,-1.27408 4.09375,-3.4375 6.13402,-5.53698 1.92355,-16.00896 -5.53125,-17.8125 -7.68581,-3.049 -17.33102,-0.85329 -23.40625,-7.46875 -12.87427,-10.80236 -31.69235,-10.6277 -47.65625,-10.625 z" />
+          <path
+             style="fill:url(#linearGradient9152-7);fill-opacity:1;stroke:none"
+             id="path8309-6"
+             d="m 555.6365,568.70975 c -15.57674,0.54816 -34.25061,2.43209 -43.53125,16.46875 -5.96903,5.67715 -14.36646,0.66637 -21.4375,1.40625 -20.14549,-0.84811 -42.40968,0.98524 -58.28126,14.59375 -3.23074,4.75022 0.80936,10.48068 5.4375,12.59375 -12.84354,-1.50713 -27.51668,-1.28862 -37.84375,7.46875 -7.28696,5.49982 -10.96631,16.27981 -5.53125,24.25 3.16073,5.31742 8.40339,9.37927 14.34375,11.125 -6.86902,16.64184 7.29104,35.3777 24.0625,38.09375 10.16382,1.8869 20.70267,0.54515 30.06251,-3.84375 -5.99267,14.4132 5.98989,30.35239 20.3125,33.1875 6.49962,1.81724 12.98179,-0.30197 18.5,-3.65625 4.42859,-1.93141 8.92487,0.42397 11.8125,3.6875 7.17061,4.20061 16.43145,0.70489 21.9375,-4.71875 8.53915,-1.2444 13.93885,7.63987 22.15625,8.4375 24.56802,8.07758 55.33945,3.5884 72.5,-16.75 4.45256,-6.4599 5.97376,-15.06224 2.90625,-22.4375 14.67524,0.2817 30.12987,-14.98788 24.4375,-29.90625 -5.18361,-11.65306 -18.13872,-16.58182 -30.15625,-17.9375 6.87256,-5.13357 18.63989,-7.16172 20.40625,-16.875 -1.76826,-9.1452 -12.70109,-11.44795 -19.59375,-15.84375 -4.39595,-1.95424 2.87156,-1.27408 4.09375,-3.4375 6.13402,-5.53698 1.92355,-16.00896 -5.53125,-17.8125 -7.68581,-3.049 -17.33102,-0.85329 -23.40625,-7.46875 -12.87427,-10.80236 -31.69235,-10.6277 -47.65625,-10.625 z" />
+        </g>
+        <path
+           style="fill:url(#linearGradient9154-4);fill-opacity:1;stroke:none"
+           id="path8311-4"
+           d="m 640.75,189.16151 c -12.01565,-0.59916 -25.30834,1.75653 -33.65625,11.03125 -3.16771,4.31879 -9.41349,3.81637 -14.16347,3.25691 -15.29452,-2.01352 -32.06351,-0.6584 -45.02403,8.30559 -1.78954,1.156 -4.33007,2.76692 -2.90625,5.15625 1.06345,2.59772 4.91025,3.09736 5.6875,5.75 -0.87928,2.25098 -4.26341,0.80033 -6.09081,0.89994 -5.55494,-0.47213 -11.24092,-0.49496 -16.65919,0.97506 24.11,15.62066 55.98332,16.03271 82.09375,5.21875 20.51927,-5.41735 42.53368,-0.51234 60.69006,9.68367 5.71433,2.59755 29.00251,8.34043 34.78891,10.77142 0.6705,-1.37374 -0.46544,-2.51416 -13.1136,-6.18749 -6.901,-2.00422 12.16019,-6.63743 15.44713,-13.6426 -1.34619,-6.37157 -8.44229,-7.74461 -13.28125,-10.59375 -2.29156,-0.50447 -3.42668,-4.78234 -0.46875,-5.0625 3.1707,-0.76892 5.19365,-4.36709 3.65625,-7.4375 -1.71616,-4.65722 -7.17858,-5.65697 -11.59833,-5.54243 -6.83819,-0.97378 -12.54994,-4.8736 -18.15167,-8.64507 -8.42318,-4.03895 -18.07704,-4.03174 -27.25,-3.9375 z" />
+      </g>
+      <text
+         id="text8317-6"
+         y="225.54834"
+         x="244.01357"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           style="font-size:16px"
+           y="225.54834"
+           x="244.01357"
+           id="tspan8319-2"
+           sodipodi:role="line">Public</tspan><tspan
+           style="font-size:16px"
+           id="tspan8321-8"
+           y="245.54834"
+           x="244.01357"
+           sodipodi:role="line">network</tspan></text>
+    </g>
+    <text
+       id="text16517"
+       y="628.02972"
+       x="646.58423"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       xml:space="preserve"><tspan
+         style="font-size:16px;stroke:#000000;stroke-opacity:1"
+         y="628.02972"
+         x="646.58423"
+         id="tspan16519"
+         sodipodi:role="line" /></text>
+    <text
+       id="text16521"
+       y="651.44031"
+       x="646.37231"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       xml:space="preserve"><tspan
+         id="tspan16523"
+         y="651.44031"
+         x="646.37231"
+         sodipodi:role="line"
+         style="font-size:12px;stroke:#000000;stroke-opacity:1" /><tspan
+         id="tspan16525"
+         y="666.44031"
+         x="646.37231"
+         sodipodi:role="line"
+         style="font-size:12px;stroke:#000000;stroke-opacity:1" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="637.71069"
+       y="634.78632"
+       id="text16531"><tspan
+         sodipodi:role="line"
+         id="tspan16533"
+         x="637.71069"
+         y="634.78632"
+         style="font-size:16px;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="637.49878"
+       y="658.19684"
+       id="text16535"><tspan
+         style="font-size:12px;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         sodipodi:role="line"
+         x="637.49878"
+         y="658.19684"
+         id="tspan16537" /><tspan
+         style="font-size:12px;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         sodipodi:role="line"
+         x="637.49878"
+         y="673.19684"
+         id="tspan16539" /></text>
+    <rect
+       ry="11.938755"
+       rx="15.928825"
+       y="605.61157"
+       x="565.53839"
+       height="70.049469"
+       width="161.66194"
+       id="rect16515"
+       style="fill:#536c5d;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+    <rect
+       style="fill:#6f917c;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect16529"
+       width="161.66194"
+       height="70.049469"
+       x="556.66486"
+       y="612.36816"
+       rx="15.928825"
+       ry="11.938755" />
+    <rect
+       style="fill:#93ac9d;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="rect16543"
+       width="161.66194"
+       height="70.049469"
+       x="547.79132"
+       y="619.12476"
+       rx="15.928825"
+       ry="11.938755" />
+    <text
+       xml:space="preserve"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="628.83716"
+       y="641.54291"
+       id="text16545"><tspan
+         sodipodi:role="line"
+         id="tspan16547"
+         x="628.83716"
+         y="641.54291"
+         style="font-size:16px;stroke:none">Disk Images</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="628.62524"
+       y="664.95349"
+       id="text16549"><tspan
+         id="tspan16561"
+         style="font-size:12px;stroke:none"
+         sodipodi:role="line"
+         x="628.62524"
+         y="664.95349">for Virtual Guests</tspan><tspan
+         id="tspan20663"
+         style="font-size:12px;stroke:none"
+         sodipodi:role="line"
+         x="628.62524"
+         y="679.95349" /><tspan
+         style="font-size:12px;stroke:none"
+         sodipodi:role="line"
+         x="628.62524"
+         y="694.95349"
+         id="tspan16553" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="646.58423"
+       y="432.92889"
+       id="text15923"><tspan
+         sodipodi:role="line"
+         id="tspan15925"
+         x="646.58423"
+         y="432.92889"
+         style="font-size:16px;stroke:#000000;stroke-opacity:1" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="646.37231"
+       y="456.33945"
+       id="text15927"><tspan
+         style="font-size:12px;stroke:#000000;stroke-opacity:1"
+         sodipodi:role="line"
+         x="646.37231"
+         y="456.33945"
+         id="tspan15929" /><tspan
+         style="font-size:12px;stroke:#000000;stroke-opacity:1"
+         sodipodi:role="line"
+         x="646.37231"
+         y="471.33945"
+         id="tspan15931" /></text>
+    <text
+       id="text15988"
+       y="439.68546"
+       x="637.71069"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       xml:space="preserve"><tspan
+         style="font-size:16px;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         y="439.68546"
+         x="637.71069"
+         id="tspan15990"
+         sodipodi:role="line" /></text>
+    <text
+       id="text15992"
+       y="463.09601"
+       x="637.49878"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       xml:space="preserve"><tspan
+         id="tspan15994"
+         y="463.09601"
+         x="637.49878"
+         sodipodi:role="line"
+         style="font-size:12px;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /><tspan
+         id="tspan15996"
+         y="478.09601"
+         x="637.49878"
+         sodipodi:role="line"
+         style="font-size:12px;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" /></text>
+    <g
+       id="g3865">
+      <rect
+         ry="11.938755"
+         rx="15.928825"
+         y="410.51074"
+         x="565.53839"
+         height="70.049469"
+         width="161.66194"
+         id="rect15921"
+         style="fill:#806600;fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+      <rect
+         style="fill:#aa8800;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect15986"
+         width="161.66194"
+         height="70.049469"
+         x="556.66486"
+         y="417.2673"
+         rx="15.928825"
+         ry="11.938755" />
+      <rect
+         style="fill:#d4aa00;fill-opacity:1;stroke:#000000;stroke-opacity:1"
+         id="rect10492"
+         width="161.66194"
+         height="70.049469"
+         x="547.79132"
+         y="424.02393"
+         rx="15.928825"
+         ry="11.938755" />
+      <text
+         xml:space="preserve"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         x="628.83716"
+         y="446.44208"
+         id="text10494"><tspan
+           sodipodi:role="line"
+           id="tspan10496"
+           x="628.83716"
+           y="446.44208"
+           style="font-size:16px;stroke:none">Virtual Guests</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         x="628.62524"
+         y="469.85263"
+         id="text10498"><tspan
+           style="font-size:12px;stroke:none"
+           sodipodi:role="line"
+           x="628.62524"
+           y="469.85263"
+           id="tspan10502">Runing in the cloud</tspan><tspan
+           style="font-size:12px;stroke:none"
+           sodipodi:role="line"
+           x="628.62524"
+           y="484.85263"
+           id="tspan10504" /></text>
+    </g>
+    <g
+       id="g16785"
+       transform="translate(-50.816079,-31.823295)">
+      <rect
+         ry="11.938755"
+         rx="15.928825"
+         y="503.72324"
+         x="457.46527"
+         height="70.049469"
+         width="161.66194"
+         id="rect9298"
+         style="fill:url(#linearGradient16756);fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+      <text
+         id="text9300"
+         y="526.14136"
+         x="538.51111"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           style="font-size:16px;stroke:none"
+           y="526.14136"
+           x="538.51111"
+           id="tspan9302"
+           sodipodi:role="line">cinder-compute</tspan></text>
+      <text
+         id="text9304"
+         y="549.55194"
+         x="538.29919"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           id="tspan9308"
+           y="549.55194"
+           x="540.20935"
+           sodipodi:role="line"
+           style="font-size:12px;stroke:none">(uses libvirt or XenAPI </tspan><tspan
+           y="564.55194"
+           x="540.20935"
+           sodipodi:role="line"
+           style="font-size:12px;stroke:none"
+           id="tspan12073">to manage guests) </tspan><tspan
+           id="tspan9310"
+           y="579.55194"
+           x="538.29919"
+           sodipodi:role="line"
+           style="font-size:12px;stroke:none" /></text>
+    </g>
+    <g
+       id="g16939"
+       transform="translate(2.3108524,4.038323)">
+      <rect
+         ry="11.938755"
+         rx="15.928825"
+         y="462.8602"
+         x="12.852811"
+         height="70.049469"
+         width="161.66194"
+         id="rect9298-7"
+         style="fill:url(#linearGradient16739);fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+      <text
+         id="text9300-9"
+         y="485.27835"
+         x="93.898621"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           style="font-size:16px;stroke:none"
+           y="485.27835"
+           x="93.898621"
+           id="tspan9302-8"
+           sodipodi:role="line">User authorisation</tspan></text>
+      <text
+         id="text9304-5"
+         y="508.6889"
+         x="93.686707"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           y="508.6889"
+           x="95.596863"
+           sodipodi:role="line"
+           style="font-size:12px;stroke:none"
+           id="tspan12159">(SQL, LDAP or </tspan><tspan
+           y="523.6889"
+           x="95.596863"
+           sodipodi:role="line"
+           style="font-size:12px;stroke:none"
+           id="tspan12163">fake LDAP using ReDIS) </tspan><tspan
+           id="tspan9310-8"
+           y="538.6889"
+           x="93.686707"
+           sodipodi:role="line"
+           style="font-size:12px;stroke:none" /></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart-5);marker-end:url(#Arrow1Lend-9)"
+       d="m 96.239033,413.80352 -0.147258,53.095"
+       id="path17007"
+       inkscape:connector-type="polyline"
+       inkscape:connection-start="#g16932"
+       inkscape:connection-end="#g16939" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart-5);marker-end:url(#Arrow1Lend-9)"
+       d="m 204.09367,387.69125 -74.95474,79.20727"
+       id="path17009"
+       inkscape:connector-type="polyline"
+       inkscape:connection-start="#g16889"
+       inkscape:connection-end="#g16939" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0;marker-start:url(#Arrow1Lstart-5);marker-end:url(#Arrow1Lend-9)"
+       d="m 249.36342,387.69125 35.92229,103.76264"
+       id="path17011"
+       inkscape:connector-type="polyline"
+       inkscape:connection-start="#g16889"
+       inkscape:connection-end="#g16794" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0;marker-start:url(#Arrow1Lstart-5);marker-end:url(#Arrow1Lend-9)"
+       d="M 254.88157,495.24992 144.01331,413.80352"
+       id="path17013"
+       inkscape:connector-type="polyline"
+       inkscape:connection-start="#g16794"
+       inkscape:connection-end="#g16932" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0;marker-start:url(#Arrow1Lstart-5);marker-end:url(#Arrow1Lend-9)"
+       d="m 385.14058,375.96289 -67.30106,115.491"
+       id="path17015"
+       inkscape:connector-type="polyline"
+       inkscape:connection-end="#g16794"
+       inkscape:connection-start="#g16995" />
+    <g
+       id="g16995"
+       transform="translate(17.584375,24.41684)">
+      <g
+         id="g16982">
+        <rect
+           ry="11.938755"
+           rx="15.928825"
+           y="281.49658"
+           x="307.1355"
+           height="70.049469"
+           width="161.66194"
+           id="rect15356"
+           style="fill:url(#linearGradient17005);fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+        <text
+           id="text15358"
+           y="303.91473"
+           x="388.1813"
+           style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+           xml:space="preserve"><tspan
+             style="font-size:16px;stroke:none"
+             y="303.91473"
+             x="388.1813"
+             id="tspan15360"
+             sodipodi:role="line">cinder-network</tspan></text>
+        <text
+           id="text15362"
+           y="327.32529"
+           x="387.96939"
+           style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+           xml:space="preserve"><tspan
+             id="tspan15374"
+             y="327.32529"
+             x="389.87955"
+             sodipodi:role="line"
+             style="font-size:12px;stroke:none">manages cloud networks, </tspan><tspan
+             y="342.32529"
+             x="387.96939"
+             sodipodi:role="line"
+             style="font-size:12px;stroke:none"
+             id="tspan21711">vlans and bridges</tspan><tspan
+             id="tspan15368"
+             y="357.32529"
+             x="387.96939"
+             sodipodi:role="line"
+             style="font-size:12px;stroke:none" /></text>
+      </g>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0;marker-start:url(#Arrow1Lstart-5);marker-end:url(#Arrow1Lend-9)"
+       d="m 406.64919,515.24899 -64.32689,6.62466"
+       id="path17017"
+       inkscape:connector-type="polyline"
+       inkscape:connection-start="#g16785"
+       inkscape:connection-end="#g16794" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0;marker-start:url(#Arrow1Lstart-5);marker-end:url(#Arrow1Lend-9)"
+       d="M 413.14924,577.4452 342.3223,546.26585"
+       id="path17023"
+       inkscape:connector-type="polyline"
+       inkscape:connection-start="#g16948"
+       inkscape:connection-end="#g16794" />
+    <g
+       id="g16948"
+       transform="translate(-50.816078,-86.536142)">
+      <rect
+         style="fill:url(#linearGradient16765);fill-opacity:1;stroke:#000000;stroke-opacity:1"
+         id="rect13528"
+         width="161.66194"
+         height="70.049469"
+         x="457.46527"
+         y="661.67847"
+         rx="15.928825"
+         ry="11.938755" />
+      <text
+         xml:space="preserve"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         x="538.51111"
+         y="684.09662"
+         id="text13530"><tspan
+           sodipodi:role="line"
+           id="tspan13532"
+           x="538.51111"
+           y="684.09662"
+           style="font-size:16px;stroke:none">cinder-volume</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         x="538.29919"
+         y="707.50714"
+         id="text13534"><tspan
+           style="font-size:12px;stroke:none"
+           sodipodi:role="line"
+           x="538.29919"
+           y="707.50714"
+           id="tspan21791">disk images for  v. guests</tspan><tspan
+           style="font-size:12px;stroke:none"
+           sodipodi:role="line"
+           x="538.29919"
+           y="722.50714"
+           id="tspan21795">(filesystem or AoE)</tspan><tspan
+           style="font-size:12px;stroke:none"
+           sodipodi:role="line"
+           x="538.29919"
+           y="737.50714"
+           id="tspan13540" /></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter21809)"
+       d="m 633.9107,494.12013 -11.21252,118.2999"
+       id="path17029"
+       inkscape:connector-type="polyline"
+       sodipodi:nodetypes="cc" />
+    <path
+       inkscape:connector-type="polyline"
+       id="path17033"
+       d="m 626.13785,494.39245 -9.96439,111.53822"
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter21813)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter21805)"
+       d="M 641.38869,494.07338 629.51794,618.68376"
+       id="path17035"
+       inkscape:connector-type="polyline"
+       sodipodi:nodetypes="cc" />
+    <g
+       transform="translate(-171.63342,-2.2561093)"
+       id="g17417">
+      <rect
+         ry="11.938755"
+         rx="15.928825"
+         y="661.67847"
+         x="457.46527"
+         height="70.049469"
+         width="161.66194"
+         id="rect17419"
+         style="fill:url(#linearGradient17433);fill-opacity:1;stroke:#000000;stroke-opacity:1" />
+      <text
+         id="text17421"
+         y="684.09662"
+         x="538.51111"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           style="font-size:16px;stroke:none"
+           y="684.09662"
+           x="538.51111"
+           id="tspan17423"
+           sodipodi:role="line">cinder-objectstore</tspan></text>
+      <text
+         id="text17425"
+         y="707.50714"
+         x="538.29919"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           y="707.50714"
+           x="538.29919"
+           sodipodi:role="line"
+           style="font-size:12px;stroke:none"
+           id="tspan17441">(implements S3-like api</tspan><tspan
+           y="722.50714"
+           x="538.29919"
+           sodipodi:role="line"
+           style="font-size:12px;stroke:none"
+           id="tspan17445">Using Files or (later) Swift</tspan><tspan
+           id="tspan17431"
+           y="737.50714"
+           x="538.29919"
+           sodipodi:role="line"
+           style="font-size:12px;stroke:none" /></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0;marker-start:url(#Arrow1Lstart-5);marker-end:url(#Arrow1Lend-9)"
+       d="M 352.22222,659.42236 311.86654,561.54231"
+       id="path17447"
+       inkscape:connector-type="polyline"
+       inkscape:connection-start="#g17417"
+       inkscape:connection-end="#g16794" />
+    <g
+       transform="translate(-393.56046,89.539858)"
+       id="g20255">
+      <rect
+         style="fill:url(#linearGradient20271);fill-opacity:1;stroke:#000000;stroke-opacity:1"
+         id="rect20257"
+         width="161.66194"
+         height="70.049469"
+         x="457.46527"
+         y="503.72324"
+         rx="15.928825"
+         ry="11.938755" />
+      <text
+         xml:space="preserve"
+         style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         x="538.51111"
+         y="526.14136"
+         id="text20259"><tspan
+           sodipodi:role="line"
+           id="tspan20261"
+           x="538.51111"
+           y="526.14136"
+           style="font-size:16px;stroke:none">cinder-scheduler</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         x="538.29919"
+         y="549.55194"
+         id="text20263"><tspan
+           id="tspan20267"
+           style="font-size:12px;stroke:none"
+           sodipodi:role="line"
+           x="540.20935"
+           y="549.55194">Plans where to </tspan><tspan
+           style="font-size:12px;stroke:none"
+           sodipodi:role="line"
+           x="538.29919"
+           y="564.55194"
+           id="tspan20275">place new guests</tspan><tspan
+           style="font-size:12px;stroke:none"
+           sodipodi:role="line"
+           x="538.29919"
+           y="579.55194"
+           id="tspan20269" /></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 3;stroke-dashoffset:0;marker-start:url(#Arrow1Lstart-5);marker-end:url(#Arrow1Lend-9)"
+       d="m 197.27203,593.26309 56.4451,-37.63067"
+       id="path20277"
+       inkscape:connector-type="polyline"
+       inkscape:connection-start="#g20255"
+       inkscape:connection-end="#g16794" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0;marker-start:url(#Arrow1Lstart-5);marker-end:url(#Arrow1Lend-9)"
+       d="m 477.13366,261.49678 -45.75253,42.48451"
+       id="path21306"
+       sodipodi:nodetypes="cc" />
+  </g>
+</svg>
diff --git a/doc/source/images/NOVA_ARCH_200dpi.png b/doc/source/images/NOVA_ARCH_200dpi.png
new file mode 100644
index 0000000000000000000000000000000000000000..9dde9aa92758650edccd1e39795b8a0ed0ac7de2
GIT binary patch
literal 439024
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
RT%quzzWab`it-7M{{!%5L0SL+

literal 0
HcmV?d00001

diff --git a/doc/source/images/NOVA_ARCH_66dpi.png b/doc/source/images/NOVA_ARCH_66dpi.png
new file mode 100644
index 0000000000000000000000000000000000000000..1ca7f3d3b1c0f6fbeee4c663efb464476da4c7b9
GIT binary patch
literal 110890
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
CeLo8T

literal 0
HcmV?d00001

diff --git a/doc/source/images/NOVA_clouds_A_B.png b/doc/source/images/NOVA_clouds_A_B.png
new file mode 100644
index 0000000000000000000000000000000000000000..439967cb1d34b1bb4e0d8f5d6d4138e8b1e81f8b
GIT binary patch
literal 77007
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%0A13LixRWvL%9)5
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
btUomUdz6z454#;CZeLUFnCep%t1JHtnL-5!

literal 0
HcmV?d00001

diff --git a/doc/source/images/NOVA_clouds_A_B.svg b/doc/source/images/NOVA_clouds_A_B.svg
new file mode 100644
index 000000000..6e1c50456
--- /dev/null
+++ b/doc/source/images/NOVA_clouds_A_B.svg
@@ -0,0 +1,16342 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="744.09448"
+   height="1052.3622"
+   id="svg19253"
+   sodipodi:version="0.32"
+   inkscape:version="0.47 r22583"
+   version="1.0"
+   sodipodi:docname="CINDER_clouds_A_B.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:export-filename="/var/www/alekiba/cinder/CINDER_clouds_A_B.png"
+   inkscape:export-xdpi="100"
+   inkscape:export-ydpi="100">
+  <defs
+     id="defs19255">
+    <linearGradient
+       id="linearGradient5178">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop5180" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.49803922;"
+         offset="0.89021850"
+         id="stop5186" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.24705882;"
+         offset="0.95396262"
+         id="stop5188" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop5182" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4068">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop4070" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop4490" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop4492" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop4072" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4554">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop4556" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.0000000;"
+         offset="1.0000000"
+         id="stop4558" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4886">
+      <stop
+         style="stop-color:#1c97e1;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop4888" />
+      <stop
+         style="stop-color:#006798;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop4890" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2202">
+      <stop
+         id="stop2204"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop2206"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective19261" />
+    <inkscape:perspective
+       id="perspective19535"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       y2="683.92651"
+       x2="482.37622"
+       y1="298.85724"
+       x1="332.67328"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient14778"
+       xlink:href="#linearGradient114931"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient114931"
+       inkscape:collect="always">
+      <stop
+         id="stop114933"
+         offset="0"
+         style="stop-color:#2e3436;stop-opacity:1;" />
+      <stop
+         id="stop114935"
+         offset="1"
+         style="stop-color:#2e3436;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       y2="399.49088"
+       x2="335.66339"
+       y1="237.31267"
+       x1="218.73267"
+       gradientTransform="matrix(1.1048951,0,0,1.1048951,67.985466,73.286385)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient14780"
+       xlink:href="#linearGradient114953"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient114953"
+       inkscape:collect="always">
+      <stop
+         id="stop114955"
+         offset="0"
+         style="stop-color:#191a19;stop-opacity:1;" />
+      <stop
+         id="stop114957"
+         offset="1"
+         style="stop-color:#191a19;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       y2="166.61961"
+       x2="236.19801"
+       y1="224.83743"
+       x1="273.62375"
+       gradientTransform="matrix(0.9983345,0,0,1.0398445,80.706264,173.27788)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient14782"
+       xlink:href="#linearGradient114975"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient114975"
+       inkscape:collect="always">
+      <stop
+         id="stop114977"
+         offset="0"
+         style="stop-color:#3465a4;stop-opacity:1" />
+      <stop
+         id="stop114979"
+         offset="1"
+         style="stop-color:#3465a4;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2202-1">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4886-1">
+      <stop
+         id="stop4888-5"
+         offset="0.0000000"
+         style="stop-color:#1c97e1;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4890-4"
+         offset="1.0000000"
+         style="stop-color:#006798;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4738">
+      <stop
+         id="stop4740"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.72656250;" />
+      <stop
+         id="stop4742"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4554-3">
+      <stop
+         id="stop4556-9"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4558-4"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient414">
+      <stop
+         id="stop415"
+         offset="0.00000000"
+         style="stop-color:#ffd800;stop-opacity:1.0000000;" />
+      <stop
+         id="stop416"
+         offset="1.0000000"
+         style="stop-color:#e77900;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4568">
+      <stop
+         id="stop4570"
+         offset="0"
+         style="stop-color:#e12b1c;stop-opacity:1;" />
+      <stop
+         id="stop4572"
+         offset="1.0000000"
+         style="stop-color:#980b00;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3175">
+      <stop
+         id="stop3177"
+         offset="0"
+         style="stop-color:#41a0ee;stop-opacity:1;" />
+      <stop
+         style="stop-color:#378be4;stop-opacity:1;"
+         offset="0.64377683"
+         id="stop3191" />
+      <stop
+         id="stop3179"
+         offset="1"
+         style="stop-color:#2d77db;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3159">
+      <stop
+         id="stop3161"
+         offset="0"
+         style="stop-color:#b0dc18;stop-opacity:1;" />
+      <stop
+         style="stop-color:#3ea20c;stop-opacity:1;"
+         offset="0.56223178"
+         id="stop3187" />
+      <stop
+         id="stop3163"
+         offset="1"
+         style="stop-color:#006900;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3195">
+      <stop
+         id="stop3199"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3201" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3273">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="0"
+         id="stop3275" />
+      <stop
+         id="stop3289"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.21602787;"
+         offset="1"
+         id="stop3283" />
+      <stop
+         id="stop3277"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0.59233451;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3180">
+      <stop
+         id="stop3186"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3188" />
+    </linearGradient>
+    <radialGradient
+       r="24.998358"
+       fy="571.95715"
+       fx="384.69696"
+       cy="571.95715"
+       cx="384.69696"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient7730"
+       xlink:href="#linearGradient5178-3"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7728"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7726"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7724"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7722"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7720"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7718"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7716"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7714"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7712"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7710"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7708"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7706"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7704"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7702"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7700"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7698"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7696"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7694"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7692"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7690"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7688"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7686"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7684"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7682"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="1061.9722"
+       x2="191.89183"
+       y1="993.39124"
+       x1="145.52031"
+       spreadMethod="reflect"
+       gradientTransform="scale(1.003627,0.996386)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7680"
+       xlink:href="#linearGradient4068-4"
+       inkscape:collect="always" />
+    <radialGradient
+       r="4.5"
+       fy="349.86218"
+       fx="109"
+       cy="349.86218"
+       cx="109"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient117519"
+       xlink:href="#linearGradient2202-3"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="207.36218"
+       x2="195"
+       y1="207.36218"
+       x1="175"
+       gradientTransform="translate(-153,-176.36218)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient117517"
+       xlink:href="#linearGradient2202-3"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient2202-3">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-4" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-2" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4886-3">
+      <stop
+         id="stop4888-1"
+         offset="0.0000000"
+         style="stop-color:#1c97e1;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4890-8"
+         offset="1.0000000"
+         style="stop-color:#006798;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4554-9">
+      <stop
+         id="stop4556-2"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4558-2"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4738-6">
+      <stop
+         id="stop4740-0"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.72656250;" />
+      <stop
+         id="stop4742-8"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       y2="387.43924"
+       x2="332.02466"
+       y1="369.97995"
+       x1="314.56537"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient109180"
+       xlink:href="#linearGradient4568-4"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient4568-4">
+      <stop
+         id="stop4570-3"
+         offset="0"
+         style="stop-color:#e12b1c;stop-opacity:1;" />
+      <stop
+         id="stop4572-8"
+         offset="1.0000000"
+         style="stop-color:#980b00;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       y2="390.49332"
+       x2="414.38986"
+       y1="376.13748"
+       x1="401.93405"
+       gradientTransform="matrix(0.999946,0,0,1.000054,-175.79715,404.73102)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient109182"
+       xlink:href="#linearGradient4738-6"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="390.78342"
+       x2="311.27377"
+       y1="377.9527"
+       x1="302.73621"
+       gradientTransform="matrix(1.9519,0,0,1.84182,-382.19925,74.95322)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient109184"
+       xlink:href="#linearGradient4554-9"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient4068-4">
+      <stop
+         id="stop4070-2"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop4490-5"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop4492-2"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop4072-4"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5178-3">
+      <stop
+         id="stop5180-4"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop5186-9"
+         offset="0.89021850"
+         style="stop-color:#ffffff;stop-opacity:0.49803922;" />
+      <stop
+         id="stop5188-2"
+         offset="0.95396262"
+         style="stop-color:#ffffff;stop-opacity:0.24705882;" />
+      <stop
+         id="stop5182-7"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective838"
+       inkscape:persp3d-origin="750.79663 : 307.92326 : 1"
+       inkscape:vp_z="1501.5933 : 461.88489 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 461.88489 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1"
+       id="linearGradient12076"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1"
+       id="radialGradient12078"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <inkscape:perspective
+       id="perspective12088"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12182"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12184"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12186"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12188"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12190"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12192"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12194"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12196"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12198"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12200"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12202"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12204"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12206"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12208"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12210"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12212"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12214"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12216"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12218"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12220"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12222"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12224"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12226"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12228"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient12230"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5178-3"
+       id="radialGradient12232"
+       gradientUnits="userSpaceOnUse"
+       cx="384.69696"
+       cy="571.95715"
+       fx="384.69696"
+       fy="571.95715"
+       r="24.998358" />
+    <inkscape:perspective
+       id="perspective12388"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-1-5">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-8" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-5" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12397">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop12399" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop12401" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective12388-9"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-1-8">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-1" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-2" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12397-7">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop12399-8" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop12401-6" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective12388-3"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-1-9">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-4" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-8" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12397-9">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop12399-2" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop12401-9" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective12388-1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-1-93">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-6" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-21" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12397-5">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop12399-3" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop12401-91" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective12953"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective13067"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective13089"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective13893"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-2">
+      <stop
+         id="stop2204-6"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop2206-6"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202"
+       id="radialGradient14034"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <inkscape:perspective
+       id="perspective14079"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-2-4">
+      <stop
+         id="stop2204-6-7"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop2206-6-8"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2202-0">
+      <stop
+         id="stop2204-0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop2206-64"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2202-1-93-7">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-6-5" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-21-8" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient14096">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop14098" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop14100" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2202-1-9-9">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-4-3" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-8-0" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient14107">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop14109" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop14111" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2202-1-8-4">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-1-3" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-2-8" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient14118">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop14120" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop14122" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2202-1-5-0">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-8-8" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-5-1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient14129">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop14131" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop14133" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective24883"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-2-1">
+      <stop
+         id="stop2204-6-0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop2206-6-0"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient24892">
+      <stop
+         id="stop24894"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop24896"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2202-1-93-3">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-6-1" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-21-0" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient24903">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop24905" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop24907" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2202-1-9-8">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-4-0" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-8-1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient24914">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop24916" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop24918" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2202-1-8-3">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-1-4" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-2-7" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient24925">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop24927" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop24929" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2202-1-5-4">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-8-4" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-5-2" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient24936">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop24938" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop24940" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective25775"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient28127"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="linearGradient28129"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="radialGradient28131"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="linearGradient28133"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="radialGradient28135"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="linearGradient28137"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="radialGradient28139"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="linearGradient28141"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="radialGradient28143"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient28145"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <inkscape:perspective
+       id="perspective28939"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective29218"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective29250"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-19">
+      <stop
+         id="stop2204-02"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop2206-3"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective29250-3"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-7">
+      <stop
+         id="stop2204-64"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop2206-9"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective29416"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective29448"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-1-53">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-2" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-4" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient29457">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop29459" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop29461" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective29448-9"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-1-51">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-42" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-82" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient29457-9">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop29459-9" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop29461-9" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective29448-6"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-1-7">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-64" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-23" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient29457-0">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop29459-0" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop29461-7" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective29448-94"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-1-87">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-5" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-40" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient29457-2">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop29459-8" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop29461-0" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective29448-2"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-1-1">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-83" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-86" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient29457-8">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop29459-07" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop29461-3" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective29448-8"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-1-2">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-3" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient29457-91">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop29459-3" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop29461-6" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective29448-4"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-1-3">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-50" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-234" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient29457-23">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop29459-2" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop29461-1" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective30318"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-1-59">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-33" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-0" />
+    </linearGradient>
+    <pattern
+       inkscape:collect="always"
+       patternUnits="userSpaceOnUse"
+       width="30.066020"
+       height="5.1805778"
+       id="Wavy-5"
+       inkscape:stockid="Wavy">
+      <path
+         style="fill:black;stroke:none;"
+         d="M 7.597,0.061 C 5.079,-0.187 2.656,0.302 -0.01,1.788 L -0.01,3.061 C 2.773,1.431 5.173,1.052 7.472,1.280 C 9.770,1.508 11.969,2.361 14.253,3.218 C 18.820,4.931 23.804,6.676 30.066,3.061 L 30.062,1.788 C 23.622,5.497 19.246,3.770 14.691,2.061 C 12.413,1.207 10.115,0.311 7.597,0.061 z "
+         id="path6343-6" />
+    </pattern>
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-5"
+       id="pattern30331"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-5"
+       id="pattern30338"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-5"
+       id="pattern30345"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-5"
+       id="pattern30352"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-5"
+       id="pattern30359"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-5"
+       id="pattern30366"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-5"
+       id="pattern30373"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <inkscape:perspective
+       id="perspective30318-6"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-1-32">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-47" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-85" />
+    </linearGradient>
+    <pattern
+       inkscape:collect="always"
+       patternUnits="userSpaceOnUse"
+       width="30.066020"
+       height="5.1805778"
+       id="Wavy-9"
+       inkscape:stockid="Wavy">
+      <path
+         style="fill:black;stroke:none;"
+         d="M 7.597,0.061 C 5.079,-0.187 2.656,0.302 -0.01,1.788 L -0.01,3.061 C 2.773,1.431 5.173,1.052 7.472,1.280 C 9.770,1.508 11.969,2.361 14.253,3.218 C 18.820,4.931 23.804,6.676 30.066,3.061 L 30.062,1.788 C 23.622,5.497 19.246,3.770 14.691,2.061 C 12.413,1.207 10.115,0.311 7.597,0.061 z "
+         id="path6343-63" />
+    </pattern>
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-9"
+       id="pattern30331-1"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-9"
+       id="pattern30338-9"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-9"
+       id="pattern30345-4"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-9"
+       id="pattern30352-9"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-9"
+       id="pattern30359-4"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-9"
+       id="pattern30366-8"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-9"
+       id="pattern30373-6"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <inkscape:perspective
+       id="perspective30318-1"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-1-90">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-0" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-56" />
+    </linearGradient>
+    <pattern
+       inkscape:collect="always"
+       patternUnits="userSpaceOnUse"
+       width="30.066020"
+       height="5.1805778"
+       id="Wavy-4"
+       inkscape:stockid="Wavy">
+      <path
+         style="fill:black;stroke:none;"
+         d="M 7.597,0.061 C 5.079,-0.187 2.656,0.302 -0.01,1.788 L -0.01,3.061 C 2.773,1.431 5.173,1.052 7.472,1.280 C 9.770,1.508 11.969,2.361 14.253,3.218 C 18.820,4.931 23.804,6.676 30.066,3.061 L 30.062,1.788 C 23.622,5.497 19.246,3.770 14.691,2.061 C 12.413,1.207 10.115,0.311 7.597,0.061 z "
+         id="path6343-5" />
+    </pattern>
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-4"
+       id="pattern30331-7"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-4"
+       id="pattern30338-3"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-4"
+       id="pattern30345-8"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-4"
+       id="pattern30352-91"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-4"
+       id="pattern30359-1"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-4"
+       id="pattern30366-9"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-4"
+       id="pattern30373-9"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <inkscape:perspective
+       id="perspective30318-8"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-1-52">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-54" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-55" />
+    </linearGradient>
+    <pattern
+       inkscape:collect="always"
+       patternUnits="userSpaceOnUse"
+       width="30.066020"
+       height="5.1805778"
+       id="Wavy-92"
+       inkscape:stockid="Wavy">
+      <path
+         style="fill:black;stroke:none;"
+         d="M 7.597,0.061 C 5.079,-0.187 2.656,0.302 -0.01,1.788 L -0.01,3.061 C 2.773,1.431 5.173,1.052 7.472,1.280 C 9.770,1.508 11.969,2.361 14.253,3.218 C 18.820,4.931 23.804,6.676 30.066,3.061 L 30.062,1.788 C 23.622,5.497 19.246,3.770 14.691,2.061 C 12.413,1.207 10.115,0.311 7.597,0.061 z "
+         id="path6343-9" />
+    </pattern>
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-92"
+       id="pattern30331-79"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-92"
+       id="pattern30338-0"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-92"
+       id="pattern30345-5"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-92"
+       id="pattern30352-5"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-92"
+       id="pattern30359-6"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-92"
+       id="pattern30366-0"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-92"
+       id="pattern30373-7"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <inkscape:perspective
+       id="perspective30318-2"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-1-19">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-7" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-06" />
+    </linearGradient>
+    <pattern
+       inkscape:collect="always"
+       patternUnits="userSpaceOnUse"
+       width="30.066020"
+       height="5.1805778"
+       id="Wavy-6"
+       inkscape:stockid="Wavy">
+      <path
+         style="fill:black;stroke:none;"
+         d="M 7.597,0.061 C 5.079,-0.187 2.656,0.302 -0.01,1.788 L -0.01,3.061 C 2.773,1.431 5.173,1.052 7.472,1.280 C 9.770,1.508 11.969,2.361 14.253,3.218 C 18.820,4.931 23.804,6.676 30.066,3.061 L 30.062,1.788 C 23.622,5.497 19.246,3.770 14.691,2.061 C 12.413,1.207 10.115,0.311 7.597,0.061 z "
+         id="path6343-7" />
+    </pattern>
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-6"
+       id="pattern30331-16"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-6"
+       id="pattern30338-5"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-6"
+       id="pattern30345-81"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-6"
+       id="pattern30352-4"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-6"
+       id="pattern30359-7"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-6"
+       id="pattern30366-5"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-6"
+       id="pattern30373-1"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <inkscape:perspective
+       id="perspective30318-5"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-1-900">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-23" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-6" />
+    </linearGradient>
+    <pattern
+       inkscape:collect="always"
+       patternUnits="userSpaceOnUse"
+       width="30.066020"
+       height="5.1805778"
+       id="Wavy-1"
+       inkscape:stockid="Wavy">
+      <path
+         style="fill:black;stroke:none;"
+         d="M 7.597,0.061 C 5.079,-0.187 2.656,0.302 -0.01,1.788 L -0.01,3.061 C 2.773,1.431 5.173,1.052 7.472,1.280 C 9.770,1.508 11.969,2.361 14.253,3.218 C 18.820,4.931 23.804,6.676 30.066,3.061 L 30.062,1.788 C 23.622,5.497 19.246,3.770 14.691,2.061 C 12.413,1.207 10.115,0.311 7.597,0.061 z "
+         id="path6343-72" />
+    </pattern>
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-1"
+       id="pattern30331-9"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-1"
+       id="pattern30338-58"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-1"
+       id="pattern30345-3"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-1"
+       id="pattern30352-1"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-1"
+       id="pattern30359-5"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-1"
+       id="pattern30366-3"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-1"
+       id="pattern30373-98"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <inkscape:perspective
+       id="perspective31338"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective33323"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1-2"
+       id="radialGradient28685-2"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       id="linearGradient2202-2-1-2">
+      <stop
+         id="stop2204-6-0-4"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop2206-6-0-6"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3-1"
+       id="linearGradient28681-3"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient2202-1-93-3-1">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-6-1-4" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-21-0-3" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3-1"
+       id="radialGradient28683-5"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient33336">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop33338" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop33340" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8-9"
+       id="linearGradient28677-4"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient2202-1-9-8-9">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-4-0-7" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-8-1-6" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8-9"
+       id="radialGradient28679-4"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient33347">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop33349" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop33351" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3-6"
+       id="linearGradient28673-6"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient2202-1-8-3-6">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-1-4-6" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-2-7-1" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3-6"
+       id="radialGradient28675-9"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient33358">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop33360" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop33362" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4-6"
+       id="linearGradient28669-8"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient2202-1-5-4-6">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-8-4-8" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-5-2-3" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4-6"
+       id="radialGradient28671-6"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient33369">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop33371" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop33373" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1-2"
+       id="radialGradient28667-6"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       id="linearGradient33376">
+      <stop
+         id="stop33378"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop33380"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1-2"
+       id="radialGradient33382"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       id="linearGradient33384">
+      <stop
+         id="stop33386"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop33388"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3-1"
+       id="linearGradient33390"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient33392">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop33394" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop33396" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3-1"
+       id="radialGradient33398"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient33400">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop33402" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop33404" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8-9"
+       id="linearGradient33406"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient33408">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop33410" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop33412" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8-9"
+       id="radialGradient33414"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient33416">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop33418" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop33420" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3-6"
+       id="linearGradient33422"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient33424">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop33426" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop33428" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3-6"
+       id="radialGradient33430"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient33432">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop33434" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop33436" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4-6"
+       id="linearGradient33438"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient33440">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop33442" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop33444" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4-6"
+       id="radialGradient33446"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient33448">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop33450" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop33452" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1-2"
+       id="radialGradient33454"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       id="linearGradient33456">
+      <stop
+         id="stop33458"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop33460"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       r="3"
+       fy="265.86209"
+       fx="97.48214"
+       cy="265.86209"
+       cx="97.48214"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient33952"
+       xlink:href="#linearGradient2202-2-1-2"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="207.36218"
+       x2="195"
+       y1="207.36218"
+       x1="175"
+       gradientTransform="translate(-153,-176.36218)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient33954"
+       xlink:href="#linearGradient2202-1-5-4-6"
+       inkscape:collect="always" />
+    <radialGradient
+       r="4.5"
+       fy="349.86218"
+       fx="109"
+       cy="349.86218"
+       cx="109"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient33956"
+       xlink:href="#linearGradient2202-1-5-4-6"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="207.36218"
+       x2="195"
+       y1="207.36218"
+       x1="175"
+       gradientTransform="translate(-153,-176.36218)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient33958"
+       xlink:href="#linearGradient2202-1-8-3-6"
+       inkscape:collect="always" />
+    <radialGradient
+       r="4.5"
+       fy="349.86218"
+       fx="109"
+       cy="349.86218"
+       cx="109"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient33960"
+       xlink:href="#linearGradient2202-1-8-3-6"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="207.36218"
+       x2="195"
+       y1="207.36218"
+       x1="175"
+       gradientTransform="translate(-153,-176.36218)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient33962"
+       xlink:href="#linearGradient2202-1-9-8-9"
+       inkscape:collect="always" />
+    <radialGradient
+       r="4.5"
+       fy="349.86218"
+       fx="109"
+       cy="349.86218"
+       cx="109"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient33964"
+       xlink:href="#linearGradient2202-1-9-8-9"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="207.36218"
+       x2="195"
+       y1="207.36218"
+       x1="175"
+       gradientTransform="translate(-153,-176.36218)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient33966"
+       xlink:href="#linearGradient2202-1-93-3-1"
+       inkscape:collect="always" />
+    <radialGradient
+       r="4.5"
+       fy="349.86218"
+       fx="109"
+       cy="349.86218"
+       cx="109"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient33968"
+       xlink:href="#linearGradient2202-1-93-3-1"
+       inkscape:collect="always" />
+    <radialGradient
+       r="3"
+       fy="265.86209"
+       fx="97.48214"
+       cy="265.86209"
+       cx="97.48214"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient33970"
+       xlink:href="#linearGradient2202-2-1-2"
+       inkscape:collect="always" />
+    <inkscape:perspective
+       id="perspective35151"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-1-54">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-57" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-52" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient35160">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop35162" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop35164" />
+    </linearGradient>
+    <linearGradient
+       y2="487.91693"
+       x2="-124.93314"
+       y1="472.52106"
+       x1="-137.36061"
+       gradientTransform="matrix(0.5806141,-0.290307,0,0.8294487,1235.5061,-245.10175)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3438-4"
+       xlink:href="#linearGradient414-2"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient414-2">
+      <stop
+         id="stop415-6"
+         offset="0.00000000"
+         style="stop-color:#ffd800;stop-opacity:1.0000000;" />
+      <stop
+         id="stop416-0"
+         offset="1.0000000"
+         style="stop-color:#e77900;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective35294"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-19-1">
+      <stop
+         id="stop2204-02-4"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop2206-3-1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective36260"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-31">
+      <stop
+         id="stop2204-2"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop2206-99"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient36269">
+      <stop
+         id="stop36271"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop36273"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective80107"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective80129"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective80164"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective80186"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective80208"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient4068-1">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop4070-7" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop4490-1" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop4492-25" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop4072-49" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80219">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80221" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80223" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80225" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80227" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80230">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80232" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80234" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80236" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80238" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80241">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80243" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80245" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80247" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80249" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80252">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80254" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80256" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80258" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80260" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80263">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80265" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80267" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80269" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80271" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80274">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80276" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80278" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80280" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80282" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80285">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80287" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80289" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80291" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80293" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80296">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80298" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80300" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80302" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80304" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80307">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80309" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80311" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80313" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80315" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80318">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80320" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80322" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80324" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80326" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80329">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80331" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80333" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80335" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80337" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80340">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80342" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80344" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80346" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80348" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80351">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80353" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80355" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80357" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80359" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80362">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80364" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80366" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80368" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80370" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80373">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80375" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80377" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80379" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80381" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80384">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80386" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80388" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80390" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80392" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80395">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80397" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80399" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80401" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80403" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80406">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80408" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80410" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80412" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80414" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80417">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80419" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80421" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80423" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80425" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80428">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80430" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80432" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80434" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80436" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80439">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80441" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80443" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80445" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80447" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80450">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80452" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80454" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80456" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80458" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80461">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80463" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80465" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80467" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80469" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80472">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop80474" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop80476" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop80478" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop80480" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5178-1">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop5180-8" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.49803922;"
+         offset="0.89021850"
+         id="stop5186-98" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.24705882;"
+         offset="0.95396262"
+         id="stop5188-20" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop5182-5" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective80938"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-1-95">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-72" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-406" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient80947">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop80949" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop80951" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective81071"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective81097"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-1-95-8">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-72-4" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-406-3" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient81106">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop81108" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop81110" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-53"
+       id="linearGradient81224"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-53"
+       id="radialGradient81226"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-51"
+       id="linearGradient81228"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-51"
+       id="radialGradient81230"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-7"
+       id="linearGradient81232"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-7"
+       id="radialGradient81234"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-87"
+       id="linearGradient81236"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-87"
+       id="radialGradient81238"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-59"
+       id="linearGradient81240"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-32"
+       id="linearGradient81242"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-90"
+       id="linearGradient81244"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-52"
+       id="linearGradient81246"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-19"
+       id="linearGradient81248"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19"
+       id="radialGradient81250"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient81252"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="linearGradient81254"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="radialGradient81256"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="linearGradient81258"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="radialGradient81260"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="linearGradient81262"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="radialGradient81264"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="linearGradient81266"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="radialGradient81268"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient81270"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient81272"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="linearGradient81274"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="radialGradient81276"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="linearGradient81278"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="radialGradient81280"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="linearGradient81282"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="radialGradient81284"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="linearGradient81286"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="radialGradient81288"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient81290"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient81292"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="linearGradient81294"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="radialGradient81296"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="linearGradient81298"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="radialGradient81300"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="linearGradient81302"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="radialGradient81304"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="linearGradient81306"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="radialGradient81308"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient81310"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19"
+       id="radialGradient81312"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81314"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81316"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81318"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81320"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81322"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81324"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81326"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81328"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81330"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81332"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81334"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81336"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81338"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81340"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81342"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81344"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81346"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81348"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81350"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81352"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81354"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81356"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81358"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81360"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81362"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5178-3"
+       id="radialGradient81364"
+       gradientUnits="userSpaceOnUse"
+       cx="384.69696"
+       cy="571.95715"
+       fx="384.69696"
+       fy="571.95715"
+       r="24.998358" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-54"
+       id="linearGradient81366"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-54"
+       id="radialGradient81368"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient414-2"
+       id="linearGradient81370"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5806141,-0.290307,0,0.8294487,1235.5061,-245.10175)"
+       x1="-137.36061"
+       y1="472.52106"
+       x2="-124.93314"
+       y2="487.91693" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19-1"
+       id="radialGradient81372"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient81374"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="linearGradient81376"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="radialGradient81378"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="linearGradient81380"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="radialGradient81382"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="linearGradient81384"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="radialGradient81386"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="linearGradient81388"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="radialGradient81390"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient81392"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-31"
+       id="linearGradient81394"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,177.55089,360.10086)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-31"
+       id="radialGradient81396"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,4.3122209,343.74329,-552.89392)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-53"
+       id="linearGradient81398"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-53"
+       id="radialGradient81400"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-51"
+       id="linearGradient81402"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-51"
+       id="radialGradient81404"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-7"
+       id="linearGradient81406"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-7"
+       id="radialGradient81408"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-87"
+       id="linearGradient81410"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-87"
+       id="radialGradient81412"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-59"
+       id="linearGradient81414"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-32"
+       id="linearGradient81416"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-90"
+       id="linearGradient81418"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-52"
+       id="linearGradient81420"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-19"
+       id="linearGradient81422"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19"
+       id="radialGradient81424"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient81426"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="linearGradient81428"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="radialGradient81430"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="linearGradient81432"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="radialGradient81434"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="linearGradient81436"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="radialGradient81438"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="linearGradient81440"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="radialGradient81442"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient81444"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient81446"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="linearGradient81448"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="radialGradient81450"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="linearGradient81452"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="radialGradient81454"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="linearGradient81456"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="radialGradient81458"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="linearGradient81460"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="radialGradient81462"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient81464"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient81466"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="linearGradient81468"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="radialGradient81470"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="linearGradient81472"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="radialGradient81474"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="linearGradient81476"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="radialGradient81478"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="linearGradient81480"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="radialGradient81482"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient81484"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19"
+       id="radialGradient81486"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81488"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81490"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81492"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81494"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81496"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81498"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81500"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81502"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81504"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81506"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81508"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81510"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81512"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81514"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81516"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81518"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81520"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81522"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81524"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81526"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81528"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81530"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81532"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81534"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient81536"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5178-3"
+       id="radialGradient81538"
+       gradientUnits="userSpaceOnUse"
+       cx="384.69696"
+       cy="571.95715"
+       fx="384.69696"
+       fy="571.95715"
+       r="24.998358" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-54"
+       id="linearGradient81540"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-54"
+       id="radialGradient81542"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient414-2"
+       id="linearGradient81544"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5806141,-0.290307,0,0.8294487,1235.5061,-245.10175)"
+       x1="-137.36061"
+       y1="472.52106"
+       x2="-124.93314"
+       y2="487.91693" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19-1"
+       id="radialGradient81546"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient81548"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="linearGradient81550"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="radialGradient81552"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="linearGradient81554"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="radialGradient81556"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="linearGradient81558"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="radialGradient81560"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="linearGradient81562"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="radialGradient81564"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient81566"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-31"
+       id="linearGradient81568"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,177.55089,360.10086)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-31"
+       id="radialGradient81570"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,4.3122209,343.74329,-552.89392)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <inkscape:perspective
+       id="perspective83870"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 461.88489 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="1501.5933 : 461.88489 : 1"
+       inkscape:persp3d-origin="750.79663 : 307.92326 : 1"
+       id="perspective838-4" />
+    <linearGradient
+       id="linearGradient5178-3-3">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop5180-4-4" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.49803922;"
+         offset="0.89021850"
+         id="stop5186-9-0" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.24705882;"
+         offset="0.95396262"
+         id="stop5188-2-5" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop5182-7-0" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4068-4-3">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop4070-2-9" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.49803922;"
+         offset="0.67741936"
+         id="stop4490-5-1" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0.24705882;"
+         offset="0.86472428"
+         id="stop4492-2-7" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop4072-4-8" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4554-9-7"
+       id="linearGradient109184-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9519,0,0,1.84182,-382.19925,74.95322)"
+       x1="302.73621"
+       y1="377.9527"
+       x2="311.27377"
+       y2="390.78342" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4738-6-3"
+       id="linearGradient109182-7"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.999946,0,0,1.000054,-175.79715,404.73102)"
+       x1="401.93405"
+       y1="376.13748"
+       x2="414.38986"
+       y2="390.49332" />
+    <linearGradient
+       id="linearGradient4568-4-2">
+      <stop
+         style="stop-color:#e12b1c;stop-opacity:1;"
+         offset="0"
+         id="stop4570-3-3" />
+      <stop
+         style="stop-color:#980b00;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop4572-8-4" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4568-4-2"
+       id="linearGradient109180-9"
+       gradientUnits="userSpaceOnUse"
+       x1="314.56537"
+       y1="369.97995"
+       x2="332.02466"
+       y2="387.43924" />
+    <linearGradient
+       id="linearGradient4738-6-3">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.72656250;"
+         offset="0.0000000"
+         id="stop4740-0-9" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop4742-8-3" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4554-9-7">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop4556-2-0" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.0000000;"
+         offset="1.0000000"
+         id="stop4558-2-5" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4886-3-9">
+      <stop
+         style="stop-color:#1c97e1;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop4888-1-4" />
+      <stop
+         style="stop-color:#006798;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop4890-8-3" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2202-3-7">
+      <stop
+         id="stop2204-4-4"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop2206-2-2"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="linearGradient117517-3"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="radialGradient117519-8"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <pattern
+       inkscape:collect="always"
+       patternUnits="userSpaceOnUse"
+       width="2"
+       height="1"
+       patternTransform="matrix(0,5.5342899,-7.4864229,0,31.668795,357.00572)"
+       id="Strips1_1-2"
+       inkscape:stockid="Stripes 1:1">
+      <rect
+         style="fill:black;stroke:none"
+         x="0"
+         y="-0.5"
+         width="1"
+         height="2"
+         id="rect5260-4" />
+    </pattern>
+    <pattern
+       patternTransform="matrix(0,5.5342899,-7.4864232,0,521.74506,337.35904)"
+       id="pattern118687-5"
+       xlink:href="#Strips1_1-2"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient114931-1"
+       inkscape:collect="always">
+      <stop
+         id="stop114933-7"
+         offset="0"
+         style="stop-color:#2e3436;stop-opacity:1;" />
+      <stop
+         id="stop114935-5"
+         offset="1"
+         style="stop-color:#2e3436;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient114953-7"
+       inkscape:collect="always">
+      <stop
+         id="stop114955-1"
+         offset="0"
+         style="stop-color:#191a19;stop-opacity:1;" />
+      <stop
+         id="stop114957-6"
+         offset="1"
+         style="stop-color:#191a19;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient114975-9"
+       inkscape:collect="always">
+      <stop
+         id="stop114977-8"
+         offset="0"
+         style="stop-color:#3465a4;stop-opacity:1" />
+      <stop
+         id="stop114979-1"
+         offset="1"
+         style="stop-color:#3465a4;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7680-2"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7682-4"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7684-9"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7686-2"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7688-6"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7690-2"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7692-9"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7694-2"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7696-1"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7698-0"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7700-9"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7702-4"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7704-3"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7706-2"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7708-0"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7710-1"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7712-4"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7714-8"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7716-6"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7718-6"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7720-2"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7722-6"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7724-6"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7726-8"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient7728-9"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5178-3-3"
+       id="radialGradient7730-1"
+       gradientUnits="userSpaceOnUse"
+       cx="384.69696"
+       cy="571.95715"
+       fx="384.69696"
+       fy="571.95715"
+       r="24.998358" />
+    <pattern
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)"
+       id="pattern6028"
+       xlink:href="#pattern6024"
+       inkscape:collect="always" />
+    <pattern
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)"
+       id="pattern6030"
+       xlink:href="#pattern6024"
+       inkscape:collect="always" />
+    <pattern
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)"
+       id="pattern6032"
+       xlink:href="#pattern6024"
+       inkscape:collect="always" />
+    <pattern
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)"
+       id="pattern6034"
+       xlink:href="#pattern6024"
+       inkscape:collect="always" />
+    <pattern
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)"
+       id="pattern6036"
+       xlink:href="#pattern6024"
+       inkscape:collect="always" />
+    <pattern
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)"
+       id="pattern6038"
+       xlink:href="#pattern6024"
+       inkscape:collect="always" />
+    <pattern
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)"
+       id="pattern6040"
+       xlink:href="#pattern6024"
+       inkscape:collect="always" />
+    <pattern
+       inkscape:stockid="Wavy"
+       id="Wavy"
+       height="5.1805778"
+       width="30.066020"
+       patternUnits="userSpaceOnUse"
+       inkscape:collect="always">
+      <path
+         id="path6343"
+         d="M 7.597,0.061 C 5.079,-0.187 2.656,0.302 -0.01,1.788 L -0.01,3.061 C 2.773,1.431 5.173,1.052 7.472,1.280 C 9.770,1.508 11.969,2.361 14.253,3.218 C 18.820,4.931 23.804,6.676 30.066,3.061 L 30.062,1.788 C 23.622,5.497 19.246,3.770 14.691,2.061 C 12.413,1.207 10.115,0.311 7.597,0.061 z "
+         style="fill:black;stroke:none;" />
+    </pattern>
+    <pattern
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)"
+       id="pattern6024"
+       xlink:href="#Wavy"
+       inkscape:collect="always" />
+    <pattern
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)"
+       id="pattern6042"
+       xlink:href="#pattern6024"
+       inkscape:collect="always" />
+    <filter
+       color-interpolation-filters="sRGB"
+       id="filter3197"
+       inkscape:collect="always">
+      <feGaussianBlur
+         id="feGaussianBlur3199"
+         stdDeviation="5.125686"
+         inkscape:collect="always" />
+    </filter>
+    <linearGradient
+       id="linearGradient3180-5">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3186-6" />
+      <stop
+         id="stop3188-7"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3273-7">
+      <stop
+         id="stop3275-5"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="0.5"
+         id="stop3289-8" />
+      <stop
+         id="stop3283-6"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0.21602787;" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.59233451;"
+         offset="1"
+         id="stop3277-7" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3195-1">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3199-2" />
+      <stop
+         id="stop3201-3"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3159-7">
+      <stop
+         style="stop-color:#b0dc18;stop-opacity:1;"
+         offset="0"
+         id="stop3161-7" />
+      <stop
+         id="stop3187-2"
+         offset="0.56223178"
+         style="stop-color:#3ea20c;stop-opacity:1;" />
+      <stop
+         style="stop-color:#006900;stop-opacity:1;"
+         offset="1"
+         id="stop3163-7" />
+    </linearGradient>
+    <filter
+       color-interpolation-filters="sRGB"
+       id="filter3267"
+       inkscape:collect="always">
+      <feGaussianBlur
+         id="feGaussianBlur3269"
+         stdDeviation="0.97583505"
+         inkscape:collect="always" />
+    </filter>
+    <linearGradient
+       id="linearGradient3175-8">
+      <stop
+         style="stop-color:#41a0ee;stop-opacity:1;"
+         offset="0"
+         id="stop3177-0" />
+      <stop
+         id="stop3191-2"
+         offset="0.64377683"
+         style="stop-color:#378be4;stop-opacity:1;" />
+      <stop
+         style="stop-color:#2d77db;stop-opacity:1;"
+         offset="1"
+         id="stop3179-5" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4568-5">
+      <stop
+         style="stop-color:#e12b1c;stop-opacity:1;"
+         offset="0"
+         id="stop4570-4" />
+      <stop
+         style="stop-color:#980b00;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop4572-1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient414-1">
+      <stop
+         style="stop-color:#ffd800;stop-opacity:1.0000000;"
+         offset="0.00000000"
+         id="stop415-0" />
+      <stop
+         style="stop-color:#e77900;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop416-04" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4554-3-1">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop4556-9-4" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.0000000;"
+         offset="1.0000000"
+         id="stop4558-4-5" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4738-8">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.72656250;"
+         offset="0.0000000"
+         id="stop4740-4" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop4742-3" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4886-1-9">
+      <stop
+         style="stop-color:#1c97e1;stop-opacity:1.0000000;"
+         offset="0.0000000"
+         id="stop4888-5-5" />
+      <stop
+         style="stop-color:#006798;stop-opacity:1.0000000;"
+         offset="1.0000000"
+         id="stop4890-4-8" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2202-1-6">
+      <stop
+         id="stop2204-5-35"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop2206-5-9"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient114975-3">
+      <stop
+         style="stop-color:#3465a4;stop-opacity:1"
+         offset="0"
+         id="stop114977-0" />
+      <stop
+         style="stop-color:#3465a4;stop-opacity:0;"
+         offset="1"
+         id="stop114979-6" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient114975-3"
+       id="linearGradient14782-0"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9983345,0,0,1.0398445,80.706264,173.27788)"
+       x1="273.62375"
+       y1="224.83743"
+       x2="236.19801"
+       y2="166.61961" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient114953-5">
+      <stop
+         style="stop-color:#191a19;stop-opacity:1;"
+         offset="0"
+         id="stop114955-3" />
+      <stop
+         style="stop-color:#191a19;stop-opacity:0;"
+         offset="1"
+         id="stop114957-7" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient114953-5"
+       id="linearGradient14780-4"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1048951,0,0,1.1048951,67.985466,73.286385)"
+       x1="218.73267"
+       y1="237.31267"
+       x2="335.66339"
+       y2="399.49088" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient114931-5">
+      <stop
+         style="stop-color:#2e3436;stop-opacity:1;"
+         offset="0"
+         id="stop114933-1" />
+      <stop
+         style="stop-color:#2e3436;stop-opacity:0;"
+         offset="1"
+         id="stop114935-50" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient114931-5"
+       id="linearGradient14778-2"
+       gradientUnits="userSpaceOnUse"
+       x1="332.67328"
+       y1="298.85724"
+       x2="482.37622"
+       y2="683.92651" />
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective19535-5" />
+    <inkscape:perspective
+       id="perspective19261-3"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-8">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-20" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-63" />
+    </linearGradient>
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Strips1_1"
+       id="pattern118687"
+       patternTransform="matrix(0,5.5342899,-7.4864232,0,521.74506,337.35904)" />
+    <pattern
+       inkscape:stockid="Stripes 1:1"
+       id="Strips1_1"
+       patternTransform="matrix(0,5.5342899,-7.4864229,0,31.668795,357.00572)"
+       height="1"
+       width="2"
+       patternUnits="userSpaceOnUse"
+       inkscape:collect="always">
+      <rect
+         id="rect5260"
+         height="2"
+         width="1"
+         y="-0.5"
+         x="0"
+         style="fill:black;stroke:none" />
+    </pattern>
+    <linearGradient
+       id="linearGradient4886-6">
+      <stop
+         id="stop4888-3"
+         offset="0.0000000"
+         style="stop-color:#1c97e1;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4890-0"
+         offset="1.0000000"
+         style="stop-color:#006798;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4554-0">
+      <stop
+         id="stop4556-8"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4558-9"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4068-0">
+      <stop
+         id="stop4070-6"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop4490-0"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop4492-1"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop4072-7"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5178-7">
+      <stop
+         id="stop5180-5"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop5186-7"
+         offset="0.89021850"
+         style="stop-color:#ffffff;stop-opacity:0.49803922;" />
+      <stop
+         id="stop5188-9"
+         offset="0.95396262"
+         style="stop-color:#ffffff;stop-opacity:0.24705882;" />
+      <stop
+         id="stop5182-1"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89569"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89571"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89573"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89575"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89577"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89579"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89581"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89583"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89585"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89587"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89589"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89591"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89593"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89595"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89597"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89599"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89601"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89603"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89605"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89607"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89609"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89611"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89613"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89615"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-0"
+       id="linearGradient89617"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5178-7"
+       id="radialGradient89619"
+       gradientUnits="userSpaceOnUse"
+       cx="384.69696"
+       cy="571.95715"
+       fx="384.69696"
+       fy="571.95715"
+       r="24.998358" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4886-6"
+       id="linearGradient89621"
+       gradientUnits="userSpaceOnUse"
+       x1="314.56537"
+       y1="369.97995"
+       x2="332.02466"
+       y2="387.43924" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4554-0"
+       id="linearGradient89623"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9519,0,0,1.84182,-297.02235,74.95322)"
+       x1="302.73621"
+       y1="377.9527"
+       x2="311.27377"
+       y2="390.78342" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-8"
+       id="radialGradient89625"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-8"
+       id="linearGradient89627"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,177.55089,360.10086)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-8"
+       id="radialGradient89629"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,4.3122209,343.74329,-552.89392)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-8"
+       id="linearGradient89631"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,177.55089,360.10086)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-8"
+       id="radialGradient89633"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,4.3122209,343.74329,-552.89392)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-8"
+       id="radialGradient89635"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-8"
+       id="radialGradient89637"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-8"
+       id="radialGradient89639"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="linearGradient89641"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="linearGradient89643"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="radialGradient89645"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3175-8"
+       id="radialGradient89647"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.105165,1.228066,-0.8683345,0.7814343,1473.1011,172.79095)"
+       cx="127.83543"
+       cy="1736.9607"
+       fx="127.83543"
+       fy="1736.9607"
+       r="199.63403" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3159-7"
+       id="radialGradient89649"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5002429,1.4674024,-1.2539857,0.4274882,2324.404,828.29789)"
+       cx="65.333183"
+       cy="1808.0941"
+       fx="65.333183"
+       fy="1808.0941"
+       r="195.94841" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3195-1"
+       id="radialGradient89651"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1992334,1.195744,-1.1829727,0.1971052,1996.7215,1257.5875)"
+       cx="13.846332"
+       cy="1679.6958"
+       fx="13.846332"
+       fy="1679.6958"
+       r="199.13403" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3273-7"
+       id="radialGradient89653"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.1087803,1.4752039,-1.9297648,-0.1423,3255.8728,1823.5882)"
+       cx="5.8389463"
+       cy="1673.207"
+       fx="5.8389463"
+       fy="1673.207"
+       r="199.13403" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3180-5"
+       id="radialGradient89655"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.466646,1.4600162,-1.3948135,0.4458064,2272.5859,931.37623)"
+       cx="-90.184074"
+       cy="1676.9956"
+       fx="-90.184074"
+       fy="1676.9956"
+       r="199.13403" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="linearGradient89657"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="radialGradient89659"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4568-5"
+       id="linearGradient89661"
+       gradientUnits="userSpaceOnUse"
+       x1="314.56537"
+       y1="369.97995"
+       x2="332.02466"
+       y2="387.43924" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4738-8"
+       id="linearGradient89663"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.999946,0,0,1.000054,-175.79715,404.73102)"
+       x1="401.93405"
+       y1="376.13748"
+       x2="414.38986"
+       y2="390.49332" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4554-3-1"
+       id="linearGradient89665"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.9519,0,0,1.84182,-382.19925,74.95322)"
+       x1="302.73621"
+       y1="377.9527"
+       x2="311.27377"
+       y2="390.78342" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="linearGradient89667"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="radialGradient89669"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="linearGradient89671"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="radialGradient89673"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="linearGradient89675"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="radialGradient89677"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient414-1"
+       id="linearGradient89679"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5806141,-0.290307,0,0.8294487,1235.5061,-245.10175)"
+       x1="-137.36061"
+       y1="472.52106"
+       x2="-124.93314"
+       y2="487.91693" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="linearGradient89681"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="radialGradient89683"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="linearGradient89685"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="radialGradient89687"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="linearGradient89689"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="radialGradient89691"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="linearGradient89693"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="radialGradient89695"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="linearGradient89697"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="radialGradient89699"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4886-1-9"
+       id="linearGradient89701"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(32.697924,534.73628)"
+       x1="838.01013"
+       y1="-320.49728"
+       x2="909.21588"
+       y2="-321.47269" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4738-8"
+       id="linearGradient89703"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.638597,0,0,1.565933,-355.04905,402.57752)"
+       x1="1313.4297"
+       y1="237.96057"
+       x2="1333.0073"
+       y2="258.76886" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4554-3-1"
+       id="linearGradient89705"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-354.99455,401.23652)"
+       x1="808.12592"
+       y1="362.58139"
+       x2="832.68341"
+       y2="400.04047" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="linearGradient89707"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-6"
+       id="radialGradient89709"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="linearGradient89711"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="radialGradient89713"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="linearGradient89715"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="radialGradient89717"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="linearGradient89719"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="radialGradient89721"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="linearGradient89723"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="radialGradient89725"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="radialGradient89727"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89729"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89731"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89733"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89735"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89737"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89739"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89741"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89743"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89745"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89747"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89749"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89751"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89753"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89755"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89757"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89759"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89761"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89763"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89765"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89767"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89769"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89771"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89773"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89775"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4-3"
+       id="linearGradient89777"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5178-3-3"
+       id="radialGradient89779"
+       gradientUnits="userSpaceOnUse"
+       cx="384.69696"
+       cy="571.95715"
+       fx="384.69696"
+       fy="571.95715"
+       r="24.998358" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="linearGradient89781"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,177.55089,360.10086)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="radialGradient89783"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,4.3122209,343.74329,-552.89392)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="linearGradient89785"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,177.55089,360.10086)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="radialGradient89787"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,4.3122209,343.74329,-552.89392)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="radialGradient89789"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="radialGradient89791"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="radialGradient89793"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="linearGradient89795"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="radialGradient89797"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="linearGradient89799"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="radialGradient89801"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4886-3-9"
+       id="linearGradient89803"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(32.697924,534.73628)"
+       x1="838.01013"
+       y1="-320.49728"
+       x2="909.21588"
+       y2="-321.47269" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4738-6-3"
+       id="linearGradient89805"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.638597,0,0,1.565933,-355.04905,402.57752)"
+       x1="1313.4297"
+       y1="237.96057"
+       x2="1333.0073"
+       y2="258.76886" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4554-9-7"
+       id="linearGradient89807"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-354.99455,401.23652)"
+       x1="808.12592"
+       y1="362.58139"
+       x2="832.68341"
+       y2="400.04047" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient114931-1"
+       id="linearGradient89809"
+       gradientUnits="userSpaceOnUse"
+       x1="332.67328"
+       y1="298.85724"
+       x2="482.37622"
+       y2="683.92651" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient114953-7"
+       id="linearGradient89811"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1048951,0,0,1.1048951,67.985466,73.286385)"
+       x1="218.73267"
+       y1="237.31267"
+       x2="335.66339"
+       y2="399.49088" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient114975-9"
+       id="linearGradient89813"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9983345,0,0,1.0398445,80.706264,173.27788)"
+       x1="273.62375"
+       y1="224.83743"
+       x2="236.19801"
+       y2="166.61961" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="radialGradient89815"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="linearGradient89817"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="radialGradient89819"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="linearGradient89821"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="radialGradient89823"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="linearGradient89825"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-3-7"
+       id="radialGradient89827"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <inkscape:perspective
+       id="perspective94039"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2202-2-1-25">
+      <stop
+         id="stop2204-6-0-41"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop2206-6-0-8"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2202-1-5-4-2">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-8-4-5" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-5-2-1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient94052">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop94054" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop94056" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2202-1-8-3-0">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-1-4-2" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-2-7-6" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient94063">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop94065" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop94067" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2202-1-9-8-0">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-4-0-0" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-8-1-3" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient94074">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop94076" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop94078" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2202-1-93-3-2">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-6-1-0" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-21-0-1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient94085">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop94087" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop94089" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient94092">
+      <stop
+         id="stop94094"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop94096"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <inkscape:perspective
+       id="perspective95714"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective95802"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective95824"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-53"
+       id="linearGradient98580"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-53"
+       id="radialGradient98582"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-51"
+       id="linearGradient98584"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-51"
+       id="radialGradient98586"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-7"
+       id="linearGradient98588"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-7"
+       id="radialGradient98590"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-87"
+       id="linearGradient98592"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-87"
+       id="radialGradient98594"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-59"
+       id="linearGradient98596"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-32"
+       id="linearGradient98598"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-90"
+       id="linearGradient98600"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-52"
+       id="linearGradient98602"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-19"
+       id="linearGradient98604"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19"
+       id="radialGradient98606"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient98608"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="linearGradient98610"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="radialGradient98612"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="linearGradient98614"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="radialGradient98616"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="linearGradient98618"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="radialGradient98620"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="linearGradient98622"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="radialGradient98624"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient98626"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient98628"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="linearGradient98630"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="radialGradient98632"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="linearGradient98634"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="radialGradient98636"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="linearGradient98638"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="radialGradient98640"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="linearGradient98642"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="radialGradient98644"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient98646"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient98648"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="linearGradient98650"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="radialGradient98652"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="linearGradient98654"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="radialGradient98656"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="linearGradient98658"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="radialGradient98660"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="linearGradient98662"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="radialGradient98664"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient98666"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19"
+       id="radialGradient98668"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98670"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98672"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98674"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98676"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98678"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98680"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98682"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98684"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98686"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98688"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98690"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98692"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98694"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98696"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98698"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98700"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98702"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98704"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98706"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98708"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98710"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98712"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98714"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98716"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient98718"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5178-3"
+       id="radialGradient98720"
+       gradientUnits="userSpaceOnUse"
+       cx="384.69696"
+       cy="571.95715"
+       fx="384.69696"
+       fy="571.95715"
+       r="24.998358" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-54"
+       id="linearGradient98722"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-54"
+       id="radialGradient98724"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient414-2"
+       id="linearGradient98726"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5806141,-0.290307,0,0.8294487,1235.5061,-245.10175)"
+       x1="-137.36061"
+       y1="472.52106"
+       x2="-124.93314"
+       y2="487.91693" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19-1"
+       id="radialGradient98728"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient98730"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="linearGradient98732"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="radialGradient98734"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="linearGradient98736"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="radialGradient98738"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="linearGradient98740"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="radialGradient98742"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="linearGradient98744"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="radialGradient98746"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient98748"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-31"
+       id="linearGradient98750"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,177.55089,360.10086)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-31"
+       id="radialGradient98752"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,4.3122209,343.74329,-552.89392)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-53"
+       id="linearGradient101496"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-53"
+       id="radialGradient101498"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-51"
+       id="linearGradient101500"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-51"
+       id="radialGradient101502"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-7"
+       id="linearGradient101504"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-7"
+       id="radialGradient101506"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-87"
+       id="linearGradient101508"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-87"
+       id="radialGradient101510"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-59"
+       id="linearGradient101512"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-32"
+       id="linearGradient101514"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-90"
+       id="linearGradient101516"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-52"
+       id="linearGradient101518"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-19"
+       id="linearGradient101520"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19"
+       id="radialGradient101522"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient101524"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="linearGradient101526"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="radialGradient101528"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="linearGradient101530"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="radialGradient101532"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="linearGradient101534"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="radialGradient101536"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="linearGradient101538"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="radialGradient101540"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient101542"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient101544"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="linearGradient101546"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="radialGradient101548"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="linearGradient101550"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="radialGradient101552"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="linearGradient101554"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="radialGradient101556"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="linearGradient101558"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="radialGradient101560"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient101562"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient101564"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="linearGradient101566"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="radialGradient101568"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="linearGradient101570"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="radialGradient101572"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="linearGradient101574"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="radialGradient101576"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="linearGradient101578"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="radialGradient101580"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient101582"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19"
+       id="radialGradient101584"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101586"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101588"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101590"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101592"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101594"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101596"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101598"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101600"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101602"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101604"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101606"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101608"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101610"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101612"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101614"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101616"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101618"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101620"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101622"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101624"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101626"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101628"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101630"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101632"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient101634"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5178-3"
+       id="radialGradient101636"
+       gradientUnits="userSpaceOnUse"
+       cx="384.69696"
+       cy="571.95715"
+       fx="384.69696"
+       fy="571.95715"
+       r="24.998358" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-54"
+       id="linearGradient101638"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-54"
+       id="radialGradient101640"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient414-2"
+       id="linearGradient101642"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5806141,-0.290307,0,0.8294487,1235.5061,-245.10175)"
+       x1="-137.36061"
+       y1="472.52106"
+       x2="-124.93314"
+       y2="487.91693" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19-1"
+       id="radialGradient101644"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient101646"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="linearGradient101648"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4"
+       id="radialGradient101650"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="linearGradient101652"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3"
+       id="radialGradient101654"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="linearGradient101656"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8"
+       id="radialGradient101658"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="linearGradient101660"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3"
+       id="radialGradient101662"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1"
+       id="radialGradient101664"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-31"
+       id="linearGradient101666"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,177.55089,360.10086)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-31"
+       id="radialGradient101668"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,4.3122209,343.74329,-552.89392)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1-25"
+       id="radialGradient109444"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4-2"
+       id="linearGradient109446"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4-2"
+       id="radialGradient109448"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3-0"
+       id="linearGradient109450"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3-0"
+       id="radialGradient109452"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8-0"
+       id="linearGradient109454"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8-0"
+       id="radialGradient109456"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3-2"
+       id="linearGradient109458"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3-2"
+       id="radialGradient109460"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1-25"
+       id="radialGradient109462"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-95"
+       id="linearGradient109709"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-95"
+       id="radialGradient109711"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-31"
+       id="linearGradient109741"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,177.55089,360.10086)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-31"
+       id="radialGradient109743"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,4.3122209,343.74329,-552.89392)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19-1"
+       id="radialGradient109763"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-54"
+       id="linearGradient109781"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-54"
+       id="radialGradient109783"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient414-2"
+       id="linearGradient109788"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.07326939,-0.03663469,0,0.10467055,585.30104,1240.0665)"
+       x1="-137.36061"
+       y1="472.52106"
+       x2="-124.93314"
+       y2="487.91693" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109813"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109815"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109817"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109819"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109821"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109823"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109825"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109827"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109829"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109831"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109833"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109835"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109837"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109839"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109841"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109843"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109845"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109847"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109849"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109851"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109853"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109855"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109857"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109859"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient109861"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5178-3"
+       id="radialGradient109863"
+       gradientUnits="userSpaceOnUse"
+       cx="384.69696"
+       cy="571.95715"
+       fx="384.69696"
+       fy="571.95715"
+       r="24.998358" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19"
+       id="radialGradient109904"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19"
+       id="radialGradient109922"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-19"
+       id="linearGradient109940"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-52"
+       id="linearGradient109961"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-90"
+       id="linearGradient109982"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-32"
+       id="linearGradient110003"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-59"
+       id="linearGradient110024"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-53"
+       id="linearGradient110050"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-53"
+       id="radialGradient110052"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-51"
+       id="linearGradient110054"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-51"
+       id="radialGradient110056"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-7"
+       id="linearGradient110058"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-7"
+       id="radialGradient110060"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-87"
+       id="linearGradient110062"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-87"
+       id="radialGradient110064"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <inkscape:perspective
+       id="perspective110844"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-53"
+       id="linearGradient115721"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-53"
+       id="radialGradient115723"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-51"
+       id="linearGradient115725"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-51"
+       id="radialGradient115727"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-7"
+       id="linearGradient115729"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-7"
+       id="radialGradient115731"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-87"
+       id="linearGradient115733"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-87"
+       id="radialGradient115735"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-59"
+       id="linearGradient115737"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-32"
+       id="linearGradient115739"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-90"
+       id="linearGradient115741"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-52"
+       id="linearGradient115743"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-19"
+       id="linearGradient115745"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19"
+       id="radialGradient115747"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19"
+       id="radialGradient115749"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115751"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115753"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115755"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115757"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115759"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115761"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115763"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115765"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115767"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115769"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115771"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115773"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115775"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115777"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115779"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115781"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115783"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115785"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115787"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115789"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115791"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115793"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115795"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115797"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient115799"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5178-3"
+       id="radialGradient115801"
+       gradientUnits="userSpaceOnUse"
+       cx="384.69696"
+       cy="571.95715"
+       fx="384.69696"
+       fy="571.95715"
+       r="24.998358" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-54"
+       id="linearGradient115803"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-54"
+       id="radialGradient115805"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient414-2"
+       id="linearGradient115807"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.07326939,-0.03663469,0,0.10467055,585.30104,1240.0665)"
+       x1="-137.36061"
+       y1="472.52106"
+       x2="-124.93314"
+       y2="487.91693" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19-1"
+       id="radialGradient115809"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-31"
+       id="linearGradient115811"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,177.55089,360.10086)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-31"
+       id="radialGradient115813"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,4.3122209,343.74329,-552.89392)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-95"
+       id="linearGradient115815"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-95"
+       id="radialGradient115817"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1-25"
+       id="radialGradient115819"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4-2"
+       id="linearGradient115821"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4-2"
+       id="radialGradient115823"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3-0"
+       id="linearGradient115825"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3-0"
+       id="radialGradient115827"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8-0"
+       id="linearGradient115829"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8-0"
+       id="radialGradient115831"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3-2"
+       id="linearGradient115833"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3-2"
+       id="radialGradient115835"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1-25"
+       id="radialGradient115837"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.5378651"
+     inkscape:cx="202.95323"
+     inkscape:cy="605.2154"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer3"
+     showgrid="false"
+     inkscape:window-width="1101"
+     inkscape:window-height="852"
+     inkscape:window-x="105"
+     inkscape:window-y="150"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata19258">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+        <cc:license
+           rdf:resource="" />
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>David Pravec &lt;alekibango@danix.org&gt;</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:rights>
+          <cc:Agent>
+            <dc:title>released under terms of Apache License</dc:title>
+          </cc:Agent>
+        </dc:rights>
+        <dc:description />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="bg">
+    <rect
+       style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.92599999999999993;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect5281"
+       width="717.65204"
+       height="349.53003"
+       x="14.873618"
+       y="27.941748" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="clipart lib"
+     style="display:none"
+     sodipodi:insensitive="true">
+    <g
+       inkscape:label="Layer 1"
+       id="g4664-9"
+       transform="matrix(2.2734672,0,0,2.2734672,1088.7555,758.6645)">
+      <g
+         transform="translate(-390.5856,-53.79125)"
+         id="g35741-72">
+        <g
+           id="g35704-5">
+          <path
+             style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             id="text30384-0"
+             d="m 452.22752,154.79534 c -1.32987,4.3593 0.97442,13.06343 4.32672,7.29809 0.55883,-4.21566 0.16853,-13.66849 -4.32672,-7.29809 z" />
+          <path
+             style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             id="path31227-9"
+             d="m 459.05645,154.87353 c -5.73123,-1.99396 -4.37255,6.82514 -3.10169,8.88804 4.41472,0.3139 8.88448,0.68282 7.08957,-5.21292 -0.15325,-2.39014 -1.62637,-3.78967 -3.98788,-3.67512 z" />
+          <path
+             style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             id="path31225-6"
+             d="m 461.48045,154.95173 c -1.09246,1.9721 -0.88144,8.20841 3.07563,8.75771 7.13327,0.55239 -1.24277,-5.48505 3.0235,-5.57782 1.36821,-3.25204 -5.37175,-7.28408 -6.09913,-3.17989 z" />
+          <path
+             style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             id="path31223-7"
+             d="m 469.14346,154.84748 c -6.26267,0.075 -4.66384,10.71977 1.4292,8.95932 4.83425,0.31308 3.44625,-9.88021 -1.4292,-8.95932 z" />
+          <path
+             style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             id="path31221-5"
+             d="m 468.85674,155.68154 c -5.85015,2.68836 -2.79296,6.6586 2.86712,4.84803 3.28424,0.8454 -0.45596,-6.36406 -2.86712,-4.84803 z" />
+          <path
+             style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             id="path31219-71"
+             d="m 475.63355,154.84748 c -5.82517,-1.97942 -4.54812,6.74301 -3.23202,8.91409 4.84187,0.18324 3.39963,-5.16968 5.70816,-6.35977 0.24428,-2.37476 -0.19418,-2.73428 -2.47614,-2.55432 z" />
+          <path
+             style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             id="path31217-4"
+             d="m 479.49112,154.87353 c -5.77442,-2.02369 -4.43922,6.79664 -3.15383,8.88804 4.41473,0.3139 8.88448,0.68282 7.08958,-5.21292 -0.15836,-2.36396 -1.59101,-3.77955 -3.93575,-3.67512 z" />
+          <path
+             style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             id="path31215-9"
+             d="m 485.56417,154.84748 c -6.19598,0.15033 -4.65067,10.675 1.42942,8.96143 4.93021,0.35507 3.48048,-9.89643 -1.42942,-8.96143 z" />
+          <path
+             style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             id="path31213-6"
+             d="m 485.30352,155.68154 c -5.85015,2.68836 -2.79297,6.6586 2.86711,4.84803 3.28424,0.8454 -0.45595,-6.36406 -2.86711,-4.84803 z" />
+          <path
+             style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+             id="path31211-8"
+             d="m 488.0403,154.95173 c -1.06389,1.96915 -0.92086,8.22865 3.04957,8.75771 7.16539,0.57531 -1.21095,-5.48429 3.04956,-5.57782 1.3682,-3.25204 -5.37175,-7.28408 -6.09913,-3.17989 z" />
+          <path
+             transform="matrix(-0.179335,0,0,0.149728,502.1893,-24.02897)"
+             style="opacity:0.17777776;fill:url(#linearGradient89569);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             inkscape:tile-w="105.36077"
+             inkscape:tile-h="104.60061"
+             inkscape:tile-cy="1057.5979"
+             inkscape:tile-cx="150.57283"
+             id="path4066-8"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(0.284001,0,0,0.193224,407.7236,-73.15871)"
+             style="opacity:0.17777776;fill:url(#linearGradient89571);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5006-6"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(0.340554,0,0,0.231701,396.3144,-88.95173)"
+             style="opacity:0.17777776;fill:url(#linearGradient89573);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5008-47"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(0.249954,0,0,0.170059,406.7992,-32.10751)"
+             style="opacity:0.17777776;fill:url(#linearGradient89575);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5010-7"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(0.260403,0,0,0.177168,412.2819,-25.25605)"
+             style="opacity:0.17777776;fill:url(#linearGradient89577);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5012-15"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(-0.104126,-0.150834,-0.146719,0.07084417,668.335,91.43843)"
+             style="opacity:0.17777776;fill:url(#linearGradient89579);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5014-27"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(-0.154671,-0.224051,-0.217939,0.105233,738.2325,88.88709)"
+             style="opacity:0.17777776;fill:url(#linearGradient89581);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5016-7"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(-0.138006,-0.19991,-0.194457,0.09389457,722.8067,97.77468)"
+             style="opacity:0.17777776;fill:url(#linearGradient89583);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5018-7"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(-0.117791,-0.170629,-0.165973,0.08014087,677.6847,122.0894)"
+             style="opacity:0.17777776;fill:url(#linearGradient89585);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5020-7"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(-0.09614486,-0.139271,-0.135472,0.06541328,635.5166,142.1226)"
+             style="opacity:0.17777776;fill:url(#linearGradient89587);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5022-12"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(-0.164683,-0.238552,0.232045,-0.112044,265.1906,314.0698)"
+             style="opacity:0.17777776;fill:url(#linearGradient89589);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5024-4"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(-0.172846,-0.250377,0.243546,-0.117597,239.7257,330.3731)"
+             style="opacity:0.17777776;fill:url(#linearGradient89591);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5026-4"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(-0.177232,-0.256733,0.249729,-0.120583,225.1178,318.3329)"
+             style="opacity:0.17777776;fill:url(#linearGradient89593);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5028-2"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(-0.166524,-0.241221,0.23464,-0.113297,227.7161,329.1711)"
+             style="opacity:0.17777776;fill:url(#linearGradient89595);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5030-4"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(-0.112183,-0.162505,0.158072,-0.07632533,314.1776,290.1886)"
+             style="opacity:0.17777776;fill:url(#linearGradient89597);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5032-9"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(-0.11826,0.171307,0.166634,0.08045988,311.5686,16.07786)"
+             style="opacity:0.17777776;fill:url(#linearGradient89599);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5034-9"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(-0.0943583,0.136684,0.132956,0.06419815,331.8395,50.2111)"
+             style="opacity:0.17777776;fill:url(#linearGradient89601);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5036-4"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(-0.114364,0.165662,0.161143,0.07780872,322.2702,30.08746)"
+             style="opacity:0.17777776;fill:url(#linearGradient89603);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5038-8"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(-0.140702,0.203815,0.198255,0.09572832,286.7172,18.15027)"
+             style="opacity:0.17777776;fill:url(#linearGradient89605);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5040-52"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(-0.162185,0.234935,0.228526,0.110345,259.9411,6.05945)"
+             style="opacity:0.17777776;fill:url(#linearGradient89607);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5042-5"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(-0.160583,0.232613,-0.226269,-0.109254,748.0707,211.5833)"
+             style="opacity:0.17777776;fill:url(#linearGradient89609);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5044-45"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(-0.12628,0.182922,-0.177934,-0.08591606,697.8146,196.7379)"
+             style="opacity:0.17777776;fill:url(#linearGradient89611);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5046-2"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(-0.137748,0.199537,-0.194093,-0.09371803,714.1281,221.8225)"
+             style="opacity:0.17777776;fill:url(#linearGradient89613);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5048-5"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(-0.120979,0.175247,-0.170466,-0.08231039,662.6019,207.1803)"
+             style="opacity:0.17777776;fill:url(#linearGradient89615);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5050-1"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+          <path
+             transform="matrix(-0.14434,0.209086,-0.203383,-0.09820396,735.5011,232.5166)"
+             style="opacity:0.17777776;fill:url(#linearGradient89617);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             sodipodi:type="arc"
+             sodipodi:start="0.32872637"
+             sodipodi:ry="52.289352"
+             sodipodi:rx="52.660198"
+             sodipodi:open="true"
+             sodipodi:end="6.478369"
+             sodipodi:cy="1057.5979"
+             sodipodi:cx="150.56367"
+             id="use5052-23"
+             d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        </g>
+        <path
+           transform="matrix(1.155532,0,0,1.155532,26.16756,-503.197)"
+           style="fill:url(#radialGradient89619);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:ry="24.998358"
+           sodipodi:rx="24.998358"
+           sodipodi:cy="571.95715"
+           sodipodi:cx="384.69696"
+           id="path5176-7"
+           d="m 409.69532,571.95715 a 24.998358,24.998358 0 1 1 -49.99672,0 24.998358,24.998358 0 1 1 49.99672,0 z" />
+        <text
+           y="161.44913"
+           xml:space="preserve"
+           x="469.55161"
+           style="font-size:10.00881386px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#9f0021;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           id="text5270-6"><tspan
+             y="161.44913"
+             x="469.55161"
+             sodipodi:role="line"
+             id="tspan5272-0">Networ</tspan></text>
+      </g>
+    </g>
+    <g
+       transform="matrix(0.7071068,0.3535534,-0.7071068,0.3535534,1568.0998,175.24649)"
+       id="g3893">
+      <g
+         id="g3895">
+        <path
+           sodipodi:type="arc"
+           style="fill:#166496;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.625;marker:none;visibility:visible;display:inline;overflow:visible"
+           id="path3897"
+           sodipodi:cx="325.57108"
+           sodipodi:cy="378.05789"
+           sodipodi:rx="13.966679"
+           sodipodi:ry="13.966679"
+           d="m 339.53775,378.05789 a 13.966679,13.966679 0 1 1 -27.93335,0 13.966679,13.966679 0 1 1 27.93335,0 z"
+           transform="matrix(1.896061,0,0,1.896061,-297.02235,74.95322)" />
+        <path
+           sodipodi:type="arc"
+           style="fill:url(#linearGradient89621);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.68594635;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
+           id="path3899"
+           sodipodi:cx="325.57108"
+           sodipodi:cy="378.05789"
+           sodipodi:rx="13.966679"
+           sodipodi:ry="13.966679"
+           d="m 339.53775,378.05789 a 13.966679,13.966679 0 1 1 -27.93335,0 13.966679,13.966679 0 1 1 27.93335,0 z"
+           transform="matrix(1.731185,0,0,1.731185,-243.34385,137.28542)" />
+        <path
+           style="fill:url(#linearGradient89623);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.61607176;marker:none;visibility:visible;display:inline;overflow:visible"
+           d="m 320.26406,767.60785 c -13.34675,0 -24.1748,10.82803 -24.17478,24.17478 0,6.41257 2.61694,12.14291 6.69547,16.47203 2.11885,-17.50049 16.88952,-31.10725 34.95862,-31.10725 0.48721,0 0.93961,0.099 1.42205,0.1185 -4.42143,-5.75069 -11.09207,-9.65806 -18.90136,-9.65806 z"
+           id="path3901" />
+      </g>
+      <path
+         style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:1.12660336;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         d="m 320.34678,804.36122 -4.67297,-8.6922 -9.86146,0.37754 5.19118,-8.39301 -5.25769,-8.35151 9.86416,0.2992 4.53346,8.0813 4.74328,-8.11814 9.86147,-0.37754 -5.19119,8.393 5.25768,8.35151 -9.86416,-0.29919 -4.60376,8.72904 z"
+         id="path3903"
+         sodipodi:nodetypes="ccccccccccccc" />
+    </g>
+    <g
+       id="g3259"
+       transform="translate(1251.0009,-809.31822)">
+      <g
+         id="g118215"
+         inkscape:label="Calque 1"
+         transform="matrix(6.5383417,0,0,6.5383417,364.86909,935.55835)">
+        <path
+           id="path118217"
+           d=""
+           style="fill:#888888;fill-opacity:1;stroke:none" />
+        <path
+           id="path118219"
+           d=""
+           style="fill:#888888;fill-opacity:1;stroke:none" />
+        <path
+           id="path118221"
+           d=""
+           style="fill:#888888;fill-opacity:1;stroke:none" />
+        <g
+           id="g118223"
+           transform="translate(-68.205597,-63.743549)">
+          <path
+             id="path118225"
+             d="m 7.6108945,14.642423 -0.3365653,0.168282 -8.07756781,4.038784 -0.33656529,0.168283 0,0.420707 0,4.038784 0,0.420706 0.33656529,0.168283 8.07756781,4.038784 0.3365653,0.168282 0.2944947,-0.168282 8.0775678,-4.038784 0.378636,-0.168283 0,-0.420706 0,-4.038784 0,-0.420707 -0.378636,-0.168283 -8.0775678,-4.038784 -0.2944947,-0.168282 z m 0,1.514544 7.4044375,3.702218 0,3.197371 -7.4044375,3.702218 -7.40443714,-3.702218 0,-3.197371 7.40443714,-3.702218 z"
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             id="path118227"
+             d="M -0.48215529,19.441925 7.5954125,15.403141 15.67298,19.441925 7.5954125,23.480709 -0.48215529,19.441925 z"
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             sodipodi:nodetypes="ccccc" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             id="path118229"
+             d="m -0.48215529,19.441925 0,4.038784 8.07756779,4.038784 0,-4.038784 -8.07756779,-4.038784 z"
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             id="path118231"
+             d="m 15.67298,19.441925 0,4.038784 -8.0775675,4.038784 0,-4.038784 8.0775675,-4.038784 z"
+             style="fill:url(#radialGradient89625);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        </g>
+      </g>
+      <g
+         id="g2662"
+         transform="matrix(0.6363961,0.3181981,-0.6363961,0.3181981,-697.62009,289.09977)">
+        <path
+           style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter"
+           d="m 1044.4209,-4.5996044 0,78.9062504 78.9063,0 0,-78.9062504 -78.9063,0 z m 39.4688,2.46875 c 20.4177,0 37,16.5823004 37,37.0000004 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 -10e-5,-20.41771 16.5823,-37.0000004 37,-37.0000004 z"
+           id="path2664" />
+        <g
+           transform="translate(705.44117,-218.9829)"
+           style="fill:#00ffff;stroke:#ffffff"
+           id="g2666">
+          <path
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="m 378.53666,218.814 -6.22099,11.28987 1.97176,0 0,18.4037 8.49847,0 0,-18.4037 1.95647,0 -6.20571,-11.28987 z"
+             id="path2668" />
+          <path
+             id="path2670"
+             d="m 378.53666,288.85884 -6.22099,-11.28987 1.97176,0 0,-18.4037 8.49847,0 0,18.4037 1.95647,0 -6.20571,11.28987 z"
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+          <path
+             id="path2672"
+             d="m 343.41044,253.56675 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+          <path
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="m 413.45528,253.56675 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+             id="path2674" />
+        </g>
+      </g>
+    </g>
+    <g
+       id="g3496"
+       transform="translate(657.32073,-89.394509)">
+      <g
+         id="g3795"
+         transform="translate(-87.70399,-526.32022)">
+        <path
+           id="path3797"
+           d="m 607.23277,879.49528 55.44283,-27.72141 55.44282,27.72141 -55.44282,27.72142 -55.44283,-27.72142 z"
+           style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           id="path3799"
+           d="m 607.23277,879.49528 0,83.16424 55.44283,27.72141 0,-83.16423 -55.44283,-27.72142 z"
+           style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           sodipodi:nodetypes="ccccc"
+           id="path3801"
+           d="m 662.6756,990.38093 55.44282,-27.72141 0,-83.16424 -55.44282,27.72142 0,83.16423 z"
+           style="fill:url(#linearGradient89627);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           sodipodi:nodetypes="ccccc"
+           id="path3803"
+           d="m 634.81813,937.76977 22.17713,11.08857 0,24.94927 -22.17713,-11.08856 0,-24.94928 z"
+           style="fill:url(#radialGradient89629);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           d="m 633.56811,935.45788 0,2.25237 0,24.94927 0,0.86629 0.77967,0.34652 22.17713,11.08857 1.99247,1.03955 0,-2.25237 0,-24.94927 0,-0.86629 -0.77966,-0.34652 -22.17713,-11.08856 -1.99248,-1.03956 z m 2.77214,4.50473 19.40499,9.7025 0,21.83061 -19.40499,-9.70249 0,-21.83062 z"
+           id="path3805" />
+        <path
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           d="m 611.39098,891.10362 0,2.25237 0,66.53139 0,0.86629 0.77967,0.34652 5.54428,2.77214 1.99248,1.03955 0,-2.25236 0,-66.53139 0,-0.86629 -0.77967,-0.34652 -5.54428,-2.77214 -1.99248,-1.03956 z m 2.77215,4.50473 2.77214,1.38607 0,63.41273 -2.77214,-1.38607 0,-63.41273 z"
+           id="path3807" />
+        <path
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           d="m 621.09348,895.26184 0,69.65004 8.31642,4.15822 0,-69.65005 -8.31642,-4.15821 z"
+           id="path3809"
+           sodipodi:nodetypes="ccccc" />
+        <path
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           d="m 633.56811,899.42005 0,2.25236 0,27.72141 0,0.8663 0.77967,0.34652 11.08856,5.54428 1.99248,1.03955 0,-2.25236 0,-27.72141 0,-0.8663 -0.77966,-0.34652 -11.08857,-5.54428 -1.99248,-1.03955 z m 2.77214,4.50473 8.31643,4.15821 0,24.60275 -8.31643,-4.15821 0,-24.60275 z"
+           id="path3811" />
+        <path
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           d="m 650.20096,907.73647 0,2.25237 0,30.49355 0,0.86629 0.77967,0.34652 5.54428,2.77214 1.99247,1.03956 0,-2.25237 0,-30.49355 0,-0.8663 -0.77966,-0.34651 -5.54428,-2.77215 -1.99248,-1.03955 z m 2.77214,4.50473 2.77214,1.38607 0,27.3749 -2.77214,-1.38607 0,-27.3749 z"
+           id="path3813" />
+        <path
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           d="m 662.6756,850.21454 -0.60641,0.34652 -55.44282,27.72141 -0.77967,0.34652 0,0.86629 0,83.16424 0,0.86629 0.77967,0.34652 55.44282,27.72141 0.60641,0.34652 0.6064,-0.34652 55.44283,-27.72141 0.77966,-0.34652 0,-0.86629 0,-83.16424 0,-0.86629 -0.77966,-0.34652 -55.44283,-27.72141 -0.6064,-0.34652 z m 0,3.11866 54.05675,27.02838 0,81.43165 -54.05675,27.02837 -54.05676,-27.02837 0,-81.43165 54.05676,-27.02838 z"
+           id="path3815" />
+        <rect
+           transform="matrix(0.8944272,-0.4472136,0,1,0,0)"
+           ry="0"
+           rx="0"
+           y="1269.7253"
+           x="747.37006"
+           height="45.980042"
+           width="47.62381"
+           id="rect3817"
+           style="opacity:0.5;fill:url(#pattern118687);fill-opacity:1;stroke:none" />
+      </g>
+      <g
+         transform="matrix(0.6363961,0.3181981,-0.6363961,0.3181981,58.04311,-123.34555)"
+         id="g3887">
+        <path
+           id="path3889"
+           d="m 1116.1606,302.26602 0,78.90625 78.9062,0 0,-78.90625 -78.9062,0 z m 39.4687,2.46875 c 20.4177,0 37,16.5823 37,37 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 0,-20.41771 16.5823,-37 37,-37 z"
+           style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter" />
+        <path
+           style="fill:#00ffff;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.05110741px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="m 1134.6137,320.71915 42,0 -14,21 14,21 -42,0 14,-21 -14,-21 z"
+           id="path3891"
+           sodipodi:nodetypes="ccccccc" />
+      </g>
+    </g>
+    <g
+       id="g3513"
+       transform="translate(939.10013,-77.263449)">
+      <g
+         id="g3767"
+         transform="translate(-369.48339,-385.43051)">
+        <path
+           id="path3769"
+           d="m 607.23277,879.49528 55.44283,-27.72141 55.44282,27.72141 -55.44282,27.72142 -55.44283,-27.72142 z"
+           style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           id="path3771"
+           d="m 607.23277,879.49528 0,83.16424 55.44283,27.72141 0,-83.16423 -55.44283,-27.72142 z"
+           style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           sodipodi:nodetypes="ccccc"
+           id="path3773"
+           d="m 662.6756,990.38093 55.44282,-27.72141 0,-83.16424 -55.44282,27.72142 0,83.16423 z"
+           style="fill:url(#linearGradient89631);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           sodipodi:nodetypes="ccccc"
+           id="path3775"
+           d="m 634.81813,937.76977 22.17713,11.08857 0,24.94927 -22.17713,-11.08856 0,-24.94928 z"
+           style="fill:url(#radialGradient89633);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           d="m 633.56811,935.45788 0,2.25237 0,24.94927 0,0.86629 0.77967,0.34652 22.17713,11.08857 1.99247,1.03955 0,-2.25237 0,-24.94927 0,-0.86629 -0.77966,-0.34652 -22.17713,-11.08856 -1.99248,-1.03956 z m 2.77214,4.50473 19.40499,9.7025 0,21.83061 -19.40499,-9.70249 0,-21.83062 z"
+           id="path3777" />
+        <path
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           d="m 611.39098,891.10362 0,2.25237 0,66.53139 0,0.86629 0.77967,0.34652 5.54428,2.77214 1.99248,1.03955 0,-2.25236 0,-66.53139 0,-0.86629 -0.77967,-0.34652 -5.54428,-2.77214 -1.99248,-1.03956 z m 2.77215,4.50473 2.77214,1.38607 0,63.41273 -2.77214,-1.38607 0,-63.41273 z"
+           id="path3779" />
+        <path
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           d="m 621.09348,895.26184 0,69.65004 8.31642,4.15822 0,-69.65005 -8.31642,-4.15821 z"
+           id="path3781"
+           sodipodi:nodetypes="ccccc" />
+        <path
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           d="m 633.56811,899.42005 0,2.25236 0,27.72141 0,0.8663 0.77967,0.34652 11.08856,5.54428 1.99248,1.03955 0,-2.25236 0,-27.72141 0,-0.8663 -0.77966,-0.34652 -11.08857,-5.54428 -1.99248,-1.03955 z m 2.77214,4.50473 8.31643,4.15821 0,24.60275 -8.31643,-4.15821 0,-24.60275 z"
+           id="path3783" />
+        <path
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           d="m 650.20096,907.73647 0,2.25237 0,30.49355 0,0.86629 0.77967,0.34652 5.54428,2.77214 1.99247,1.03956 0,-2.25237 0,-30.49355 0,-0.8663 -0.77966,-0.34651 -5.54428,-2.77215 -1.99248,-1.03955 z m 2.77214,4.50473 2.77214,1.38607 0,27.3749 -2.77214,-1.38607 0,-27.3749 z"
+           id="path3785" />
+        <path
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           d="m 662.6756,850.21454 -0.60641,0.34652 -55.44282,27.72141 -0.77967,0.34652 0,0.86629 0,83.16424 0,0.86629 0.77967,0.34652 55.44282,27.72141 0.60641,0.34652 0.6064,-0.34652 55.44283,-27.72141 0.77966,-0.34652 0,-0.86629 0,-83.16424 0,-0.86629 -0.77966,-0.34652 -55.44283,-27.72141 -0.6064,-0.34652 z m 0,3.11866 54.05675,27.02838 0,81.43165 -54.05675,27.02837 -54.05676,-27.02837 0,-81.43165 54.05676,-27.02838 z"
+           id="path3787" />
+        <rect
+           transform="matrix(0.8944272,-0.4472136,0,1,0,0)"
+           ry="0"
+           rx="0"
+           y="1269.7253"
+           x="747.37006"
+           height="45.980042"
+           width="47.62381"
+           id="rect3789"
+           style="opacity:0.5;fill:url(#pattern118687);fill-opacity:1;stroke:none" />
+      </g>
+      <g
+         transform="matrix(0.6363961,-0.3181981,-0.6363961,-0.3181981,-304.10649,883.79115)"
+         id="g3863">
+        <path
+           style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter"
+           d="m 1042.8959,100.2653 0,78.90625 78.9063,0 0,-78.90625 -78.9063,0 z m 39.4688,2.46875 c 20.4177,0 37,16.5823 37,37 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 0,-20.41771 16.5823,-37 37,-37 z"
+           id="path3865" />
+        <g
+           id="g3867"
+           transform="translate(606.95622,-331.6564)"
+           style="fill:#00ffff;stroke:#ffffff">
+          <path
+             transform="translate(212.65401,-137.99186)"
+             d="m 256.53294,609.1156 -11.54674,6.66652 -11.54674,6.66651 0,-13.33303 0,-13.33303 11.54674,6.66652 11.54674,6.66651 z"
+             inkscape:randomized="0"
+             inkscape:rounded="0"
+             inkscape:flatsided="false"
+             sodipodi:arg2="1.0471976"
+             sodipodi:arg1="0"
+             sodipodi:r2="7.6978278"
+             sodipodi:r1="15.395656"
+             sodipodi:cy="609.1156"
+             sodipodi:cx="241.13728"
+             sodipodi:sides="3"
+             id="path3869"
+             style="fill:#00ffff;fill-opacity:1;stroke:#ffffff;stroke-linecap:butt;stroke-linejoin:miter"
+             sodipodi:type="star" />
+          <rect
+             y="454.18146"
+             x="471.7662"
+             height="34.386734"
+             width="7.6689839"
+             id="rect3871"
+             style="fill:#00ffff;fill-opacity:1;stroke:#ffffff;stroke-linecap:butt;stroke-linejoin:miter" />
+          <path
+             sodipodi:type="star"
+             style="fill:#00ffff;fill-opacity:1;stroke:#ffffff;stroke-linecap:butt;stroke-linejoin:miter"
+             id="path3873"
+             sodipodi:sides="3"
+             sodipodi:cx="241.13728"
+             sodipodi:cy="609.1156"
+             sodipodi:r1="15.395656"
+             sodipodi:r2="7.6978278"
+             sodipodi:arg1="0"
+             sodipodi:arg2="1.0471976"
+             inkscape:flatsided="false"
+             inkscape:rounded="0"
+             inkscape:randomized="0"
+             d="m 256.53294,609.1156 -11.54674,6.66652 -11.54674,6.66651 0,-13.33303 0,-13.33303 11.54674,6.66652 11.54674,6.66651 z"
+             transform="matrix(-1,0,0,1,738.13162,-137.99186)" />
+        </g>
+      </g>
+    </g>
+    <g
+       id="g3279"
+       transform="translate(1134.8215,-530.82304)">
+      <g
+         id="g118255"
+         inkscape:label="Calque 1"
+         transform="matrix(6.5383417,0,0,6.5383417,488.78696,875.42775)">
+        <path
+           id="path118257"
+           d=""
+           style="fill:#888888;fill-opacity:1;stroke:none" />
+        <path
+           id="path118259"
+           d=""
+           style="fill:#888888;fill-opacity:1;stroke:none" />
+        <path
+           id="path118261"
+           d=""
+           style="fill:#888888;fill-opacity:1;stroke:none" />
+        <g
+           id="g118263"
+           transform="translate(-68.205597,-63.743549)">
+          <path
+             id="path118265"
+             d="m 7.6108945,14.642423 -0.3365653,0.168282 -8.07756781,4.038784 -0.33656529,0.168283 0,0.420707 0,4.038784 0,0.420706 0.33656529,0.168283 8.07756781,4.038784 0.3365653,0.168282 0.2944947,-0.168282 8.0775678,-4.038784 0.378636,-0.168283 0,-0.420706 0,-4.038784 0,-0.420707 -0.378636,-0.168283 -8.0775678,-4.038784 -0.2944947,-0.168282 z m 0,1.514544 7.4044375,3.702218 0,3.197371 -7.4044375,3.702218 -7.40443714,-3.702218 0,-3.197371 7.40443714,-3.702218 z"
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             id="path118267"
+             d="M -0.48215529,19.441925 7.5954125,15.403141 15.67298,19.441925 7.5954125,23.480709 -0.48215529,19.441925 z"
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             sodipodi:nodetypes="ccccc" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             id="path118269"
+             d="m -0.48215529,19.441925 0,4.038784 8.07756779,4.038784 0,-4.038784 -8.07756779,-4.038784 z"
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             id="path118271"
+             d="m 15.67298,19.441925 0,4.038784 -8.0775675,4.038784 0,-4.038784 8.0775675,-4.038784 z"
+             style="fill:url(#radialGradient89635);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        </g>
+      </g>
+      <g
+         transform="matrix(0.6363961,-0.3181981,-0.6363961,-0.3181981,-338.72869,1082.8342)"
+         id="g3697">
+        <path
+           style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter"
+           d="m 1081.1367,402.39569 0,78.90625 78.9062,0 0,-78.90625 -78.9062,0 z m 39.4687,2.46875 c 20.4177,0 37,16.5823 37,37 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 0,-20.41771 16.5823,-37 37,-37 z"
+           id="path3699" />
+        <g
+           id="g3701"
+           transform="translate(456.4439,-26.889185)"
+           style="fill:#00ffff;stroke:#ffffff">
+          <path
+             id="path3703"
+             d="m 660.00267,458.32498 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+          <path
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="m 668.28911,465.32717 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+             id="path3705" />
+          <path
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="m 660.00267,472.20199 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+             id="path3707" />
+          <path
+             id="path3709"
+             d="m 668.28911,479.13574 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+        </g>
+      </g>
+    </g>
+    <g
+       id="g4812"
+       transform="translate(467.27411,-273.27841)">
+      <g
+         id="g118275"
+         inkscape:label="Calque 1"
+         transform="matrix(6.5383417,0,0,6.5383417,1162.7579,726.53635)">
+        <path
+           id="path118277"
+           d=""
+           style="fill:#888888;fill-opacity:1;stroke:none" />
+        <path
+           id="path118279"
+           d=""
+           style="fill:#888888;fill-opacity:1;stroke:none" />
+        <path
+           id="path118281"
+           d=""
+           style="fill:#888888;fill-opacity:1;stroke:none" />
+        <g
+           id="g118283"
+           transform="translate(-68.205597,-63.743549)">
+          <path
+             id="path118285"
+             d="m 7.6108945,14.642423 -0.3365653,0.168282 -8.07756781,4.038784 -0.33656529,0.168283 0,0.420707 0,4.038784 0,0.420706 0.33656529,0.168283 8.07756781,4.038784 0.3365653,0.168282 0.2944947,-0.168282 8.0775678,-4.038784 0.378636,-0.168283 0,-0.420706 0,-4.038784 0,-0.420707 -0.378636,-0.168283 -8.0775678,-4.038784 -0.2944947,-0.168282 z m 0,1.514544 7.4044375,3.702218 0,3.197371 -7.4044375,3.702218 -7.40443714,-3.702218 0,-3.197371 7.40443714,-3.702218 z"
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             id="path118287"
+             d="M -0.48215529,19.441925 7.5954125,15.403141 15.67298,19.441925 7.5954125,23.480709 -0.48215529,19.441925 z"
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             sodipodi:nodetypes="ccccc" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             id="path118289"
+             d="m -0.48215529,19.441925 0,4.038784 8.07756779,4.038784 0,-4.038784 -8.07756779,-4.038784 z"
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             id="path118291"
+             d="m 15.67298,19.441925 0,4.038784 -8.0775675,4.038784 0,-4.038784 8.0775675,-4.038784 z"
+             style="fill:url(#radialGradient89637);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        </g>
+      </g>
+      <g
+         id="g2734"
+         transform="matrix(0.6363961,0.3181981,-0.6363961,0.3181981,415.57747,-87.876339)">
+        <g
+           transform="translate(-61.737701,14.763031)"
+           id="g2736">
+          <path
+             id="path2738"
+             d="m 1160.246,537.14905 6.221,-11.2899 -1.9718,0 0,-18.4037 -8.4984,0 0,18.4037 -1.9565,0 6.2057,11.2899 z"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#00ffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <path
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="m 1159.9433,537.34735 -12.8878,0.2574 0.9859,1.7076 -15.9381,9.2019 4.2493,7.3599 15.938,-9.2019 0.9783,1.6943 6.6744,-11.0192 z"
+             id="path2740" />
+          <path
+             id="path2742"
+             d="m 1188.3639,552.93325 -12.8878,-0.2574 0.9859,-1.7076 -15.9381,-9.2019 4.2493,-7.3599 15.938,9.2019 0.9783,-1.6944 6.6744,11.0193 z"
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+        </g>
+        <path
+           style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter"
+           d="m 1059.0428,506.87882 0,78.90625 78.9062,0 0,-78.90625 -78.9062,0 z m 39.4687,2.46875 c 20.4177,0 37,16.5823 37,37 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 0,-20.41771 16.5823,-37 37,-37 z"
+           id="path2744" />
+      </g>
+    </g>
+    <text
+       id="text19149"
+       y="-154.39288"
+       x="1289.1212"
+       style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       xml:space="preserve"><tspan
+         id="tspan19151"
+         y="-154.39288"
+         x="1289.1212"
+         sodipodi:role="line"
+         style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold">ROUTER</tspan><tspan
+         y="-136.89288"
+         x="1289.1212"
+         sodipodi:role="line"
+         id="tspan19153"
+         style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold">IP:  192.168.12.10</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="1305.3099"
+       y="60.111889"
+       id="text19097"><tspan
+         style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+         sodipodi:role="line"
+         x="1305.3099"
+         y="60.111889"
+         id="tspan19099">SWITCH</tspan><tspan
+         style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+         id="tspan19101"
+         sodipodi:role="line"
+         x="1305.3099"
+         y="77.611893">IP:  192.168.12.10</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="1305.3099"
+       y="168.75134"
+       id="text19103"><tspan
+         style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+         sodipodi:role="line"
+         x="1305.3099"
+         y="168.75134"
+         id="tspan19105">KVM SWITCH</tspan><tspan
+         style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+         id="tspan19107"
+         sodipodi:role="line"
+         x="1305.3099"
+         y="186.25134">IP:  192.168.12.10</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="1289.6263"
+       y="-61.736378"
+       id="text19109"><tspan
+         style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+         sodipodi:role="line"
+         x="1289.6263"
+         y="-61.736378"
+         id="tspan19111">VPN-GW</tspan><tspan
+         style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+         id="tspan19113"
+         sodipodi:role="line"
+         x="1289.6263"
+         y="-44.236378">IP:  192.168.12.10</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="1311.0073"
+       y="303.39124"
+       id="text19115"><tspan
+         style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+         sodipodi:role="line"
+         x="1311.0073"
+         y="303.39124"
+         id="tspan19117">BALANCER</tspan><tspan
+         style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+         id="tspan19119"
+         sodipodi:role="line"
+         x="1311.0073"
+         y="320.89124">IP:  192.168.12.10</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="1309.1835"
+       y="447.4747"
+       id="text19121"><tspan
+         style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+         sodipodi:role="line"
+         x="1309.1835"
+         y="447.4747"
+         id="tspan19123">FIREWALL</tspan><tspan
+         style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+         id="tspan19125"
+         sodipodi:role="line"
+         x="1309.1835"
+         y="464.9747">IP:  192.168.12.10</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="1289.1212"
+       y="554.26849"
+       id="text19127"><tspan
+         style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+         sodipodi:role="line"
+         x="1289.1212"
+         y="554.26849"
+         id="tspan19129">CARP (virtual IP)</tspan><tspan
+         style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+         id="tspan19131"
+         sodipodi:role="line"
+         x="1289.1212"
+         y="571.76849">IP:  192.168.12.10</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="1325.7358"
+       y="677.34473"
+       id="text19133"><tspan
+         style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+         sodipodi:role="line"
+         x="1325.7358"
+         y="677.34473"
+         id="tspan19135">CABLE connection</tspan><tspan
+         style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+         id="tspan19137"
+         sodipodi:role="line"
+         x="1325.7358"
+         y="694.84473">IP:  192.168.12.10</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="1330.007"
+       y="816.90076"
+       id="text19139"><tspan
+         style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+         id="tspan19143"
+         sodipodi:role="line"
+         x="1330.007"
+         y="816.90076">rfIBER connection</tspan><tspan
+         style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+         sodipodi:role="line"
+         x="1330.007"
+         y="834.40076"
+         id="tspan19147">IP:  192.168.12.10</tspan></text>
+    <path
+       style="fill:none;stroke:#808080;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 1183.0041,712.7976 139.0826,-70.8662"
+       id="path3533" />
+    <path
+       style="fill:none;stroke:#808080;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 1182.0512,641.4459 139.0826,70.8661"
+       id="path3535" />
+    <g
+       id="g8726"
+       transform="translate(862.38433,-1019.7849)">
+      <g
+         id="g7342"
+         inkscape:label="Calque 1"
+         transform="matrix(6.5383417,0,0,6.5383417,753.88482,1246.3598)">
+        <path
+           id="path7344"
+           d=""
+           style="fill:#888888;fill-opacity:1;stroke:none" />
+        <path
+           id="path7346"
+           d=""
+           style="fill:#888888;fill-opacity:1;stroke:none" />
+        <path
+           id="path7348"
+           d=""
+           style="fill:#888888;fill-opacity:1;stroke:none" />
+        <g
+           id="g7350"
+           transform="translate(-68.205597,-63.743549)">
+          <path
+             id="path7352"
+             d="m 7.6108945,14.642423 -0.3365653,0.168282 -8.07756781,4.038784 -0.33656529,0.168283 0,0.420707 0,4.038784 0,0.420706 0.33656529,0.168283 8.07756781,4.038784 0.3365653,0.168282 0.2944947,-0.168282 8.0775678,-4.038784 0.378636,-0.168283 0,-0.420706 0,-4.038784 0,-0.420707 -0.378636,-0.168283 -8.0775678,-4.038784 -0.2944947,-0.168282 z m 0,1.514544 7.4044375,3.702218 0,3.197371 -7.4044375,3.702218 -7.40443714,-3.702218 0,-3.197371 7.40443714,-3.702218 z"
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             id="path7354"
+             d="M -0.48215529,19.441925 7.5954125,15.403141 15.67298,19.441925 7.5954125,23.480709 -0.48215529,19.441925 z"
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             sodipodi:nodetypes="ccccc" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             id="path7356"
+             d="m -0.48215529,19.441925 0,4.038784 8.07756779,4.038784 0,-4.038784 -8.07756779,-4.038784 z"
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             id="path7358"
+             d="m 15.67298,19.441925 0,4.038784 -8.0775675,4.038784 0,-4.038784 8.0775675,-4.038784 z"
+             style="fill:url(#radialGradient89639);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        </g>
+      </g>
+      <g
+         transform="matrix(0.6363961,0.3181981,-0.6363961,0.3181981,-171.20316,533.51496)"
+         id="g7524">
+        <path
+           style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter"
+           d="m 1039.327,209.10189 0,78.90626 78.9063,0 0,-78.90626 -78.9063,0 z m 39.4688,2.46876 c 20.4177,0 37,16.5823 37,37 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 0,-20.41771 16.5823,-37 37,-37 z"
+           id="path7526" />
+        <g
+           id="g7528"
+           transform="translate(-56.606987,6.6461916)">
+          <g
+             id="g7530"
+             style="fill:#00ffff;stroke:#ffffff"
+             transform="matrix(0.7071068,-0.7071068,0.7071068,0.7071068,688.36387,330.14386)">
+            <path
+               id="path7532"
+               d="m 378.53666,218.814 -6.22099,11.28987 1.97176,0 0,18.4037 8.49847,0 0,-18.4037 1.95647,0 -6.20571,-11.28987 z"
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+            <path
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+               d="m 378.53666,288.85884 -6.22099,-11.28987 1.97176,0 0,-18.4037 8.49847,0 0,18.4037 1.95647,0 -6.20571,11.28987 z"
+               id="path7534" />
+            <path
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+               d="m 343.41044,253.56675 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+               id="path7536" />
+            <path
+               id="path7538"
+               d="m 413.45528,253.56675 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+          </g>
+          <path
+             id="path7540"
+             d="m 1115.6726,231.44138 10.3619,10.36186 -9.9045,9.90444"
+             style="fill:none;stroke:#00ffff;stroke-width:0.99300444;stroke-linecap:butt;stroke-linejoin:miter" />
+          <path
+             style="fill:none;stroke:#00ffff;stroke-width:0.99300444;stroke-linecap:butt;stroke-linejoin:miter"
+             d="m 1155.0496,231.44138 -10.3618,10.36186 9.9044,9.90444"
+             id="path7542" />
+          <g
+             transform="matrix(0,-1,1,0,1020.0499,767.50988)"
+             id="g7544"
+             style="fill:none;stroke:#00ffff">
+            <path
+               id="path7546"
+               d="m 506.40857,105.24507 10.36186,10.36186 -9.90443,9.90444"
+               style="fill:none;stroke:#00ffff;stroke-width:0.99300444;stroke-linecap:butt;stroke-linejoin:miter" />
+            <path
+               style="fill:none;stroke:#00ffff;stroke-width:0.99300444;stroke-linecap:butt;stroke-linejoin:miter"
+               d="m 545.78557,105.24507 -10.36186,10.36186 9.90443,9.90444"
+               id="path7548" />
+          </g>
+        </g>
+      </g>
+    </g>
+    <path
+       id="path6475"
+       d="m 1190.2296,787.3453 139.0827,70.86613"
+       style="fill:none;stroke:#808080;stroke-width:10;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:20, 20;stroke-dashoffset:0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#808080;stroke-width:10;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:20, 20;stroke-dashoffset:0"
+       d="M 1190.9453,858.57613 1330.028,787.71"
+       id="path19085"
+       sodipodi:nodetypes="cc" />
+    <g
+       transform="translate(-649.56327,-378.70234)"
+       id="layer1-9"
+       inkscape:label="Livello 1">
+      <g
+         transform="translate(-1074.1299,601.25107)"
+         id="g3925">
+        <g
+           id="g108584"
+           transform="translate(59.882331,-420.31793)">
+          <g
+             id="g92198">
+            <path
+               id="path5361"
+               d="m 1005.3987,644.36812 55.4428,-27.72141 55.4429,27.72141 -55.4429,27.72142 -55.4428,-27.72142 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path5363"
+               d="m 1005.3987,644.36812 0,83.16424 55.4428,27.72141 0,-83.16423 -55.4428,-27.72142 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path5365"
+               d="m 1060.8415,755.25377 55.4429,-27.72141 0,-83.16424 -55.4429,27.72142 0,83.16423 z"
+               style="fill:url(#linearGradient89641);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 1060.8415,615.08738 -0.6064,0.34652 -55.4428,27.72141 -0.7797,0.34652 0,0.86629 0,83.16424 0,0.86629 0.7797,0.34652 55.4428,27.72141 0.6064,0.34652 0.6064,-0.34652 55.4429,-27.72141 0.7796,-0.34652 0,-0.86629 0,-83.16424 0,-0.86629 -0.7796,-0.34652 -55.4429,-27.72141 -0.6064,-0.34652 z m 0,3.11866 54.0568,27.02838 0,81.43165 -54.0568,27.02837 -54.0567,-27.02837 0,-81.43165 54.0567,-27.02838 z"
+               id="path5391" />
+            <path
+               style="fill:url(#pattern6042);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1010.0335,651.21095 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4979"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:url(#pattern6040);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1022.9003,658.59748 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4981"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:url(#pattern6038);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1035.7672,665.26918 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4983"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               d="m 1048.3958,671.70261 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4985"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4977"
+               d="m 1048.3958,671.70261 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6036);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4987"
+               d="m 1010.0335,689.81151 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6034);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4989"
+               d="m 1022.9003,697.19804 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6032);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4991"
+               d="m 1035.7672,703.86974 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6030);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               style="fill:url(#pattern6028);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1048.3958,710.30317 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4993"
+               sodipodi:nodetypes="ccccc" />
+          </g>
+        </g>
+        <g
+           transform="matrix(0.4481573,-0.2240787,0,0.6402247,1001.8024,-178.48439)"
+           id="g108970">
+          <path
+             d="m 314.09476,861.04125 c -1.56438,0.834 -3.6901,0.50384 -4.68956,-1.58568 -0.84011,-1.93879 -15.12073,-31.80949 -15.51636,-32.75301 -1.17184,-2.57186 -0.21709,-4.29384 1.44804,-5.1975 2.29126,-1.26473 21.81453,-11.77888 23.51292,-12.64626 1.86955,-1.02115 3.89506,-0.88867 5.13133,1.65883 0.9779,2.05018 14.86956,31.16397 15.69988,32.85344 0.87451,1.81637 0.0508,3.97006 -1.72579,4.83701 -1.32383,0.66683 -22.9908,12.34832 -23.86046,12.83317 z"
+             id="path108972"
+             style="font-size:12px;fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#005800;stroke-width:1.74380612" />
+          <path
+             d="m 314.23273,847.2469 c -1.75078,-0.007 -3.50603,-1.32081 -3.50687,-3.66398 0.0771,-2.13226 0.0716,-35.62533 0.12093,-36.65668 0.051,-2.85603 1.63653,-3.93391 3.50687,-3.94111 2.5827,-0.0289 24.47747,-0.0411 26.36202,0 2.10274,-0.0139 3.85286,1.07587 3.8697,3.94111 -0.002,2.29773 -0.0205,34.9291 -2e-5,36.8343 0.006,2.03958 -1.64681,3.56538 -3.60097,3.48636 -1.46498,-0.0403 -25.76932,-0.0153 -26.75166,0 z"
+             id="path108974"
+             style="font-size:12px;fill:#ffffeb;fill-opacity:1;fill-rule:evenodd;stroke:#005800;stroke-width:1.743806" />
+          <path
+             d="m 322.93888,855.54573 c -1.47013,-1.00866 -2.27836,-3.12041 -1.08622,-5.09293 1.15034,-1.7504 18.19628,-29.94194 18.7628,-30.78168 1.49688,-2.37446 3.37999,-2.37319 4.95778,-1.30763 2.18836,1.45544 20.62163,13.98988 22.18679,15.10424 1.77679,1.19305 2.69491,3.113 1.25047,5.53408 -1.17108,1.93287 -17.79882,29.38525 -18.75145,31.00043 -1.03344,1.71987 -3.20105,2.05714 -4.80547,0.87102 -1.21244,-0.8733 -21.68017,-14.77752 -22.5147,-15.32753 z"
+             id="path108976"
+             style="font-size:12px;fill:#000080;fill-opacity:1;fill-rule:evenodd;stroke:#005800;stroke-width:1.743806" />
+        </g>
+      </g>
+      <g
+         transform="translate(-643.1028,19.368173)"
+         id="g3299">
+        <g
+           transform="translate(466.84383,64.105478)"
+           id="g117221">
+          <g
+             transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)"
+             inkscape:label="Calque 1"
+             id="g117223">
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path117225" />
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path117227" />
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path117229" />
+            <g
+               id="g117231">
+              <path
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 2,11 22,1 42,11 22,21 2,11 z"
+                 id="path117233" />
+              <path
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 2,11 2,41 22,51 22,21 2,11 z"
+                 id="path117235" />
+              <path
+                 style="fill:url(#linearGradient89643);fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 22,51 42,41 42,11 22,21 22,51 z"
+                 id="path117237"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117239"
+                 d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117241"
+                 d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117243"
+                 d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117245"
+                 d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117247"
+                 d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117249"
+                 d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117251"
+                 d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:url(#radialGradient89645);fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                 id="path117253"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 id="path117255"
+                 d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117257"
+                 d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117259"
+                 d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117261"
+                 d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117263"
+                 d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117265"
+                 d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            </g>
+          </g>
+        </g>
+        <g
+           id="g108978"
+           transform="matrix(0.08706124,-0.04353062,0,0.1242649,704.11524,-22.263442)"
+           inkscape:export-filename="/home/maidis/Belgeler/goreseeel/inkscape/dunya/dunya.png"
+           inkscape:export-xdpi="114.54683"
+           inkscape:export-ydpi="114.54683">
+          <path
+             transform="translate(-56.33397,20.961477)"
+             d="m 399.57816,1737.5405 a 199.13403,199.13403 0 1 1 -398.2680709,0 199.13403,199.13403 0 1 1 398.2680709,0 z"
+             sodipodi:ry="199.13403"
+             sodipodi:rx="199.13403"
+             sodipodi:cy="1737.5405"
+             sodipodi:cx="200.44412"
+             id="path108980"
+             style="fill:url(#radialGradient89647);fill-opacity:1;fill-rule:evenodd;stroke:none"
+             sodipodi:type="arc" />
+          <path
+             style="opacity:0.36909102;fill:#000000;fill-opacity:1;filter:url(#filter3267)"
+             d="m 107.6879,1950.8501 c 0.77589,-0.7759 1.93006,-1.5838 2.56481,-1.7954 0.83388,-0.278 0.76947,-1.0049 -0.23214,-2.6198 -1.16233,-1.8741 -1.16774,-2.3711 -0.0336,-3.0771 1.14186,-0.7107 9.35283,-3.495 13.99054,-4.744 2.25888,-0.6084 0.3076,-10.0936 -3.62263,-17.6097 -3.37859,-6.4612 -3.47822,-6.9424 -2.27769,-11 0.95216,-3.2182 3.33527,-6.2611 9.86486,-12.596 4.73517,-4.594 10.95061,-9.8503 13.81207,-11.6808 10.6188,-6.7928 26.83325,-30.4592 26.18992,-38.2265 -0.30594,-3.6937 -0.35923,-3.7369 -4.30977,-3.4882 -4.05103,0.255 -6.44608,0.7935 -16.68187,3.7502 -4.303,1.243 -6.17821,1.3757 -7.72709,0.5467 -2.38044,-1.2739 -4.09104,-4.1187 -4.09104,-6.8034 0,-1.0779 -4.92806,-6.7724 -11.49999,-13.2886 -6.325,-6.2713 -11.5,-12.2244 -11.5,-13.2292 0,-2.3414 -2.55047,-7.278 -5.05318,-9.7807 -1.33367,-1.3336 -1.94682,-3.3198 -1.94682,-6.3063 0,-2.792 -1.04376,-6.4776 -2.90275,-10.25 -4.198162,-8.5192 -7.097252,-15.2155 -7.097252,-16.3932 0,-0.5634 -0.39883,-1.8058 -0.88629,-2.7609 -1.56863,-3.0732 -4.04953,-12.5312 -3.51423,-13.3973 0.70961,-1.1482 6.12149,-1.0588 8.35786,0.1381 1.902442,1.0181 5.506412,6.6462 10.260352,16.0228 1.53367,3.025 3.89943,7.525 5.25723,10 1.35781,2.475 2.48142,5.9818 2.49691,7.7929 0.021,2.4577 1.11586,4.4865 4.31723,8 2.35898,2.5889 5.62148,6.6791 7.25,9.0893 1.6285,2.4103 3.76361,5.5603 4.74466,7 0.98596,1.447 1.59117,3.7072 1.35319,5.0535 -0.2368,1.3395 0.37786,4.2645 1.36591,6.5 0.98805,2.2354 2.28197,5.3018 2.87537,6.8143 1.19523,3.0465 3.22064,3.5408 5.1218,1.25 0.68469,-0.825 2.87729,-1.5143 4.87244,-1.5318 1.99516,-0.018 4.50107,-0.6925 5.56869,-1.5 1.06762,-0.8075 2.72059,-1.4682 3.67327,-1.4682 0.95268,0 3.00799,-1.0735 4.56735,-2.3857 1.55936,-1.3121 4.48267,-3.074 6.49624,-3.9153 2.01356,-0.8413 4.16229,-2.4663 4.77495,-3.6111 1.17971,-2.2043 7.89828,-6.0879 10.53197,-6.0879 0.86053,0 2.00887,-1.1685 2.55188,-2.5968 0.54301,-1.4282 1.86697,-2.8268 2.94213,-3.1079 1.07516,-0.2812 2.22522,-1.3631 2.55569,-2.4043 0.33046,-1.0412 1.47036,-2.3585 2.53311,-2.9272 1.21395,-0.6497 1.93228,-2.0908 1.93228,-3.8765 0,-1.5633 0.675,-3.4026 1.5,-4.0873 0.825,-0.6847 1.5,-1.9078 1.5,-2.7181 0,-0.8103 0.7875,-2.8107 1.75,-4.4452 l 1.75,-2.972 -3.5,-2.9054 c -1.925,-1.598 -4.70488,-2.9176 -6.17752,-2.9324 -1.8082,-0.018 -3.49624,-1.073 -5.19917,-3.249 l -2.52165,-3.222 -2.31448,2.1743 c -1.27296,1.1959 -3.98138,2.8708 -6.01871,3.7221 -6.74082,2.8165 -10.76847,1.5969 -10.76847,-3.2607 0,-2.0009 -0.38212,-2.3125 -2.25831,-1.8416 -3.11225,0.7811 -4.12747,-0.098 -6.59154,-5.7087 -1.17363,-2.6723 -3.48753,-6.4004 -5.14201,-8.2848 -4.66439,-5.3124 -3.74468,-11.0358 2.06995,-12.8813 3.58851,-1.1389 6.74265,0.4048 9.77345,4.7833 3.6067,5.2105 6.43358,7.7858 11.72854,10.6849 l 4.08007,2.2339 3.41993,-2.0849 c 4.56278,-2.7816 5.41388,-2.6651 9.36073,1.2818 3.20443,3.2044 3.84486,3.4094 12.73247,4.0757 7.31208,0.5482 10.33882,0.3603 13.84252,-0.8596 7.76987,-2.7051 13.00584,-1.5999 16.7373,3.5329 0.68921,0.9481 2.82671,2.2431 4.75,2.8778 2.86978,0.9471 3.4969,1.6479 3.4969,3.9076 0,1.9195 0.76335,3.162 2.52021,4.1022 2.74129,1.4671 4.05666,0.7592 4.64421,-2.4993 0.1972,-1.0937 1.11485,-2.1342 2.03923,-2.3122 2.25597,-0.4345 4.79637,4.6419 4.79637,9.5844 0,2.1356 0.3084,4.1914 0.6853,4.5683 0.8571,0.8571 3.2793,7.7282 3.2996,9.3599 0.008,0.6665 1.6782,4.7156 3.7109,8.9981 2.0327,4.2824 4.8919,11.3871 6.3538,15.7881 1.6318,4.9127 3.197,8.0019 4.0542,8.0019 0.7679,0 2.4759,-2.25 3.7955,-5 2.0974,-4.3708 2.412,-6.5131 2.5,-17.0248 0.091,-10.8714 0.3165,-12.2992 2.3507,-14.8849 1.2375,-1.573 2.25,-3.2771 2.25,-3.7868 0,-0.5098 1.5027,-4.1616 3.3394,-8.1152 4.7065,-10.131 5.921,-13.6457 6.2076,-17.9639 0.2719,-4.0966 1.8777,-6.7244 4.1091,-6.7244 0.7762,0 2.352,-1.5942 3.5016,-3.5427 1.9927,-3.3774 2.1779,-3.4636 3.9663,-1.8451 1.0318,0.9338 1.876,2.303 1.876,3.0428 0,0.7398 0.9989,2.344 2.2199,3.5649 2.9102,2.9103 5.7801,8.6159 5.7801,11.4916 0,3.0451 1.8103,2.9175 3,-0.2115 1.41,-3.7086 2.7401,-3.0407 3.4851,1.75 1.0325,6.6388 1.4902,7.6967 3.0684,7.0911 0.8204,-0.3148 2.2872,0.468 3.3745,1.801 2.2923,2.8102 2.5502,2.355 4.0227,-7.102 1.1992,-7.7024 0.6753,-12.0756 -2.6273,-21.9299 -2.5953,-7.744 -2.5779,-7.1047 -0.7689,-28.2624 0.5132,-6.0036 0.1849,-9.7739 -1.5239,-17.5 -4.3512,-19.6728 -6.6973,-24.5744 -21.8047,-45.5566 -1.2508,-1.7372 -3.5478,-3.7753 -5.1046,-4.5293 -3.5903,-1.7388 -8.104,-10.6792 -6.3015,-12.4817 1.9739,-1.974 1.3993,-3.3473 -4.3198,-10.3246 -3.025,-3.6904 -5.5,-7.043 -5.5,-7.4501 0,-1.0862 -12.8332,-13.9421 -17.9374,-17.9692 -7.1636,-5.6519 -15.34307,-10.1962 -17.38945,-9.6611 -2.60758,0.6819 -5.71089,-0.6539 -11.13132,-4.7914 -2.54201,-1.9403 -6.06634,-4.2172 -7.83185,-5.0597 -1.7655,-0.8424 -3.98191,-2.8893 -4.92536,-4.5486 -1.05876,-1.8621 -3.4875,-3.7765 -6.34498,-5.0013 -2.85084,-1.2221 -4.69781,-2.8337 -5.17645,-4.0757 -0.71594,-1.8577 -8.09791,-4.869 -11.89442,-5.8985 -1.20523,-0.3268 -3.31852,-1.3764 -6.54076,-1.969 -4.79856,-0.8825 -7.01314,-1.5652 -9.57053,2.0361 -0.69332,0.9762 -2.03244,1.543 -3.02968,1.2822 -2.44281,-0.6388 -7.22782,1.2995 -7.22782,2.9278 0,2.0346 -17.517,1.298 -21.61488,-0.9089 -4.24326,-2.2851 -6.84093,-1.2335 -5.91417,2.3943 0.38465,1.5056 0.67509,4.0268 0.64544,5.6025 -0.0315,1.675 0.76033,3.5441 1.90637,4.5 2.15854,1.8004 3.03035,5.35 1.50677,6.135 -0.53375,0.275 -1.43388,-0.4 -2.00027,-1.5 -1.97535,-3.8363 -2.67543,-4.5277 -3.84836,-3.8004 -0.64949,0.4027 -4.02134,0.8436 -7.493,0.9797 -5.07768,0.199 -6.90164,0.7435 -9.32672,2.7841 -1.65805,1.3951 -3.63945,2.5366 -4.4031,2.5366 -0.76366,0 -2.92604,1.35 -4.80529,3 -3.87858,3.4055 -4.88637,3.6284 -6.67253,1.4762 -2.17704,-2.6232 0.0615,-5.8592 4.09696,-5.9225 1.88253,-0.029 3.42279,-0.5157 3.42279,-1.0804 0,-0.5647 -1.88264,-2.7276 -4.18364,-4.8064 -3.98267,-3.5981 -4.36698,-3.7298 -8,-2.74 -2.099,0.5718 -7.64136,3.5531 -12.31636,6.625 -4.675002,3.0719 -9.850002,5.8444 -11.500002,6.161 -4.71239,0.9045 -10.01079,3.917 -12.87421,7.32 -3.3161,3.941 -3.35547,5.3671 -0.12579,4.5565 2.90698,-0.7296 3.03593,-0.1163 1,4.7564 -0.825,1.9745 -1.5,4.0544 -1.5,4.6221 0,2.0989 2.92982,0.9394 5.01074,-1.983 1.18082,-1.6583 3.4013,-3.6637 4.93441,-4.4565 1.78002,-0.9205 3.00512,-2.5297 3.38968,-4.4525 0.56793,-2.8397 1.65427,-3.8022 10.78458,-9.5555 4.741102,-2.9874 8.127312,-4.607 8.614292,-4.12 0.30131,0.3013 -2.25128,3.2446 -5.67243,6.5406 -3.421142,3.296 -5.932932,6.4577 -5.581752,7.0259 0.35118,0.5682 2.18696,1.0331 4.079502,1.0331 2.70949,0 3.44098,0.4024 3.44098,1.893 0,2.0581 -1.85105,3.107 -5.483012,3.107 -1.59078,0 -2.96818,1.0996 -4.38449,3.5 -1.48728,2.5208 -2.76677,3.5 -4.57309,3.5 -1.78318,0 -2.96284,0.8795 -4.08163,3.043 -1.95167,3.7741 -4.67207,4.8597 -11.03119,4.402 -2.72062,-0.1958 -5.95909,-0.376 -7.19659,-0.4005 -1.2375,-0.024 -2.25,-0.6646 -2.25,-1.4225 0,-0.7579 1.0125,-2.065 2.25,-2.9047 1.85148,-1.2562 2.02068,-1.7639 0.95531,-2.8666 -1.07469,-1.1124 -1.83938,-0.7205 -4.5,2.3061 -2.33014,2.6506 -4.27182,3.7993 -7.111414,4.2071 -2.14835,0.3086 -5.07335,1.6562 -6.5,2.9948 -3.72928,3.4991 -15.762709,8.8139 -20.507899,9.0578 -3.91827,0.2014 -4.07511,0.3439 -4.75379,4.3195 -0.85597,5.0141 -2.71282,8.5188 -7.292331,13.764 l -3.49236,4 -5.4924401,-2.948 c -3.02085,-1.6214 -5.67099,-2.7464 -5.88921,-2.5 -0.21823,0.2464 -1.65074,2.473 -3.18337996,4.948 -1.53263004,2.475 -3.80504004,5.4557 -5.04979004,6.6237 -4.01628,3.7688 -6.3523099,9.5568 -5.7299199,14.1971 0.5506,4.105 0.63068,4.1792 4.5070999,4.1792 3.60786,0 4.62483,-0.6865 11.85036,-8 4.3471,-4.4 8.6747801,-8 9.6170701,-8 0.94229,0 3.00543,-1.2375 4.584771,-2.75 2.28261,-2.186 3.9345,-2.7937 8.05471,-2.963 2.85077,-0.1172 6.53321,-0.3422 8.18321,-0.5 l 3,-0.287 -0.3389,6.5676 c -0.30295,5.8709 -0.06426,6.8941 2.249999,9.6444 1.42389,1.6922 2.5889,3.7993 2.5889,4.6824 0,0.9389 0.8304,1.6056 2,1.6056 1.1,0 2,-0.1474 2,-0.3276 0,-0.1802 -1.125,-3.0962 -2.5,-6.4801 -3.29441,-8.1076 -3.26835,-13.1257 0.08889,-17.1156 3.90509,-4.6409 5.03665,-3.9896 5.71644,3.2901 0.4487,4.805 1.44437,7.7776 4.05876,12.1176 3.40165,5.6469 3.4381,5.8248 2.01812,9.8495 -1.58166,4.4829 -1.08507,8.8379 1.22653,10.7564 0.99587,0.8265 1.27603,2.1579 0.85626,4.0691 -0.79072,3.6001 1.766624,3.943 3.998874,0.5361 1.23365,-1.8828 1.29412,-2.8764 0.33042,-5.4295 -1.9266,-5.1042 -0.0022,-8.0135 5.3495,-8.0874 6.19972,-0.086 6.85621,0.8597 6.85621,9.8724 0,5.7769 0.4102,8.2164 1.57798,9.3841 2.60879,2.6088 5.37735,3.7139 7.56504,3.0195 1.22642,-0.3892 3.41491,0.07 5.37976,1.1276 2.86495,1.5429 3.86285,1.6189 7.38882,0.5624 10.169562,-3.0468 11.677372,5.6177 3.725522,21.4086 -4.008462,7.96 -5.377482,8.7995 -12.831492,7.8686 -3.4681,-0.4332 -8.46374,-0.6813 -11.10143,-0.5514 -5.33869,0.2629 -8.45784,-1.2682 -17.493114,-8.5865 -2.90891,-2.3561 -6.29628,-4.2839 -7.5275,-4.2839 -3.53138,0 -6.68359,2.7622 -6.68359,5.8567 0,5.2961 -4.46372,6.8348 -8.297749,2.8604 -1.21124,-1.2555 -3.43396,-3.0621 -4.93939,-4.0146 -1.50542,-0.9524 -3.67095,-3.5622 -4.81229,-5.7994 -1.14133,-2.2372 -3.37021,-4.8109 -4.95307,-5.7193 -1.58286,-0.9084 -3.528981,-3.3091 -4.324721,-5.3349 -1.35769,-3.4563 -1.3017,-3.9192 0.909,-7.516 3.002541,-4.8851 3.213291,-10.837 0.436331,-12.3232 -1.090041,-0.5834 -3.677541,-1.0064 -5.750001,-0.9401 -2.07246,0.066 -5.9234901,-0.4125 -8.5578501,-1.064 -3.30664,-0.8177 -5.17463996,-0.8651 -6.03277,-0.1529 -3.23662,2.6862 -6.41105,3.038 -10.0093699,1.1094 l -3.55303,-1.9043 -5.16991,3.4791 c -5.82709,3.9213 -7.69353,6.0397 -10.92034,12.394 -2.30392,4.537 -5.6027,7.9766 -7.70675,8.0358 -1.76858,0.05 -6.76115,7.4047 -10.88041,16.0287 -0.91827,1.9225 -2.28091,7.9975 -3.02809,13.5 -0.74718,5.5025 -2.210357,13.1203 -2.3149,17.0046 -0.449746,16.7105 2.267313,37.0861 9.19604,52.3382 3.85806,8.4927 4.52186,9.6202 9.2849,12.667 2.86207,1.8309 5.50496,3.8162 5.87309,4.4118 0.36812,0.5957 2.50807,1.083 4.75544,1.083 5.69166,0 11.64921,3.9919 15.05121,10.0852 2.0388499,3.6517 3.9429299,5.4883 7.6237099,7.3535 6.12073,3.1017 9.17306,8.6963 9.54232,17.4905 0.13725,3.2684 0.88608,6.8404 1.66407,7.9376 0.77799,1.0973 4.7895301,6.3461 8.9145301,11.6642 11.621791,14.983 20.000001,27.5178 20.000001,29.9225 0,5.1292 11.240759,14.3909 29.035233,23.9234 5.99985,3.2141 12.53494,5.6086 22,8.0607 15.084362,3.908 17.496152,4.1739 19.518342,2.1517 z m 46.4917,-239.0347 c -0.76234,-0.9186 -2.88439,-2.2962 -4.71567,-3.0613 -3.72472,-1.5563 -4.09671,-3.452 -2.25,-11.4664 0.80507,-3.4938 0.74001,-4.6979 -0.29719,-5.5 -3.43088,-2.6532 -8.78242,-10.4656 -8.78242,-12.8209 0,-1.4234 -0.45,-2.8661 -1,-3.206 -2.33005,-1.44 -0.72695,-5.0203 4.49408,-10.0369 4.26272,-4.0958 5.99968,-5.1559 7.75,-4.73 5.88115,1.4311 8.09926,8.4255 3.25592,10.2669 -1.375,0.5228 -2.48213,1.5242 -2.46029,2.2253 0.0582,1.8686 8.19011,10.3955 10.66231,11.1801 1.16548,0.3699 2.90196,1.8675 3.85883,3.3278 1.68361,2.5695 1.67035,2.7013 -0.41054,4.083 -2.53059,1.6803 -2.722,3.0423 -0.64274,4.5736 1.88123,1.3854 5.04409,13.4586 3.84099,14.6617 -0.48152,0.4815 -3.35988,1.1674 -6.39635,1.5243 -4.47768,0.5263 -5.78277,0.3333 -6.90693,-1.0212 z m -41.83872,-21.2889 c -2.36139,-0.2117 -5.91169,-1.4831 -7.88954,-2.8253 -4.101,-2.783 -6.177632,-2.9432 -11.817012,-0.9115 -5.94779,2.1427 -7.7653,1.8243 -11.48322,-2.0116 l -3.37556,-3.4827 3.27417,-6.5157 c 1.94439,-3.8694 5.12324,-8.1434 7.82689,-10.5232 l 4.55272,-4.0075 3.1025,1.8181 c 1.906,1.1169 3.1025,2.627 3.1025,3.9156 0,3.5824 1.319052,3.6469 2.786512,0.1362 1.77335,-4.2425 3.27971,-5.429 7.96349,-6.273 4.32395,-0.7791 4.81548,0.4538 2.19847,5.5146 -1.83976,3.5577 -1.24596,6.1151 1.8181,7.8304 2.53767,1.4206 9.73343,10.8873 9.73343,12.8053 0,1.937 -3.78353,5.2862 -5.75,5.0899 -0.9625,-0.096 -3.68205,-0.3479 -6.04345,-0.5596 z m 32.18854,260.85 c 2.65143,-1.0405 14.58497,-15.2386 14.5959,-17.3657 0.0125,-2.4361 -1.315,-2.1897 -5.02609,0.933 -1.7537,1.4756 -5.27572,3.2101 -7.82672,3.8544 -4.04232,1.021 -4.68059,1.5435 -4.96827,4.0671 -0.18154,1.5925 -1.24118,3.8747 -2.35477,5.0715 -1.11358,1.1968 -1.72598,2.6593 -1.3609,3.25 0.74917,1.2122 4.10192,1.3038 6.94085,0.1897 z m 143.20592,-116.6623 c 0.5733,-2.2841 -0.0402,-4.437 -0.9603,-3.3701 -1.0142,1.176 -1.558,5.9167 -0.6788,5.9167 0.55,0 1.2876,-1.1459 1.6391,-2.5466 z M 41.716664,1627.6149 c 2.25231,-1.4758 6.41766,-8.361 6.41766,-10.6083 0,-0.4832 -2.7,1.2428 -6,3.8354 -5.669989,4.4546 -6.876789,6.2087 -5.333329,7.7521 1.03526,1.0353 2.193199,0.8046 4.915669,-0.9792 z m -1.58234,-10.8541 c 1.73334,-1.845 1.95566,-2.5 0.84863,-2.5 -0.825,0 -2.556879,1.125 -3.848629,2.5 -1.73334,1.8451 -1.95566,2.5 -0.84863,2.5 0.825,0 2.556879,-1.125 3.848629,-2.5 z m 15.55793,-10.2754 c -0.68187,-0.6819 -6.55793,5.3923 -6.55793,6.779 0,0.4029 1.62915,-0.8039 3.62033,-2.6818 1.99118,-1.878 3.3131,-3.7217 2.9376,-4.0972 z m 20.442074,-22.2246 c 0,-0.55 -0.45,-1 -1,-1 -0.55,0 -1,0.45 -1,1 0,0.55 0.45,1 1,1 0.55,0 1,-0.45 1,-1 z m 71.999992,-2.5 c -0.70675,-0.8516 -1.51,-1.3233 -1.785,-1.0483 -0.275,0.275 0.0782,1.1967 0.785,2.0483 0.70675,0.8516 1.51,1.3233 1.785,1.0483 0.275,-0.275 -0.0782,-1.1967 -0.785,-2.0483 z m -82.499992,-3.6979 c 4.12766,-0.9645 11.1401,-2.0069 25,-3.7163 4.4,-0.5427 10.025002,-1.6393 12.500002,-2.437 2.475,-0.7977 9.7875,-2.693 16.25,-4.2119 6.4625,-1.5188 11.74999,-3.0874 11.74999,-3.4857 0,-1.5373 -6.76833,-1.6613 -12.46055,-0.2283 -3.27831,0.8254 -9.57831,2.0817 -14,2.7919 -24.854212,3.992 -35.670602,6.6915 -44.039442,10.9912 -5.130544,2.636 -5.037054,2.6416 5,0.2961 z"
+             id="path108982"
+             sodipodi:nodetypes="csssssssssssssssssssssssssssssssssssssssssssssscccscccssssssscccssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssscccssssssssscccssssssssssssssssssssssssssssssssssscccsssssssssssssssssccsssssssssssssssccssccccccsssssssccssssssccssccsssccsssccssccsssccsssccsssssssc" />
+          <path
+             sodipodi:nodetypes="csssssssssssssssssssssssssssssssssssssssssssssscccscccssssssscccssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssscccssssssssscccssssssssssssssssssssssssssssssssssscccsssssssssssssssssccsssssssssssssssccssccccccsssssssccssssssccssccsssccsssccssccsssccsssccsssssssc"
+             id="path108984"
+             d="m 107.6879,1950.8501 c 0.77589,-0.7759 1.93006,-1.5838 2.56481,-1.7954 0.83388,-0.278 0.76947,-1.0049 -0.23214,-2.6198 -1.16233,-1.8741 -1.16774,-2.3711 -0.0336,-3.0771 1.14186,-0.7107 9.35283,-3.495 13.99054,-4.744 2.25888,-0.6084 0.3076,-10.0936 -3.62263,-17.6097 -3.37859,-6.4612 -3.47822,-6.9424 -2.27769,-11 0.95216,-3.2182 3.33527,-6.2611 9.86486,-12.596 4.73517,-4.594 10.95061,-9.8503 13.81207,-11.6808 10.6188,-6.7928 26.83325,-30.4592 26.18992,-38.2265 -0.30594,-3.6937 -0.35923,-3.7369 -4.30977,-3.4882 -4.05103,0.255 -6.44608,0.7935 -16.68187,3.7502 -4.303,1.243 -6.17821,1.3757 -7.72709,0.5467 -2.38044,-1.2739 -4.09104,-4.1187 -4.09104,-6.8034 0,-1.0779 -4.92806,-6.7724 -11.49999,-13.2886 -6.325,-6.2713 -11.5,-12.2244 -11.5,-13.2292 0,-2.3414 -2.55047,-7.278 -5.05318,-9.7807 -1.33367,-1.3336 -1.94682,-3.3198 -1.94682,-6.3063 0,-2.792 -1.04376,-6.4776 -2.90275,-10.25 -4.198162,-8.5192 -7.097252,-15.2155 -7.097252,-16.3932 0,-0.5634 -0.39883,-1.8058 -0.88629,-2.7609 -1.56863,-3.0732 -4.04953,-12.5312 -3.51423,-13.3973 0.70961,-1.1482 6.12149,-1.0588 8.35786,0.1381 1.902442,1.0181 5.506412,6.6462 10.260352,16.0228 1.53367,3.025 3.89943,7.525 5.25723,10 1.35781,2.475 2.48142,5.9818 2.49691,7.7929 0.021,2.4577 1.11586,4.4865 4.31723,8 2.35898,2.5889 5.62148,6.6791 7.25,9.0893 1.6285,2.4103 3.76361,5.5603 4.74466,7 0.98596,1.447 1.59117,3.7072 1.35319,5.0535 -0.2368,1.3395 0.37786,4.2645 1.36591,6.5 0.98805,2.2354 2.28197,5.3018 2.87537,6.8143 1.19523,3.0465 3.22064,3.5408 5.1218,1.25 0.68469,-0.825 2.87729,-1.5143 4.87244,-1.5318 1.99516,-0.018 4.50107,-0.6925 5.56869,-1.5 1.06762,-0.8075 2.72059,-1.4682 3.67327,-1.4682 0.95268,0 3.00799,-1.0735 4.56735,-2.3857 1.55936,-1.3121 4.48267,-3.074 6.49624,-3.9153 2.01356,-0.8413 4.16229,-2.4663 4.77495,-3.6111 1.17971,-2.2043 7.89828,-6.0879 10.53197,-6.0879 0.86053,0 2.00887,-1.1685 2.55188,-2.5968 0.54301,-1.4282 1.86697,-2.8268 2.94213,-3.1079 1.07516,-0.2812 2.22522,-1.3631 2.55569,-2.4043 0.33046,-1.0412 1.47036,-2.3585 2.53311,-2.9272 1.21395,-0.6497 1.93228,-2.0908 1.93228,-3.8765 0,-1.5633 0.675,-3.4026 1.5,-4.0873 0.825,-0.6847 1.5,-1.9078 1.5,-2.7181 0,-0.8103 0.7875,-2.8107 1.75,-4.4452 l 1.75,-2.972 -3.5,-2.9054 c -1.925,-1.598 -4.70488,-2.9176 -6.17752,-2.9324 -1.8082,-0.018 -3.49624,-1.073 -5.19917,-3.249 l -2.52165,-3.222 -2.31448,2.1743 c -1.27296,1.1959 -3.98138,2.8708 -6.01871,3.7221 -6.74082,2.8165 -10.76847,1.5969 -10.76847,-3.2607 0,-2.0009 -0.38212,-2.3125 -2.25831,-1.8416 -3.11225,0.7811 -4.12747,-0.098 -6.59154,-5.7087 -1.17363,-2.6723 -3.48753,-6.4004 -5.14201,-8.2848 -4.66439,-5.3124 -3.74468,-11.0358 2.06995,-12.8813 3.58851,-1.1389 6.74265,0.4048 9.77345,4.7833 3.6067,5.2105 6.43358,7.7858 11.72854,10.6849 l 4.08007,2.2339 3.41993,-2.0849 c 4.56278,-2.7816 5.41388,-2.6651 9.36073,1.2818 3.20443,3.2044 3.84486,3.4094 12.73247,4.0757 7.31208,0.5482 10.33882,0.3603 13.84252,-0.8596 7.76987,-2.7051 13.00584,-1.5999 16.7373,3.5329 0.68921,0.9481 2.82671,2.2431 4.75,2.8778 2.86978,0.9471 3.4969,1.6479 3.4969,3.9076 0,1.9195 0.76335,3.162 2.52021,4.1022 2.74129,1.4671 4.05666,0.7592 4.64421,-2.4993 0.1972,-1.0937 1.11485,-2.1342 2.03923,-2.3122 2.25597,-0.4345 4.79637,4.6419 4.79637,9.5844 0,2.1356 0.3084,4.1914 0.6853,4.5683 0.8571,0.8571 3.2793,7.7282 3.2996,9.3599 0.008,0.6665 1.6782,4.7156 3.7109,8.9981 2.0327,4.2824 4.8919,11.3871 6.3538,15.7881 1.6318,4.9127 3.197,8.0019 4.0542,8.0019 0.7679,0 2.4759,-2.25 3.7955,-5 2.0974,-4.3708 2.412,-6.5131 2.5,-17.0248 0.091,-10.8714 0.3165,-12.2992 2.3507,-14.8849 1.2375,-1.573 2.25,-3.2771 2.25,-3.7868 0,-0.5098 1.5027,-4.1616 3.3394,-8.1152 4.7065,-10.131 5.921,-13.6457 6.2076,-17.9639 0.2719,-4.0966 1.8777,-6.7244 4.1091,-6.7244 0.7762,0 2.352,-1.5942 3.5016,-3.5427 1.9927,-3.3774 2.1779,-3.4636 3.9663,-1.8451 1.0318,0.9338 1.876,2.303 1.876,3.0428 0,0.7398 0.9989,2.344 2.2199,3.5649 2.9102,2.9103 5.7801,8.6159 5.7801,11.4916 0,3.0451 1.8103,2.9175 3,-0.2115 1.41,-3.7086 2.7401,-3.0407 3.4851,1.75 1.0325,6.6388 1.4902,7.6967 3.0684,7.0911 0.8204,-0.3148 2.2872,0.468 3.3745,1.801 2.2923,2.8102 2.5502,2.355 4.0227,-7.102 1.1992,-7.7024 0.6753,-12.0756 -2.6273,-21.9299 -2.5953,-7.744 -2.5779,-7.1047 -0.7689,-28.2624 0.5132,-6.0036 0.1849,-9.7739 -1.5239,-17.5 -4.3512,-19.6728 -6.6973,-24.5744 -21.8047,-45.5566 -1.2508,-1.7372 -3.5478,-3.7753 -5.1046,-4.5293 -3.5903,-1.7388 -8.104,-10.6792 -6.3015,-12.4817 1.9739,-1.974 1.3993,-3.3473 -4.3198,-10.3246 -3.025,-3.6904 -5.5,-7.043 -5.5,-7.4501 0,-1.0862 -12.8332,-13.9421 -17.9374,-17.9692 -7.1636,-5.6519 -15.34307,-10.1962 -17.38945,-9.6611 -2.60758,0.6819 -5.71089,-0.6539 -11.13132,-4.7914 -2.54201,-1.9403 -6.06634,-4.2172 -7.83185,-5.0597 -1.7655,-0.8424 -3.98191,-2.8893 -4.92536,-4.5486 -1.05876,-1.8621 -3.4875,-3.7765 -6.34498,-5.0013 -2.85084,-1.2221 -4.69781,-2.8337 -5.17645,-4.0757 -0.71594,-1.8577 -8.09791,-4.869 -11.89442,-5.8985 -1.20523,-0.3268 -3.31852,-1.3764 -6.54076,-1.969 -4.79856,-0.8825 -7.01314,-1.5652 -9.57053,2.0361 -0.69332,0.9762 -2.03244,1.543 -3.02968,1.2822 -2.44281,-0.6388 -7.22782,1.2995 -7.22782,2.9278 0,2.0346 -17.517,1.298 -21.61488,-0.9089 -4.24326,-2.2851 -6.84093,-1.2335 -5.91417,2.3943 0.38465,1.5056 0.67509,4.0268 0.64544,5.6025 -0.0315,1.675 0.76033,3.5441 1.90637,4.5 2.15854,1.8004 3.03035,5.35 1.50677,6.135 -0.53375,0.275 -1.43388,-0.4 -2.00027,-1.5 -1.97535,-3.8363 -2.67543,-4.5277 -3.84836,-3.8004 -0.64949,0.4027 -4.02134,0.8436 -7.493,0.9797 -5.07768,0.199 -6.90164,0.7435 -9.32672,2.7841 -1.65805,1.3951 -3.63945,2.5366 -4.4031,2.5366 -0.76366,0 -2.92604,1.35 -4.80529,3 -3.87858,3.4055 -4.88637,3.6284 -6.67253,1.4762 -2.17704,-2.6232 0.0615,-5.8592 4.09696,-5.9225 1.88253,-0.029 3.42279,-0.5157 3.42279,-1.0804 0,-0.5647 -1.88264,-2.7276 -4.18364,-4.8064 -3.98267,-3.5981 -4.36698,-3.7298 -8,-2.74 -2.099,0.5718 -7.64136,3.5531 -12.31636,6.625 -4.675002,3.0719 -9.850002,5.8444 -11.500002,6.161 -4.71239,0.9045 -10.01079,3.917 -12.87421,7.32 -3.3161,3.941 -3.35547,5.3671 -0.12579,4.5565 2.90698,-0.7296 3.03593,-0.1163 1,4.7564 -0.825,1.9745 -1.5,4.0544 -1.5,4.6221 0,2.0989 2.92982,0.9394 5.01074,-1.983 1.18082,-1.6583 3.4013,-3.6637 4.93441,-4.4565 1.78002,-0.9205 3.00512,-2.5297 3.38968,-4.4525 0.56793,-2.8397 1.65427,-3.8022 10.78458,-9.5555 4.741102,-2.9874 8.127312,-4.607 8.614292,-4.12 0.30131,0.3013 -2.25128,3.2446 -5.67243,6.5406 -3.421142,3.296 -5.932932,6.4577 -5.581752,7.0259 0.35118,0.5682 2.18696,1.0331 4.079502,1.0331 2.70949,0 3.44098,0.4024 3.44098,1.893 0,2.0581 -1.85105,3.107 -5.483012,3.107 -1.59078,0 -2.96818,1.0996 -4.38449,3.5 -1.48728,2.5208 -2.76677,3.5 -4.57309,3.5 -1.78318,0 -2.96284,0.8795 -4.08163,3.043 -1.95167,3.7741 -4.67207,4.8597 -11.03119,4.402 -2.72062,-0.1958 -5.95909,-0.376 -7.19659,-0.4005 -1.2375,-0.024 -2.25,-0.6646 -2.25,-1.4225 0,-0.7579 1.0125,-2.065 2.25,-2.9047 1.85148,-1.2562 2.02068,-1.7639 0.95531,-2.8666 -1.07469,-1.1124 -1.83938,-0.7205 -4.5,2.3061 -2.33014,2.6506 -4.27182,3.7993 -7.111414,4.2071 -2.14835,0.3086 -5.07335,1.6562 -6.5,2.9948 -3.72928,3.4991 -15.762709,8.8139 -20.507899,9.0578 -3.91827,0.2014 -4.07511,0.3439 -4.75379,4.3195 -0.85597,5.0141 -2.71282,8.5188 -7.292331,13.764 l -3.49236,4 -5.4924401,-2.948 c -3.02085,-1.6214 -5.67099,-2.7464 -5.88921,-2.5 -0.21823,0.2464 -1.65074,2.473 -3.18337996,4.948 -1.53263004,2.475 -3.80504004,5.4557 -5.04979004,6.6237 -4.01628,3.7688 -6.3523099,9.5568 -5.7299199,14.1971 0.5506,4.105 0.63068,4.1792 4.5070999,4.1792 3.60786,0 4.62483,-0.6865 11.85036,-8 4.3471,-4.4 8.6747801,-8 9.6170701,-8 0.94229,0 3.00543,-1.2375 4.584771,-2.75 2.28261,-2.186 3.9345,-2.7937 8.05471,-2.963 2.85077,-0.1172 6.53321,-0.3422 8.18321,-0.5 l 3,-0.287 -0.3389,6.5676 c -0.30295,5.8709 -0.06426,6.8941 2.249999,9.6444 1.42389,1.6922 2.5889,3.7993 2.5889,4.6824 0,0.9389 0.8304,1.6056 2,1.6056 1.1,0 2,-0.1474 2,-0.3276 0,-0.1802 -1.125,-3.0962 -2.5,-6.4801 -3.29441,-8.1076 -3.26835,-13.1257 0.08889,-17.1156 3.90509,-4.6409 5.03665,-3.9896 5.71644,3.2901 0.4487,4.805 1.44437,7.7776 4.05876,12.1176 3.40165,5.6469 3.4381,5.8248 2.01812,9.8495 -1.58166,4.4829 -1.08507,8.8379 1.22653,10.7564 0.99587,0.8265 1.27603,2.1579 0.85626,4.0691 -0.79072,3.6001 1.766624,3.943 3.998874,0.5361 1.23365,-1.8828 1.29412,-2.8764 0.33042,-5.4295 -1.9266,-5.1042 -0.0022,-8.0135 5.3495,-8.0874 6.19972,-0.086 6.85621,0.8597 6.85621,9.8724 0,5.7769 0.4102,8.2164 1.57798,9.3841 2.60879,2.6088 5.37735,3.7139 7.56504,3.0195 1.22642,-0.3892 3.41491,0.07 5.37976,1.1276 2.86495,1.5429 3.86285,1.6189 7.38882,0.5624 10.169562,-3.0468 11.677372,5.6177 3.725522,21.4086 -4.008462,7.96 -5.377482,8.7995 -12.831492,7.8686 -3.4681,-0.4332 -8.46374,-0.6813 -11.10143,-0.5514 -5.33869,0.2629 -8.45784,-1.2682 -17.493114,-8.5865 -2.90891,-2.3561 -6.29628,-4.2839 -7.5275,-4.2839 -3.53138,0 -6.68359,2.7622 -6.68359,5.8567 0,5.2961 -4.46372,6.8348 -8.297749,2.8604 -1.21124,-1.2555 -3.43396,-3.0621 -4.93939,-4.0146 -1.50542,-0.9524 -3.67095,-3.5622 -4.81229,-5.7994 -1.14133,-2.2372 -3.37021,-4.8109 -4.95307,-5.7193 -1.58286,-0.9084 -3.528981,-3.3091 -4.324721,-5.3349 -1.35769,-3.4563 -1.3017,-3.9192 0.909,-7.516 3.002541,-4.8851 3.213291,-10.837 0.436331,-12.3232 -1.090041,-0.5834 -3.677541,-1.0064 -5.750001,-0.9401 -2.07246,0.066 -5.9234901,-0.4125 -8.5578501,-1.064 -3.30664,-0.8177 -5.17463996,-0.8651 -6.03277,-0.1529 -3.23662,2.6862 -6.41105,3.038 -10.0093699,1.1094 l -3.55303,-1.9043 -5.16991,3.4791 c -5.82709,3.9213 -7.69353,6.0397 -10.92034,12.394 -2.30392,4.537 -5.6027,7.9766 -7.70675,8.0358 -1.76858,0.05 -6.76115,7.4047 -10.88041,16.0287 -0.91827,1.9225 -2.28091,7.9975 -3.02809,13.5 -0.74718,5.5025 -2.210357,13.1203 -2.3149,17.0046 -0.449746,16.7105 2.267313,37.0861 9.19604,52.3382 3.85806,8.4927 4.52186,9.6202 9.2849,12.667 2.86207,1.8309 5.50496,3.8162 5.87309,4.4118 0.36812,0.5957 2.50807,1.083 4.75544,1.083 5.69166,0 11.64921,3.9919 15.05121,10.0852 2.0388499,3.6517 3.9429299,5.4883 7.6237099,7.3535 6.12073,3.1017 9.17306,8.6963 9.54232,17.4905 0.13725,3.2684 0.88608,6.8404 1.66407,7.9376 0.77799,1.0973 4.7895301,6.3461 8.9145301,11.6642 11.621791,14.983 20.000001,27.5178 20.000001,29.9225 0,5.1292 11.240759,14.3909 29.035233,23.9234 5.99985,3.2141 12.53494,5.6086 22,8.0607 15.084362,3.908 17.496152,4.1739 19.518342,2.1517 z m 46.4917,-239.0347 c -0.76234,-0.9186 -2.88439,-2.2962 -4.71567,-3.0613 -3.72472,-1.5563 -4.09671,-3.452 -2.25,-11.4664 0.80507,-3.4938 0.74001,-4.6979 -0.29719,-5.5 -3.43088,-2.6532 -8.78242,-10.4656 -8.78242,-12.8209 0,-1.4234 -0.45,-2.8661 -1,-3.206 -2.33005,-1.44 -0.72695,-5.0203 4.49408,-10.0369 4.26272,-4.0958 5.99968,-5.1559 7.75,-4.73 5.88115,1.4311 8.09926,8.4255 3.25592,10.2669 -1.375,0.5228 -2.48213,1.5242 -2.46029,2.2253 0.0582,1.8686 8.19011,10.3955 10.66231,11.1801 1.16548,0.3699 2.90196,1.8675 3.85883,3.3278 1.68361,2.5695 1.67035,2.7013 -0.41054,4.083 -2.53059,1.6803 -2.722,3.0423 -0.64274,4.5736 1.88123,1.3854 5.04409,13.4586 3.84099,14.6617 -0.48152,0.4815 -3.35988,1.1674 -6.39635,1.5243 -4.47768,0.5263 -5.78277,0.3333 -6.90693,-1.0212 z m -41.83872,-21.2889 c -2.36139,-0.2117 -5.91169,-1.4831 -7.88954,-2.8253 -4.101,-2.783 -6.177632,-2.9432 -11.817012,-0.9115 -5.94779,2.1427 -7.7653,1.8243 -11.48322,-2.0116 l -3.37556,-3.4827 3.27417,-6.5157 c 1.94439,-3.8694 5.12324,-8.1434 7.82689,-10.5232 l 4.55272,-4.0075 3.1025,1.8181 c 1.906,1.1169 3.1025,2.627 3.1025,3.9156 0,3.5824 1.319052,3.6469 2.786512,0.1362 1.77335,-4.2425 3.27971,-5.429 7.96349,-6.273 4.32395,-0.7791 4.81548,0.4538 2.19847,5.5146 -1.83976,3.5577 -1.24596,6.1151 1.8181,7.8304 2.53767,1.4206 9.73343,10.8873 9.73343,12.8053 0,1.937 -3.78353,5.2862 -5.75,5.0899 -0.9625,-0.096 -3.68205,-0.3479 -6.04345,-0.5596 z m 32.18854,260.85 c 2.65143,-1.0405 14.58497,-15.2386 14.5959,-17.3657 0.0125,-2.4361 -1.315,-2.1897 -5.02609,0.933 -1.7537,1.4756 -5.27572,3.2101 -7.82672,3.8544 -4.04232,1.021 -4.68059,1.5435 -4.96827,4.0671 -0.18154,1.5925 -1.24118,3.8747 -2.35477,5.0715 -1.11358,1.1968 -1.72598,2.6593 -1.3609,3.25 0.74917,1.2122 4.10192,1.3038 6.94085,0.1897 z m 143.20592,-116.6623 c 0.5733,-2.2841 -0.0402,-4.437 -0.9603,-3.3701 -1.0142,1.176 -1.558,5.9167 -0.6788,5.9167 0.55,0 1.2876,-1.1459 1.6391,-2.5466 z M 41.716664,1627.6149 c 2.25231,-1.4758 6.41766,-8.361 6.41766,-10.6083 0,-0.4832 -2.7,1.2428 -6,3.8354 -5.669989,4.4546 -6.876789,6.2087 -5.333329,7.7521 1.03526,1.0353 2.193199,0.8046 4.915669,-0.9792 z m -1.58234,-10.8541 c 1.73334,-1.845 1.95566,-2.5 0.84863,-2.5 -0.825,0 -2.556879,1.125 -3.848629,2.5 -1.73334,1.8451 -1.95566,2.5 -0.84863,2.5 0.825,0 2.556879,-1.125 3.848629,-2.5 z m 15.55793,-10.2754 c -0.68187,-0.6819 -6.55793,5.3923 -6.55793,6.779 0,0.4029 1.62915,-0.8039 3.62033,-2.6818 1.99118,-1.878 3.3131,-3.7217 2.9376,-4.0972 z m 20.442074,-22.2246 c 0,-0.55 -0.45,-1 -1,-1 -0.55,0 -1,0.45 -1,1 0,0.55 0.45,1 1,1 0.55,0 1,-0.45 1,-1 z m 71.999992,-2.5 c -0.70675,-0.8516 -1.51,-1.3233 -1.785,-1.0483 -0.275,0.275 0.0782,1.1967 0.785,2.0483 0.70675,0.8516 1.51,1.3233 1.785,1.0483 0.275,-0.275 -0.0782,-1.1967 -0.785,-2.0483 z m -82.499992,-3.6979 c 4.12766,-0.9645 11.1401,-2.0069 25,-3.7163 4.4,-0.5427 10.025002,-1.6393 12.500002,-2.437 2.475,-0.7977 9.7875,-2.693 16.25,-4.2119 6.4625,-1.5188 11.74999,-3.0874 11.74999,-3.4857 0,-1.5373 -6.76833,-1.6613 -12.46055,-0.2283 -3.27831,0.8254 -9.57831,2.0817 -14,2.7919 -24.854212,3.992 -35.670602,6.6915 -44.039442,10.9912 -5.130544,2.636 -5.037054,2.6416 5,0.2961 z"
+             style="fill:url(#radialGradient89649);fill-opacity:1" />
+          <path
+             sodipodi:type="arc"
+             style="fill:url(#radialGradient89651);fill-opacity:1;fill-rule:evenodd;stroke:none"
+             id="path108986"
+             sodipodi:cx="200.44412"
+             sodipodi:cy="1737.5405"
+             sodipodi:rx="199.13403"
+             sodipodi:ry="199.13403"
+             d="m 399.57816,1737.5405 a 199.13403,199.13403 0 1 1 -398.2680709,0 199.13403,199.13403 0 1 1 398.2680709,0 z"
+             transform="translate(-57.435743,20.958068)" />
+          <path
+             transform="translate(-57.435743,20.958068)"
+             d="m 399.57816,1737.5405 a 199.13403,199.13403 0 1 1 -398.2680709,0 199.13403,199.13403 0 1 1 398.2680709,0 z"
+             sodipodi:ry="199.13403"
+             sodipodi:rx="199.13403"
+             sodipodi:cy="1737.5405"
+             sodipodi:cx="200.44412"
+             id="path108988"
+             style="fill:url(#radialGradient89653);fill-opacity:1;fill-rule:evenodd;stroke:none"
+             sodipodi:type="arc" />
+          <path
+             transform="matrix(-0.957313,-0.2890533,0.2890533,-0.957313,-163.64008,3479.8078)"
+             style="fill:url(#radialGradient89655);fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 399.57816,1737.5405 c 0,109.922 -89.21205,199.1341 -199.13404,199.1341 -109.921984,0 -199.1340309,-89.2121 -199.1340309,-199.1341 0,-109.922 89.2120469,-199.134 199.1340309,-199.134 109.92199,0 199.13404,89.212 199.13404,199.134 z"
+             id="path108990" />
+          <path
+             transform="matrix(0.9990162,-0.04434574,0.04434574,0.9990162,-71.66061,4.3077244)"
+             sodipodi:nodetypes="ccc"
+             id="path108992"
+             d="m 92.750756,1567.6849 c 94.430094,-18.2974 -110.062425,25.1793 -139.481349,163.0909 -16.895004,-90.4919 85.243172,-139.8951 139.481349,-163.0909 z"
+             style="opacity:0.56060606;fill:#ffffff;fill-rule:evenodd;stroke:none;filter:url(#filter3197)" />
+        </g>
+      </g>
+      <g
+         transform="translate(-628.98887,416.46925)"
+         id="g3378">
+        <g
+           transform="translate(775.01164,364.10273)"
+           id="g117471">
+          <g
+             transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)"
+             inkscape:label="Calque 1"
+             id="g117473">
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path117475" />
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path117477" />
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path117479" />
+            <g
+               id="g117481">
+              <path
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 2,11 22,1 42,11 22,21 2,11 z"
+                 id="path117483" />
+              <path
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 2,11 2,41 22,51 22,21 2,11 z"
+                 id="path117485" />
+              <path
+                 style="fill:url(#linearGradient89657);fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 22,51 42,41 42,11 22,21 22,51 z"
+                 id="path117487"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117489"
+                 d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117491"
+                 d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117493"
+                 d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117495"
+                 d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117497"
+                 d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117499"
+                 d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117501"
+                 d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:url(#radialGradient89659);fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                 id="path117503"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 id="path117505"
+                 d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117507"
+                 d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117509"
+                 d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117511"
+                 d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117513"
+                 d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117515"
+                 d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            </g>
+          </g>
+        </g>
+        <g
+           transform="matrix(0.6608344,-0.3304172,0,0.9440491,868.88814,-184.59906)"
+           id="g109132">
+          <path
+             transform="matrix(1.896061,0,0,1.896061,-382.19925,74.95322)"
+             d="m 339.53775,378.05789 a 13.966679,13.966679 0 1 1 -27.93335,0 13.966679,13.966679 0 1 1 27.93335,0 z"
+             sodipodi:ry="13.966679"
+             sodipodi:rx="13.966679"
+             sodipodi:cy="378.05789"
+             sodipodi:cx="325.57108"
+             id="path109134"
+             style="fill:#b4281c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.625;marker:none;visibility:visible;display:inline;overflow:visible"
+             sodipodi:type="arc" />
+          <path
+             transform="matrix(1.731185,0,0,1.731185,-328.52075,137.28542)"
+             d="m 339.53775,378.05789 a 13.966679,13.966679 0 1 1 -27.93335,0 13.966679,13.966679 0 1 1 27.93335,0 z"
+             sodipodi:ry="13.966679"
+             sodipodi:rx="13.966679"
+             sodipodi:cy="378.05789"
+             sodipodi:cx="325.57108"
+             id="path109136"
+             style="fill:url(#linearGradient89661);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.32492188;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
+             sodipodi:type="arc" />
+          <path
+             id="path109138"
+             d="m 221.63805,783.36141 c -0.22285,0.22282 -0.18093,0.57323 0.0419,0.79604 l 7.58343,7.58343 -7.62531,7.62533 c -0.22285,0.22283 -0.22285,0.61512 0,0.83795 l 5.02769,5.02769 c 0.22282,0.22284 0.57323,0.18092 0.79604,-0.0419 l 7.62533,-7.62533 7.62533,7.62533 c 0.22283,0.22283 0.57322,0.26469 0.79604,0.0419 l 5.02769,-5.02769 c 0.22285,-0.22283 0.22285,-0.61512 0,-0.83795 l -7.62531,-7.62533 7.62531,-7.62533 c 0.22285,-0.22283 0.22281,-0.53132 0,-0.75414 l -5.02769,-5.02769 c -0.22282,-0.22285 -0.57323,-0.26475 -0.79604,-0.0419 l -7.62533,7.62534 -7.58343,-7.58343 c -0.22282,-0.22285 -0.61512,-0.22285 -0.83794,0 l -5.02769,5.02769 z"
+             style="fill:url(#linearGradient89663);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.61607176;marker:none;visibility:visible;display:inline;overflow:visible" />
+          <path
+             id="path109140"
+             d="m 235.08711,767.608 c -13.34675,0 -24.1748,10.82803 -24.17478,24.17478 0,6.41257 2.61694,12.14291 6.69547,16.47203 2.11885,-17.50049 16.88952,-31.10725 34.95862,-31.10725 0.48721,0 0.93961,0.099 1.42205,0.1185 -4.42143,-5.75069 -11.09207,-9.65806 -18.90136,-9.65806 z"
+             style="fill:url(#linearGradient89665);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.61607176;marker:none;visibility:visible;display:inline;overflow:visible" />
+        </g>
+      </g>
+      <g
+         transform="translate(-1073.6433,295.56044)"
+         id="g3346">
+        <g
+           transform="translate(897.38434,-46.491083)"
+           id="g117421">
+          <g
+             transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)"
+             inkscape:label="Calque 1"
+             id="g117423">
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path117425" />
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path117427" />
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path117429" />
+            <g
+               id="g117431">
+              <path
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 2,11 22,1 42,11 22,21 2,11 z"
+                 id="path117433" />
+              <path
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 2,11 2,41 22,51 22,21 2,11 z"
+                 id="path117435" />
+              <path
+                 style="fill:url(#linearGradient89667);fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 22,51 42,41 42,11 22,21 22,51 z"
+                 id="path117437"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117439"
+                 d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117441"
+                 d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117443"
+                 d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117445"
+                 d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117447"
+                 d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117449"
+                 d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117451"
+                 d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:url(#radialGradient89669);fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                 id="path117453"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 id="path117455"
+                 d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117457"
+                 d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117459"
+                 d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117461"
+                 d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117463"
+                 d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117465"
+                 d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            </g>
+          </g>
+        </g>
+        <g
+           style="fill:#00ff00;fill-opacity:1"
+           transform="matrix(0.2766711,-0.1383356,0,0.2555605,1099.9201,-86.84348)"
+           id="g109152"
+           inkscape:label="Calque 1">
+          <path
+             id="path109154"
+             d="m 174.71965,639.58466 c -29.19719,0 -52.90625,13.34326 -52.90625,29.78125 l 0,119.125 c 0,16.43799 23.70907,29.78125 52.90625,29.78125 29.19719,-10e-6 52.90625,-13.34324 52.90625,-29.78125 l 0,-119.125 -0.0312,0 c 0,-16.43799 -23.67781,-29.78125 -52.875,-29.78125 z"
+             style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+          <path
+             transform="matrix(1.6638767,0,0,1.6225174,-131.61326,-463.20234)"
+             d="m 214.80157,698.03149 a 30.68594,17.716536 0 1 1 -61.37188,0 30.68594,17.716536 0 1 1 61.37188,0 z"
+             sodipodi:ry="17.716536"
+             sodipodi:rx="30.68594"
+             sodipodi:cy="698.03149"
+             sodipodi:cx="184.11563"
+             id="path109156"
+             style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:2.93746948;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             sodipodi:type="arc" />
+        </g>
+      </g>
+      <g
+         transform="translate(23.967614,920.33811)"
+         id="g3462">
+        <g
+           id="g108629"
+           transform="translate(134.05913,35.984128)">
+          <g
+             id="g4883"
+             inkscape:label="Calque 1"
+             transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+            <path
+               id="path4885"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path4887"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path4889"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <g
+               id="g4891">
+              <path
+                 id="path4893"
+                 d="M 2,11 22,1 42,11 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path4895"
+                 d="M 2,11 2,41 22,51 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path4897"
+                 d="M 22,51 42,41 42,11 22,21 22,51 z"
+                 style="fill:url(#linearGradient89671);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                 id="path4899"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                 id="path4901" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                 id="path4903"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                 id="path4905" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                 id="path4907"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                 id="path4909" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                 id="path4911" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path4913"
+                 d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                 style="fill:url(#radialGradient89673);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                 id="path4915" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                 id="path4917" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                 id="path4919"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                 id="path4921" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                 id="path4923" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                 id="path4925" />
+            </g>
+          </g>
+        </g>
+        <g
+           transform="translate(15.21711,1.7214477)"
+           id="g3159">
+          <rect
+             transform="matrix(0.8944272,-0.4472136,0,1,0,0)"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.75346398;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+             id="rect109160"
+             width="36.695312"
+             height="35.799278"
+             x="395.43951"
+             y="330.15076"
+             ry="8.8706169" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             id="path109162"
+             d="m 372.22665,145.64754 -0.13558,32.8959 -2.71818,1.81754 0,-33.0536 2.85376,-1.65984 z"
+             style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             id="path109164"
+             d="m 385.06359,155.06606 0.16889,4.18009 -30.14532,15.26938 0.34578,-4.66405 29.63065,-14.78542 z"
+             style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             sodipodi:nodetypes="cccccccccccccccccccccc"
+             id="path109166"
+             d="m 373.89476,146.06666 0.18935,0.85117 2.46154,10.52408 8.33137,-6.09926 0.22711,2.41718 -8.55848,6.65757 -0.94674,0.61318 -0.37871,-1.43183 -1.70413,-7.38993 -2.65089,23.5191 -0.18936,2.39483 -1.32544,-2.17115 -5.68048,-9.30487 -9.13434,3.64409 0.25777,-2.59705 8.68723,-3.52121 0.56805,-0.42199 0.56804,0.93049 4.73373,7.75407 2.84024,-25.91394 0,-0.541 1.70414,0.0865 z"
+             style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        </g>
+      </g>
+      <g
+         transform="translate(-1086.3477,882.01165)"
+         id="g3408">
+        <g
+           id="g117789"
+           transform="translate(910.08874,75.719118)">
+          <g
+             id="g117791"
+             inkscape:label="Calque 1"
+             transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+            <path
+               id="path117793"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path117795"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path117797"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <g
+               id="g117799">
+              <path
+                 id="path117801"
+                 d="M 2,11 22,1 42,11 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117803"
+                 d="M 2,11 2,41 22,51 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117805"
+                 d="M 22,51 42,41 42,11 22,21 22,51 z"
+                 style="fill:url(#linearGradient89675);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                 id="path117807"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                 id="path117809" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                 id="path117811"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                 id="path117813" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                 id="path117815"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                 id="path117817" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                 id="path117819" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117821"
+                 d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                 style="fill:url(#radialGradient89677);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                 id="path117823" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                 id="path117825" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                 id="path117827"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                 id="path117829" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                 id="path117831" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                 id="path117833" />
+            </g>
+          </g>
+        </g>
+        <path
+           id="path117855"
+           d="m 1162.9818,171.48314 c -0.6741,0.33705 -1.3556,0.72418 -2.0094,1.15981 l -0.1629,0.81846 0,0.34911 0.3259,3.40575 -3.4213,3.02948 -0.9775,-2.84717 -0.1086,-0.25601 -0.3801,-0.31421 c -1.2465,1.38745 -2.403,2.96448 -3.4756,4.64702 l 0.1086,0.64391 0.1086,0.25601 1.5477,2.05781 -2.5252,4.87005 -1.9821,-1.21995 -0.2173,-0.0465 -0.4887,0.0892 c -0.8024,1.93355 -1.5015,3.93523 -2.0365,5.98332 l 0.353,0.36657 0.2172,0.0465 2.3352,0.22887 -0.9232,5.34909 -2.4981,0.78357 -0.2444,0.12218 -0.5159,0.49068 c -0.076,0.97201 -0.1086,1.96181 -0.1086,2.92475 0,0.96297 0.033,1.8815 0.1086,2.77735 l 0.5159,-0.0252 0.2444,-0.12218 2.4981,-1.71451 0.9232,4.46471 -2.3352,2.52521 -0.2172,0.30256 -0.3258,0.70598 c 0.5378,1.51081 1.2313,2.81882 2.0364,3.94685 l 0.4616,-0.38596 0.2173,-0.30256 1.9821,-3.20209 2.5252,2.34484 -1.5477,3.64429 -0.1086,0.36463 -0.1086,0.75251 c 1.0633,0.60459 2.2142,1.00228 3.4484,1.14625 l 0.4073,-0.70792 0.1086,-0.36462 0.9775,-3.78588 3.4213,-0.39177 -0.3259,3.69278 0,0.38789 0.1629,0.61677 c 0.6538,-0.21809 1.3353,-0.51246 2.0094,-0.8495 0.674,-0.33703 1.3284,-0.7106 1.9821,-1.14624 l 0.1629,-0.77967 0,-0.38789 -0.3258,-3.36696 3.4484,-3.04306 0.9504,2.82195 0.1357,0.24244 0.3802,0.3142 c 1.246,-1.39144 2.4039,-2.96071 3.4755,-4.64701 l -0.1086,-0.60513 -0.1358,-0.24243 -1.5477,-2.09659 2.5253,-4.87005 2.0093,1.20636 0.2172,0.0853 0.4616,-0.0756 c 0.8053,-1.93359 1.4986,-3.93425 2.0365,-5.98332 l -0.353,-0.36656 -0.2173,-0.0853 -2.308,-0.20365 0.9232,-5.3879 2.471,-0.76998 0.2715,-0.13576 0.4887,-0.47711 c 0.076,-0.97198 0.1086,-1.92301 0.1086,-2.88597 0,-0.96294 -0.032,-1.92028 -0.1086,-2.81613 l -0.4887,0.0117 -0.2715,0.13576 -2.471,1.70092 -0.9232,-4.4259 2.308,-2.55043 0.2173,-0.26376 0.353,-0.75835 c -0.5328,-1.49679 -1.214,-2.80035 -2.0094,-3.92164 l -0.4887,0.39953 -0.2172,0.26376 -2.0093,3.21568 -2.5253,-2.34484 1.5477,-3.60551 0.1358,-0.37821 0.1086,-0.71372 c -1.0714,-0.61452 -2.2297,-1.02602 -3.4755,-1.17145 l -0.3802,0.65555 -0.1357,0.37819 -0.9504,3.8111 -3.4484,0.40535 0.3258,-3.73157 0,-0.34911 -0.1629,-0.65556 c -0.6537,0.21813 -1.3081,0.4989 -1.9821,0.83593 z m 0,11.13266 c 5.1162,-2.5581 9.2591,1.28891 9.2591,8.59776 0,7.30887 -4.1429,15.33755 -9.2591,17.89564 -5.1162,2.55808 -9.2863,-1.31411 -9.2863,-8.62295 0,-7.30884 4.1701,-15.31235 9.2863,-17.87045 z"
+           style="fill:url(#linearGradient89679);fill-opacity:1;stroke:#000000;stroke-width:1.03852296" />
+      </g>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         x="129.39964"
+         y="178.27731"
+         id="text19155"><tspan
+           style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           sodipodi:role="line"
+           x="129.39964"
+           y="178.27731"
+           id="tspan19157">WEB SERVER</tspan><tspan
+           style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           id="tspan19159"
+           sodipodi:role="line"
+           x="129.39964"
+           y="195.77731">IP:  192.168.12.10</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         x="135.7863"
+         y="337.26468"
+         id="text19161"><tspan
+           style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           sodipodi:role="line"
+           x="135.7863"
+           y="337.26468"
+           id="tspan19163">DB SERVER</tspan><tspan
+           style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           id="tspan19165"
+           sodipodi:role="line"
+           x="135.7863"
+           y="354.76468">IP:  192.168.12.10</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         x="133.80254"
+         y="510.69449"
+         id="text19167"><tspan
+           style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           sodipodi:role="line"
+           x="133.80254"
+           y="510.69449"
+           id="tspan19169">MAIL SERVER</tspan><tspan
+           style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           id="tspan19171"
+           sodipodi:role="line"
+           x="133.80254"
+           y="528.19446">IP:  192.168.12.10</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         x="139.84511"
+         y="689.52734"
+         id="text19173"><tspan
+           style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           sodipodi:role="line"
+           x="139.84511"
+           y="689.52734"
+           id="tspan19175">FTP SERVER</tspan><tspan
+           style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           id="tspan19177"
+           sodipodi:role="line"
+           x="139.84511"
+           y="707.02734">IP:  192.168.12.10</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         x="132.80513"
+         y="864.51697"
+         id="text19179"><tspan
+           style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           sodipodi:role="line"
+           x="132.80513"
+           y="864.51697"
+           id="tspan19181">DOC SERVER (storage)</tspan><tspan
+           style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           id="tspan19183"
+           sodipodi:role="line"
+           x="132.80513"
+           y="882.01697">IP:  192.168.12.10</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         x="136.19527"
+         y="1045.7178"
+         id="text19185"><tspan
+           style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           sodipodi:role="line"
+           x="136.19527"
+           y="1045.7178"
+           id="tspan19187">VIRTUAL SERVER</tspan><tspan
+           style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           id="tspan19189"
+           sodipodi:role="line"
+           x="136.19527"
+           y="1063.2178">IP:  192.168.12.10</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         x="460.03769"
+         y="1054.0387"
+         id="text19191"><tspan
+           style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           sodipodi:role="line"
+           x="460.03769"
+           y="1054.0387"
+           id="tspan19193">MONITOR SERVER</tspan><tspan
+           style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           id="tspan19195"
+           sodipodi:role="line"
+           x="460.03769"
+           y="1071.5387">IP:  192.168.12.10</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         x="480.84525"
+         y="870.1098"
+         id="text19209"><tspan
+           style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           sodipodi:role="line"
+           x="480.84525"
+           y="870.1098"
+           id="tspan19211">SPARE</tspan><tspan
+           style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           id="tspan19213"
+           sodipodi:role="line"
+           x="480.84525"
+           y="887.6098">IP:  192.168.12.10</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         x="477.48007"
+         y="730.09216"
+         id="text19215"><tspan
+           style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           sodipodi:role="line"
+           x="477.48007"
+           y="730.09216"
+           id="tspan19217">APP SERVER</tspan><tspan
+           style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           id="tspan19219"
+           sodipodi:role="line"
+           x="477.48007"
+           y="747.59216">IP:  192.168.12.10</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         x="451.39609"
+         y="530.78418"
+         id="text19221"><tspan
+           style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           sodipodi:role="line"
+           x="451.39609"
+           y="530.78418"
+           id="tspan19223">DW SERVER</tspan><tspan
+           style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           id="tspan19225"
+           sodipodi:role="line"
+           x="451.39609"
+           y="548.28418">IP:  192.168.12.10</tspan></text>
+      <text
+         xml:space="preserve"
+         style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         x="451.39609"
+         y="362.48529"
+         id="text19227"><tspan
+           style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           sodipodi:role="line"
+           x="451.39609"
+           y="362.48529"
+           id="tspan19229">SMS OPERATORE</tspan><tspan
+           style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold"
+           id="tspan19231"
+           sodipodi:role="line"
+           x="451.39609"
+           y="379.98529">IP:  192.168.12.10</tspan></text>
+      <text
+         id="text19091"
+         y="201.98724"
+         x="451.39609"
+         style="font-size:14px;font-style:normal;font-weight:normal;text-align:end;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           id="tspan19093"
+           y="201.98724"
+           x="451.39609"
+           sodipodi:role="line"
+           style="font-weight:bold;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold">INFO CLIENTE</tspan><tspan
+           y="219.48724"
+           x="451.39609"
+           sodipodi:role="line"
+           id="tspan19095"
+           style="font-weight:normal;text-align:start;text-anchor:start;-inkscape-font-specification:Bitstream Vera Sans Bold">IP:  192.168.12.10</tspan></text>
+      <g
+         transform="translate(-97.747788,289.40683)"
+         id="g6894">
+        <g
+           transform="translate(-78.51118,124.89176)"
+           id="g7145">
+          <g
+             transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)"
+             inkscape:label="Calque 1"
+             id="g3410">
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path3412" />
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path3414" />
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path3416" />
+            <g
+               id="g3418">
+              <path
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 2,11 22,1 42,11 22,21 2,11 z"
+                 id="path3420" />
+              <path
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 2,11 2,41 22,51 22,21 2,11 z"
+                 id="path3422" />
+              <path
+                 style="fill:url(#linearGradient89681);fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 22,51 42,41 42,11 22,21 22,51 z"
+                 id="path3424"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path3426"
+                 d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path3428"
+                 d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path3430"
+                 d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path3432"
+                 d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path3434"
+                 d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path3436"
+                 d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path3438"
+                 d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:url(#radialGradient89683);fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                 id="path3440"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 id="path3442"
+                 d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path3444"
+                 d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path3446"
+                 d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path3448"
+                 d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path3450"
+                 d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path3452"
+                 d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            </g>
+          </g>
+        </g>
+        <g
+           id="g108994"
+           transform="matrix(0.2668516,-0.1334258,0,0.3812166,147.18815,234.03981)">
+          <g
+             transform="matrix(0.810875,0,0,0.810875,5.90968,-403.3576)"
+             id="g108996">
+            <rect
+               y="560.36218"
+               x="30"
+               width="158"
+               style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3.75;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+               ry="3"
+               rx="3"
+               id="rect108998"
+               height="100" />
+            <path
+               style="fill:none;stroke:#000000;stroke-width:3.75;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               id="path109000"
+               d="m 32,658.36218 76,-56 80,58" />
+            <path
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.75;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               id="path109002"
+               d="M 31.935135,561.05047 107.7045,621.01804 186,560.39461 31.935135,561.05047 z" />
+          </g>
+        </g>
+      </g>
+      <g
+         transform="translate(461.68849,275.96747)"
+         id="g6826">
+        <g
+           id="g3466"
+           transform="translate(-315.66572,-16.46302)">
+          <g
+             id="g3468"
+             inkscape:label="Calque 1"
+             transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+            <path
+               id="path3470"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path3472"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path3474"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <g
+               id="g3476">
+              <path
+                 id="path3478"
+                 d="M 2,11 22,1 42,11 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path3480"
+                 d="M 2,11 2,41 22,51 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path3482"
+                 d="M 22,51 42,41 42,11 22,21 22,51 z"
+                 style="fill:url(#linearGradient89685);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                 id="path3484"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                 id="path3486" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                 id="path3488"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                 id="path3490" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                 id="path3492"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                 id="path3494" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                 id="path3496" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path3498"
+                 d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                 style="fill:url(#radialGradient89687);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                 id="path3500" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                 id="path3502" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                 id="path3504"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                 id="path3506" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                 id="path3508" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                 id="path3510" />
+            </g>
+          </g>
+        </g>
+        <g
+           id="g109004"
+           v:mID="0"
+           v:index="1"
+           v:groupContext="foregroundPage"
+           transform="matrix(0.3732139,-0.1866069,0,0.5331627,-81.489401,110.20827)">
+          <title
+             id="title109006">P    gina-1</title>
+          <v:pageProperties
+             v:shadowOffsetY="-8.50394"
+             v:shadowOffsetX="8.50394"
+             v:pageScale="0.0393701"
+             v:drawingUnits="24"
+             v:drawingScale="0.0393701" />
+          <g
+             v:mID="14"
+             v:groupContext="shape"
+             transform="translate(0.24,-0.24)"
+             id="g109008">
+            <title
+               id="title109010">Hoja.14</title>
+            <path
+               id="path109012"
+               d="m 0,57.17 93.54,0 0,-56.69 -74.83,0 L 0,20.32 0,57.17 z"
+               class="st1"
+               style="fill:#ff0000;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+          </g>
+          <g
+             v:mID="2"
+             v:groupContext="group"
+             transform="translate(31.4211,-7.49015)"
+             id="g109014">
+            <title
+               id="title109016">Hoja.2</title>
+            <g
+               v:mID="1"
+               v:groupContext="shape"
+               transform="translate(0,-21.5869)"
+               id="g109018">
+              <title
+                 id="title109020">Box</title>
+              <v:userDefs>
+                <v:ud
+                   v:val="VT0(11):26"
+                   v:nameU="visVersion" />
+              </v:userDefs>
+              <rect
+                 id="rect109022"
+                 y="47.360699"
+                 x="0"
+                 width="19.6245"
+                 height="9.8122396"
+                 class="st2"
+                 style="fill:#ffff99;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+            </g>
+            <g
+               v:mID="3"
+               v:groupContext="shape"
+               transform="translate(0,-10.7935)"
+               id="g109024">
+              <title
+                 id="title109026">Box.3</title>
+              <v:userDefs>
+                <v:ud
+                   v:val="VT0(11):26"
+                   v:nameU="visVersion" />
+              </v:userDefs>
+              <rect
+                 id="rect109028"
+                 y="47.360699"
+                 x="0"
+                 width="19.6245"
+                 height="9.8122396"
+                 class="st2"
+                 style="fill:#ffff99;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+            </g>
+            <g
+               v:mID="4"
+               v:groupContext="shape"
+               transform="translate(0,-32.3804)"
+               id="g109030">
+              <title
+                 id="title109032">Hoja.4</title>
+              <path
+                 id="path109034"
+                 d="m 0,57.17 19.62,0 0,-9.81 -15.7,0 -3.92,3.43 0,6.38 z"
+                 class="st2"
+                 style="fill:#ffff99;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+            </g>
+            <g
+               v:mID="5"
+               v:groupContext="shape"
+               transform="matrix(1,0,0,-1,0,104.534)"
+               id="g109036">
+              <title
+                 id="title109038">Hoja.5</title>
+              <path
+                 id="path109040"
+                 d="m 0,57.17 19.62,0 0,-9.81 -15.7,0 -3.92,3.43 0,6.38 z"
+                 class="st2"
+                 style="fill:#ffff99;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+            </g>
+            <g
+               v:mID="6"
+               v:groupContext="shape"
+               transform="translate(20.6057,0)"
+               id="g109042">
+              <title
+                 id="title109044">Box.6</title>
+              <v:userDefs>
+                <v:ud
+                   v:val="VT0(11):26"
+                   v:nameU="visVersion" />
+              </v:userDefs>
+              <rect
+                 id="rect109046"
+                 y="14.9803"
+                 x="0"
+                 width="9.8122396"
+                 height="42.1926"
+                 class="st2"
+                 style="fill:#ffff99;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+            </g>
+            <g
+               v:mID="7"
+               v:groupContext="shape"
+               transform="matrix(-1,0,0,-1,51.0236,104.534)"
+               id="g109048">
+              <title
+                 id="title109050">Hoja.7</title>
+              <path
+                 id="path109052"
+                 d="m 0,57.17 19.62,0 0,-9.81 -15.7,0 -3.92,3.43 0,6.38 z"
+                 class="st2"
+                 style="fill:#ffff99;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+            </g>
+            <g
+               v:mID="8"
+               v:groupContext="shape"
+               transform="matrix(-1,0,0,1,51.0236,-32.3804)"
+               id="g109054">
+              <title
+                 id="title109056">Hoja.8</title>
+              <path
+                 id="path109058"
+                 d="m 0,57.17 20.61,0 0,-9.81 -16.49,0 -4.12,3.43 0,6.38 z"
+                 class="st2"
+                 style="fill:#ffff99;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+            </g>
+            <g
+               v:mID="9"
+               v:groupContext="shape"
+               transform="translate(31.3992,-10.7935)"
+               id="g109060">
+              <title
+                 id="title109062">Box.9</title>
+              <v:userDefs>
+                <v:ud
+                   v:val="VT0(11):26"
+                   v:nameU="visVersion" />
+              </v:userDefs>
+              <rect
+                 id="rect109064"
+                 y="47.360699"
+                 x="0"
+                 width="19.6245"
+                 height="9.8122396"
+                 class="st2"
+                 style="fill:#ffff99;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+            </g>
+            <g
+               v:mID="10"
+               v:groupContext="shape"
+               transform="translate(31.3992,-21.5869)"
+               id="g109066">
+              <title
+                 id="title109068">Box.10</title>
+              <v:userDefs>
+                <v:ud
+                   v:val="VT0(11):26"
+                   v:nameU="visVersion" />
+              </v:userDefs>
+              <rect
+                 id="rect109070"
+                 y="47.360699"
+                 x="0"
+                 width="19.6245"
+                 height="9.8122396"
+                 class="st2"
+                 style="fill:#ffff99;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+            </g>
+            <g
+               v:mID="11"
+               v:groupContext="shape"
+               transform="translate(24.5306,-32.3804)"
+               id="g109072">
+              <title
+                 id="title109074">Box.11</title>
+              <v:userDefs>
+                <v:ud
+                   v:val="VT0(11):26"
+                   v:nameU="visVersion" />
+              </v:userDefs>
+              <rect
+                 id="rect109076"
+                 y="47.360699"
+                 x="0"
+                 width="8.8310099"
+                 height="9.8122396"
+                 class="st3"
+                 style="fill:#ffff99;stroke:none" />
+            </g>
+            <g
+               v:mID="12"
+               v:groupContext="shape"
+               transform="translate(20.6057,-42.1926)"
+               id="g109078">
+              <title
+                 id="title109080">Hoja.12</title>
+              <path
+                 id="path109082"
+                 d="m 0,57.17 12.76,0"
+                 class="st4"
+                 style="stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+            </g>
+            <g
+               v:mID="13"
+               v:groupContext="shape"
+               transform="translate(30.4179,-32.3804)"
+               id="g109084">
+              <title
+                 id="title109086">Hoja.13</title>
+              <path
+                 id="path109088"
+                 d="m 0,57.17 20.61,0"
+                 class="st4"
+                 style="stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+            </g>
+          </g>
+        </g>
+      </g>
+      <g
+         transform="translate(-695.86116,680.88905)"
+         id="g8215">
+        <g
+           id="g117071"
+           transform="translate(519.60219,-104.51902)">
+          <g
+             id="g117073"
+             inkscape:label="Calque 1"
+             transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+            <path
+               id="path117075"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path117077"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path117079"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <g
+               id="g117081">
+              <path
+                 id="path117083"
+                 d="M 2,11 22,1 42,11 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117085"
+                 d="M 2,11 2,41 22,51 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117087"
+                 d="M 22,51 42,41 42,11 22,21 22,51 z"
+                 style="fill:url(#linearGradient89689);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                 id="path117089"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                 id="path117091" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                 id="path117093"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                 id="path117095" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                 id="path117097"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                 id="path117099" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                 id="path117101" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117103"
+                 d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                 style="fill:url(#radialGradient89691);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                 id="path117105" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                 id="path117107" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                 id="path117109"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                 id="path117111" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                 id="path117113" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                 id="path117115" />
+            </g>
+          </g>
+        </g>
+        <g
+           transform="matrix(0.2910011,-0.1455006,0,0.4157158,726.80853,-83.694828)"
+           id="g109114"
+           inkscape:label="Warstwa 1">
+          <g
+             id="g109116">
+            <path
+               style="fill:#eeeeee;fill-opacity:1;fill-rule:nonzero;stroke:#333333;stroke-width:3.51475525;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 201.29393,277.81602 0,83.33892 c 0,3.30324 -2.65929,5.96253 -5.96253,5.96253 l -70.92274,-1e-5 c -3.30324,1e-5 -5.96253,-2.65928 -5.96253,-5.96252 l 0,-104.18739 c 0,-3.30324 2.65929,-5.96253 5.96253,-5.96253 l 0,0 51.51028,0"
+               id="path109118" />
+            <path
+               style="fill:none;stroke:#333333;stroke-width:3.51475525;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 200.66629,278.44365 -19.41245,0 c -3.30325,0 -5.96254,-2.65929 -5.96254,-5.96253 l 0,-20.84846"
+               id="path109120" />
+            <rect
+               style="fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#888888;stroke-width:3.51475525;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect109122"
+               width="59.625309"
+               height="7.5316181"
+               x="130.05737"
+               y="298.91449" />
+            <rect
+               y="320.46329"
+               x="130.05737"
+               height="7.5316181"
+               width="59.625309"
+               id="rect109124"
+               style="fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#888888;stroke-width:3.51475525;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#888888;stroke-width:3.51475525;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect109126"
+               width="59.625309"
+               height="7.5316181"
+               x="129.42973"
+               y="342.01205" />
+            <rect
+               y="276.95511"
+               x="129.64677"
+               height="8.3528175"
+               width="31.575304"
+               id="rect109128"
+               style="fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:#888888;stroke-width:2.69355536;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               style="fill:none;stroke:#333333;stroke-width:3.55898809;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 174.47857,250.37988 27.11315,28.70931"
+               id="path109130"
+               sodipodi:nodetypes="cc" />
+          </g>
+        </g>
+      </g>
+      <g
+         transform="translate(-2067.4755,229.85634)"
+         id="g14851">
+        <g
+           transform="translate(2213.4983,196.38493)"
+           id="g6628">
+          <g
+             transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)"
+             inkscape:label="Calque 1"
+             id="g6630">
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path6632" />
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path6634" />
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path6636" />
+            <g
+               id="g6638">
+              <path
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 2,11 22,1 42,11 22,21 2,11 z"
+                 id="path6640" />
+              <path
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 2,11 2,41 22,51 22,21 2,11 z"
+                 id="path6642" />
+              <path
+                 style="fill:url(#linearGradient89693);fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 22,51 42,41 42,11 22,21 22,51 z"
+                 id="path6644"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path6646"
+                 d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path6648"
+                 d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path6650"
+                 d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path6652"
+                 d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path6654"
+                 d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path6656"
+                 d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path6658"
+                 d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:url(#radialGradient89695);fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                 id="path6660"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 id="path6662"
+                 d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path6664"
+                 d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path6666"
+                 d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path6668"
+                 d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path6670"
+                 d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path6672"
+                 d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            </g>
+          </g>
+        </g>
+        <g
+           transform="matrix(1.1666667,-0.5833333,0,1.6666667,2447.9468,308.67784)"
+           inkscape:label="Calque 1"
+           id="g109090">
+          <rect
+             style="fill:#427bc3;fill-opacity:1;stroke:none"
+             id="rect109092"
+             width="6"
+             height="0"
+             x="16"
+             y="12.5"
+             ry="0" />
+          <g
+             id="g109094">
+            <path
+               id="path109096"
+               d="M 8,2 15,2 15,27 8,27 8,2 z"
+               style="fill:#4e9a06;fill-opacity:1;stroke:none" />
+            <path
+               id="path109098"
+               d="m 15,9 7,0 0,18 -7,0 0,-18 z"
+               style="fill:#f57900;fill-opacity:1;stroke:none" />
+            <path
+               id="path109100"
+               d="m 22,18 7,0 0,9 -7,0 0,-9 z"
+               style="fill:#cc0000;fill-opacity:1;stroke:none" />
+            <path
+               id="path109102"
+               d="M 9,3 14,3 14,27 9,27 9,3 z"
+               style="fill:#8ae234;fill-opacity:1;stroke:none" />
+            <path
+               id="path109104"
+               d="m 16,10 5,0 0,17 -5,0 0,-17 z"
+               style="fill:#fcaf3e;fill-opacity:1;stroke:none" />
+            <path
+               id="path109106"
+               d="m 23,19 5,0 0,8 -5,0 0,-8 z"
+               style="fill:#ef2929;fill-opacity:1;stroke:none" />
+            <path
+               id="path109108"
+               d="M 1,13 8,13 8,27 1,27 1,13 z"
+               style="fill:#204a87;fill-opacity:1;stroke:none" />
+            <path
+               id="path109110"
+               d="M 2,14 7,14 7,27 2,27 2,14 z"
+               style="fill:#729fcf;fill-opacity:1;stroke:none" />
+            <path
+               id="path109112"
+               d="m 0.5,27 29,0 c 0.277,0 0.5,0.223 0.5,0.5 0,0.277 -0.223,0.5 -0.5,0.5 l -29,0 C 0.223,28 0,27.777 0,27.5 0,27.223 0.223,27 0.5,27 z"
+               style="fill:#555753;fill-opacity:1;stroke:none" />
+          </g>
+        </g>
+      </g>
+      <g
+         transform="translate(55.376622,226.89494)"
+         id="g3940">
+        <g
+           id="g6928"
+           transform="translate(90.64615,-128.51935)">
+          <g
+             id="g6930"
+             inkscape:label="Calque 1"
+             transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+            <path
+               id="path6932"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path6934"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path6936"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <g
+               id="g6938">
+              <path
+                 id="path6940"
+                 d="M 2,11 22,1 42,11 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path6942"
+                 d="M 2,11 2,41 22,51 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path6944"
+                 d="M 22,51 42,41 42,11 22,21 22,51 z"
+                 style="fill:url(#linearGradient89697);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                 id="path6946"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                 id="path6948" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                 id="path6950"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                 id="path6952" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                 id="path6954"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                 id="path6956" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                 id="path6958" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path6960"
+                 d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                 style="fill:url(#radialGradient89699);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                 id="path6962" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                 id="path6964" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                 id="path6966"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                 id="path6968" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                 id="path6970" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                 id="path6972" />
+            </g>
+          </g>
+        </g>
+        <g
+           id="g7116"
+           transform="matrix(0.5539927,-0.2769963,0,0.7914182,69.441655,-494.70209)">
+          <rect
+             style="fill:#166496;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.68594635;marker:none;visibility:visible;display:inline;overflow:visible"
+             id="rect7118"
+             width="48.180401"
+             height="48.180401"
+             x="882.70941"
+             y="188.84785"
+             rx="6.0000076"
+             ry="6.0000076"
+             transform="matrix(0.7071068,0.7071068,-0.7071068,0.7071068,0,0)" />
+          <rect
+             style="fill:url(#linearGradient89701);fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1.18750143;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible"
+             id="rect7120"
+             width="42.856983"
+             height="42.856983"
+             x="885.3714"
+             y="191.50948"
+             rx="3.0000038"
+             ry="3.0000038"
+             transform="matrix(0.7071068,0.7071068,-0.7071068,0.7071068,0,0)" />
+          <path
+             style="font-size:47.54045868px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;letter-spacing:normal;writing-mode:lr-tb;text-anchor:start;fill:url(#linearGradient89703);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;font-family:URW Bookman L"
+             d="m 493.74763,784.00094 -1.61638,0 c -2.89996,0.52294 -4.4688,0.76064 -6.98845,0.95081 l 0,1.42621 0.95081,0.0951 c 2.4721,0.2377 3.13767,1.09343 3.13767,3.94586 l 0,11.17201 c 0,2.61472 -0.85573,3.70815 -2.94751,3.94586 l -1.18851,0.0951 0,1.42621 12.74085,0 0,-1.42621 -1.14098,-0.0951 c -2.13931,-0.23771 -2.9475,-1.33114 -2.9475,-3.94586 l 0,-17.58997 m -2.18686,-8.03434 c -1.61638,0 -2.89997,1.28359 -2.89997,2.85243 0,1.61637 1.28359,2.89997 2.85242,2.89997 1.61638,0 2.89997,-1.2836 2.89997,-2.85243 0,-1.56884 -1.28359,-2.89997 -2.85242,-2.89997"
+             id="path7122" />
+          <path
+             style="fill:url(#linearGradient89705);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.18749964;marker:none;visibility:visible;display:inline;overflow:visible"
+             d="m 490.63046,762.7053 c -0.76686,0 -1.53738,0.2874 -2.125,0.875 l -26.0625,26.0625 c -1.17521,1.17521 -1.17521,3.07478 0,4.25 l 16.65625,16.65625 c 0.0426,-17.36725 11.74174,-31.56494 26.8125,-33.8125 L 492.75546,763.5803 c -0.58761,-0.58761 -1.35814,-0.875 -2.125,-0.875 z"
+             id="path7124" />
+        </g>
+      </g>
+      <g
+         transform="translate(-2204.5921,828.95657)"
+         id="g14796">
+        <g
+           transform="translate(2350.6149,-222.65428)"
+           id="g117371">
+          <g
+             transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)"
+             inkscape:label="Calque 1"
+             id="g117373">
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path117375" />
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path117377" />
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path117379" />
+            <g
+               id="g117381">
+              <path
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 2,11 22,1 42,11 22,21 2,11 z"
+                 id="path117383" />
+              <path
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 2,11 2,41 22,51 22,21 2,11 z"
+                 id="path117385" />
+              <path
+                 style="fill:url(#linearGradient89707);fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 22,51 42,41 42,11 22,21 22,51 z"
+                 id="path117387"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117389"
+                 d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117391"
+                 d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117393"
+                 d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117395"
+                 d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117397"
+                 d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117399"
+                 d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117401"
+                 d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:url(#radialGradient89709);fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                 id="path117403"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 id="path117405"
+                 d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117407"
+                 d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117409"
+                 d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117411"
+                 d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117413"
+                 d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117415"
+                 d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            </g>
+          </g>
+        </g>
+        <g
+           id="g119362"
+           transform="matrix(0.7,-0.35,0,1,2334.3228,-284.85697)">
+          <rect
+             y="293.20496"
+             x="358.0549"
+             height="9.7841024"
+             width="9.7841024"
+             id="rect119364"
+             style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+          <rect
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+             id="rect119366"
+             width="9.7841024"
+             height="9.7841024"
+             x="368.0549"
+             y="293.20496" />
+          <rect
+             y="293.20496"
+             x="378.0549"
+             height="9.7841024"
+             width="9.7841024"
+             id="rect119368"
+             style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+          <rect
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+             id="rect119370"
+             width="9.7841024"
+             height="9.7841024"
+             x="388.0549"
+             y="293.20496" />
+          <rect
+             y="293.20496"
+             x="398.0549"
+             height="9.7841024"
+             width="9.7841024"
+             id="rect119372"
+             style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+          <rect
+             style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+             id="rect119374"
+             width="9.7841024"
+             height="9.7841024"
+             x="358.0549"
+             y="303.20496" />
+          <rect
+             y="303.20496"
+             x="368.0549"
+             height="9.7841024"
+             width="9.7841024"
+             id="rect119376"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+          <rect
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+             id="rect119378"
+             width="9.7841024"
+             height="9.7841024"
+             x="378.0549"
+             y="303.20496" />
+          <rect
+             y="303.20496"
+             x="388.0549"
+             height="9.7841024"
+             width="9.7841024"
+             id="rect119380"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+          <rect
+             style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+             id="rect119382"
+             width="9.7841024"
+             height="9.7841024"
+             x="398.0549"
+             y="303.20496" />
+          <rect
+             y="313.20496"
+             x="358.0549"
+             height="9.7841024"
+             width="9.7841024"
+             id="rect119384"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+          <rect
+             style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+             id="rect119386"
+             width="9.7841024"
+             height="9.7841024"
+             x="368.0549"
+             y="313.20496" />
+          <rect
+             y="313.20496"
+             x="378.0549"
+             height="9.7841024"
+             width="9.7841024"
+             id="rect119388"
+             style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+          <rect
+             style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+             id="rect119390"
+             width="9.7841024"
+             height="9.7841024"
+             x="388.0549"
+             y="313.20496" />
+          <rect
+             y="313.20496"
+             x="398.0549"
+             height="9.7841024"
+             width="9.7841024"
+             id="rect119392"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+          <rect
+             style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+             id="rect119394"
+             width="9.7841024"
+             height="9.7841024"
+             x="358.0549"
+             y="323.20496" />
+          <rect
+             y="323.20496"
+             x="368.0549"
+             height="9.7841024"
+             width="9.7841024"
+             id="rect119396"
+             style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+          <rect
+             style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+             id="rect119398"
+             width="9.7841024"
+             height="9.7841024"
+             x="378.0549"
+             y="323.20496" />
+          <rect
+             y="323.20496"
+             x="388.0549"
+             height="9.7841024"
+             width="9.7841024"
+             id="rect119400"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+          <rect
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+             id="rect119402"
+             width="9.7841024"
+             height="9.7841024"
+             x="398.0549"
+             y="323.20496" />
+          <rect
+             y="333.20496"
+             x="358.0549"
+             height="9.7841024"
+             width="9.7841024"
+             id="rect119404"
+             style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+          <rect
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+             id="rect119406"
+             width="9.7841024"
+             height="9.7841024"
+             x="368.0549"
+             y="333.20496" />
+          <rect
+             y="333.20496"
+             x="378.0549"
+             height="9.7841024"
+             width="9.7841024"
+             id="rect119408"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+          <rect
+             style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+             id="rect119410"
+             width="9.7841024"
+             height="9.7841024"
+             x="388.0549"
+             y="333.20496" />
+          <rect
+             y="333.20496"
+             x="398.0549"
+             height="9.7841024"
+             width="9.7841024"
+             id="rect119412"
+             style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        </g>
+      </g>
+    </g>
+    <path
+       id="path91016"
+       d="M 591.58063,780.69364 1453.3182,1219.7707"
+       style="fill:none;stroke:#e68080;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       style="fill:none;stroke:#d58080;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 1279.7263,1216.7279 1979.6754,860.08563"
+       id="path3533-3" />
+  </g>
+  <g
+     inkscape:label="diagram"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-83.461244,-149.71426)"
+     sodipodi:insensitive="true">
+    <path
+       style="fill:#888888;fill-opacity:1;stroke:none"
+       d=""
+       id="path117863" />
+    <path
+       style="fill:#888888;fill-opacity:1;stroke:none"
+       d=""
+       id="path117865" />
+    <path
+       style="fill:#888888;fill-opacity:1;stroke:none"
+       d=""
+       id="path117867" />
+    <path
+       id="path118257-3"
+       d=""
+       style="fill:#888888;fill-opacity:1;stroke:none" />
+    <path
+       id="path118259-1"
+       d=""
+       style="fill:#888888;fill-opacity:1;stroke:none" />
+    <path
+       id="path118261-4"
+       d=""
+       style="fill:#888888;fill-opacity:1;stroke:none" />
+    <path
+       id="path3356"
+       d=""
+       style="fill:#888888;fill-opacity:1;stroke:none" />
+    <path
+       id="path3358"
+       d=""
+       style="fill:#888888;fill-opacity:1;stroke:none" />
+    <path
+       id="path3360"
+       d=""
+       style="fill:#888888;fill-opacity:1;stroke:none" />
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+       x="203.22742"
+       y="1254.4452"
+       id="text3547"><tspan
+         sodipodi:role="line"
+         id="tspan3549"
+         x="203.22742"
+         y="1254.4452" /></text>
+    <path
+       id="path6262"
+       d=""
+       style="fill:#888888;fill-opacity:1;stroke:none" />
+    <path
+       id="path6264"
+       d=""
+       style="fill:#888888;fill-opacity:1;stroke:none" />
+    <path
+       id="path6266"
+       d=""
+       style="fill:#888888;fill-opacity:1;stroke:none" />
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="225.9373"
+       y="214.30464"
+       id="text12366"><tspan
+         sodipodi:role="line"
+         x="227.67558"
+         y="214.30464"
+         id="tspan12370"
+         style="font-weight:bold">A) Cinder running on 1 Hardware  node </tspan><tspan
+         sodipodi:role="line"
+         x="225.9373"
+         y="226.80464"
+         id="tspan40327" /></text>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot12372"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"><flowRegion
+         id="flowRegion12374"><rect
+           id="rect12376"
+           width="277.79196"
+           height="248.49753"
+           x="40.406101"
+           y="25.037045" /></flowRegion><flowPara
+         id="flowPara12378" /></flowRoot>    <path
+       id="path28160"
+       d="m 315.22338,426.34039 91.36936,46.55496"
+       style="fill:none;stroke:#808080;stroke-width:3.28471541;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       style="fill:none;stroke:#808080;stroke-width:3.28471541;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 380.6955,469.21927 91.36934,-46.55506"
+       id="path20157" />
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#808080;stroke-width:3.28471541;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 185.78351,323.11038 137.40741,72.74725"
+       id="path27639-3" />
+    <g
+       transform="matrix(0.65694308,0,0,0.65694308,-1522.2473,382.17184)"
+       id="g11976">
+      <g
+         transform="translate(2350.6149,-222.65428)"
+         id="g11978">
+        <g
+           transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)"
+           inkscape:label="Calque 1"
+           id="g11980">
+          <path
+             style="fill:#888888;fill-opacity:1;stroke:none"
+             d=""
+             id="path11982" />
+          <path
+             style="fill:#888888;fill-opacity:1;stroke:none"
+             d=""
+             id="path11984" />
+          <path
+             style="fill:#888888;fill-opacity:1;stroke:none"
+             d=""
+             id="path11986" />
+          <g
+             id="g11988">
+            <path
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M 2,11 22,1 42,11 22,21 2,11 z"
+               id="path11990" />
+            <path
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M 2,11 2,41 22,51 22,21 2,11 z"
+               id="path11992" />
+            <path
+               style="fill:url(#linearGradient12076);fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M 22,51 42,41 42,11 22,21 22,51 z"
+               id="path11994"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path11996"
+               d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path11998"
+               d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path12000"
+               d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path12002"
+               d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path12004"
+               d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path12006"
+               d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path12008"
+               d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               style="fill:url(#radialGradient12078);fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+               id="path12010"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               id="path12012"
+               d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path12014"
+               d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path12016"
+               d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path12018"
+               d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path12020"
+               d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path12022"
+               d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          </g>
+        </g>
+      </g>
+      <g
+         id="g12024"
+         transform="matrix(0.7,-0.35,0,1,2334.3228,-284.85697)">
+        <rect
+           y="293.20496"
+           x="358.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect12026"
+           style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect12028"
+           width="9.7841024"
+           height="9.7841024"
+           x="368.0549"
+           y="293.20496" />
+        <rect
+           y="293.20496"
+           x="378.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect12030"
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect12032"
+           width="9.7841024"
+           height="9.7841024"
+           x="388.0549"
+           y="293.20496" />
+        <rect
+           y="293.20496"
+           x="398.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect12034"
+           style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect12036"
+           width="9.7841024"
+           height="9.7841024"
+           x="358.0549"
+           y="303.20496" />
+        <rect
+           y="303.20496"
+           x="368.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect12038"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect12040"
+           width="9.7841024"
+           height="9.7841024"
+           x="378.0549"
+           y="303.20496" />
+        <rect
+           y="303.20496"
+           x="388.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect12042"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect12044"
+           width="9.7841024"
+           height="9.7841024"
+           x="398.0549"
+           y="303.20496" />
+        <rect
+           y="313.20496"
+           x="358.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect12046"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect12048"
+           width="9.7841024"
+           height="9.7841024"
+           x="368.0549"
+           y="313.20496" />
+        <rect
+           y="313.20496"
+           x="378.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect12050"
+           style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect12052"
+           width="9.7841024"
+           height="9.7841024"
+           x="388.0549"
+           y="313.20496" />
+        <rect
+           y="313.20496"
+           x="398.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect12054"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect12056"
+           width="9.7841024"
+           height="9.7841024"
+           x="358.0549"
+           y="323.20496" />
+        <rect
+           y="323.20496"
+           x="368.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect12058"
+           style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect12060"
+           width="9.7841024"
+           height="9.7841024"
+           x="378.0549"
+           y="323.20496" />
+        <rect
+           y="323.20496"
+           x="388.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect12062"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect12064"
+           width="9.7841024"
+           height="9.7841024"
+           x="398.0549"
+           y="323.20496" />
+        <rect
+           y="333.20496"
+           x="358.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect12066"
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect12068"
+           width="9.7841024"
+           height="9.7841024"
+           x="368.0549"
+           y="333.20496" />
+        <rect
+           y="333.20496"
+           x="378.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect12070"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect12072"
+           width="9.7841024"
+           height="9.7841024"
+           x="388.0549"
+           y="333.20496" />
+        <rect
+           y="333.20496"
+           x="398.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect12074"
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+      </g>
+    </g>
+    <g
+       transform="matrix(1.4935386,0,0,1.4935386,-380.65184,167.40421)"
+       id="g12102">
+      <g
+         id="g12104">
+        <path
+           style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           id="path12106"
+           d="m 452.22752,154.79534 c -1.32987,4.3593 0.97442,13.06343 4.32672,7.29809 0.55883,-4.21566 0.16853,-13.66849 -4.32672,-7.29809 z" />
+        <path
+           style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           id="path12108"
+           d="m 459.05645,154.87353 c -5.73123,-1.99396 -4.37255,6.82514 -3.10169,8.88804 4.41472,0.3139 8.88448,0.68282 7.08957,-5.21292 -0.15325,-2.39014 -1.62637,-3.78967 -3.98788,-3.67512 z" />
+        <path
+           style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           id="path12110"
+           d="m 461.48045,154.95173 c -1.09246,1.9721 -0.88144,8.20841 3.07563,8.75771 7.13327,0.55239 -1.24277,-5.48505 3.0235,-5.57782 1.36821,-3.25204 -5.37175,-7.28408 -6.09913,-3.17989 z" />
+        <path
+           style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           id="path12112"
+           d="m 469.14346,154.84748 c -6.26267,0.075 -4.66384,10.71977 1.4292,8.95932 4.83425,0.31308 3.44625,-9.88021 -1.4292,-8.95932 z" />
+        <path
+           style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           id="path12114"
+           d="m 468.85674,155.68154 c -5.85015,2.68836 -2.79296,6.6586 2.86712,4.84803 3.28424,0.8454 -0.45596,-6.36406 -2.86712,-4.84803 z" />
+        <path
+           style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           id="path12116"
+           d="m 475.63355,154.84748 c -5.82517,-1.97942 -4.54812,6.74301 -3.23202,8.91409 4.84187,0.18324 3.39963,-5.16968 5.70816,-6.35977 0.24428,-2.37476 -0.19418,-2.73428 -2.47614,-2.55432 z" />
+        <path
+           style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           id="path12118"
+           d="m 479.49112,154.87353 c -5.77442,-2.02369 -4.43922,6.79664 -3.15383,8.88804 4.41473,0.3139 8.88448,0.68282 7.08958,-5.21292 -0.15836,-2.36396 -1.59101,-3.77955 -3.93575,-3.67512 z" />
+        <path
+           style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           id="path12120"
+           d="m 485.56417,154.84748 c -6.19598,0.15033 -4.65067,10.675 1.42942,8.96143 4.93021,0.35507 3.48048,-9.89643 -1.42942,-8.96143 z" />
+        <path
+           style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           id="path12122"
+           d="m 485.30352,155.68154 c -5.85015,2.68836 -2.79297,6.6586 2.86711,4.84803 3.28424,0.8454 -0.45595,-6.36406 -2.86711,-4.84803 z" />
+        <path
+           style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           id="path12124"
+           d="m 488.0403,154.95173 c -1.06389,1.96915 -0.92086,8.22865 3.04957,8.75771 7.16539,0.57531 -1.21095,-5.48429 3.04956,-5.57782 1.3682,-3.25204 -5.37175,-7.28408 -6.09913,-3.17989 z" />
+        <path
+           transform="matrix(-0.179335,0,0,0.149728,502.1893,-24.02897)"
+           style="opacity:0.17777776;fill:url(#linearGradient12182);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           inkscape:tile-w="105.36077"
+           inkscape:tile-h="104.60061"
+           inkscape:tile-cy="1057.5979"
+           inkscape:tile-cx="150.57283"
+           id="path12126"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(0.284001,0,0,0.193224,407.7236,-73.15871)"
+           style="opacity:0.17777776;fill:url(#linearGradient12184);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12128"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(0.340554,0,0,0.231701,396.3144,-88.95173)"
+           style="opacity:0.17777776;fill:url(#linearGradient12186);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12130"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(0.249954,0,0,0.170059,406.7992,-32.10751)"
+           style="opacity:0.17777776;fill:url(#linearGradient12188);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12132"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(0.260403,0,0,0.177168,412.2819,-25.25605)"
+           style="opacity:0.17777776;fill:url(#linearGradient12190);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12134"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(-0.104126,-0.150834,-0.146719,0.07084417,668.335,91.43843)"
+           style="opacity:0.17777776;fill:url(#linearGradient12192);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12136"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(-0.154671,-0.224051,-0.217939,0.105233,738.2325,88.88709)"
+           style="opacity:0.17777776;fill:url(#linearGradient12194);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12138"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(-0.138006,-0.19991,-0.194457,0.09389457,722.8067,97.77468)"
+           style="opacity:0.17777776;fill:url(#linearGradient12196);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12140"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(-0.117791,-0.170629,-0.165973,0.08014087,677.6847,122.0894)"
+           style="opacity:0.17777776;fill:url(#linearGradient12198);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12142"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(-0.09614486,-0.139271,-0.135472,0.06541328,635.5166,142.1226)"
+           style="opacity:0.17777776;fill:url(#linearGradient12200);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12144"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(-0.164683,-0.238552,0.232045,-0.112044,265.1906,314.0698)"
+           style="opacity:0.17777776;fill:url(#linearGradient12202);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12146"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(-0.172846,-0.250377,0.243546,-0.117597,239.7257,330.3731)"
+           style="opacity:0.17777776;fill:url(#linearGradient12204);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12148"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(-0.177232,-0.256733,0.249729,-0.120583,225.1178,318.3329)"
+           style="opacity:0.17777776;fill:url(#linearGradient12206);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12150"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(-0.166524,-0.241221,0.23464,-0.113297,227.7161,329.1711)"
+           style="opacity:0.17777776;fill:url(#linearGradient12208);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12152"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(-0.112183,-0.162505,0.158072,-0.07632533,314.1776,290.1886)"
+           style="opacity:0.17777776;fill:url(#linearGradient12210);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12154"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(-0.11826,0.171307,0.166634,0.08045988,311.5686,16.07786)"
+           style="opacity:0.17777776;fill:url(#linearGradient12212);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12156"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(-0.0943583,0.136684,0.132956,0.06419815,331.8395,50.2111)"
+           style="opacity:0.17777776;fill:url(#linearGradient12214);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12158"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(-0.114364,0.165662,0.161143,0.07780872,322.2702,30.08746)"
+           style="opacity:0.17777776;fill:url(#linearGradient12216);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12160"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(-0.140702,0.203815,0.198255,0.09572832,286.7172,18.15027)"
+           style="opacity:0.17777776;fill:url(#linearGradient12218);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12162"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(-0.162185,0.234935,0.228526,0.110345,259.9411,6.05945)"
+           style="opacity:0.17777776;fill:url(#linearGradient12220);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12164"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(-0.160583,0.232613,-0.226269,-0.109254,748.0707,211.5833)"
+           style="opacity:0.17777776;fill:url(#linearGradient12222);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12166"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(-0.12628,0.182922,-0.177934,-0.08591606,697.8146,196.7379)"
+           style="opacity:0.17777776;fill:url(#linearGradient12224);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12168"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(-0.137748,0.199537,-0.194093,-0.09371803,714.1281,221.8225)"
+           style="opacity:0.17777776;fill:url(#linearGradient12226);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12170"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(-0.120979,0.175247,-0.170466,-0.08231039,662.6019,207.1803)"
+           style="opacity:0.17777776;fill:url(#linearGradient12228);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12172"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+        <path
+           transform="matrix(-0.14434,0.209086,-0.203383,-0.09820396,735.5011,232.5166)"
+           style="opacity:0.17777776;fill:url(#linearGradient12230);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           sodipodi:type="arc"
+           sodipodi:start="0.32872637"
+           sodipodi:ry="52.289352"
+           sodipodi:rx="52.660198"
+           sodipodi:open="true"
+           sodipodi:end="6.478369"
+           sodipodi:cy="1057.5979"
+           sodipodi:cx="150.56367"
+           id="path12174"
+           d="m 200.40415,1074.4789 a 52.660198,52.289352 0 1 1 1.81981,-6.7397" />
+      </g>
+      <path
+         transform="matrix(1.155532,0,0,1.155532,26.16756,-503.197)"
+         style="fill:url(#radialGradient12232);fill-opacity:1;fill-rule:nonzero;stroke:none"
+         sodipodi:type="arc"
+         sodipodi:ry="24.998358"
+         sodipodi:rx="24.998358"
+         sodipodi:cy="571.95715"
+         sodipodi:cx="384.69696"
+         id="path12176"
+         d="m 409.69532,571.95715 a 24.998358,24.998358 0 1 1 -49.99672,0 24.998358,24.998358 0 1 1 49.99672,0 z" />
+      <text
+         y="161.44913"
+         xml:space="preserve"
+         x="469.55161"
+         style="font-size:10.00881386px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#9f0021;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         id="text12178"><tspan
+           y="161.44913"
+           x="469.55161"
+           sodipodi:role="line"
+           id="tspan12180">Internet</tspan></text>
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="538.89154"
+       y="215.79129"
+       id="text13881"><tspan
+         sodipodi:role="line"
+         x="538.89154"
+         y="215.79129"
+         id="tspan14065"
+         style="font-weight:bold">B) Cloud of 2-4 servers in one cluster</tspan><tspan
+         sodipodi:role="line"
+         x="538.89154"
+         y="228.29129"
+         id="tspan29240">Self-contained storage solution</tspan><tspan
+         sodipodi:role="line"
+         x="538.89154"
+         y="240.79129"
+         id="tspan6068">Typical smallest private cloud</tspan><tspan
+         sodipodi:role="line"
+         x="538.89154"
+         y="253.29129"
+         id="tspan29232" /><tspan
+         sodipodi:role="line"
+         x="538.89154"
+         y="265.79129"
+         id="tspan14069" /></text>
+    <g
+       transform="matrix(0.65694308,0,0,0.65694308,409.13381,29.158398)"
+       id="g14000">
+      <g
+         transform="matrix(6.5383417,0,0,6.5383417,364.86909,935.55835)"
+         inkscape:label="Calque 1"
+         id="g14002">
+        <path
+           style="fill:#888888;fill-opacity:1;stroke:none"
+           d=""
+           id="path14004" />
+        <path
+           style="fill:#888888;fill-opacity:1;stroke:none"
+           d=""
+           id="path14006" />
+        <path
+           style="fill:#888888;fill-opacity:1;stroke:none"
+           d=""
+           id="path14008" />
+        <g
+           transform="translate(-68.205597,-63.743549)"
+           id="g14010">
+          <path
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 7.6108945,14.642423 -0.3365653,0.168282 -8.07756781,4.038784 -0.33656529,0.168283 0,0.420707 0,4.038784 0,0.420706 0.33656529,0.168283 8.07756781,4.038784 0.3365653,0.168282 0.2944947,-0.168282 8.0775678,-4.038784 0.378636,-0.168283 0,-0.420706 0,-4.038784 0,-0.420707 -0.378636,-0.168283 -8.0775678,-4.038784 -0.2944947,-0.168282 z m 0,1.514544 7.4044375,3.702218 0,3.197371 -7.4044375,3.702218 -7.40443714,-3.702218 0,-3.197371 7.40443714,-3.702218 z"
+             id="path14012" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="M -0.48215529,19.441925 7.5954125,15.403141 15.67298,19.441925 7.5954125,23.480709 -0.48215529,19.441925 z"
+             id="path14014" />
+          <path
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m -0.48215529,19.441925 0,4.038784 8.07756779,4.038784 0,-4.038784 -8.07756779,-4.038784 z"
+             id="path14016"
+             sodipodi:nodetypes="ccccc" />
+          <path
+             style="fill:url(#radialGradient14034);fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 15.67298,19.441925 0,4.038784 -8.0775675,4.038784 0,-4.038784 8.0775675,-4.038784 z"
+             id="path14018"
+             sodipodi:nodetypes="ccccc" />
+        </g>
+      </g>
+      <g
+         transform="matrix(0.6363961,0.3181981,-0.6363961,0.3181981,-697.62009,289.09977)"
+         id="g14020">
+        <path
+           id="path14022"
+           d="m 1044.4209,-4.5996044 0,78.9062504 78.9063,0 0,-78.9062504 -78.9063,0 z m 39.4688,2.46875 c 20.4177,0 37,16.5823004 37,37.0000004 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 -10e-5,-20.41771 16.5823,-37.0000004 37,-37.0000004 z"
+           style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter" />
+        <g
+           id="g14024"
+           style="fill:#00ffff;stroke:#ffffff"
+           transform="translate(705.44117,-218.9829)">
+          <path
+             id="path14026"
+             d="m 378.53666,218.814 -6.22099,11.28987 1.97176,0 0,18.4037 8.49847,0 0,-18.4037 1.95647,0 -6.20571,-11.28987 z"
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+          <path
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="m 378.53666,288.85884 -6.22099,-11.28987 1.97176,0 0,-18.4037 8.49847,0 0,18.4037 1.95647,0 -6.20571,11.28987 z"
+             id="path14028" />
+          <path
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="m 343.41044,253.56675 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+             id="path14030" />
+          <path
+             id="path14032"
+             d="m 413.45528,253.56675 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+        </g>
+      </g>
+    </g>
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#808080;stroke-width:3.28471541;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 403.08993,404.14504 138.94378,71.0712"
+       id="path27639" />
+    <path
+       style="fill:none;stroke:#808080;stroke-width:3.28471541;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 608.79612,390.33518 91.36933,-46.55506"
+       id="path27641" />
+    <path
+       id="path91031"
+       d="m 608.68499,296.87805 138.94378,71.0712"
+       style="fill:none;stroke:#808080;stroke-width:3.28471541;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:nodetypes="cc" />
+    <path
+       id="path27643"
+       d="m 563.28267,366.85747 91.36934,-46.55505"
+       style="fill:none;stroke:#808080;stroke-width:3.28471541;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       id="path27645"
+       d="m 495.86167,451.62164 91.36934,-46.55506"
+       style="fill:none;stroke:#808080;stroke-width:3.28471541;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       style="fill:none;stroke:#808080;stroke-width:3.28471541;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 654.30956,413.81288 745.6789,367.25782"
+       id="path27647" />
+    <path
+       style="fill:none;stroke:#808080;stroke-width:3.28471541;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 450.34043,428.08107 91.36934,-46.55506"
+       id="path27649" />
+    <path
+       id="path27651"
+       d="m 541.38287,475.16213 91.36934,-46.55506"
+       style="fill:none;stroke:#808080;stroke-width:3.28471541;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       style="fill:none;stroke:#808080;stroke-width:3.28471541;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 404.81919,404.54058 91.36935,-46.55506"
+       id="path27653" />
+    <g
+       id="g27655"
+       transform="matrix(0.65694308,0,0,0.65694308,391.71742,31.819328)">
+      <g
+         id="g27657"
+         inkscape:label="Calque 1"
+         transform="matrix(6.5383417,0,0,6.5383417,488.78696,875.42775)">
+        <path
+           id="path27659"
+           d=""
+           style="fill:#888888;fill-opacity:1;stroke:none" />
+        <path
+           id="path27661"
+           d=""
+           style="fill:#888888;fill-opacity:1;stroke:none" />
+        <path
+           id="path27663"
+           d=""
+           style="fill:#888888;fill-opacity:1;stroke:none" />
+        <g
+           id="g27665"
+           transform="translate(-68.205597,-63.743549)">
+          <path
+             id="path27667"
+             d="m 7.6108945,14.642423 -0.3365653,0.168282 -8.07756781,4.038784 -0.33656529,0.168283 0,0.420707 0,4.038784 0,0.420706 0.33656529,0.168283 8.07756781,4.038784 0.3365653,0.168282 0.2944947,-0.168282 8.0775678,-4.038784 0.378636,-0.168283 0,-0.420706 0,-4.038784 0,-0.420707 -0.378636,-0.168283 -8.0775678,-4.038784 -0.2944947,-0.168282 z m 0,1.514544 7.4044375,3.702218 0,3.197371 -7.4044375,3.702218 -7.40443714,-3.702218 0,-3.197371 7.40443714,-3.702218 z"
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             id="path27669"
+             d="M -0.48215529,19.441925 7.5954125,15.403141 15.67298,19.441925 7.5954125,23.480709 -0.48215529,19.441925 z"
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             sodipodi:nodetypes="ccccc" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             id="path27671"
+             d="m -0.48215529,19.441925 0,4.038784 8.07756779,4.038784 0,-4.038784 -8.07756779,-4.038784 z"
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             id="path27673"
+             d="m 15.67298,19.441925 0,4.038784 -8.0775675,4.038784 0,-4.038784 8.0775675,-4.038784 z"
+             style="fill:url(#radialGradient28127);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        </g>
+      </g>
+      <g
+         transform="matrix(0.6363961,-0.3181981,-0.6363961,-0.3181981,-338.72869,1082.8342)"
+         id="g27675">
+        <path
+           style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter"
+           d="m 1081.1367,402.39569 0,78.90625 78.9062,0 0,-78.90625 -78.9062,0 z m 39.4687,2.46875 c 20.4177,0 37,16.5823 37,37 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 0,-20.41771 16.5823,-37 37,-37 z"
+           id="path27677" />
+        <g
+           id="g27679"
+           transform="translate(456.4439,-26.889185)"
+           style="fill:#00ffff;stroke:#ffffff">
+          <path
+             id="path27681"
+             d="m 660.00267,458.32498 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+          <path
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="m 668.28911,465.32717 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+             id="path27683" />
+          <path
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="m 660.00267,472.20199 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+             id="path27685" />
+          <path
+             id="path27687"
+             d="m 668.28911,479.13574 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+        </g>
+      </g>
+    </g>
+    <path
+       id="path27689"
+       d="m 517.76922,343.37971 91.36935,-46.55506"
+       style="fill:none;stroke:#808080;stroke-width:3.28471541;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <g
+       id="g27691"
+       transform="matrix(0.65694308,0,0,0.65694308,-1189.4227,405.31085)">
+      <g
+         id="g27693"
+         transform="translate(2350.6149,-222.65428)">
+        <g
+           id="g27695"
+           inkscape:label="Calque 1"
+           transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+          <path
+             id="path27697"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <path
+             id="path27699"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <path
+             id="path27701"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <g
+             id="g27703">
+            <path
+               id="path27705"
+               d="M 2,11 22,1 42,11 22,21 2,11 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path27707"
+               d="M 2,11 2,41 22,51 22,21 2,11 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path27709"
+               d="M 22,51 42,41 42,11 22,21 22,51 z"
+               style="fill:url(#linearGradient28129);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+               id="path27711"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+               id="path27713" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+               id="path27715"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+               id="path27717" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+               id="path27719"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+               id="path27721" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+               id="path27723" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path27725"
+               d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+               style="fill:url(#radialGradient28131);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+               id="path27727" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+               id="path27729" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+               id="path27731"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+               id="path27733" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+               id="path27735" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+               id="path27737" />
+          </g>
+        </g>
+      </g>
+      <g
+         transform="matrix(0.7,-0.35,0,1,2334.3228,-284.85697)"
+         id="g27739">
+        <rect
+           style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27741"
+           width="9.7841024"
+           height="9.7841024"
+           x="358.0549"
+           y="293.20496" />
+        <rect
+           y="293.20496"
+           x="368.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27743"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27745"
+           width="9.7841024"
+           height="9.7841024"
+           x="378.0549"
+           y="293.20496" />
+        <rect
+           y="293.20496"
+           x="388.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27747"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27749"
+           width="9.7841024"
+           height="9.7841024"
+           x="398.0549"
+           y="293.20496" />
+        <rect
+           y="303.20496"
+           x="358.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27751"
+           style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27753"
+           width="9.7841024"
+           height="9.7841024"
+           x="368.0549"
+           y="303.20496" />
+        <rect
+           y="303.20496"
+           x="378.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27755"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27757"
+           width="9.7841024"
+           height="9.7841024"
+           x="388.0549"
+           y="303.20496" />
+        <rect
+           y="303.20496"
+           x="398.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27759"
+           style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27761"
+           width="9.7841024"
+           height="9.7841024"
+           x="358.0549"
+           y="313.20496" />
+        <rect
+           y="313.20496"
+           x="368.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27763"
+           style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27765"
+           width="9.7841024"
+           height="9.7841024"
+           x="378.0549"
+           y="313.20496" />
+        <rect
+           y="313.20496"
+           x="388.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27767"
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27769"
+           width="9.7841024"
+           height="9.7841024"
+           x="398.0549"
+           y="313.20496" />
+        <rect
+           y="323.20496"
+           x="358.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27771"
+           style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27773"
+           width="9.7841024"
+           height="9.7841024"
+           x="368.0549"
+           y="323.20496" />
+        <rect
+           y="323.20496"
+           x="378.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27775"
+           style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27777"
+           width="9.7841024"
+           height="9.7841024"
+           x="388.0549"
+           y="323.20496" />
+        <rect
+           y="323.20496"
+           x="398.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27779"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27781"
+           width="9.7841024"
+           height="9.7841024"
+           x="358.0549"
+           y="333.20496" />
+        <rect
+           y="333.20496"
+           x="368.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27783"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27785"
+           width="9.7841024"
+           height="9.7841024"
+           x="378.0549"
+           y="333.20496" />
+        <rect
+           y="333.20496"
+           x="388.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27787"
+           style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27789"
+           width="9.7841024"
+           height="9.7841024"
+           x="398.0549"
+           y="333.20496" />
+      </g>
+    </g>
+    <g
+       id="g27791"
+       transform="matrix(0.65694308,0,0,0.65694308,-1143.4472,428.64223)">
+      <g
+         id="g27793"
+         transform="translate(2350.6149,-222.65428)">
+        <g
+           id="g27795"
+           inkscape:label="Calque 1"
+           transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+          <path
+             id="path27797"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <path
+             id="path27799"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <path
+             id="path27801"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <g
+             id="g27803">
+            <path
+               id="path27805"
+               d="M 2,11 22,1 42,11 22,21 2,11 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path27807"
+               d="M 2,11 2,41 22,51 22,21 2,11 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path27809"
+               d="M 22,51 42,41 42,11 22,21 22,51 z"
+               style="fill:url(#linearGradient28133);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+               id="path27811"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+               id="path27813" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+               id="path27815"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+               id="path27817" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+               id="path27819"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+               id="path27821" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+               id="path27823" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path27825"
+               d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+               style="fill:url(#radialGradient28135);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+               id="path27827" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+               id="path27829" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+               id="path27831"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+               id="path27833" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+               id="path27835" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+               id="path27837" />
+          </g>
+        </g>
+      </g>
+      <g
+         transform="matrix(0.7,-0.35,0,1,2334.3228,-284.85697)"
+         id="g27839">
+        <rect
+           style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27841"
+           width="9.7841024"
+           height="9.7841024"
+           x="358.0549"
+           y="293.20496" />
+        <rect
+           y="293.20496"
+           x="368.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27843"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27845"
+           width="9.7841024"
+           height="9.7841024"
+           x="378.0549"
+           y="293.20496" />
+        <rect
+           y="293.20496"
+           x="388.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27847"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27849"
+           width="9.7841024"
+           height="9.7841024"
+           x="398.0549"
+           y="293.20496" />
+        <rect
+           y="303.20496"
+           x="358.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27851"
+           style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27853"
+           width="9.7841024"
+           height="9.7841024"
+           x="368.0549"
+           y="303.20496" />
+        <rect
+           y="303.20496"
+           x="378.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27855"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27857"
+           width="9.7841024"
+           height="9.7841024"
+           x="388.0549"
+           y="303.20496" />
+        <rect
+           y="303.20496"
+           x="398.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27859"
+           style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27861"
+           width="9.7841024"
+           height="9.7841024"
+           x="358.0549"
+           y="313.20496" />
+        <rect
+           y="313.20496"
+           x="368.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27863"
+           style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27865"
+           width="9.7841024"
+           height="9.7841024"
+           x="378.0549"
+           y="313.20496" />
+        <rect
+           y="313.20496"
+           x="388.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27867"
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27869"
+           width="9.7841024"
+           height="9.7841024"
+           x="398.0549"
+           y="313.20496" />
+        <rect
+           y="323.20496"
+           x="358.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27871"
+           style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27873"
+           width="9.7841024"
+           height="9.7841024"
+           x="368.0549"
+           y="323.20496" />
+        <rect
+           y="323.20496"
+           x="378.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27875"
+           style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27877"
+           width="9.7841024"
+           height="9.7841024"
+           x="388.0549"
+           y="323.20496" />
+        <rect
+           y="323.20496"
+           x="398.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27879"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27881"
+           width="9.7841024"
+           height="9.7841024"
+           x="358.0549"
+           y="333.20496" />
+        <rect
+           y="333.20496"
+           x="368.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27883"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27885"
+           width="9.7841024"
+           height="9.7841024"
+           x="378.0549"
+           y="333.20496" />
+        <rect
+           y="333.20496"
+           x="388.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27887"
+           style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27889"
+           width="9.7841024"
+           height="9.7841024"
+           x="398.0549"
+           y="333.20496" />
+      </g>
+    </g>
+    <g
+       id="g27891"
+       transform="matrix(0.65694308,0,0,0.65694308,-1097.4717,451.97365)">
+      <g
+         id="g27893"
+         transform="translate(2350.6149,-222.65428)">
+        <g
+           id="g27895"
+           inkscape:label="Calque 1"
+           transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+          <path
+             id="path27897"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <path
+             id="path27899"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <path
+             id="path27901"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <g
+             id="g27903">
+            <path
+               id="path27905"
+               d="M 2,11 22,1 42,11 22,21 2,11 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path27907"
+               d="M 2,11 2,41 22,51 22,21 2,11 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path27909"
+               d="M 22,51 42,41 42,11 22,21 22,51 z"
+               style="fill:url(#linearGradient28137);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+               id="path27911"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+               id="path27913" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+               id="path27915"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+               id="path27917" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+               id="path27919"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+               id="path27921" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+               id="path27923" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path27925"
+               d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+               style="fill:url(#radialGradient28139);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+               id="path27927" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+               id="path27929" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+               id="path27931"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+               id="path27933" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+               id="path27935" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+               id="path27937" />
+          </g>
+        </g>
+      </g>
+      <g
+         transform="matrix(0.7,-0.35,0,1,2334.3228,-284.85697)"
+         id="g27939">
+        <rect
+           style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27941"
+           width="9.7841024"
+           height="9.7841024"
+           x="358.0549"
+           y="293.20496" />
+        <rect
+           y="293.20496"
+           x="368.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27943"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27945"
+           width="9.7841024"
+           height="9.7841024"
+           x="378.0549"
+           y="293.20496" />
+        <rect
+           y="293.20496"
+           x="388.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27947"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27949"
+           width="9.7841024"
+           height="9.7841024"
+           x="398.0549"
+           y="293.20496" />
+        <rect
+           y="303.20496"
+           x="358.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27951"
+           style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27953"
+           width="9.7841024"
+           height="9.7841024"
+           x="368.0549"
+           y="303.20496" />
+        <rect
+           y="303.20496"
+           x="378.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27955"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27957"
+           width="9.7841024"
+           height="9.7841024"
+           x="388.0549"
+           y="303.20496" />
+        <rect
+           y="303.20496"
+           x="398.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27959"
+           style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27961"
+           width="9.7841024"
+           height="9.7841024"
+           x="358.0549"
+           y="313.20496" />
+        <rect
+           y="313.20496"
+           x="368.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27963"
+           style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27965"
+           width="9.7841024"
+           height="9.7841024"
+           x="378.0549"
+           y="313.20496" />
+        <rect
+           y="313.20496"
+           x="388.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27967"
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27969"
+           width="9.7841024"
+           height="9.7841024"
+           x="398.0549"
+           y="313.20496" />
+        <rect
+           y="323.20496"
+           x="358.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27971"
+           style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27973"
+           width="9.7841024"
+           height="9.7841024"
+           x="368.0549"
+           y="323.20496" />
+        <rect
+           y="323.20496"
+           x="378.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27975"
+           style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27977"
+           width="9.7841024"
+           height="9.7841024"
+           x="388.0549"
+           y="323.20496" />
+        <rect
+           y="323.20496"
+           x="398.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27979"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27981"
+           width="9.7841024"
+           height="9.7841024"
+           x="358.0549"
+           y="333.20496" />
+        <rect
+           y="333.20496"
+           x="368.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27983"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27985"
+           width="9.7841024"
+           height="9.7841024"
+           x="378.0549"
+           y="333.20496" />
+        <rect
+           y="333.20496"
+           x="388.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect27987"
+           style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect27989"
+           width="9.7841024"
+           height="9.7841024"
+           x="398.0549"
+           y="333.20496" />
+      </g>
+    </g>
+    <g
+       id="g27991"
+       transform="matrix(0.65694308,0,0,0.65694308,-1051.4962,475.30499)">
+      <g
+         id="g27993"
+         transform="translate(2350.6149,-222.65428)">
+        <g
+           id="g27995"
+           inkscape:label="Calque 1"
+           transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+          <path
+             id="path27997"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <path
+             id="path27999"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <path
+             id="path28001"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <g
+             id="g28003">
+            <path
+               id="path28005"
+               d="M 2,11 22,1 42,11 22,21 2,11 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path28007"
+               d="M 2,11 2,41 22,51 22,21 2,11 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path28009"
+               d="M 22,51 42,41 42,11 22,21 22,51 z"
+               style="fill:url(#linearGradient28141);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+               id="path28011"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+               id="path28013" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+               id="path28015"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+               id="path28017" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+               id="path28019"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+               id="path28021" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+               id="path28023" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path28025"
+               d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+               style="fill:url(#radialGradient28143);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+               id="path28027" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+               id="path28029" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+               id="path28031"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+               id="path28033" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+               id="path28035" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+               id="path28037" />
+          </g>
+        </g>
+      </g>
+      <g
+         transform="matrix(0.7,-0.35,0,1,2334.3228,-284.85697)"
+         id="g28039">
+        <rect
+           style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect28041"
+           width="9.7841024"
+           height="9.7841024"
+           x="358.0549"
+           y="293.20496" />
+        <rect
+           y="293.20496"
+           x="368.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect28043"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect28045"
+           width="9.7841024"
+           height="9.7841024"
+           x="378.0549"
+           y="293.20496" />
+        <rect
+           y="293.20496"
+           x="388.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect28047"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect28049"
+           width="9.7841024"
+           height="9.7841024"
+           x="398.0549"
+           y="293.20496" />
+        <rect
+           y="303.20496"
+           x="358.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect28051"
+           style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect28053"
+           width="9.7841024"
+           height="9.7841024"
+           x="368.0549"
+           y="303.20496" />
+        <rect
+           y="303.20496"
+           x="378.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect28055"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect28057"
+           width="9.7841024"
+           height="9.7841024"
+           x="388.0549"
+           y="303.20496" />
+        <rect
+           y="303.20496"
+           x="398.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect28059"
+           style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect28061"
+           width="9.7841024"
+           height="9.7841024"
+           x="358.0549"
+           y="313.20496" />
+        <rect
+           y="313.20496"
+           x="368.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect28063"
+           style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect28065"
+           width="9.7841024"
+           height="9.7841024"
+           x="378.0549"
+           y="313.20496" />
+        <rect
+           y="313.20496"
+           x="388.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect28067"
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect28069"
+           width="9.7841024"
+           height="9.7841024"
+           x="398.0549"
+           y="313.20496" />
+        <rect
+           y="323.20496"
+           x="358.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect28071"
+           style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect28073"
+           width="9.7841024"
+           height="9.7841024"
+           x="368.0549"
+           y="323.20496" />
+        <rect
+           y="323.20496"
+           x="378.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect28075"
+           style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect28077"
+           width="9.7841024"
+           height="9.7841024"
+           x="388.0549"
+           y="323.20496" />
+        <rect
+           y="323.20496"
+           x="398.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect28079"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect28081"
+           width="9.7841024"
+           height="9.7841024"
+           x="358.0549"
+           y="333.20496" />
+        <rect
+           y="333.20496"
+           x="368.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect28083"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect28085"
+           width="9.7841024"
+           height="9.7841024"
+           x="378.0549"
+           y="333.20496" />
+        <rect
+           y="333.20496"
+           x="388.0549"
+           height="9.7841024"
+           width="9.7841024"
+           id="rect28087"
+           style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+        <rect
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect28089"
+           width="9.7841024"
+           height="9.7841024"
+           x="398.0549"
+           y="333.20496" />
+      </g>
+    </g>
+    <g
+       transform="matrix(0.65694308,0,0,0.65694308,594.78291,-79.667593)"
+       id="g28093">
+      <g
+         transform="matrix(6.5383417,0,0,6.5383417,488.78696,875.42775)"
+         inkscape:label="Calque 1"
+         id="g28095">
+        <path
+           style="fill:#888888;fill-opacity:1;stroke:none"
+           d=""
+           id="path28097" />
+        <path
+           style="fill:#888888;fill-opacity:1;stroke:none"
+           d=""
+           id="path28099" />
+        <path
+           style="fill:#888888;fill-opacity:1;stroke:none"
+           d=""
+           id="path28101" />
+        <g
+           transform="translate(-68.205597,-63.743549)"
+           id="g28103">
+          <path
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 7.6108945,14.642423 -0.3365653,0.168282 -8.07756781,4.038784 -0.33656529,0.168283 0,0.420707 0,4.038784 0,0.420706 0.33656529,0.168283 8.07756781,4.038784 0.3365653,0.168282 0.2944947,-0.168282 8.0775678,-4.038784 0.378636,-0.168283 0,-0.420706 0,-4.038784 0,-0.420707 -0.378636,-0.168283 -8.0775678,-4.038784 -0.2944947,-0.168282 z m 0,1.514544 7.4044375,3.702218 0,3.197371 -7.4044375,3.702218 -7.40443714,-3.702218 0,-3.197371 7.40443714,-3.702218 z"
+             id="path28105" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="M -0.48215529,19.441925 7.5954125,15.403141 15.67298,19.441925 7.5954125,23.480709 -0.48215529,19.441925 z"
+             id="path28107" />
+          <path
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m -0.48215529,19.441925 0,4.038784 8.07756779,4.038784 0,-4.038784 -8.07756779,-4.038784 z"
+             id="path28109"
+             sodipodi:nodetypes="ccccc" />
+          <path
+             style="fill:url(#radialGradient28145);fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 15.67298,19.441925 0,4.038784 -8.0775675,4.038784 0,-4.038784 8.0775675,-4.038784 z"
+             id="path28111"
+             sodipodi:nodetypes="ccccc" />
+        </g>
+      </g>
+      <g
+         id="g28113"
+         transform="matrix(0.6363961,-0.3181981,-0.6363961,-0.3181981,-338.72869,1082.8342)">
+        <path
+           id="path28115"
+           d="m 1081.1367,402.39569 0,78.90625 78.9062,0 0,-78.90625 -78.9062,0 z m 39.4687,2.46875 c 20.4177,0 37,16.5823 37,37 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 0,-20.41771 16.5823,-37 37,-37 z"
+           style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter" />
+        <g
+           style="fill:#00ffff;stroke:#ffffff"
+           transform="translate(456.4439,-26.889185)"
+           id="g28117">
+          <path
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="m 660.00267,458.32498 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+             id="path28119" />
+          <path
+             id="path28121"
+             d="m 668.28911,465.32717 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+          <path
+             id="path28123"
+             d="m 660.00267,472.20199 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+          <path
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="m 668.28911,479.13574 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+             id="path28125" />
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/doc/source/images/NOVA_clouds_C1_C2.svg b/doc/source/images/NOVA_clouds_C1_C2.svg
new file mode 100644
index 000000000..5b10faf7c
--- /dev/null
+++ b/doc/source/images/NOVA_clouds_C1_C2.svg
@@ -0,0 +1,9763 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="744.09448819"
+   height="1052.3622047"
+   id="svg2"
+   inkscape:label="Pozadí"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="CINDER_clouds_C1_C2.svg"
+   inkscape:export-filename="/var/www/alekiba/cinder/CINDER_clouds_C1_C2.svg.png"
+   inkscape:export-xdpi="120"
+   inkscape:export-ydpi="120">
+  <defs
+     id="defs7744">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective7750" />
+    <inkscape:perspective
+       id="perspective6086"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-53"
+       id="linearGradient104830"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient2202-1-53">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-2" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-4" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-53"
+       id="radialGradient104832"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6095">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6097" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6099" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-51"
+       id="linearGradient104834"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient2202-1-51">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-42" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-82" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-51"
+       id="radialGradient104836"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6106">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6108" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6110" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-7"
+       id="linearGradient104838"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient2202-1-7">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-64" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-23" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-7"
+       id="radialGradient104840"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6117">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6119" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6121" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-87"
+       id="linearGradient104842"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient2202-1-87">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-5" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-40" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-87"
+       id="radialGradient104844"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6128">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6130" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6132" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-59"
+       id="linearGradient104846"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient2202-1-59">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-33" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-0" />
+    </linearGradient>
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-8"
+       id="pattern6042-6"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-5"
+       id="pattern6024-8"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       patternUnits="userSpaceOnUse"
+       width="30.066020"
+       height="5.1805778"
+       id="Wavy-5"
+       inkscape:stockid="Wavy">
+      <path
+         style="fill:black;stroke:none;"
+         d="M 7.597,0.061 C 5.079,-0.187 2.656,0.302 -0.01,1.788 L -0.01,3.061 C 2.773,1.431 5.173,1.052 7.472,1.280 C 9.770,1.508 11.969,2.361 14.253,3.218 C 18.820,4.931 23.804,6.676 30.066,3.061 L 30.062,1.788 C 23.622,5.497 19.246,3.770 14.691,2.061 C 12.413,1.207 10.115,0.311 7.597,0.061 z "
+         id="path6343-6" />
+    </pattern>
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-8"
+       id="pattern6040-9"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-5"
+       id="pattern6143"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-8"
+       id="pattern6038-2"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-5"
+       id="pattern6150"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-8"
+       id="pattern6036-5"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-5"
+       id="pattern6157"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-8"
+       id="pattern6034-1"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-5"
+       id="pattern6164"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-8"
+       id="pattern6032-6"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-5"
+       id="pattern6171"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-8"
+       id="pattern6030-0"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-5"
+       id="pattern6178"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-8"
+       id="pattern6028-4"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-5"
+       id="pattern6185"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-32"
+       id="linearGradient104848"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient2202-1-32">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-47" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-85" />
+    </linearGradient>
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-0"
+       id="pattern6042-3"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-9"
+       id="pattern6024-0"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       patternUnits="userSpaceOnUse"
+       width="30.066020"
+       height="5.1805778"
+       id="Wavy-9"
+       inkscape:stockid="Wavy">
+      <path
+         style="fill:black;stroke:none;"
+         d="M 7.597,0.061 C 5.079,-0.187 2.656,0.302 -0.01,1.788 L -0.01,3.061 C 2.773,1.431 5.173,1.052 7.472,1.280 C 9.770,1.508 11.969,2.361 14.253,3.218 C 18.820,4.931 23.804,6.676 30.066,3.061 L 30.062,1.788 C 23.622,5.497 19.246,3.770 14.691,2.061 C 12.413,1.207 10.115,0.311 7.597,0.061 z "
+         id="path6343-63" />
+    </pattern>
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-0"
+       id="pattern6040-4"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-9"
+       id="pattern6200"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-0"
+       id="pattern6038-8"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-9"
+       id="pattern6207"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-0"
+       id="pattern6036-0"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-9"
+       id="pattern6214"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-0"
+       id="pattern6034-4"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-9"
+       id="pattern6221"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-0"
+       id="pattern6032-9"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-9"
+       id="pattern6228"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-0"
+       id="pattern6030-4"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-9"
+       id="pattern6235"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-0"
+       id="pattern6028-1"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-9"
+       id="pattern6242"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-90"
+       id="linearGradient104850"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient2202-1-90">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-0" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-56" />
+    </linearGradient>
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-6"
+       id="pattern6042-0"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-4"
+       id="pattern6024-6"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       patternUnits="userSpaceOnUse"
+       width="30.066020"
+       height="5.1805778"
+       id="Wavy-4"
+       inkscape:stockid="Wavy">
+      <path
+         style="fill:black;stroke:none;"
+         d="M 7.597,0.061 C 5.079,-0.187 2.656,0.302 -0.01,1.788 L -0.01,3.061 C 2.773,1.431 5.173,1.052 7.472,1.280 C 9.770,1.508 11.969,2.361 14.253,3.218 C 18.820,4.931 23.804,6.676 30.066,3.061 L 30.062,1.788 C 23.622,5.497 19.246,3.770 14.691,2.061 C 12.413,1.207 10.115,0.311 7.597,0.061 z "
+         id="path6343-5" />
+    </pattern>
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-6"
+       id="pattern6040-7"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-4"
+       id="pattern6257"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-6"
+       id="pattern6038-27"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-4"
+       id="pattern6264"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-6"
+       id="pattern6036-2"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-4"
+       id="pattern6271"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-6"
+       id="pattern6034-5"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-4"
+       id="pattern6278"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-6"
+       id="pattern6032-3"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-4"
+       id="pattern6285"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-6"
+       id="pattern6030-42"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-4"
+       id="pattern6292"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-6"
+       id="pattern6028-0"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-4"
+       id="pattern6299"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-52"
+       id="linearGradient104852"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient2202-1-52">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-54" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-55" />
+    </linearGradient>
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-2"
+       id="pattern6042-7"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-92"
+       id="pattern6024-2"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       patternUnits="userSpaceOnUse"
+       width="30.066020"
+       height="5.1805778"
+       id="Wavy-92"
+       inkscape:stockid="Wavy">
+      <path
+         style="fill:black;stroke:none;"
+         d="M 7.597,0.061 C 5.079,-0.187 2.656,0.302 -0.01,1.788 L -0.01,3.061 C 2.773,1.431 5.173,1.052 7.472,1.280 C 9.770,1.508 11.969,2.361 14.253,3.218 C 18.820,4.931 23.804,6.676 30.066,3.061 L 30.062,1.788 C 23.622,5.497 19.246,3.770 14.691,2.061 C 12.413,1.207 10.115,0.311 7.597,0.061 z "
+         id="path6343-9" />
+    </pattern>
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-2"
+       id="pattern6040-5"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-92"
+       id="pattern6314"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-2"
+       id="pattern6038-6"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-92"
+       id="pattern6321"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-2"
+       id="pattern6036-8"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-92"
+       id="pattern6328"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-2"
+       id="pattern6034-0"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-92"
+       id="pattern6335"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-2"
+       id="pattern6032-4"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-92"
+       id="pattern6342"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-2"
+       id="pattern6030-5"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-92"
+       id="pattern6349"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-2"
+       id="pattern6028-7"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-92"
+       id="pattern6356"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-19"
+       id="linearGradient104854"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,575.71683,124.9737)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient2202-1-19">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-7" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-06" />
+    </linearGradient>
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-67"
+       id="pattern6042-2"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-6"
+       id="pattern6024-67"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       patternUnits="userSpaceOnUse"
+       width="30.066020"
+       height="5.1805778"
+       id="Wavy-6"
+       inkscape:stockid="Wavy">
+      <path
+         style="fill:black;stroke:none;"
+         d="M 7.597,0.061 C 5.079,-0.187 2.656,0.302 -0.01,1.788 L -0.01,3.061 C 2.773,1.431 5.173,1.052 7.472,1.280 C 9.770,1.508 11.969,2.361 14.253,3.218 C 18.820,4.931 23.804,6.676 30.066,3.061 L 30.062,1.788 C 23.622,5.497 19.246,3.770 14.691,2.061 C 12.413,1.207 10.115,0.311 7.597,0.061 z "
+         id="path6343-7" />
+    </pattern>
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-67"
+       id="pattern6040-43"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-6"
+       id="pattern6371"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-67"
+       id="pattern6038-7"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-6"
+       id="pattern6378"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-67"
+       id="pattern6036-83"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-6"
+       id="pattern6385"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-67"
+       id="pattern6034-16"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-6"
+       id="pattern6392"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-67"
+       id="pattern6032-92"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-6"
+       id="pattern6399"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-67"
+       id="pattern6030-6"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-6"
+       id="pattern6406"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#pattern6024-67"
+       id="pattern6028-2"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,719.32799,775.7824)" />
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Wavy-6"
+       id="pattern6413"
+       patternTransform="matrix(0.562565,0.3226862,-0.3226862,0.562565,37.897429,823.71177)" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19"
+       id="radialGradient104856"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       id="linearGradient2202-19">
+      <stop
+         id="stop2204-02"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop2206-3"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19"
+       id="radialGradient104858"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       id="linearGradient6424">
+      <stop
+         id="stop6426"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop6428"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104860"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient4068-4">
+      <stop
+         id="stop4070-2"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop4490-5"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop4492-2"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop4072-4"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104862"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6437">
+      <stop
+         id="stop6439"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6441"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6443"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6445"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104864"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6448">
+      <stop
+         id="stop6450"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6452"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6454"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6456"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104866"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6459">
+      <stop
+         id="stop6461"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6463"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6465"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6467"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104868"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6470">
+      <stop
+         id="stop6472"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6474"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6476"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6478"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104870"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6481">
+      <stop
+         id="stop6483"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6485"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6487"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6489"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104872"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6492">
+      <stop
+         id="stop6494"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6496"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6498"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6500"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104874"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6503">
+      <stop
+         id="stop6505"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6507"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6509"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6511"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104876"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6514">
+      <stop
+         id="stop6516"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6518"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6520"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6522"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104878"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6525">
+      <stop
+         id="stop6527"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6529"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6531"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6533"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104880"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6536">
+      <stop
+         id="stop6538"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6540"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6542"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6544"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104882"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6547">
+      <stop
+         id="stop6549"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6551"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6553"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6555"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104884"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6558">
+      <stop
+         id="stop6560"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6562"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6564"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6566"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104886"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6569">
+      <stop
+         id="stop6571"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6573"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6575"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6577"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104888"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6580">
+      <stop
+         id="stop6582"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6584"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6586"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6588"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104890"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6591">
+      <stop
+         id="stop6593"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6595"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6597"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6599"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104892"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6602">
+      <stop
+         id="stop6604"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6606"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6608"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6610"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104894"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6613">
+      <stop
+         id="stop6615"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6617"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6619"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6621"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104896"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6624">
+      <stop
+         id="stop6626"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6628"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6630"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6632"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104898"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6635">
+      <stop
+         id="stop6637"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6639"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6641"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6643"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104900"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6646">
+      <stop
+         id="stop6648"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6650"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6652"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6654"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104902"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6657">
+      <stop
+         id="stop6659"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6661"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6663"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6665"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104904"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6668">
+      <stop
+         id="stop6670"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6672"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6674"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6676"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104906"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6679">
+      <stop
+         id="stop6681"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6683"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6685"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6687"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient104908"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       id="linearGradient6690">
+      <stop
+         id="stop6692"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop6694"
+         offset="0.67741936"
+         style="stop-color:#000000;stop-opacity:0.49803922;" />
+      <stop
+         id="stop6696"
+         offset="0.86472428"
+         style="stop-color:#000000;stop-opacity:0.24705882;" />
+      <stop
+         id="stop6698"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5178-3"
+       id="radialGradient104910"
+       gradientUnits="userSpaceOnUse"
+       cx="384.69696"
+       cy="571.95715"
+       fx="384.69696"
+       fy="571.95715"
+       r="24.998358" />
+    <linearGradient
+       id="linearGradient5178-3">
+      <stop
+         id="stop5180-4"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop5186-9"
+         offset="0.89021850"
+         style="stop-color:#ffffff;stop-opacity:0.49803922;" />
+      <stop
+         id="stop5188-2"
+         offset="0.95396262"
+         style="stop-color:#ffffff;stop-opacity:0.24705882;" />
+      <stop
+         id="stop5182-7"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-54"
+       id="linearGradient104912"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient2202-1-54">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-57" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-52" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-54"
+       id="radialGradient104914"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6711">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6713" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6715" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient414-2"
+       id="linearGradient104916"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5806141,-0.290307,0,0.8294487,1235.5061,-245.10175)"
+       x1="-137.36061"
+       y1="472.52106"
+       x2="-124.93314"
+       y2="487.91693" />
+    <linearGradient
+       id="linearGradient414-2">
+      <stop
+         id="stop415-6"
+         offset="0.00000000"
+         style="stop-color:#ffd800;stop-opacity:1.0000000;" />
+      <stop
+         id="stop416-0"
+         offset="1.0000000"
+         style="stop-color:#e77900;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19-1"
+       id="radialGradient104918"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       id="linearGradient2202-19-1">
+      <stop
+         id="stop2204-02-4"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop2206-3-1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-31"
+       id="linearGradient104920"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,177.55089,360.10086)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient2202-31">
+      <stop
+         id="stop2204-2"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop2206-99"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-31"
+       id="radialGradient104922"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,4.3122209,343.74329,-552.89392)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6730">
+      <stop
+         id="stop6732"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop6734"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <pattern
+       patternTransform="matrix(0,5.5342899,-7.4864232,0,521.74506,337.35904)"
+       id="pattern118687-0"
+       xlink:href="#Strips1_1-6"
+       inkscape:collect="always" />
+    <pattern
+       inkscape:collect="always"
+       patternUnits="userSpaceOnUse"
+       width="2"
+       height="1"
+       patternTransform="matrix(0,5.5342899,-7.4864229,0,31.668795,357.00572)"
+       id="Strips1_1-6"
+       inkscape:stockid="Stripes 1:1">
+      <rect
+         style="fill:black;stroke:none"
+         x="0"
+         y="-0.5"
+         width="1"
+         height="2"
+         id="rect5260-9" />
+    </pattern>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-95"
+       id="linearGradient104924"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient2202-1-95">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-72" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-406" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-95"
+       id="radialGradient104926"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6744">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6746" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6748" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1-25"
+       id="radialGradient104928"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       id="linearGradient2202-2-1-25">
+      <stop
+         id="stop2204-6-0-41"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop2206-6-0-8"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4-2"
+       id="linearGradient104930"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient2202-1-5-4-2">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-8-4-5" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-5-2-1" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4-2"
+       id="radialGradient104932"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6759">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6761" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6763" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3-0"
+       id="linearGradient104934"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient2202-1-8-3-0">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-1-4-2" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-2-7-6" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3-0"
+       id="radialGradient104936"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6770">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6772" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6774" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8-0"
+       id="linearGradient104938"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient2202-1-9-8-0">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-4-0-0" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-8-1-3" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8-0"
+       id="radialGradient104940"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6781">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6783" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6785" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3-2"
+       id="linearGradient104942"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient2202-1-93-3-2">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop2204-5-6-1-0" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop2206-5-21-0-1" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3-2"
+       id="radialGradient104944"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6792">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6794" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6796" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1-25"
+       id="radialGradient104946"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       id="linearGradient6799">
+      <stop
+         id="stop6801"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop6803"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1-25"
+       id="radialGradient6805"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       id="linearGradient6807">
+      <stop
+         id="stop6809"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop6811"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4-2"
+       id="linearGradient6813"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient6815">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6817" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6819" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4-2"
+       id="radialGradient6821"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6823">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6825" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6827" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3-0"
+       id="linearGradient6829"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient6831">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6833" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6835" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3-0"
+       id="radialGradient6837"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6839">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6841" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6843" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8-0"
+       id="linearGradient6845"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient6847">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6849" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6851" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8-0"
+       id="radialGradient6853"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6855">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6857" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6859" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3-2"
+       id="linearGradient6861"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient6863">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6865" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6867" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3-2"
+       id="radialGradient6869"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6871">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6873" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6875" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1-25"
+       id="radialGradient6877"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       id="linearGradient6879">
+      <stop
+         id="stop6881"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop6883"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1-25"
+       id="radialGradient6885"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       id="linearGradient6887">
+      <stop
+         id="stop6889"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop6891"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4-2"
+       id="linearGradient6893"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient6895">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6897" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6899" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4-2"
+       id="radialGradient6901"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6903">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6905" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6907" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3-0"
+       id="linearGradient6909"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient6911">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6913" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6915" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3-0"
+       id="radialGradient6917"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6919">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6921" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6923" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8-0"
+       id="linearGradient6925"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient6927">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6929" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6931" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8-0"
+       id="radialGradient6933"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6935">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6937" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6939" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3-2"
+       id="linearGradient6941"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient6943">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6945" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6947" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3-2"
+       id="radialGradient6949"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6951">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6953" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6955" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1-25"
+       id="radialGradient6957"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       id="linearGradient6959">
+      <stop
+         id="stop6961"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop6963"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1-25"
+       id="radialGradient6965"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       id="linearGradient6967">
+      <stop
+         id="stop6969"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop6971"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4-2"
+       id="linearGradient6973"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient6975">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6977" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6979" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4-2"
+       id="radialGradient6981"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6983">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6985" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6987" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3-0"
+       id="linearGradient6989"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient6991">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop6993" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop6995" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3-0"
+       id="radialGradient6997"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient6999">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop7001" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop7003" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8-0"
+       id="linearGradient7005"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient7007">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop7009" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop7011" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8-0"
+       id="radialGradient7013"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient7015">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop7017" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop7019" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3-2"
+       id="linearGradient7021"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <linearGradient
+       id="linearGradient7023">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop7025" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop7027" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3-2"
+       id="radialGradient7029"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       id="linearGradient7031">
+      <stop
+         offset="0"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         id="stop7033" />
+      <stop
+         offset="1"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         id="stop7035" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1-25"
+       id="radialGradient7037"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       id="linearGradient7039">
+      <stop
+         id="stop7041"
+         style="stop-color: rgb(121, 121, 121); stop-opacity: 1;"
+         offset="0" />
+      <stop
+         id="stop7043"
+         style="stop-color: rgb(203, 203, 203); stop-opacity: 1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-53"
+       id="linearGradient14934"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-53"
+       id="radialGradient14936"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-51"
+       id="linearGradient14938"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-51"
+       id="radialGradient14940"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-7"
+       id="linearGradient14942"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-7"
+       id="radialGradient14944"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-87"
+       id="linearGradient14946"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-87"
+       id="radialGradient14948"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19"
+       id="radialGradient14960"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19"
+       id="radialGradient14962"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient14964"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient14966"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient14968"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient14970"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient14972"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient14974"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient14976"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient14978"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient14980"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient14982"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient14984"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient14986"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient14988"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient14990"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient14992"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient14994"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient14996"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient14998"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient15000"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient15002"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient15004"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient15006"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient15008"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient15010"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4068-4"
+       id="linearGradient15012"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.003627,0.996386)"
+       spreadMethod="reflect"
+       x1="145.52031"
+       y1="993.39124"
+       x2="191.89183"
+       y2="1061.9722" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5178-3"
+       id="radialGradient15014"
+       gradientUnits="userSpaceOnUse"
+       cx="384.69696"
+       cy="571.95715"
+       fx="384.69696"
+       fy="571.95715"
+       r="24.998358" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-19-1"
+       id="radialGradient15022"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-31"
+       id="linearGradient15024"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,2.7721412,177.55089,360.10086)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-31"
+       id="radialGradient15026"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.7721412,0,0,4.3122209,343.74329,-552.89392)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-95"
+       id="linearGradient15028"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-95"
+       id="radialGradient15030"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1-25"
+       id="radialGradient15032"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4-2"
+       id="linearGradient15034"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4-2"
+       id="radialGradient15036"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3-0"
+       id="linearGradient15038"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3-0"
+       id="radialGradient15040"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8-0"
+       id="linearGradient15042"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8-0"
+       id="radialGradient15044"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3-2"
+       id="linearGradient15046"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3-2"
+       id="radialGradient15048"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1-25"
+       id="radialGradient15050"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1-25"
+       id="radialGradient16536"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4-2"
+       id="linearGradient16538"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-5-4-2"
+       id="radialGradient16540"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3-0"
+       id="linearGradient16542"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-8-3-0"
+       id="radialGradient16544"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8-0"
+       id="linearGradient16546"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-9-8-0"
+       id="radialGradient16548"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3-2"
+       id="linearGradient16550"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-153,-176.36218)"
+       x1="175"
+       y1="207.36218"
+       x2="195"
+       y2="207.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-1-93-3-2"
+       id="radialGradient16552"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,1.555556,-93.049086,-505.7086)"
+       cx="109"
+       cy="349.86218"
+       fx="109"
+       fy="349.86218"
+       r="4.5" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2202-2-1-25"
+       id="radialGradient16554"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(3.4620994,1.6838767,-1.3244276,2.7230693,24.214335,-863.95328)"
+       cx="97.48214"
+       cy="265.86209"
+       fx="97.48214"
+       fy="265.86209"
+       r="3" />
+    <inkscape:perspective
+       id="perspective16564"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <filter
+       inkscape:collect="always"
+       id="filter5401">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="26.597254"
+         id="feGaussianBlur5403" />
+    </filter>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.7"
+     inkscape:cx="200.23028"
+     inkscape:cy="680.6443"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     borderlayer="true"
+     inkscape:window-width="1325"
+     inkscape:window-height="958"
+     inkscape:window-x="289"
+     inkscape:window-y="44"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata7747">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+        <cc:license
+           rdf:resource="" />
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>David Pravec &lt;alekibango@danix.org&gt;</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:rights>
+          <cc:Agent>
+            <dc:title>released under terms of Apache License</dc:title>
+          </cc:Agent>
+        </dc:rights>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Layer">
+    <rect
+       style="opacity:1;fill:#fffbff;fill-opacity:1;stroke:#808080;stroke-width:1.92965995999999995;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;filter:url(#filter5401)"
+       id="rect4606"
+       width="720.59534"
+       height="1052.5549"
+       x="7.3978581"
+       y="4.8459768" />
+  </g>
+  <g
+     inkscape:label="Vrstva 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="display:inline">
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="145.14323"
+       y="24.228884"
+       id="text40315"><tspan
+         sodipodi:role="line"
+         id="tspan40317"
+         x="145.14323"
+         y="24.228884"
+         style="font-weight:bold">C) More computers, but still only 1 cluster,</tspan><tspan
+         sodipodi:role="line"
+         x="145.14323"
+         y="36.728882"
+         id="tspan40319"
+         style="font-weight:bold">not distributed geographically</tspan></text>
+    <g
+       transform="matrix(0.96760451,0,0,0.96760451,-73.224015,-53.928306)"
+       id="g27482">
+      <path
+         id="path27117-4"
+         d="m 738.35469,914.58244 60.1019,-30.62352"
+         style="fill:none;stroke:#808080;stroke-width:2.16065431;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="M 532.25111,996.69188 478.6698,1023.993"
+         id="path32493" />
+      <path
+         id="path32495"
+         d="m 405.72169,932.61984 -53.58133,27.30109"
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 279.19222,868.5478 -53.58134,27.30108"
+         id="path32497" />
+      <path
+         id="path32499"
+         d="M 152.66277,804.47575 99.081434,831.77684"
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path32501"
+         d="M 477.68954,1024.0781 98.420334,831.26468"
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         sodipodi:nodetypes="cc" />
+      <path
+         sodipodi:nodetypes="cc"
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="M 487.64197,1117.5452 218.34365,981.27825"
+         id="path36366" />
+      <path
+         id="path31410"
+         d="M 618.80039,800.81053 388.38639,683.59107"
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         sodipodi:nodetypes="cc" />
+      <g
+         transform="translate(-1.9553878,0.27934112)"
+         id="g92765">
+        <path
+           id="path31406"
+           d="m 443.70447,656.64984 -53.58134,27.30109"
+           style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <path
+           style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 466.14451,668.13188 -53.58134,27.30109"
+           id="path31408" />
+        <path
+           id="path31634"
+           d="M 488.58463,679.61391 435.00328,706.915"
+           style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <path
+           style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 511.02467,691.09594 -53.58134,27.30109"
+           id="path31636" />
+      </g>
+      <g
+         transform="matrix(0.38524834,0,0,0.38524834,1.9170441,-0.21929845)"
+         id="g31422">
+        <g
+           id="g3346-3"
+           transform="translate(45.388822,1591.2158)">
+          <g
+             id="g117421-5"
+             transform="translate(897.38434,-46.491083)">
+            <g
+               id="g117423-9"
+               inkscape:label="Calque 1"
+               transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+              <path
+                 id="path117425-2"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <path
+                 id="path117427-6"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <path
+                 id="path117429-7"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <g
+                 id="g117431-5">
+                <path
+                   id="path117433-6"
+                   d="M 2,11 22,1 42,11 22,21 2,11 z"
+                   style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   id="path117435-3"
+                   d="M 2,11 2,41 22,51 22,21 2,11 z"
+                   style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   sodipodi:nodetypes="ccccc"
+                   id="path117437-1"
+                   d="M 22,51 42,41 42,11 22,21 22,51 z"
+                   style="fill:url(#linearGradient104830);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                   id="path117439-7"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                   id="path117441-9" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                   id="path117443-5"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                   id="path117445-2" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                   id="path117447-8"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                   id="path117449-9" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                   id="path117451-2" />
+                <path
+                   sodipodi:nodetypes="ccccc"
+                   id="path117453-8"
+                   d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                   style="fill:url(#radialGradient104832);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                   id="path117455-2" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                   id="path117457-0" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                   id="path117459-5"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                   id="path117461-4" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                   id="path117463-1" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                   id="path117465-0" />
+              </g>
+            </g>
+          </g>
+          <g
+             inkscape:label="Calque 1"
+             id="g109152-0"
+             transform="matrix(0.2766711,-0.1383356,0,0.2555605,1099.9201,-86.84348)"
+             style="fill:#00ff00;fill-opacity:1">
+            <path
+               style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               d="m 174.71965,639.58466 c -29.19719,0 -52.90625,13.34326 -52.90625,29.78125 l 0,119.125 c 0,16.43799 23.70907,29.78125 52.90625,29.78125 29.19719,-10e-6 52.90625,-13.34324 52.90625,-29.78125 l 0,-119.125 -0.0312,0 c 0,-16.43799 -23.67781,-29.78125 -52.875,-29.78125 z"
+               id="path109154-2" />
+            <path
+               sodipodi:type="arc"
+               style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:2.93746948;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               id="path109156-5"
+               sodipodi:cx="184.11563"
+               sodipodi:cy="698.03149"
+               sodipodi:rx="30.68594"
+               sodipodi:ry="17.716536"
+               d="m 214.80157,698.03149 c 0,9.78458 -13.73856,17.71654 -30.68594,17.71654 -16.94738,0 -30.68594,-7.93196 -30.68594,-17.71654 0,-9.78457 13.73856,-17.71653 30.68594,-17.71653 16.94738,0 30.68594,7.93196 30.68594,17.71653 z"
+               transform="matrix(1.6638767,0,0,1.6225174,-131.61326,-463.20234)" />
+          </g>
+        </g>
+        <g
+           id="g3346-1"
+           transform="translate(105.4361,1621.5028)">
+          <g
+             id="g117421-9"
+             transform="translate(897.38434,-46.491083)">
+            <g
+               id="g117423-8"
+               inkscape:label="Calque 1"
+               transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+              <path
+                 id="path117425-5"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <path
+                 id="path117427-7"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <path
+                 id="path117429-3"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <g
+                 id="g117431-54">
+                <path
+                   id="path117433-9"
+                   d="M 2,11 22,1 42,11 22,21 2,11 z"
+                   style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   id="path117435-8"
+                   d="M 2,11 2,41 22,51 22,21 2,11 z"
+                   style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   sodipodi:nodetypes="ccccc"
+                   id="path117437-4"
+                   d="M 22,51 42,41 42,11 22,21 22,51 z"
+                   style="fill:url(#linearGradient104834);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                   id="path117439-9"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                   id="path117441-3" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                   id="path117443-2"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                   id="path117445-4" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                   id="path117447-9"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                   id="path117449-4" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                   id="path117451-8" />
+                <path
+                   sodipodi:nodetypes="ccccc"
+                   id="path117453-9"
+                   d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                   style="fill:url(#radialGradient104836);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                   id="path117455-3" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                   id="path117457-3" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                   id="path117459-2"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                   id="path117461-9" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                   id="path117463-7" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                   id="path117465-3" />
+              </g>
+            </g>
+          </g>
+          <g
+             inkscape:label="Calque 1"
+             id="g109152-2"
+             transform="matrix(0.2766711,-0.1383356,0,0.2555605,1099.9201,-86.84348)"
+             style="fill:#00ff00;fill-opacity:1">
+            <path
+               style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               d="m 174.71965,639.58466 c -29.19719,0 -52.90625,13.34326 -52.90625,29.78125 l 0,119.125 c 0,16.43799 23.70907,29.78125 52.90625,29.78125 29.19719,-10e-6 52.90625,-13.34324 52.90625,-29.78125 l 0,-119.125 -0.0312,0 c 0,-16.43799 -23.67781,-29.78125 -52.875,-29.78125 z"
+               id="path109154-5" />
+            <path
+               sodipodi:type="arc"
+               style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:2.93746948;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               id="path109156-53"
+               sodipodi:cx="184.11563"
+               sodipodi:cy="698.03149"
+               sodipodi:rx="30.68594"
+               sodipodi:ry="17.716536"
+               d="m 214.80157,698.03149 c 0,9.78458 -13.73856,17.71654 -30.68594,17.71654 -16.94738,0 -30.68594,-7.93196 -30.68594,-17.71654 0,-9.78457 13.73856,-17.71653 30.68594,-17.71653 16.94738,0 30.68594,7.93196 30.68594,17.71653 z"
+               transform="matrix(1.6638767,0,0,1.6225174,-131.61326,-463.20234)" />
+          </g>
+        </g>
+        <g
+           id="g3346-0"
+           transform="translate(167.06359,1653.3699)">
+          <g
+             id="g117421-6"
+             transform="translate(897.38434,-46.491083)">
+            <g
+               id="g117423-6"
+               inkscape:label="Calque 1"
+               transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+              <path
+                 id="path117425-3"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <path
+                 id="path117427-8"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <path
+                 id="path117429-1"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <g
+                 id="g117431-3">
+                <path
+                   id="path117433-4"
+                   d="M 2,11 22,1 42,11 22,21 2,11 z"
+                   style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   id="path117435-1"
+                   d="M 2,11 2,41 22,51 22,21 2,11 z"
+                   style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   sodipodi:nodetypes="ccccc"
+                   id="path117437-48"
+                   d="M 22,51 42,41 42,11 22,21 22,51 z"
+                   style="fill:url(#linearGradient104838);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                   id="path117439-6"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                   id="path117441-8" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                   id="path117443-7"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                   id="path117445-5" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                   id="path117447-1"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                   id="path117449-93" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                   id="path117451-83" />
+                <path
+                   sodipodi:nodetypes="ccccc"
+                   id="path117453-94"
+                   d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                   style="fill:url(#radialGradient104840);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                   id="path117455-25" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                   id="path117457-9" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                   id="path117459-4"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                   id="path117461-1" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                   id="path117463-8" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                   id="path117465-4" />
+              </g>
+            </g>
+          </g>
+          <g
+             inkscape:label="Calque 1"
+             id="g109152-1"
+             transform="matrix(0.2766711,-0.1383356,0,0.2555605,1099.9201,-86.84348)"
+             style="fill:#00ff00;fill-opacity:1">
+            <path
+               style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               d="m 174.71965,639.58466 c -29.19719,0 -52.90625,13.34326 -52.90625,29.78125 l 0,119.125 c 0,16.43799 23.70907,29.78125 52.90625,29.78125 29.19719,-10e-6 52.90625,-13.34324 52.90625,-29.78125 l 0,-119.125 -0.0312,0 c 0,-16.43799 -23.67781,-29.78125 -52.875,-29.78125 z"
+               id="path109154-7" />
+            <path
+               sodipodi:type="arc"
+               style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:2.93746948;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               id="path109156-7"
+               sodipodi:cx="184.11563"
+               sodipodi:cy="698.03149"
+               sodipodi:rx="30.68594"
+               sodipodi:ry="17.716536"
+               d="m 214.80157,698.03149 c 0,9.78458 -13.73856,17.71654 -30.68594,17.71654 -16.94738,0 -30.68594,-7.93196 -30.68594,-17.71654 0,-9.78457 13.73856,-17.71653 30.68594,-17.71653 16.94738,0 30.68594,7.93196 30.68594,17.71653 z"
+               transform="matrix(1.6638767,0,0,1.6225174,-131.61326,-463.20234)" />
+          </g>
+        </g>
+        <g
+           id="g3346-03"
+           transform="translate(228.69107,1685.2371)">
+          <g
+             id="g117421-1"
+             transform="translate(897.38434,-46.491083)">
+            <g
+               id="g117423-1"
+               inkscape:label="Calque 1"
+               transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+              <path
+                 id="path117425-6"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <path
+                 id="path117427-2"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <path
+                 id="path117429-6"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <g
+                 id="g117431-6">
+                <path
+                   id="path117433-68"
+                   d="M 2,11 22,1 42,11 22,21 2,11 z"
+                   style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   id="path117435-37"
+                   d="M 2,11 2,41 22,51 22,21 2,11 z"
+                   style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   sodipodi:nodetypes="ccccc"
+                   id="path117437-5"
+                   d="M 22,51 42,41 42,11 22,21 22,51 z"
+                   style="fill:url(#linearGradient104842);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                   id="path117439-4"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                   id="path117441-6" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                   id="path117443-1"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                   id="path117445-7" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                   id="path117447-3"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                   id="path117449-8" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                   id="path117451-9" />
+                <path
+                   sodipodi:nodetypes="ccccc"
+                   id="path117453-99"
+                   d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                   style="fill:url(#radialGradient104844);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                   id="path117455-9" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                   id="path117457-8" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                   id="path117459-6"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                   id="path117461-3" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                   id="path117463-88" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                   id="path117465-6" />
+              </g>
+            </g>
+          </g>
+          <g
+             inkscape:label="Calque 1"
+             id="g109152-6"
+             transform="matrix(0.2766711,-0.1383356,0,0.2555605,1099.9201,-86.84348)"
+             style="fill:#00ff00;fill-opacity:1">
+            <path
+               style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               d="m 174.71965,639.58466 c -29.19719,0 -52.90625,13.34326 -52.90625,29.78125 l 0,119.125 c 0,16.43799 23.70907,29.78125 52.90625,29.78125 29.19719,-10e-6 52.90625,-13.34324 52.90625,-29.78125 l 0,-119.125 -0.0312,0 c 0,-16.43799 -23.67781,-29.78125 -52.875,-29.78125 z"
+               id="path109154-8" />
+            <path
+               sodipodi:type="arc"
+               style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:2.93746948;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               id="path109156-8"
+               sodipodi:cx="184.11563"
+               sodipodi:cy="698.03149"
+               sodipodi:rx="30.68594"
+               sodipodi:ry="17.716536"
+               d="m 214.80157,698.03149 c 0,9.78458 -13.73856,17.71654 -30.68594,17.71654 -16.94738,0 -30.68594,-7.93196 -30.68594,-17.71654 0,-9.78457 13.73856,-17.71653 30.68594,-17.71653 16.94738,0 30.68594,7.93196 30.68594,17.71653 z"
+               transform="matrix(1.6638767,0,0,1.6225174,-131.61326,-463.20234)" />
+          </g>
+        </g>
+      </g>
+      <g
+         id="g92776">
+        <path
+           style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 578.38131,725.14266 -53.58134,27.30108"
+           id="path31688" />
+        <path
+           id="path31690"
+           d="m 601.64743,737.31493 -53.58134,27.30108"
+           style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <path
+           style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 624.91356,749.4872 -53.58134,27.30108"
+           id="path31692" />
+        <path
+           id="path31694"
+           d="m 648.17965,761.65948 -53.58134,27.30108"
+           style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <path
+           style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="M 671.26968,773.91981 618.04053,801.0448"
+           id="path31696"
+           sodipodi:nodetypes="cc" />
+      </g>
+      <g
+         transform="matrix(0.38524834,0,0,0.38524834,155.17354,602.47061)"
+         id="g3925-3">
+        <g
+           id="g108584-1"
+           transform="translate(59.882331,-420.31793)">
+          <g
+             id="g92198-5">
+            <path
+               id="path5361-5"
+               d="m 1005.3987,644.36812 55.4428,-27.72141 55.4429,27.72141 -55.4429,27.72142 -55.4428,-27.72142 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path5363-3"
+               d="m 1005.3987,644.36812 0,83.16424 55.4428,27.72141 0,-83.16423 -55.4428,-27.72142 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path5365-3"
+               d="m 1060.8415,755.25377 55.4429,-27.72141 0,-83.16424 -55.4429,27.72142 0,83.16423 z"
+               style="fill:url(#linearGradient104846);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 1060.8415,615.08738 -0.6064,0.34652 -55.4428,27.72141 -0.7797,0.34652 0,0.86629 0,83.16424 0,0.86629 0.7797,0.34652 55.4428,27.72141 0.6064,0.34652 0.6064,-0.34652 55.4429,-27.72141 0.7796,-0.34652 0,-0.86629 0,-83.16424 0,-0.86629 -0.7796,-0.34652 -55.4429,-27.72141 -0.6064,-0.34652 z m 0,3.11866 54.0568,27.02838 0,81.43165 -54.0568,27.02837 -54.0567,-27.02837 0,-81.43165 54.0567,-27.02838 z"
+               id="path5391-6" />
+            <path
+               style="fill:url(#pattern6042-6);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1010.0335,651.21095 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4979-5"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:url(#pattern6040-9);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1022.9003,658.59748 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4981-4"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:url(#pattern6038-2);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1035.7672,665.26918 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4983-9"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               d="m 1048.3958,671.70261 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4985-3"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4977-8"
+               d="m 1048.3958,671.70261 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6036-5);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4987-5"
+               d="m 1010.0335,689.81151 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6034-1);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4989-8"
+               d="m 1022.9003,697.19804 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6032-6);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4991-6"
+               d="m 1035.7672,703.86974 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6030-0);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               style="fill:url(#pattern6028-4);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1048.3958,710.30317 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4993-0"
+               sodipodi:nodetypes="ccccc" />
+          </g>
+        </g>
+        <g
+           transform="matrix(0.4481573,-0.2240787,0,0.6402247,1001.8024,-178.48439)"
+           id="g108970-7">
+          <path
+             d="m 314.09476,861.04125 c -1.56438,0.834 -3.6901,0.50384 -4.68956,-1.58568 -0.84011,-1.93879 -15.12073,-31.80949 -15.51636,-32.75301 -1.17184,-2.57186 -0.21709,-4.29384 1.44804,-5.1975 2.29126,-1.26473 21.81453,-11.77888 23.51292,-12.64626 1.86955,-1.02115 3.89506,-0.88867 5.13133,1.65883 0.9779,2.05018 14.86956,31.16397 15.69988,32.85344 0.87451,1.81637 0.0508,3.97006 -1.72579,4.83701 -1.32383,0.66683 -22.9908,12.34832 -23.86046,12.83317 z"
+             id="path108972-9"
+             style="font-size:12px;fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#005800;stroke-width:1.74380612" />
+          <path
+             d="m 314.23273,847.2469 c -1.75078,-0.007 -3.50603,-1.32081 -3.50687,-3.66398 0.0771,-2.13226 0.0716,-35.62533 0.12093,-36.65668 0.051,-2.85603 1.63653,-3.93391 3.50687,-3.94111 2.5827,-0.0289 24.47747,-0.0411 26.36202,0 2.10274,-0.0139 3.85286,1.07587 3.8697,3.94111 -0.002,2.29773 -0.0205,34.9291 -2e-5,36.8343 0.006,2.03958 -1.64681,3.56538 -3.60097,3.48636 -1.46498,-0.0403 -25.76932,-0.0153 -26.75166,0 z"
+             id="path108974-5"
+             style="font-size:12px;fill:#ffffeb;fill-opacity:1;fill-rule:evenodd;stroke:#005800;stroke-width:1.743806" />
+          <path
+             d="m 322.93888,855.54573 c -1.47013,-1.00866 -2.27836,-3.12041 -1.08622,-5.09293 1.15034,-1.7504 18.19628,-29.94194 18.7628,-30.78168 1.49688,-2.37446 3.37999,-2.37319 4.95778,-1.30763 2.18836,1.45544 20.62163,13.98988 22.18679,15.10424 1.77679,1.19305 2.69491,3.113 1.25047,5.53408 -1.17108,1.93287 -17.79882,29.38525 -18.75145,31.00043 -1.03344,1.71987 -3.20105,2.05714 -4.80547,0.87102 -1.21244,-0.8733 -21.68017,-14.77752 -22.5147,-15.32753 z"
+             id="path108976-7"
+             style="font-size:12px;fill:#000080;fill-opacity:1;fill-rule:evenodd;stroke:#005800;stroke-width:1.743806" />
+        </g>
+      </g>
+      <g
+         transform="matrix(0.38524834,0,0,0.38524834,179.01425,614.60464)"
+         id="g3925-5">
+        <g
+           id="g108584-0"
+           transform="translate(59.882331,-420.31793)">
+          <g
+             id="g92198-1">
+            <path
+               id="path5361-58"
+               d="m 1005.3987,644.36812 55.4428,-27.72141 55.4429,27.72141 -55.4429,27.72142 -55.4428,-27.72142 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path5363-6"
+               d="m 1005.3987,644.36812 0,83.16424 55.4428,27.72141 0,-83.16423 -55.4428,-27.72142 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path5365-0"
+               d="m 1060.8415,755.25377 55.4429,-27.72141 0,-83.16424 -55.4429,27.72142 0,83.16423 z"
+               style="fill:url(#linearGradient104848);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 1060.8415,615.08738 -0.6064,0.34652 -55.4428,27.72141 -0.7797,0.34652 0,0.86629 0,83.16424 0,0.86629 0.7797,0.34652 55.4428,27.72141 0.6064,0.34652 0.6064,-0.34652 55.4429,-27.72141 0.7796,-0.34652 0,-0.86629 0,-83.16424 0,-0.86629 -0.7796,-0.34652 -55.4429,-27.72141 -0.6064,-0.34652 z m 0,3.11866 54.0568,27.02838 0,81.43165 -54.0568,27.02837 -54.0567,-27.02837 0,-81.43165 54.0567,-27.02838 z"
+               id="path5391-1" />
+            <path
+               style="fill:url(#pattern6042-3);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1010.0335,651.21095 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4979-0"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:url(#pattern6040-4);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1022.9003,658.59748 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4981-7"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:url(#pattern6038-8);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1035.7672,665.26918 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4983-1"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               d="m 1048.3958,671.70261 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4985-7"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4977-0"
+               d="m 1048.3958,671.70261 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6036-0);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4987-3"
+               d="m 1010.0335,689.81151 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6034-4);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4989-9"
+               d="m 1022.9003,697.19804 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6032-9);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4991-8"
+               d="m 1035.7672,703.86974 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6030-4);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               style="fill:url(#pattern6028-1);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1048.3958,710.30317 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4993-6"
+               sodipodi:nodetypes="ccccc" />
+          </g>
+        </g>
+        <g
+           transform="matrix(0.4481573,-0.2240787,0,0.6402247,1001.8024,-178.48439)"
+           id="g108970-5">
+          <path
+             d="m 314.09476,861.04125 c -1.56438,0.834 -3.6901,0.50384 -4.68956,-1.58568 -0.84011,-1.93879 -15.12073,-31.80949 -15.51636,-32.75301 -1.17184,-2.57186 -0.21709,-4.29384 1.44804,-5.1975 2.29126,-1.26473 21.81453,-11.77888 23.51292,-12.64626 1.86955,-1.02115 3.89506,-0.88867 5.13133,1.65883 0.9779,2.05018 14.86956,31.16397 15.69988,32.85344 0.87451,1.81637 0.0508,3.97006 -1.72579,4.83701 -1.32383,0.66683 -22.9908,12.34832 -23.86046,12.83317 z"
+             id="path108972-1"
+             style="font-size:12px;fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#005800;stroke-width:1.74380612" />
+          <path
+             d="m 314.23273,847.2469 c -1.75078,-0.007 -3.50603,-1.32081 -3.50687,-3.66398 0.0771,-2.13226 0.0716,-35.62533 0.12093,-36.65668 0.051,-2.85603 1.63653,-3.93391 3.50687,-3.94111 2.5827,-0.0289 24.47747,-0.0411 26.36202,0 2.10274,-0.0139 3.85286,1.07587 3.8697,3.94111 -0.002,2.29773 -0.0205,34.9291 -2e-5,36.8343 0.006,2.03958 -1.64681,3.56538 -3.60097,3.48636 -1.46498,-0.0403 -25.76932,-0.0153 -26.75166,0 z"
+             id="path108974-4"
+             style="font-size:12px;fill:#ffffeb;fill-opacity:1;fill-rule:evenodd;stroke:#005800;stroke-width:1.743806" />
+          <path
+             d="m 322.93888,855.54573 c -1.47013,-1.00866 -2.27836,-3.12041 -1.08622,-5.09293 1.15034,-1.7504 18.19628,-29.94194 18.7628,-30.78168 1.49688,-2.37446 3.37999,-2.37319 4.95778,-1.30763 2.18836,1.45544 20.62163,13.98988 22.18679,15.10424 1.77679,1.19305 2.69491,3.113 1.25047,5.53408 -1.17108,1.93287 -17.79882,29.38525 -18.75145,31.00043 -1.03344,1.71987 -3.20105,2.05714 -4.80547,0.87102 -1.21244,-0.8733 -21.68017,-14.77752 -22.5147,-15.32753 z"
+             id="path108976-5"
+             style="font-size:12px;fill:#000080;fill-opacity:1;fill-rule:evenodd;stroke:#005800;stroke-width:1.743806" />
+        </g>
+      </g>
+      <g
+         transform="matrix(0.38524834,0,0,0.38524834,202.85484,626.73869)"
+         id="g3925-1">
+        <g
+           id="g108584-7"
+           transform="translate(59.882331,-420.31793)">
+          <g
+             id="g92198-4">
+            <path
+               id="path5361-2"
+               d="m 1005.3987,644.36812 55.4428,-27.72141 55.4429,27.72141 -55.4429,27.72142 -55.4428,-27.72142 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path5363-7"
+               d="m 1005.3987,644.36812 0,83.16424 55.4428,27.72141 0,-83.16423 -55.4428,-27.72142 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path5365-5"
+               d="m 1060.8415,755.25377 55.4429,-27.72141 0,-83.16424 -55.4429,27.72142 0,83.16423 z"
+               style="fill:url(#linearGradient104850);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 1060.8415,615.08738 -0.6064,0.34652 -55.4428,27.72141 -0.7797,0.34652 0,0.86629 0,83.16424 0,0.86629 0.7797,0.34652 55.4428,27.72141 0.6064,0.34652 0.6064,-0.34652 55.4429,-27.72141 0.7796,-0.34652 0,-0.86629 0,-83.16424 0,-0.86629 -0.7796,-0.34652 -55.4429,-27.72141 -0.6064,-0.34652 z m 0,3.11866 54.0568,27.02838 0,81.43165 -54.0568,27.02837 -54.0567,-27.02837 0,-81.43165 54.0567,-27.02838 z"
+               id="path5391-5" />
+            <path
+               style="fill:url(#pattern6042-0);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1010.0335,651.21095 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4979-7"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:url(#pattern6040-7);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1022.9003,658.59748 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4981-1"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:url(#pattern6038-27);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1035.7672,665.26918 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4983-3"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               d="m 1048.3958,671.70261 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4985-77"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4977-85"
+               d="m 1048.3958,671.70261 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6036-2);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4987-6"
+               d="m 1010.0335,689.81151 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6034-5);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4989-5"
+               d="m 1022.9003,697.19804 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6032-3);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4991-7"
+               d="m 1035.7672,703.86974 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6030-42);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               style="fill:url(#pattern6028-0);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1048.3958,710.30317 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4993-4"
+               sodipodi:nodetypes="ccccc" />
+          </g>
+        </g>
+        <g
+           transform="matrix(0.4481573,-0.2240787,0,0.6402247,1001.8024,-178.48439)"
+           id="g108970-1">
+          <path
+             d="m 314.09476,861.04125 c -1.56438,0.834 -3.6901,0.50384 -4.68956,-1.58568 -0.84011,-1.93879 -15.12073,-31.80949 -15.51636,-32.75301 -1.17184,-2.57186 -0.21709,-4.29384 1.44804,-5.1975 2.29126,-1.26473 21.81453,-11.77888 23.51292,-12.64626 1.86955,-1.02115 3.89506,-0.88867 5.13133,1.65883 0.9779,2.05018 14.86956,31.16397 15.69988,32.85344 0.87451,1.81637 0.0508,3.97006 -1.72579,4.83701 -1.32383,0.66683 -22.9908,12.34832 -23.86046,12.83317 z"
+             id="path108972-2"
+             style="font-size:12px;fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#005800;stroke-width:1.74380612" />
+          <path
+             d="m 314.23273,847.2469 c -1.75078,-0.007 -3.50603,-1.32081 -3.50687,-3.66398 0.0771,-2.13226 0.0716,-35.62533 0.12093,-36.65668 0.051,-2.85603 1.63653,-3.93391 3.50687,-3.94111 2.5827,-0.0289 24.47747,-0.0411 26.36202,0 2.10274,-0.0139 3.85286,1.07587 3.8697,3.94111 -0.002,2.29773 -0.0205,34.9291 -2e-5,36.8343 0.006,2.03958 -1.64681,3.56538 -3.60097,3.48636 -1.46498,-0.0403 -25.76932,-0.0153 -26.75166,0 z"
+             id="path108974-46"
+             style="font-size:12px;fill:#ffffeb;fill-opacity:1;fill-rule:evenodd;stroke:#005800;stroke-width:1.743806" />
+          <path
+             d="m 322.93888,855.54573 c -1.47013,-1.00866 -2.27836,-3.12041 -1.08622,-5.09293 1.15034,-1.7504 18.19628,-29.94194 18.7628,-30.78168 1.49688,-2.37446 3.37999,-2.37319 4.95778,-1.30763 2.18836,1.45544 20.62163,13.98988 22.18679,15.10424 1.77679,1.19305 2.69491,3.113 1.25047,5.53408 -1.17108,1.93287 -17.79882,29.38525 -18.75145,31.00043 -1.03344,1.71987 -3.20105,2.05714 -4.80547,0.87102 -1.21244,-0.8733 -21.68017,-14.77752 -22.5147,-15.32753 z"
+             id="path108976-1"
+             style="font-size:12px;fill:#000080;fill-opacity:1;fill-rule:evenodd;stroke:#005800;stroke-width:1.743806" />
+        </g>
+      </g>
+      <g
+         transform="matrix(0.38524834,0,0,0.38524834,227.30424,638.87277)"
+         id="g3925-4">
+        <g
+           id="g108584-5"
+           transform="translate(58.302139,-420.31793)">
+          <g
+             id="g92198-0">
+            <path
+               id="path5361-29"
+               d="m 1005.3987,644.36812 55.4428,-27.72141 55.4429,27.72141 -55.4429,27.72142 -55.4428,-27.72142 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path5363-5"
+               d="m 1005.3987,644.36812 0,83.16424 55.4428,27.72141 0,-83.16423 -55.4428,-27.72142 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path5365-7"
+               d="m 1060.8415,755.25377 55.4429,-27.72141 0,-83.16424 -55.4429,27.72142 0,83.16423 z"
+               style="fill:url(#linearGradient104852);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 1060.8415,615.08738 -0.6064,0.34652 -55.4428,27.72141 -0.7797,0.34652 0,0.86629 0,83.16424 0,0.86629 0.7797,0.34652 55.4428,27.72141 0.6064,0.34652 0.6064,-0.34652 55.4429,-27.72141 0.7796,-0.34652 0,-0.86629 0,-83.16424 0,-0.86629 -0.7796,-0.34652 -55.4429,-27.72141 -0.6064,-0.34652 z m 0,3.11866 54.0568,27.02838 0,81.43165 -54.0568,27.02837 -54.0567,-27.02837 0,-81.43165 54.0567,-27.02838 z"
+               id="path5391-4" />
+            <path
+               style="fill:url(#pattern6042-7);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1010.0335,651.21095 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4979-2"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:url(#pattern6040-5);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1022.9003,658.59748 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4981-2"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:url(#pattern6038-6);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1035.7672,665.26918 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4983-19"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               d="m 1048.3958,671.70261 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4985-6"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4977-1"
+               d="m 1048.3958,671.70261 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6036-8);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4987-1"
+               d="m 1010.0335,689.81151 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6034-0);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4989-7"
+               d="m 1022.9003,697.19804 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6032-4);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4991-80"
+               d="m 1035.7672,703.86974 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6030-5);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               style="fill:url(#pattern6028-7);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1048.3958,710.30317 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4993-66"
+               sodipodi:nodetypes="ccccc" />
+          </g>
+        </g>
+        <g
+           transform="matrix(0.4481573,-0.2240787,0,0.6402247,1001.8024,-178.48439)"
+           id="g108970-3">
+          <path
+             d="m 314.09476,861.04125 c -1.56438,0.834 -3.6901,0.50384 -4.68956,-1.58568 -0.84011,-1.93879 -15.12073,-31.80949 -15.51636,-32.75301 -1.17184,-2.57186 -0.21709,-4.29384 1.44804,-5.1975 2.29126,-1.26473 21.81453,-11.77888 23.51292,-12.64626 1.86955,-1.02115 3.89506,-0.88867 5.13133,1.65883 0.9779,2.05018 14.86956,31.16397 15.69988,32.85344 0.87451,1.81637 0.0508,3.97006 -1.72579,4.83701 -1.32383,0.66683 -22.9908,12.34832 -23.86046,12.83317 z"
+             id="path108972-7"
+             style="font-size:12px;fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#005800;stroke-width:1.74380612" />
+          <path
+             d="m 314.23273,847.2469 c -1.75078,-0.007 -3.50603,-1.32081 -3.50687,-3.66398 0.0771,-2.13226 0.0716,-35.62533 0.12093,-36.65668 0.051,-2.85603 1.63653,-3.93391 3.50687,-3.94111 2.5827,-0.0289 24.47747,-0.0411 26.36202,0 2.10274,-0.0139 3.85286,1.07587 3.8697,3.94111 -0.002,2.29773 -0.0205,34.9291 -2e-5,36.8343 0.006,2.03958 -1.64681,3.56538 -3.60097,3.48636 -1.46498,-0.0403 -25.76932,-0.0153 -26.75166,0 z"
+             id="path108974-1"
+             style="font-size:12px;fill:#ffffeb;fill-opacity:1;fill-rule:evenodd;stroke:#005800;stroke-width:1.743806" />
+          <path
+             d="m 322.93888,855.54573 c -1.47013,-1.00866 -2.27836,-3.12041 -1.08622,-5.09293 1.15034,-1.7504 18.19628,-29.94194 18.7628,-30.78168 1.49688,-2.37446 3.37999,-2.37319 4.95778,-1.30763 2.18836,1.45544 20.62163,13.98988 22.18679,15.10424 1.77679,1.19305 2.69491,3.113 1.25047,5.53408 -1.17108,1.93287 -17.79882,29.38525 -18.75145,31.00043 -1.03344,1.71987 -3.20105,2.05714 -4.80547,0.87102 -1.21244,-0.8733 -21.68017,-14.77752 -22.5147,-15.32753 z"
+             id="path108976-3"
+             style="font-size:12px;fill:#000080;fill-opacity:1;fill-rule:evenodd;stroke:#005800;stroke-width:1.743806" />
+        </g>
+      </g>
+      <g
+         transform="matrix(0.38524834,0,0,0.38524834,250.53613,651.0068)"
+         id="g3925-54">
+        <g
+           id="g108584-02"
+           transform="translate(59.882331,-420.31793)">
+          <g
+             id="g92198-47">
+            <path
+               id="path5361-4"
+               d="m 1005.3987,644.36812 55.4428,-27.72141 55.4429,27.72141 -55.4429,27.72142 -55.4428,-27.72142 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path5363-2"
+               d="m 1005.3987,644.36812 0,83.16424 55.4428,27.72141 0,-83.16423 -55.4428,-27.72142 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path5365-6"
+               d="m 1060.8415,755.25377 55.4429,-27.72141 0,-83.16424 -55.4429,27.72142 0,83.16423 z"
+               style="fill:url(#linearGradient104854);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 1060.8415,615.08738 -0.6064,0.34652 -55.4428,27.72141 -0.7797,0.34652 0,0.86629 0,83.16424 0,0.86629 0.7797,0.34652 55.4428,27.72141 0.6064,0.34652 0.6064,-0.34652 55.4429,-27.72141 0.7796,-0.34652 0,-0.86629 0,-83.16424 0,-0.86629 -0.7796,-0.34652 -55.4429,-27.72141 -0.6064,-0.34652 z m 0,3.11866 54.0568,27.02838 0,81.43165 -54.0568,27.02837 -54.0567,-27.02837 0,-81.43165 54.0567,-27.02838 z"
+               id="path5391-3" />
+            <path
+               style="fill:url(#pattern6042-2);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1010.0335,651.21095 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4979-9"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:url(#pattern6040-43);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1022.9003,658.59748 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4981-0"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:url(#pattern6038-7);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1035.7672,665.26918 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4983-6"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+               d="m 1048.3958,671.70261 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4985-39"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4977-6"
+               d="m 1048.3958,671.70261 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6036-83);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4987-8"
+               d="m 1010.0335,689.81151 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6034-16);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4989-79"
+               d="m 1022.9003,697.19804 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6032-92);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path4991-68"
+               d="m 1035.7672,703.86974 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               style="fill:url(#pattern6030-6);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <path
+               style="fill:url(#pattern6028-2);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               d="m 1048.3958,710.30317 0,32.47914 8.3164,4.39648 0,-32.7174 -8.3164,-4.15822 z"
+               id="path4993-04"
+               sodipodi:nodetypes="ccccc" />
+          </g>
+        </g>
+        <g
+           transform="matrix(0.4481573,-0.2240787,0,0.6402247,1001.8024,-178.48439)"
+           id="g108970-2">
+          <path
+             d="m 314.09476,861.04125 c -1.56438,0.834 -3.6901,0.50384 -4.68956,-1.58568 -0.84011,-1.93879 -15.12073,-31.80949 -15.51636,-32.75301 -1.17184,-2.57186 -0.21709,-4.29384 1.44804,-5.1975 2.29126,-1.26473 21.81453,-11.77888 23.51292,-12.64626 1.86955,-1.02115 3.89506,-0.88867 5.13133,1.65883 0.9779,2.05018 14.86956,31.16397 15.69988,32.85344 0.87451,1.81637 0.0508,3.97006 -1.72579,4.83701 -1.32383,0.66683 -22.9908,12.34832 -23.86046,12.83317 z"
+             id="path108972-0"
+             style="font-size:12px;fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#005800;stroke-width:1.74380612" />
+          <path
+             d="m 314.23273,847.2469 c -1.75078,-0.007 -3.50603,-1.32081 -3.50687,-3.66398 0.0771,-2.13226 0.0716,-35.62533 0.12093,-36.65668 0.051,-2.85603 1.63653,-3.93391 3.50687,-3.94111 2.5827,-0.0289 24.47747,-0.0411 26.36202,0 2.10274,-0.0139 3.85286,1.07587 3.8697,3.94111 -0.002,2.29773 -0.0205,34.9291 -2e-5,36.8343 0.006,2.03958 -1.64681,3.56538 -3.60097,3.48636 -1.46498,-0.0403 -25.76932,-0.0153 -26.75166,0 z"
+             id="path108974-8"
+             style="font-size:12px;fill:#ffffeb;fill-opacity:1;fill-rule:evenodd;stroke:#005800;stroke-width:1.743806" />
+          <path
+             d="m 322.93888,855.54573 c -1.47013,-1.00866 -2.27836,-3.12041 -1.08622,-5.09293 1.15034,-1.7504 18.19628,-29.94194 18.7628,-30.78168 1.49688,-2.37446 3.37999,-2.37319 4.95778,-1.30763 2.18836,1.45544 20.62163,13.98988 22.18679,15.10424 1.77679,1.19305 2.69491,3.113 1.25047,5.53408 -1.17108,1.93287 -17.79882,29.38525 -18.75145,31.00043 -1.03344,1.71987 -3.20105,2.05714 -4.80547,0.87102 -1.21244,-0.8733 -21.68017,-14.77752 -22.5147,-15.32753 z"
+             id="path108976-18"
+             style="font-size:12px;fill:#000080;fill-opacity:1;fill-rule:evenodd;stroke:#005800;stroke-width:1.743806" />
+        </g>
+      </g>
+      <path
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 226.42238,966.71583 53.58135,-27.3011"
+         id="path32503" />
+      <path
+         id="path29436-1"
+         d="M 325.99984,687.25962 463.42976,757.4159"
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         sodipodi:nodetypes="cc" />
+      <path
+         id="path29430"
+         d="m 285.13466,729.79622 53.58132,-27.30108"
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path29432-6"
+         d="m 449.34827,770.11285 53.58134,-27.30109"
+         style="fill:none;stroke:#808080;stroke-width:1.926;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 410.54673,794.05451 53.58133,-27.30108"
+         id="path29324-0" />
+      <path
+         id="path29432"
+         d="m 535.95881,858.31276 53.58134,-27.30109"
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 661.3709,922.57103 53.58134,-27.30108"
+         id="path29434" />
+      <path
+         sodipodi:nodetypes="cc"
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="M 337.70005,702.46435 819.51686,948.23104"
+         id="path29436" />
+      <g
+         transform="matrix(0.38524834,0,0,0.38524834,476.30036,510.44216)"
+         id="g3259-9">
+        <g
+           transform="matrix(6.5383417,0,0,6.5383417,364.86909,935.55835)"
+           inkscape:label="Calque 1"
+           id="g118215-8">
+          <path
+             style="fill:#888888;fill-opacity:1;stroke:none"
+             d=""
+             id="path118217-0" />
+          <path
+             style="fill:#888888;fill-opacity:1;stroke:none"
+             d=""
+             id="path118219-3" />
+          <path
+             style="fill:#888888;fill-opacity:1;stroke:none"
+             d=""
+             id="path118221-1" />
+          <g
+             transform="translate(-68.205597,-63.743549)"
+             id="g118223-5">
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 7.6108945,14.642423 -0.3365653,0.168282 -8.07756781,4.038784 -0.33656529,0.168283 0,0.420707 0,4.038784 0,0.420706 0.33656529,0.168283 8.07756781,4.038784 0.3365653,0.168282 0.2944947,-0.168282 8.0775678,-4.038784 0.378636,-0.168283 0,-0.420706 0,-4.038784 0,-0.420707 -0.378636,-0.168283 -8.0775678,-4.038784 -0.2944947,-0.168282 z m 0,1.514544 7.4044375,3.702218 0,3.197371 -7.4044375,3.702218 -7.40443714,-3.702218 0,-3.197371 7.40443714,-3.702218 z"
+               id="path118225-7" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M -0.48215529,19.441925 7.5954125,15.403141 15.67298,19.441925 7.5954125,23.480709 -0.48215529,19.441925 z"
+               id="path118227-7" />
+            <path
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m -0.48215529,19.441925 0,4.038784 8.07756779,4.038784 0,-4.038784 -8.07756779,-4.038784 z"
+               id="path118229-7"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:url(#radialGradient104856);fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 15.67298,19.441925 0,4.038784 -8.0775675,4.038784 0,-4.038784 8.0775675,-4.038784 z"
+               id="path118231-0"
+               sodipodi:nodetypes="ccccc" />
+          </g>
+        </g>
+        <g
+           transform="matrix(0.6363961,0.3181981,-0.6363961,0.3181981,-697.62009,289.09977)"
+           id="g2662-9">
+          <path
+             id="path2664-8"
+             d="m 1044.4209,-4.5996044 0,78.9062504 78.9063,0 0,-78.9062504 -78.9063,0 z m 39.4688,2.46875 c 20.4177,0 37,16.5823004 37,37.0000004 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 -10e-5,-20.41771 16.5823,-37.0000004 37,-37.0000004 z"
+             style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter" />
+          <g
+             id="g2666-0"
+             style="fill:#00ffff;stroke:#ffffff"
+             transform="translate(705.44117,-218.9829)">
+            <path
+               id="path2668-3"
+               d="m 378.53666,218.814 -6.22099,11.28987 1.97176,0 0,18.4037 8.49847,0 0,-18.4037 1.95647,0 -6.20571,-11.28987 z"
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+            <path
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+               d="m 378.53666,288.85884 -6.22099,-11.28987 1.97176,0 0,-18.4037 8.49847,0 0,18.4037 1.95647,0 -6.20571,11.28987 z"
+               id="path2670-1" />
+            <path
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+               d="m 343.41044,253.56675 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+               id="path2672-4" />
+            <path
+               id="path2674-8"
+               d="m 413.45528,253.56675 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+          </g>
+        </g>
+      </g>
+      <path
+         sodipodi:nodetypes="cc"
+         id="path27123"
+         d="m 742.14931,988.34183 77.31228,-39.64335"
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <g
+         id="g32453"
+         transform="matrix(0.38524834,0,0,0.38524834,303.1066,676.24416)">
+        <g
+           id="g32455"
+           inkscape:label="Calque 1"
+           transform="matrix(6.5383417,0,0,6.5383417,364.86909,935.55835)">
+          <path
+             id="path32457"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <path
+             id="path32459"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <path
+             id="path32461"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <g
+             id="g32463"
+             transform="translate(-68.205597,-63.743549)">
+            <path
+               id="path32465"
+               d="m 7.6108945,14.642423 -0.3365653,0.168282 -8.07756781,4.038784 -0.33656529,0.168283 0,0.420707 0,4.038784 0,0.420706 0.33656529,0.168283 8.07756781,4.038784 0.3365653,0.168282 0.2944947,-0.168282 8.0775678,-4.038784 0.378636,-0.168283 0,-0.420706 0,-4.038784 0,-0.420707 -0.378636,-0.168283 -8.0775678,-4.038784 -0.2944947,-0.168282 z m 0,1.514544 7.4044375,3.702218 0,3.197371 -7.4044375,3.702218 -7.40443714,-3.702218 0,-3.197371 7.40443714,-3.702218 z"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path32467"
+               d="M -0.48215529,19.441925 7.5954125,15.403141 15.67298,19.441925 7.5954125,23.480709 -0.48215529,19.441925 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path32469"
+               d="m -0.48215529,19.441925 0,4.038784 8.07756779,4.038784 0,-4.038784 -8.07756779,-4.038784 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path32471"
+               d="m 15.67298,19.441925 0,4.038784 -8.0775675,4.038784 0,-4.038784 8.0775675,-4.038784 z"
+               style="fill:url(#radialGradient104858);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          </g>
+        </g>
+        <g
+           id="g32473"
+           transform="matrix(0.6363961,0.3181981,-0.6363961,0.3181981,-697.62009,289.09977)">
+          <path
+             style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter"
+             d="m 1044.4209,-4.5996044 0,78.9062504 78.9063,0 0,-78.9062504 -78.9063,0 z m 39.4688,2.46875 c 20.4177,0 37,16.5823004 37,37.0000004 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 -10e-5,-20.41771 16.5823,-37.0000004 37,-37.0000004 z"
+             id="path32475" />
+          <g
+             transform="translate(705.44117,-218.9829)"
+             style="fill:#00ffff;stroke:#ffffff"
+             id="g32477">
+            <path
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+               d="m 378.53666,218.814 -6.22099,11.28987 1.97176,0 0,18.4037 8.49847,0 0,-18.4037 1.95647,0 -6.20571,-11.28987 z"
+               id="path32479" />
+            <path
+               id="path32481"
+               d="m 378.53666,288.85884 -6.22099,-11.28987 1.97176,0 0,-18.4037 8.49847,0 0,18.4037 1.95647,0 -6.20571,11.28987 z"
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+            <path
+               id="path32483"
+               d="m 343.41044,253.56675 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+            <path
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+               d="m 413.45528,253.56675 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+               id="path32485" />
+          </g>
+        </g>
+      </g>
+      <g
+         id="g32288"
+         transform="matrix(0.87584947,0,0,0.87584947,-199.57545,837.53626)">
+        <g
+           id="g32290">
+          <path
+             d="m 452.22752,154.79534 c -1.32987,4.3593 0.97442,13.06343 4.32672,7.29809 0.55883,-4.21566 0.16853,-13.66849 -4.32672,-7.29809 z"
+             id="path32292"
+             style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" />
+          <path
+             d="m 459.05645,154.87353 c -5.73123,-1.99396 -4.37255,6.82514 -3.10169,8.88804 4.41472,0.3139 8.88448,0.68282 7.08957,-5.21292 -0.15325,-2.39014 -1.62637,-3.78967 -3.98788,-3.67512 z"
+             id="path32294"
+             style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" />
+          <path
+             d="m 461.48045,154.95173 c -1.09246,1.9721 -0.88144,8.20841 3.07563,8.75771 7.13327,0.55239 -1.24277,-5.48505 3.0235,-5.57782 1.36821,-3.25204 -5.37175,-7.28408 -6.09913,-3.17989 z"
+             id="path32296"
+             style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" />
+          <path
+             d="m 469.14346,154.84748 c -6.26267,0.075 -4.66384,10.71977 1.4292,8.95932 4.83425,0.31308 3.44625,-9.88021 -1.4292,-8.95932 z"
+             id="path32298"
+             style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" />
+          <path
+             d="m 468.85674,155.68154 c -5.85015,2.68836 -2.79296,6.6586 2.86712,4.84803 3.28424,0.8454 -0.45596,-6.36406 -2.86712,-4.84803 z"
+             id="path32300"
+             style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" />
+          <path
+             d="m 475.63355,154.84748 c -5.82517,-1.97942 -4.54812,6.74301 -3.23202,8.91409 4.84187,0.18324 3.39963,-5.16968 5.70816,-6.35977 0.24428,-2.37476 -0.19418,-2.73428 -2.47614,-2.55432 z"
+             id="path32302"
+             style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" />
+          <path
+             d="m 479.49112,154.87353 c -5.77442,-2.02369 -4.43922,6.79664 -3.15383,8.88804 4.41473,0.3139 8.88448,0.68282 7.08958,-5.21292 -0.15836,-2.36396 -1.59101,-3.77955 -3.93575,-3.67512 z"
+             id="path32304"
+             style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" />
+          <path
+             d="m 485.56417,154.84748 c -6.19598,0.15033 -4.65067,10.675 1.42942,8.96143 4.93021,0.35507 3.48048,-9.89643 -1.42942,-8.96143 z"
+             id="path32306"
+             style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" />
+          <path
+             d="m 485.30352,155.68154 c -5.85015,2.68836 -2.79297,6.6586 2.86711,4.84803 3.28424,0.8454 -0.45595,-6.36406 -2.86711,-4.84803 z"
+             id="path32308"
+             style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" />
+          <path
+             d="m 488.0403,154.95173 c -1.06389,1.96915 -0.92086,8.22865 3.04957,8.75771 7.16539,0.57531 -1.21095,-5.48429 3.04956,-5.57782 1.3682,-3.25204 -5.37175,-7.28408 -6.09913,-3.17989 z"
+             id="path32310"
+             style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32312"
+             inkscape:tile-cx="150.57283"
+             inkscape:tile-cy="1057.5979"
+             inkscape:tile-h="104.60061"
+             inkscape:tile-w="105.36077"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104860);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.179335,0,0,0.149728,502.1893,-24.02897)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32314"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104862);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(0.284001,0,0,0.193224,407.7236,-73.15871)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32316"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104864);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(0.340554,0,0,0.231701,396.3144,-88.95173)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32318"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104866);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(0.249954,0,0,0.170059,406.7992,-32.10751)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32320"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104868);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(0.260403,0,0,0.177168,412.2819,-25.25605)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32322"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104870);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.104126,-0.150834,-0.146719,0.07084417,668.335,91.43843)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32324"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104872);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.154671,-0.224051,-0.217939,0.105233,738.2325,88.88709)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32326"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104874);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.138006,-0.19991,-0.194457,0.09389457,722.8067,97.77468)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32328"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104876);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.117791,-0.170629,-0.165973,0.08014087,677.6847,122.0894)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32330"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104878);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.09614486,-0.139271,-0.135472,0.06541328,635.5166,142.1226)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32332"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104880);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.164683,-0.238552,0.232045,-0.112044,265.1906,314.0698)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32334"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104882);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.172846,-0.250377,0.243546,-0.117597,239.7257,330.3731)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32336"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104884);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.177232,-0.256733,0.249729,-0.120583,225.1178,318.3329)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32338"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104886);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.166524,-0.241221,0.23464,-0.113297,227.7161,329.1711)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32340"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104888);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.112183,-0.162505,0.158072,-0.07632533,314.1776,290.1886)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32342"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104890);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.11826,0.171307,0.166634,0.08045988,311.5686,16.07786)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32344"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104892);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.0943583,0.136684,0.132956,0.06419815,331.8395,50.2111)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32346"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104894);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.114364,0.165662,0.161143,0.07780872,322.2702,30.08746)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32348"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104896);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.140702,0.203815,0.198255,0.09572832,286.7172,18.15027)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32350"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104898);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.162185,0.234935,0.228526,0.110345,259.9411,6.05945)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32352"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104900);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.160583,0.232613,-0.226269,-0.109254,748.0707,211.5833)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32354"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104902);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.12628,0.182922,-0.177934,-0.08591606,697.8146,196.7379)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32356"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104904);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.137748,0.199537,-0.194093,-0.09371803,714.1281,221.8225)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32358"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104906);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.120979,0.175247,-0.170466,-0.08231039,662.6019,207.1803)" />
+          <path
+             d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+             id="path32360"
+             sodipodi:cx="150.56367"
+             sodipodi:cy="1057.5979"
+             sodipodi:end="6.478369"
+             sodipodi:open="true"
+             sodipodi:rx="52.660198"
+             sodipodi:ry="52.289352"
+             sodipodi:start="0.32872637"
+             sodipodi:type="arc"
+             style="opacity:0.17777776;fill:url(#linearGradient104908);fill-opacity:1;fill-rule:nonzero;stroke:none"
+             transform="matrix(-0.14434,0.209086,-0.203383,-0.09820396,735.5011,232.5166)" />
+        </g>
+        <path
+           d="m 409.69532,571.95715 c 0,13.80622 -11.19215,24.99836 -24.99836,24.99836 -13.80621,0 -24.99836,-11.19214 -24.99836,-24.99836 0,-13.80621 11.19215,-24.99835 24.99836,-24.99835 13.80621,0 24.99836,11.19214 24.99836,24.99835 z"
+           id="path32362"
+           sodipodi:cx="384.69696"
+           sodipodi:cy="571.95715"
+           sodipodi:rx="24.998358"
+           sodipodi:ry="24.998358"
+           sodipodi:type="arc"
+           style="fill:url(#radialGradient104910);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(1.155532,0,0,1.155532,26.16756,-503.197)" />
+        <text
+           id="text32364"
+           style="font-size:10.00881386px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#9f0021;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+           x="469.55161"
+           xml:space="preserve"
+           y="161.44913"><tspan
+             id="tspan32366"
+             sodipodi:role="line"
+             x="469.55161"
+             y="161.44913">Internet</tspan></text>
+      </g>
+      <text
+         id="text32505"
+         y="620.82263"
+         x="542.62994"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           y="620.82263"
+           x="542.62994"
+           id="tspan32507"
+           sodipodi:role="line">HA Database</tspan><tspan
+           id="tspan40323"
+           y="633.32263"
+           x="542.62994"
+           sodipodi:role="line" /></text>
+      <text
+         id="text32509"
+         y="666.54858"
+         x="708.54053"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           y="666.54858"
+           x="708.54053"
+           id="tspan32511"
+           sodipodi:role="line">HA storage</tspan><tspan
+           id="tspan40321"
+           y="679.04858"
+           x="708.54053"
+           sodipodi:role="line">(SAN, SheepDog ?)</tspan></text>
+      <text
+         id="text35139"
+         y="683.30566"
+         x="176.33803"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           y="683.30566"
+           x="177.92982"
+           id="tspan35141"
+           sodipodi:role="line">Diskless servers </tspan><tspan
+           id="tspan40139"
+           y="695.80566"
+           x="176.33803"
+           sodipodi:role="line">running</tspan><tspan
+           id="tspan40137"
+           y="708.30566"
+           x="176.33803"
+           sodipodi:role="line"> virtual guests</tspan></text>
+      <g
+         transform="matrix(0.24965474,0,0,0.24965474,35.709234,628.79112)"
+         id="g3408-9">
+        <g
+           id="g117789-2"
+           transform="translate(910.08874,75.719118)">
+          <g
+             id="g117791-7"
+             inkscape:label="Calque 1"
+             transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+            <path
+               id="path117793-4"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path117795-0"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path117797-3"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <g
+               id="g117799-8">
+              <path
+                 id="path117801-4"
+                 d="M 2,11 22,1 42,11 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path117803-4"
+                 d="M 2,11 2,41 22,51 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117805-7"
+                 d="M 22,51 42,41 42,11 22,21 22,51 z"
+                 style="fill:url(#linearGradient104912);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                 id="path117807-5"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                 id="path117809-3" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                 id="path117811-8"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                 id="path117813-7" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                 id="path117815-2"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                 id="path117817-2" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                 id="path117819-7" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path117821-9"
+                 d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                 style="fill:url(#radialGradient104914);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                 id="path117823-6" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                 id="path117825-6" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                 id="path117827-4"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                 id="path117829-2" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                 id="path117831-1" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                 id="path117833-4" />
+            </g>
+          </g>
+        </g>
+        <path
+           id="path117855-7"
+           d="m 1162.9818,171.48314 c -0.6741,0.33705 -1.3556,0.72418 -2.0094,1.15981 l -0.1629,0.81846 0,0.34911 0.3259,3.40575 -3.4213,3.02948 -0.9775,-2.84717 -0.1086,-0.25601 -0.3801,-0.31421 c -1.2465,1.38745 -2.403,2.96448 -3.4756,4.64702 l 0.1086,0.64391 0.1086,0.25601 1.5477,2.05781 -2.5252,4.87005 -1.9821,-1.21995 -0.2173,-0.0465 -0.4887,0.0892 c -0.8024,1.93355 -1.5015,3.93523 -2.0365,5.98332 l 0.353,0.36657 0.2172,0.0465 2.3352,0.22887 -0.9232,5.34909 -2.4981,0.78357 -0.2444,0.12218 -0.5159,0.49068 c -0.076,0.97201 -0.1086,1.96181 -0.1086,2.92475 0,0.96297 0.033,1.8815 0.1086,2.77735 l 0.5159,-0.0252 0.2444,-0.12218 2.4981,-1.71451 0.9232,4.46471 -2.3352,2.52521 -0.2172,0.30256 -0.3258,0.70598 c 0.5378,1.51081 1.2313,2.81882 2.0364,3.94685 l 0.4616,-0.38596 0.2173,-0.30256 1.9821,-3.20209 2.5252,2.34484 -1.5477,3.64429 -0.1086,0.36463 -0.1086,0.75251 c 1.0633,0.60459 2.2142,1.00228 3.4484,1.14625 l 0.4073,-0.70792 0.1086,-0.36462 0.9775,-3.78588 3.4213,-0.39177 -0.3259,3.69278 0,0.38789 0.1629,0.61677 c 0.6538,-0.21809 1.3353,-0.51246 2.0094,-0.8495 0.674,-0.33703 1.3284,-0.7106 1.9821,-1.14624 l 0.1629,-0.77967 0,-0.38789 -0.3258,-3.36696 3.4484,-3.04306 0.9504,2.82195 0.1357,0.24244 0.3802,0.3142 c 1.246,-1.39144 2.4039,-2.96071 3.4755,-4.64701 l -0.1086,-0.60513 -0.1358,-0.24243 -1.5477,-2.09659 2.5253,-4.87005 2.0093,1.20636 0.2172,0.0853 0.4616,-0.0756 c 0.8053,-1.93359 1.4986,-3.93425 2.0365,-5.98332 l -0.353,-0.36656 -0.2173,-0.0853 -2.308,-0.20365 0.9232,-5.3879 2.471,-0.76998 0.2715,-0.13576 0.4887,-0.47711 c 0.076,-0.97198 0.1086,-1.92301 0.1086,-2.88597 0,-0.96294 -0.032,-1.92028 -0.1086,-2.81613 l -0.4887,0.0117 -0.2715,0.13576 -2.471,1.70092 -0.9232,-4.4259 2.308,-2.55043 0.2173,-0.26376 0.353,-0.75835 c -0.5328,-1.49679 -1.214,-2.80035 -2.0094,-3.92164 l -0.4887,0.39953 -0.2172,0.26376 -2.0093,3.21568 -2.5253,-2.34484 1.5477,-3.60551 0.1358,-0.37821 0.1086,-0.71372 c -1.0714,-0.61452 -2.2297,-1.02602 -3.4755,-1.17145 l -0.3802,0.65555 -0.1357,0.37819 -0.9504,3.8111 -3.4484,0.40535 0.3258,-3.73157 0,-0.34911 -0.1629,-0.65556 c -0.6537,0.21813 -1.3081,0.4989 -1.9821,0.83593 z m 0,11.13266 c 5.1162,-2.5581 9.2591,1.28891 9.2591,8.59776 0,7.30887 -4.1429,15.33755 -9.2591,17.89564 -5.1162,2.55808 -9.2863,-1.31411 -9.2863,-8.62295 0,-7.30884 4.1701,-15.31235 9.2863,-17.87045 z"
+           style="fill:url(#linearGradient104916);fill-opacity:1;stroke:#000000;stroke-width:1.03852296" />
+      </g>
+      <g
+         transform="matrix(0.38524834,0,0,0.38524834,753.78404,653.08086)"
+         id="g3259-9-0">
+        <g
+           transform="matrix(6.5383417,0,0,6.5383417,364.86909,935.55835)"
+           inkscape:label="Calque 1"
+           id="g118215-8-4">
+          <path
+             style="fill:#888888;fill-opacity:1;stroke:none"
+             d=""
+             id="path118217-0-3" />
+          <path
+             style="fill:#888888;fill-opacity:1;stroke:none"
+             d=""
+             id="path118219-3-8" />
+          <path
+             style="fill:#888888;fill-opacity:1;stroke:none"
+             d=""
+             id="path118221-1-6" />
+          <g
+             transform="translate(-68.205597,-63.743549)"
+             id="g118223-5-1">
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 7.6108945,14.642423 -0.3365653,0.168282 -8.07756781,4.038784 -0.33656529,0.168283 0,0.420707 0,4.038784 0,0.420706 0.33656529,0.168283 8.07756781,4.038784 0.3365653,0.168282 0.2944947,-0.168282 8.0775678,-4.038784 0.378636,-0.168283 0,-0.420706 0,-4.038784 0,-0.420707 -0.378636,-0.168283 -8.0775678,-4.038784 -0.2944947,-0.168282 z m 0,1.514544 7.4044375,3.702218 0,3.197371 -7.4044375,3.702218 -7.40443714,-3.702218 0,-3.197371 7.40443714,-3.702218 z"
+               id="path118225-7-9" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M -0.48215529,19.441925 7.5954125,15.403141 15.67298,19.441925 7.5954125,23.480709 -0.48215529,19.441925 z"
+               id="path118227-7-8" />
+            <path
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m -0.48215529,19.441925 0,4.038784 8.07756779,4.038784 0,-4.038784 -8.07756779,-4.038784 z"
+               id="path118229-7-9"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:url(#radialGradient104918);fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 15.67298,19.441925 0,4.038784 -8.0775675,4.038784 0,-4.038784 8.0775675,-4.038784 z"
+               id="path118231-0-0"
+               sodipodi:nodetypes="ccccc" />
+          </g>
+        </g>
+        <g
+           transform="matrix(0.6363961,0.3181981,-0.6363961,0.3181981,-697.62009,289.09977)"
+           id="g2662-9-8">
+          <path
+             id="path2664-8-0"
+             d="m 1044.4209,-4.5996044 0,78.9062504 78.9063,0 0,-78.9062504 -78.9063,0 z m 39.4688,2.46875 c 20.4177,0 37,16.5823004 37,37.0000004 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 -10e-5,-20.41771 16.5823,-37.0000004 37,-37.0000004 z"
+             style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter" />
+          <g
+             id="g2666-0-5"
+             style="fill:#00ffff;stroke:#ffffff"
+             transform="translate(705.44117,-218.9829)">
+            <path
+               id="path2668-3-0"
+               d="m 378.53666,218.814 -6.22099,11.28987 1.97176,0 0,18.4037 8.49847,0 0,-18.4037 1.95647,0 -6.20571,-11.28987 z"
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+            <path
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+               d="m 378.53666,288.85884 -6.22099,-11.28987 1.97176,0 0,-18.4037 8.49847,0 0,18.4037 1.95647,0 -6.20571,11.28987 z"
+               id="path2670-1-5" />
+            <path
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+               d="m 343.41044,253.56675 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+               id="path2672-4-0" />
+            <path
+               id="path2674-8-8"
+               d="m 413.45528,253.56675 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+          </g>
+        </g>
+      </g>
+      <path
+         sodipodi:nodetypes="cc"
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="M 487.391,1117.5952 729.80147,994.37212"
+         id="path36364" />
+      <g
+         transform="matrix(0.38241385,0,0,0.38241385,625.80509,774.48224)"
+         id="g3513-6">
+        <g
+           transform="translate(-369.48339,-385.43051)"
+           id="g3767-8">
+          <path
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 607.23277,879.49528 55.44283,-27.72141 55.44282,27.72141 -55.44282,27.72142 -55.44283,-27.72142 z"
+             id="path3769-7" />
+          <path
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 607.23277,879.49528 0,83.16424 55.44283,27.72141 0,-83.16423 -55.44283,-27.72142 z"
+             id="path3771-8" />
+          <path
+             style="fill:url(#linearGradient104920);fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 662.6756,990.38093 55.44282,-27.72141 0,-83.16424 -55.44282,27.72142 0,83.16423 z"
+             id="path3773-3"
+             sodipodi:nodetypes="ccccc" />
+          <path
+             style="fill:url(#radialGradient104922);fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 634.81813,937.76977 22.17713,11.08857 0,24.94927 -22.17713,-11.08856 0,-24.94928 z"
+             id="path3775-5"
+             sodipodi:nodetypes="ccccc" />
+          <path
+             id="path3777-7"
+             d="m 633.56811,935.45788 0,2.25237 0,24.94927 0,0.86629 0.77967,0.34652 22.17713,11.08857 1.99247,1.03955 0,-2.25237 0,-24.94927 0,-0.86629 -0.77966,-0.34652 -22.17713,-11.08856 -1.99248,-1.03956 z m 2.77214,4.50473 19.40499,9.7025 0,21.83061 -19.40499,-9.70249 0,-21.83062 z"
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             id="path3779-7"
+             d="m 611.39098,891.10362 0,2.25237 0,66.53139 0,0.86629 0.77967,0.34652 5.54428,2.77214 1.99248,1.03955 0,-2.25236 0,-66.53139 0,-0.86629 -0.77967,-0.34652 -5.54428,-2.77214 -1.99248,-1.03956 z m 2.77215,4.50473 2.77214,1.38607 0,63.41273 -2.77214,-1.38607 0,-63.41273 z"
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             id="path3781-1"
+             d="m 621.09348,895.26184 0,69.65004 8.31642,4.15822 0,-69.65005 -8.31642,-4.15821 z"
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             id="path3783-5"
+             d="m 633.56811,899.42005 0,2.25236 0,27.72141 0,0.8663 0.77967,0.34652 11.08856,5.54428 1.99248,1.03955 0,-2.25236 0,-27.72141 0,-0.8663 -0.77966,-0.34652 -11.08857,-5.54428 -1.99248,-1.03955 z m 2.77214,4.50473 8.31643,4.15821 0,24.60275 -8.31643,-4.15821 0,-24.60275 z"
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             id="path3785-64"
+             d="m 650.20096,907.73647 0,2.25237 0,30.49355 0,0.86629 0.77967,0.34652 5.54428,2.77214 1.99247,1.03956 0,-2.25237 0,-30.49355 0,-0.8663 -0.77966,-0.34651 -5.54428,-2.77215 -1.99248,-1.03955 z m 2.77214,4.50473 2.77214,1.38607 0,27.3749 -2.77214,-1.38607 0,-27.3749 z"
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             id="path3787-3"
+             d="m 662.6756,850.21454 -0.60641,0.34652 -55.44282,27.72141 -0.77967,0.34652 0,0.86629 0,83.16424 0,0.86629 0.77967,0.34652 55.44282,27.72141 0.60641,0.34652 0.6064,-0.34652 55.44283,-27.72141 0.77966,-0.34652 0,-0.86629 0,-83.16424 0,-0.86629 -0.77966,-0.34652 -55.44283,-27.72141 -0.6064,-0.34652 z m 0,3.11866 54.05675,27.02838 0,81.43165 -54.05675,27.02837 -54.05676,-27.02837 0,-81.43165 54.05676,-27.02838 z"
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <rect
+             style="opacity:0.5;fill:url(#pattern118687-0);fill-opacity:1;stroke:none"
+             id="rect3789-22"
+             width="47.62381"
+             height="45.980042"
+             x="747.37006"
+             y="1269.7253"
+             rx="0"
+             ry="0"
+             transform="matrix(0.8944272,-0.4472136,0,1,0,0)" />
+        </g>
+        <g
+           id="g3863-52"
+           transform="matrix(0.6363961,-0.3181981,-0.6363961,-0.3181981,-304.10649,883.79115)">
+          <path
+             id="path3865-0"
+             d="m 1042.8959,100.2653 0,78.90625 78.9063,0 0,-78.90625 -78.9063,0 z m 39.4688,2.46875 c 20.4177,0 37,16.5823 37,37 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 0,-20.41771 16.5823,-37 37,-37 z"
+             style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter" />
+          <g
+             style="fill:#00ffff;stroke:#ffffff"
+             transform="translate(606.95622,-331.6564)"
+             id="g3867-7">
+            <path
+               sodipodi:type="star"
+               style="fill:#00ffff;fill-opacity:1;stroke:#ffffff;stroke-linecap:butt;stroke-linejoin:miter"
+               id="path3869-55"
+               sodipodi:sides="3"
+               sodipodi:cx="241.13728"
+               sodipodi:cy="609.1156"
+               sodipodi:r1="15.395656"
+               sodipodi:r2="7.6978278"
+               sodipodi:arg1="0"
+               sodipodi:arg2="1.0471976"
+               inkscape:flatsided="false"
+               inkscape:rounded="0"
+               inkscape:randomized="0"
+               d="m 256.53294,609.1156 -11.54674,6.66652 -11.54674,6.66651 0,-13.33303 0,-13.33303 11.54674,6.66652 11.54674,6.66651 z"
+               transform="translate(212.65401,-137.99186)" />
+            <rect
+               style="fill:#00ffff;fill-opacity:1;stroke:#ffffff;stroke-linecap:butt;stroke-linejoin:miter"
+               id="rect3871-8"
+               width="7.6689839"
+               height="34.386734"
+               x="471.7662"
+               y="454.18146" />
+            <path
+               transform="matrix(-1,0,0,1,738.13162,-137.99186)"
+               d="m 256.53294,609.1156 -11.54674,6.66652 -11.54674,6.66651 0,-13.33303 0,-13.33303 11.54674,6.66652 11.54674,6.66651 z"
+               inkscape:randomized="0"
+               inkscape:rounded="0"
+               inkscape:flatsided="false"
+               sodipodi:arg2="1.0471976"
+               sodipodi:arg1="0"
+               sodipodi:r2="7.6978278"
+               sodipodi:r1="15.395656"
+               sodipodi:cy="609.1156"
+               sodipodi:cx="241.13728"
+               sodipodi:sides="3"
+               id="path3873-8"
+               style="fill:#00ffff;fill-opacity:1;stroke:#ffffff;stroke-linecap:butt;stroke-linejoin:miter"
+               sodipodi:type="star" />
+          </g>
+        </g>
+      </g>
+      <text
+         id="text37203"
+         y="1019.5519"
+         x="740.2865"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           id="tspan37207"
+           y="1019.5519"
+           x="740.2865"
+           sodipodi:role="line">FW/VPN</tspan><tspan
+           id="tspan37215"
+           y="1032.0519"
+           x="740.2865"
+           sodipodi:role="line">giving access to</tspan><tspan
+           id="tspan37209"
+           y="1044.5519"
+           x="740.2865"
+           sodipodi:role="line">cloud administrators</tspan></text>
+      <text
+         id="text35280"
+         y="635.03723"
+         x="317.2081"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           y="635.03723"
+           x="317.2081"
+           id="tspan35282"
+           sodipodi:role="line">PXE</tspan><tspan
+           id="tspan35284"
+           y="647.53723"
+           x="317.2081"
+           sodipodi:role="line">Boot server</tspan></text>
+      <g
+         transform="matrix(0.39640924,0,0,0.39640924,641.89734,821.20523)"
+         id="g3462-0">
+        <g
+           id="g108629-6"
+           transform="translate(134.05913,35.984128)">
+          <g
+             id="g4883-79"
+             inkscape:label="Calque 1"
+             transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+            <path
+               id="path4885-5"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path4887-6"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path4889-5"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <g
+               id="g4891-9">
+              <path
+                 id="path4893-1"
+                 d="M 2,11 22,1 42,11 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path4895-5"
+                 d="M 2,11 2,41 22,51 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path4897-2"
+                 d="M 22,51 42,41 42,11 22,21 22,51 z"
+                 style="fill:url(#linearGradient104924);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                 id="path4899-6"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                 id="path4901-5" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                 id="path4903-7"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                 id="path4905-5" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                 id="path4907-3"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                 id="path4909-1" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                 id="path4911-20" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path4913-13"
+                 d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                 style="fill:url(#radialGradient104926);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                 id="path4915-3" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                 id="path4917-3" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                 id="path4919-4"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                 id="path4921-8" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                 id="path4923-2" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                 id="path4925-9" />
+            </g>
+          </g>
+        </g>
+        <g
+           transform="translate(15.21711,1.7214477)"
+           id="g3159-2">
+          <rect
+             transform="matrix(0.8944272,-0.4472136,0,1,0,0)"
+             style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.75346398;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+             id="rect109160-4"
+             width="36.695312"
+             height="35.799278"
+             x="395.43951"
+             y="330.15076"
+             ry="8.8706169" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             id="path109162-5"
+             d="m 372.22665,145.64754 -0.13558,32.8959 -2.71818,1.81754 0,-33.0536 2.85376,-1.65984 z"
+             style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             id="path109164-04"
+             d="m 385.06359,155.06606 0.16889,4.18009 -30.14532,15.26938 0.34578,-4.66405 29.63065,-14.78542 z"
+             style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             sodipodi:nodetypes="cccccccccccccccccccccc"
+             id="path109166-3"
+             d="m 373.89476,146.06666 0.18935,0.85117 2.46154,10.52408 8.33137,-6.09926 0.22711,2.41718 -8.55848,6.65757 -0.94674,0.61318 -0.37871,-1.43183 -1.70413,-7.38993 -2.65089,23.5191 -0.18936,2.39483 -1.32544,-2.17115 -5.68048,-9.30487 -9.13434,3.64409 0.25777,-2.59705 8.68723,-3.52121 0.56805,-0.42199 0.56804,0.93049 4.73373,7.75407 2.84024,-25.91394 0,-0.541 1.70414,0.0865 z"
+             style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        </g>
+      </g>
+      <text
+         id="text81085"
+         y="841.72638"
+         x="782.9314"
+         style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+         xml:space="preserve"><tspan
+           y="841.72638"
+           x="782.9314"
+           id="tspan81087"
+           sodipodi:role="line">Monitoring</tspan></text>
+      <g
+         transform="translate(-748.20118,35.875359)"
+         id="g95384">
+        <path
+           id="path14972"
+           d="m 872.99052,751.77872 80.99826,41.26416"
+           style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           sodipodi:nodetypes="cc" />
+        <path
+           id="path14036-6"
+           d="m 993.06325,743.40092 53.58135,-27.30108"
+           style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <path
+           style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 966.37299,729.633 53.58131,-27.30109"
+           id="path14038-4" />
+        <path
+           style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 926.45966,779.63802 53.58133,-27.30109"
+           id="path3533-0-9-9" />
+        <path
+           id="path14040-8"
+           d="m 1019.7535,757.16885 53.5813,-27.30108"
+           style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <path
+           id="path13103-4"
+           d="m 899.81312,765.75453 53.58134,-27.30108"
+           style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <path
+           style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 953.5252,793.2422 53.5813,-27.30108"
+           id="path3533-0-7" />
+        <path
+           id="path13105-2"
+           d="m 873.44593,751.73134 53.58134,-27.30108"
+           style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+        <g
+           transform="matrix(0.38524834,0,0,0.38524834,864.78502,532.73899)"
+           id="g20121-8">
+          <g
+             transform="matrix(6.5383417,0,0,6.5383417,488.78696,875.42775)"
+             inkscape:label="Calque 1"
+             id="g20123-2">
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path20125-8" />
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path20127-8" />
+            <path
+               style="fill:#888888;fill-opacity:1;stroke:none"
+               d=""
+               id="path20129-7" />
+            <g
+               transform="translate(-68.205597,-63.743549)"
+               id="g20131-0">
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 7.6108945,14.642423 -0.3365653,0.168282 -8.07756781,4.038784 -0.33656529,0.168283 0,0.420707 0,4.038784 0,0.420706 0.33656529,0.168283 8.07756781,4.038784 0.3365653,0.168282 0.2944947,-0.168282 8.0775678,-4.038784 0.378636,-0.168283 0,-0.420706 0,-4.038784 0,-0.420707 -0.378636,-0.168283 -8.0775678,-4.038784 -0.2944947,-0.168282 z m 0,1.514544 7.4044375,3.702218 0,3.197371 -7.4044375,3.702218 -7.40443714,-3.702218 0,-3.197371 7.40443714,-3.702218 z"
+                 id="path20133-1" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M -0.48215529,19.441925 7.5954125,15.403141 15.67298,19.441925 7.5954125,23.480709 -0.48215529,19.441925 z"
+                 id="path20135-5" />
+              <path
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m -0.48215529,19.441925 0,4.038784 8.07756779,4.038784 0,-4.038784 -8.07756779,-4.038784 z"
+                 id="path20137-0"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:url(#radialGradient16536);fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 15.67298,19.441925 0,4.038784 -8.0775675,4.038784 0,-4.038784 8.0775675,-4.038784 z"
+                 id="path20139-8"
+                 sodipodi:nodetypes="ccccc" />
+            </g>
+          </g>
+          <g
+             id="g20141-0"
+             transform="matrix(0.6363961,-0.3181981,-0.6363961,-0.3181981,-338.72869,1082.8342)">
+            <path
+               id="path20143-7"
+               d="m 1081.1367,402.39569 0,78.90625 78.9062,0 0,-78.90625 -78.9062,0 z m 39.4687,2.46875 c 20.4177,0 37,16.5823 37,37 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 0,-20.41771 16.5823,-37 37,-37 z"
+               style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter" />
+            <g
+               style="fill:#00ffff;stroke:#ffffff"
+               transform="translate(456.4439,-26.889185)"
+               id="g20145-1">
+              <path
+                 style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+                 d="m 660.00267,458.32498 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+                 id="path20147-5" />
+              <path
+                 id="path20149-1"
+                 d="m 668.28911,465.32717 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+                 style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+              <path
+                 id="path20151-3"
+                 d="m 660.00267,472.20199 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+                 style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+              <path
+                 style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+                 d="m 668.28911,479.13574 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+                 id="path20153-3" />
+            </g>
+          </g>
+        </g>
+        <path
+           style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           d="m 939.68273,715.86503 53.58134,-27.30109"
+           id="path14042-7" />
+        <g
+           id="g95180">
+          <g
+             id="g11976-3-4"
+             transform="matrix(0.38524834,0,0,0.38524834,-61.179222,752.04337)">
+            <g
+               id="g11978-3-4"
+               transform="translate(2350.6149,-222.65428)">
+              <g
+                 id="g11980-8-0"
+                 inkscape:label="Calque 1"
+                 transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+                <path
+                   id="path11982-9-5"
+                   d=""
+                   style="fill:#888888;fill-opacity:1;stroke:none" />
+                <path
+                   id="path11984-5-6"
+                   d=""
+                   style="fill:#888888;fill-opacity:1;stroke:none" />
+                <path
+                   id="path11986-5-0"
+                   d=""
+                   style="fill:#888888;fill-opacity:1;stroke:none" />
+                <g
+                   id="g11988-3-0">
+                  <path
+                     id="path11990-8-4"
+                     d="M 2,11 22,1 42,11 22,21 2,11 z"
+                     style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                  <path
+                     id="path11992-6-0"
+                     d="M 2,11 2,41 22,51 22,21 2,11 z"
+                     style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                  <path
+                     sodipodi:nodetypes="ccccc"
+                     id="path11994-0-3"
+                     d="M 22,51 42,41 42,11 22,21 22,51 z"
+                     style="fill:url(#linearGradient16538);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                     id="path11996-3-2"
+                     sodipodi:nodetypes="ccccc" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                     id="path11998-3-0" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                     id="path12000-6-8"
+                     sodipodi:nodetypes="ccccc" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                     id="path12002-1-6" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                     id="path12004-8-9"
+                     sodipodi:nodetypes="ccccc" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                     id="path12006-7-9" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                     id="path12008-0-2" />
+                  <path
+                     sodipodi:nodetypes="ccccc"
+                     id="path12010-5-3"
+                     d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                     style="fill:url(#radialGradient16540);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                     id="path12012-1-5" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                     id="path12014-1-4" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                     id="path12016-0-8"
+                     sodipodi:nodetypes="ccccc" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                     id="path12018-3-1" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                     id="path12020-0-0" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                     id="path12022-0-7" />
+                </g>
+              </g>
+            </g>
+            <g
+               transform="matrix(0.7,-0.35,0,1,2334.3228,-284.85697)"
+               id="g12024-4-2">
+              <rect
+                 style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12026-5-4"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="358.0549"
+                 y="293.20496" />
+              <rect
+                 y="293.20496"
+                 x="368.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12028-4-9"
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12030-2-9"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="378.0549"
+                 y="293.20496" />
+              <rect
+                 y="293.20496"
+                 x="388.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12032-4-2"
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12034-9-3"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="398.0549"
+                 y="293.20496" />
+              <rect
+                 y="303.20496"
+                 x="358.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12036-9-6"
+                 style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12038-9-6"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="368.0549"
+                 y="303.20496" />
+              <rect
+                 y="303.20496"
+                 x="378.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12040-4-7"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12042-9-7"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="388.0549"
+                 y="303.20496" />
+              <rect
+                 y="303.20496"
+                 x="398.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12044-8-4"
+                 style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12046-1-6"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="358.0549"
+                 y="313.20496" />
+              <rect
+                 y="313.20496"
+                 x="368.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12048-6-9"
+                 style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12050-3-6"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="378.0549"
+                 y="313.20496" />
+              <rect
+                 y="313.20496"
+                 x="388.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12052-9-0"
+                 style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12054-3-9"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="398.0549"
+                 y="313.20496" />
+              <rect
+                 y="323.20496"
+                 x="358.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12056-3-9"
+                 style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12058-4-5"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="368.0549"
+                 y="323.20496" />
+              <rect
+                 y="323.20496"
+                 x="378.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12060-6-1"
+                 style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12062-1-7"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="388.0549"
+                 y="323.20496" />
+              <rect
+                 y="323.20496"
+                 x="398.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12064-5-3"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12066-6-0"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="358.0549"
+                 y="333.20496" />
+              <rect
+                 y="333.20496"
+                 x="368.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12068-1-8"
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12070-7-5"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="378.0549"
+                 y="333.20496" />
+              <rect
+                 y="333.20496"
+                 x="388.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12072-2-4"
+                 style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12074-2-3"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="398.0549"
+                 y="333.20496" />
+            </g>
+          </g>
+          <g
+             id="g11976-37-9"
+             transform="matrix(0.38524834,0,0,0.38524834,-34.001281,765.86687)">
+            <g
+               id="g11978-7-4"
+               transform="translate(2350.6149,-222.65428)">
+              <g
+                 id="g11980-2-6"
+                 inkscape:label="Calque 1"
+                 transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+                <path
+                   id="path11982-3-2"
+                   d=""
+                   style="fill:#888888;fill-opacity:1;stroke:none" />
+                <path
+                   id="path11984-7-3"
+                   d=""
+                   style="fill:#888888;fill-opacity:1;stroke:none" />
+                <path
+                   id="path11986-2-8"
+                   d=""
+                   style="fill:#888888;fill-opacity:1;stroke:none" />
+                <g
+                   id="g11988-5-6">
+                  <path
+                     id="path11990-3-2"
+                     d="M 2,11 22,1 42,11 22,21 2,11 z"
+                     style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                  <path
+                     id="path11992-7-7"
+                     d="M 2,11 2,41 22,51 22,21 2,11 z"
+                     style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                  <path
+                     sodipodi:nodetypes="ccccc"
+                     id="path11994-6-0"
+                     d="M 22,51 42,41 42,11 22,21 22,51 z"
+                     style="fill:url(#linearGradient16542);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                     id="path11996-8-7"
+                     sodipodi:nodetypes="ccccc" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                     id="path11998-1-6" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                     id="path12000-3-7"
+                     sodipodi:nodetypes="ccccc" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                     id="path12002-6-4" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                     id="path12004-4-3"
+                     sodipodi:nodetypes="ccccc" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                     id="path12006-0-1" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                     id="path12008-3-2" />
+                  <path
+                     sodipodi:nodetypes="ccccc"
+                     id="path12010-58-4"
+                     d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                     style="fill:url(#radialGradient16544);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                     id="path12012-5-7" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                     id="path12014-0-5" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                     id="path12016-9-5"
+                     sodipodi:nodetypes="ccccc" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                     id="path12018-9-8" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                     id="path12020-8-0" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                     id="path12022-02-7" />
+                </g>
+              </g>
+            </g>
+            <g
+               transform="matrix(0.7,-0.35,0,1,2334.3228,-284.85697)"
+               id="g12024-49-7">
+              <rect
+                 style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12026-0-3"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="358.0549"
+                 y="293.20496" />
+              <rect
+                 y="293.20496"
+                 x="368.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12028-1-7"
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12030-20-7"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="378.0549"
+                 y="293.20496" />
+              <rect
+                 y="293.20496"
+                 x="388.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12032-0-9"
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12034-6-3"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="398.0549"
+                 y="293.20496" />
+              <rect
+                 y="303.20496"
+                 x="358.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12036-3-2"
+                 style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12038-90-0"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="368.0549"
+                 y="303.20496" />
+              <rect
+                 y="303.20496"
+                 x="378.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12040-8-7"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12042-3-8"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="388.0549"
+                 y="303.20496" />
+              <rect
+                 y="303.20496"
+                 x="398.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12044-87-2"
+                 style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12046-3-0"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="358.0549"
+                 y="313.20496" />
+              <rect
+                 y="313.20496"
+                 x="368.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12048-1-7"
+                 style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12050-0-1"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="378.0549"
+                 y="313.20496" />
+              <rect
+                 y="313.20496"
+                 x="388.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12052-0-4"
+                 style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12054-5-6"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="398.0549"
+                 y="313.20496" />
+              <rect
+                 y="323.20496"
+                 x="358.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12056-0-1"
+                 style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12058-3-1"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="368.0549"
+                 y="323.20496" />
+              <rect
+                 y="323.20496"
+                 x="378.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12060-1-2"
+                 style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12062-8-8"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="388.0549"
+                 y="323.20496" />
+              <rect
+                 y="323.20496"
+                 x="398.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12064-0-8"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12066-1-7"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="358.0549"
+                 y="333.20496" />
+              <rect
+                 y="333.20496"
+                 x="368.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12068-7-1"
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12070-9-0"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="378.0549"
+                 y="333.20496" />
+              <rect
+                 y="333.20496"
+                 x="388.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12072-1-1"
+                 style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12074-0-0"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="398.0549"
+                 y="333.20496" />
+            </g>
+          </g>
+          <g
+             id="g11976-0-7"
+             transform="matrix(0.38524834,0,0,0.38524834,-6.8233912,779.69043)">
+            <g
+               id="g11978-30-9"
+               transform="translate(2350.6149,-222.65428)">
+              <g
+                 id="g11980-3-0"
+                 inkscape:label="Calque 1"
+                 transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+                <path
+                   id="path11982-37-7"
+                   d=""
+                   style="fill:#888888;fill-opacity:1;stroke:none" />
+                <path
+                   id="path11984-9-6"
+                   d=""
+                   style="fill:#888888;fill-opacity:1;stroke:none" />
+                <path
+                   id="path11986-4-9"
+                   d=""
+                   style="fill:#888888;fill-opacity:1;stroke:none" />
+                <g
+                   id="g11988-9-3">
+                  <path
+                     id="path11990-9-3"
+                     d="M 2,11 22,1 42,11 22,21 2,11 z"
+                     style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                  <path
+                     id="path11992-1-6"
+                     d="M 2,11 2,41 22,51 22,21 2,11 z"
+                     style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                  <path
+                     sodipodi:nodetypes="ccccc"
+                     id="path11994-9-4"
+                     d="M 22,51 42,41 42,11 22,21 22,51 z"
+                     style="fill:url(#linearGradient16546);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                     id="path11996-4-9"
+                     sodipodi:nodetypes="ccccc" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                     id="path11998-2-8" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                     id="path12000-0-4"
+                     sodipodi:nodetypes="ccccc" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                     id="path12002-65-6" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                     id="path12004-9-9"
+                     sodipodi:nodetypes="ccccc" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                     id="path12006-5-9" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                     id="path12008-6-7" />
+                  <path
+                     sodipodi:nodetypes="ccccc"
+                     id="path12010-1-8"
+                     d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                     style="fill:url(#radialGradient16548);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                     id="path12012-14-0" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                     id="path12014-3-1" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                     id="path12016-7-4"
+                     sodipodi:nodetypes="ccccc" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                     id="path12018-2-3" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                     id="path12020-7-5" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                     id="path12022-3-9" />
+                </g>
+              </g>
+            </g>
+            <g
+               transform="matrix(0.7,-0.35,0,1,2334.3228,-284.85697)"
+               id="g12024-3-4">
+              <rect
+                 style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12026-9-3"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="358.0549"
+                 y="293.20496" />
+              <rect
+                 y="293.20496"
+                 x="368.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12028-2-8"
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12030-4-5"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="378.0549"
+                 y="293.20496" />
+              <rect
+                 y="293.20496"
+                 x="388.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12032-44-5"
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12034-99-2"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="398.0549"
+                 y="293.20496" />
+              <rect
+                 y="303.20496"
+                 x="358.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12036-38-8"
+                 style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12038-3-3"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="368.0549"
+                 y="303.20496" />
+              <rect
+                 y="303.20496"
+                 x="378.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12040-2-1"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12042-95-8"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="388.0549"
+                 y="303.20496" />
+              <rect
+                 y="303.20496"
+                 x="398.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12044-4-2"
+                 style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12046-39-7"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="358.0549"
+                 y="313.20496" />
+              <rect
+                 y="313.20496"
+                 x="368.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12048-4-0"
+                 style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12050-9-5"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="378.0549"
+                 y="313.20496" />
+              <rect
+                 y="313.20496"
+                 x="388.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12052-5-2"
+                 style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12054-57-6"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="398.0549"
+                 y="313.20496" />
+              <rect
+                 y="323.20496"
+                 x="358.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12056-39-1"
+                 style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12058-0-1"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="368.0549"
+                 y="323.20496" />
+              <rect
+                 y="323.20496"
+                 x="378.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12060-7-7"
+                 style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12062-2-8"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="388.0549"
+                 y="323.20496" />
+              <rect
+                 y="323.20496"
+                 x="398.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12064-7-8"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12066-2-6"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="358.0549"
+                 y="333.20496" />
+              <rect
+                 y="333.20496"
+                 x="368.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12068-9-7"
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12070-0-7"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="378.0549"
+                 y="333.20496" />
+              <rect
+                 y="333.20496"
+                 x="388.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12072-5-4"
+                 style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12074-04-9"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="398.0549"
+                 y="333.20496" />
+            </g>
+          </g>
+          <g
+             id="g11976-8-0"
+             transform="matrix(0.38524834,0,0,0.38524834,20.354516,793.51394)">
+            <g
+               id="g11978-8-0"
+               transform="translate(2350.6149,-222.65428)">
+              <g
+                 id="g11980-7-2"
+                 inkscape:label="Calque 1"
+                 transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+                <path
+                   id="path11982-0-7"
+                   d=""
+                   style="fill:#888888;fill-opacity:1;stroke:none" />
+                <path
+                   id="path11984-52-1"
+                   d=""
+                   style="fill:#888888;fill-opacity:1;stroke:none" />
+                <path
+                   id="path11986-7-6"
+                   d=""
+                   style="fill:#888888;fill-opacity:1;stroke:none" />
+                <g
+                   id="g11988-91-2">
+                  <path
+                     id="path11990-96-0"
+                     d="M 2,11 22,1 42,11 22,21 2,11 z"
+                     style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                  <path
+                     id="path11992-3-4"
+                     d="M 2,11 2,41 22,51 22,21 2,11 z"
+                     style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                  <path
+                     sodipodi:nodetypes="ccccc"
+                     id="path11994-68-8"
+                     d="M 22,51 42,41 42,11 22,21 22,51 z"
+                     style="fill:url(#linearGradient16550);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                     id="path11996-46-2"
+                     sodipodi:nodetypes="ccccc" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                     id="path11998-6-2" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                     id="path12000-7-3"
+                     sodipodi:nodetypes="ccccc" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                     id="path12002-2-3" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                     id="path12004-7-2"
+                     sodipodi:nodetypes="ccccc" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                     id="path12006-4-7" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                     id="path12008-1-2" />
+                  <path
+                     sodipodi:nodetypes="ccccc"
+                     id="path12010-0-4"
+                     d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                     style="fill:url(#radialGradient16552);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                     id="path12012-0-5" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                     id="path12014-6-4" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                     id="path12016-4-1"
+                     sodipodi:nodetypes="ccccc" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                     id="path12018-4-6" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                     id="path12020-3-8" />
+                  <path
+                     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                     d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                     id="path12022-7-0" />
+                </g>
+              </g>
+            </g>
+            <g
+               transform="matrix(0.7,-0.35,0,1,2334.3228,-284.85697)"
+               id="g12024-34-4">
+              <rect
+                 style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12026-7-8"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="358.0549"
+                 y="293.20496" />
+              <rect
+                 y="293.20496"
+                 x="368.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12028-21-8"
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12030-7-3"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="378.0549"
+                 y="293.20496" />
+              <rect
+                 y="293.20496"
+                 x="388.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12032-9-5"
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12034-5-2"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="398.0549"
+                 y="293.20496" />
+              <rect
+                 y="303.20496"
+                 x="358.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12036-6-4"
+                 style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12038-8-7"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="368.0549"
+                 y="303.20496" />
+              <rect
+                 y="303.20496"
+                 x="378.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12040-9-4"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12042-5-7"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="388.0549"
+                 y="303.20496" />
+              <rect
+                 y="303.20496"
+                 x="398.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12044-5-5"
+                 style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12046-2-6"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="358.0549"
+                 y="313.20496" />
+              <rect
+                 y="313.20496"
+                 x="368.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12048-15-5"
+                 style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12050-99-7"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="378.0549"
+                 y="313.20496" />
+              <rect
+                 y="313.20496"
+                 x="388.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12052-1-6"
+                 style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12054-6-9"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="398.0549"
+                 y="313.20496" />
+              <rect
+                 y="323.20496"
+                 x="358.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12056-2-7"
+                 style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12058-1-0"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="368.0549"
+                 y="323.20496" />
+              <rect
+                 y="323.20496"
+                 x="378.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12060-0-3"
+                 style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12062-5-2"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="388.0549"
+                 y="323.20496" />
+              <rect
+                 y="323.20496"
+                 x="398.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12064-3-3"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12066-21-8"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="358.0549"
+                 y="333.20496" />
+              <rect
+                 y="333.20496"
+                 x="368.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12068-97-0"
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12070-6-5"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="378.0549"
+                 y="333.20496" />
+              <rect
+                 y="333.20496"
+                 x="388.0549"
+                 height="9.7841024"
+                 width="9.7841024"
+                 id="rect12072-8-2"
+                 style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+              <rect
+                 style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+                 id="rect12074-20-5"
+                 width="9.7841024"
+                 height="9.7841024"
+                 x="398.0549"
+                 y="333.20496" />
+            </g>
+          </g>
+        </g>
+        <path
+           id="path14972-4"
+           d="m 993.20143,688.65267 80.25197,41.01585"
+           style="fill:none;stroke:#808080;stroke-width:1.926;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           sodipodi:nodetypes="cc" />
+        <g
+           id="g3279-2-1"
+           transform="matrix(0.38524834,0,0,0.38524834,984.84554,467.7792)">
+          <g
+             id="g118255-9-1"
+             inkscape:label="Calque 1"
+             transform="matrix(6.5383417,0,0,6.5383417,488.78696,875.42775)">
+            <path
+               id="path118257-7-5"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path118259-0-8"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path118261-3-9"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <g
+               id="g118263-7-3"
+               transform="translate(-68.205597,-63.743549)">
+              <path
+                 id="path118265-2-3"
+                 d="m 7.6108945,14.642423 -0.3365653,0.168282 -8.07756781,4.038784 -0.33656529,0.168283 0,0.420707 0,4.038784 0,0.420706 0.33656529,0.168283 8.07756781,4.038784 0.3365653,0.168282 0.2944947,-0.168282 8.0775678,-4.038784 0.378636,-0.168283 0,-0.420706 0,-4.038784 0,-0.420707 -0.378636,-0.168283 -8.0775678,-4.038784 -0.2944947,-0.168282 z m 0,1.514544 7.4044375,3.702218 0,3.197371 -7.4044375,3.702218 -7.40443714,-3.702218 0,-3.197371 7.40443714,-3.702218 z"
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path118267-3-6"
+                 d="M -0.48215529,19.441925 7.5954125,15.403141 15.67298,19.441925 7.5954125,23.480709 -0.48215529,19.441925 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path118269-5-7"
+                 d="m -0.48215529,19.441925 0,4.038784 8.07756779,4.038784 0,-4.038784 -8.07756779,-4.038784 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path118271-1-8"
+                 d="m 15.67298,19.441925 0,4.038784 -8.0775675,4.038784 0,-4.038784 8.0775675,-4.038784 z"
+                 style="fill:url(#radialGradient16554);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            </g>
+          </g>
+          <g
+             transform="matrix(0.6363961,-0.3181981,-0.6363961,-0.3181981,-338.72869,1082.8342)"
+             id="g3697-7-6">
+            <path
+               style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter"
+               d="m 1081.1367,402.39569 0,78.90625 78.9062,0 0,-78.90625 -78.9062,0 z m 39.4687,2.46875 c 20.4177,0 37,16.5823 37,37 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 0,-20.41771 16.5823,-37 37,-37 z"
+               id="path3699-89-2" />
+            <g
+               id="g3701-4-5"
+               transform="translate(456.4439,-26.889185)"
+               style="fill:#00ffff;stroke:#ffffff">
+              <path
+                 id="path3703-1-1"
+                 d="m 660.00267,458.32498 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+                 style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+              <path
+                 style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+                 d="m 668.28911,465.32717 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+                 id="path3705-6-0" />
+              <path
+                 style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+                 d="m 660.00267,472.20199 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+                 id="path3707-4-0" />
+              <path
+                 id="path3709-3-0"
+                 d="m 668.28911,479.13574 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+                 style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+            </g>
+          </g>
+        </g>
+      </g>
+      <use
+         height="1052.3622"
+         width="744.09448"
+         transform="translate(126.63464,64.434701)"
+         id="use95651"
+         xlink:href="#g95384"
+         y="0"
+         x="0" />
+      <use
+         height="1052.3622"
+         width="744.09448"
+         transform="translate(126.63461,64.434641)"
+         id="use95653"
+         xlink:href="#use95651"
+         y="0"
+         x="0" />
+      <use
+         height="1052.3622"
+         width="744.09448"
+         transform="translate(126.63467,64.434708)"
+         id="use95655"
+         xlink:href="#use95653"
+         y="0"
+         x="0" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:9.67604542px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="87.091499"
+       y="542.59528"
+       id="text6070"><tspan
+         sodipodi:role="line"
+         x="87.091499"
+         y="542.59528"
+         id="tspan6076"
+         style="font-weight:bold">C2) using diskless nodes</tspan></text>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot13580"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"><flowRegion
+         id="flowRegion13582"><rect
+           id="rect13584"
+           width="828.32507"
+           height="466.69049"
+           x="-67.680222"
+           y="554.35699" /></flowRegion><flowPara
+         id="flowPara13586" /></flowRoot>    <text
+       xml:space="preserve"
+       style="font-size:9.67604542px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="779.40326"
+       y="714.73633"
+       id="text13588"><tspan
+         sodipodi:role="line"
+         id="tspan13590"
+         x="779.40326"
+         y="714.73633">t</tspan></text>
+    <path
+       id="path13594"
+       d="M 633.15472,309.98105 691.30959,280.3496"
+       style="fill:none;stroke:#808080;stroke-width:2.0906589;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       style="fill:none;stroke:#808080;stroke-width:1.86384022;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 433.72797,389.43052 381.88245,415.8472"
+       id="path13596" />
+    <path
+       id="path13598"
+       d="M 311.29753,327.43412 259.452,353.85078"
+       style="fill:none;stroke:#808080;stroke-width:1.86384022;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       style="fill:none;stroke:#808080;stroke-width:1.86384022;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 188.86705,265.43773 137.0215,291.85438"
+       id="path13600" />
+    <path
+       id="path13602"
+       d="M 66.43658,203.44132 14.591037,229.85798"
+       style="fill:none;stroke:#808080;stroke-width:1.86384022;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       id="path13604"
+       d="M 380.93395,415.92955 13.951354,229.36241"
+       style="fill:none;stroke:#808080;stroke-width:1.86384022;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#808080;stroke-width:1.86384022;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 390.56396,506.36873 129.9897,374.51622"
+       id="path13606" />
+    <g
+       transform="matrix(0.96760451,0,0,0.96760451,-83.172647,-574.70275)"
+       id="g13610">
+      <path
+         id="path13612"
+         d="m 443.70447,656.64984 -53.58134,27.30109"
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 466.14451,668.13188 -53.58134,27.30109"
+         id="path13614" />
+      <path
+         id="path13616"
+         d="M 488.58463,679.61391 435.00328,706.915"
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 511.02467,691.09594 -53.58134,27.30109"
+         id="path13618" />
+    </g>
+    <g
+       transform="matrix(0.37276803,0,0,0.37276803,-79.425664,-575.18523)"
+       id="g13620">
+      <g
+         id="g13622"
+         transform="translate(45.388822,1591.2158)">
+        <g
+           id="g13624"
+           transform="translate(897.38434,-46.491083)">
+          <g
+             id="g13626"
+             inkscape:label="Calque 1"
+             transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+            <path
+               id="path13628"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path13630"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path13632"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <g
+               id="g13634">
+              <path
+                 id="path13636"
+                 d="M 2,11 22,1 42,11 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path13638"
+                 d="M 2,11 2,41 22,51 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path13640"
+                 d="M 22,51 42,41 42,11 22,21 22,51 z"
+                 style="fill:url(#linearGradient14934);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                 id="path13642"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                 id="path13644" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                 id="path13646"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                 id="path13648" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                 id="path13650"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                 id="path13652" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                 id="path13654" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path13656"
+                 d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                 style="fill:url(#radialGradient14936);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                 id="path13658" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                 id="path13660" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                 id="path13662"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                 id="path13664" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                 id="path13666" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                 id="path13668" />
+            </g>
+          </g>
+        </g>
+        <g
+           inkscape:label="Calque 1"
+           id="g13670"
+           transform="matrix(0.2766711,-0.1383356,0,0.2555605,1099.9201,-86.84348)"
+           style="fill:#00ff00;fill-opacity:1">
+          <path
+             style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             d="m 174.71965,639.58466 c -29.19719,0 -52.90625,13.34326 -52.90625,29.78125 l 0,119.125 c 0,16.43799 23.70907,29.78125 52.90625,29.78125 29.19719,-10e-6 52.90625,-13.34324 52.90625,-29.78125 l 0,-119.125 -0.0312,0 c 0,-16.43799 -23.67781,-29.78125 -52.875,-29.78125 z"
+             id="path13672" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:2.93746948;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="path13674"
+             sodipodi:cx="184.11563"
+             sodipodi:cy="698.03149"
+             sodipodi:rx="30.68594"
+             sodipodi:ry="17.716536"
+             d="m 214.80157,698.03149 c 0,9.78458 -13.73856,17.71654 -30.68594,17.71654 -16.94738,0 -30.68594,-7.93196 -30.68594,-17.71654 0,-9.78457 13.73856,-17.71653 30.68594,-17.71653 16.94738,0 30.68594,7.93196 30.68594,17.71653 z"
+             transform="matrix(1.6638767,0,0,1.6225174,-131.61326,-463.20234)" />
+        </g>
+      </g>
+      <g
+         id="g13676"
+         transform="translate(105.4361,1621.5028)">
+        <g
+           id="g13678"
+           transform="translate(897.38434,-46.491083)">
+          <g
+             id="g13680"
+             inkscape:label="Calque 1"
+             transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+            <path
+               id="path13682"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path13684"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path13686"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <g
+               id="g13688">
+              <path
+                 id="path13690"
+                 d="M 2,11 22,1 42,11 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path13692"
+                 d="M 2,11 2,41 22,51 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path13694"
+                 d="M 22,51 42,41 42,11 22,21 22,51 z"
+                 style="fill:url(#linearGradient14938);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                 id="path13696"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                 id="path13698" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                 id="path13700"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                 id="path13702" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                 id="path13704"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                 id="path13706" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                 id="path13708" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path13710"
+                 d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                 style="fill:url(#radialGradient14940);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                 id="path13712" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                 id="path13714" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                 id="path13716"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                 id="path13718" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                 id="path13720" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                 id="path13722" />
+            </g>
+          </g>
+        </g>
+        <g
+           inkscape:label="Calque 1"
+           id="g13724"
+           transform="matrix(0.2766711,-0.1383356,0,0.2555605,1099.9201,-86.84348)"
+           style="fill:#00ff00;fill-opacity:1">
+          <path
+             style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             d="m 174.71965,639.58466 c -29.19719,0 -52.90625,13.34326 -52.90625,29.78125 l 0,119.125 c 0,16.43799 23.70907,29.78125 52.90625,29.78125 29.19719,-10e-6 52.90625,-13.34324 52.90625,-29.78125 l 0,-119.125 -0.0312,0 c 0,-16.43799 -23.67781,-29.78125 -52.875,-29.78125 z"
+             id="path13726" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:2.93746948;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="path13728"
+             sodipodi:cx="184.11563"
+             sodipodi:cy="698.03149"
+             sodipodi:rx="30.68594"
+             sodipodi:ry="17.716536"
+             d="m 214.80157,698.03149 c 0,9.78458 -13.73856,17.71654 -30.68594,17.71654 -16.94738,0 -30.68594,-7.93196 -30.68594,-17.71654 0,-9.78457 13.73856,-17.71653 30.68594,-17.71653 16.94738,0 30.68594,7.93196 30.68594,17.71653 z"
+             transform="matrix(1.6638767,0,0,1.6225174,-131.61326,-463.20234)" />
+        </g>
+      </g>
+      <g
+         id="g13730"
+         transform="translate(167.06359,1653.3699)">
+        <g
+           id="g13732"
+           transform="translate(897.38434,-46.491083)">
+          <g
+             id="g13734"
+             inkscape:label="Calque 1"
+             transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+            <path
+               id="path13736"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path13738"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path13740"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <g
+               id="g13742">
+              <path
+                 id="path13744"
+                 d="M 2,11 22,1 42,11 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path13746"
+                 d="M 2,11 2,41 22,51 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path13748"
+                 d="M 22,51 42,41 42,11 22,21 22,51 z"
+                 style="fill:url(#linearGradient14942);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                 id="path13750"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                 id="path13752" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                 id="path13754"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                 id="path13756" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                 id="path13758"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                 id="path13760" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                 id="path13762" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path13764"
+                 d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                 style="fill:url(#radialGradient14944);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                 id="path13766" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                 id="path13768" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                 id="path13770"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                 id="path13772" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                 id="path13774" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                 id="path13776" />
+            </g>
+          </g>
+        </g>
+        <g
+           inkscape:label="Calque 1"
+           id="g13778"
+           transform="matrix(0.2766711,-0.1383356,0,0.2555605,1099.9201,-86.84348)"
+           style="fill:#00ff00;fill-opacity:1">
+          <path
+             style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             d="m 174.71965,639.58466 c -29.19719,0 -52.90625,13.34326 -52.90625,29.78125 l 0,119.125 c 0,16.43799 23.70907,29.78125 52.90625,29.78125 29.19719,-10e-6 52.90625,-13.34324 52.90625,-29.78125 l 0,-119.125 -0.0312,0 c 0,-16.43799 -23.67781,-29.78125 -52.875,-29.78125 z"
+             id="path13780" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:2.93746948;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="path13782"
+             sodipodi:cx="184.11563"
+             sodipodi:cy="698.03149"
+             sodipodi:rx="30.68594"
+             sodipodi:ry="17.716536"
+             d="m 214.80157,698.03149 c 0,9.78458 -13.73856,17.71654 -30.68594,17.71654 -16.94738,0 -30.68594,-7.93196 -30.68594,-17.71654 0,-9.78457 13.73856,-17.71653 30.68594,-17.71653 16.94738,0 30.68594,7.93196 30.68594,17.71653 z"
+             transform="matrix(1.6638767,0,0,1.6225174,-131.61326,-463.20234)" />
+        </g>
+      </g>
+      <g
+         id="g13784"
+         transform="translate(228.69107,1685.2371)">
+        <g
+           id="g13786"
+           transform="translate(897.38434,-46.491083)">
+          <g
+             id="g13788"
+             inkscape:label="Calque 1"
+             transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+            <path
+               id="path13790"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path13792"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <path
+               id="path13794"
+               d=""
+               style="fill:#888888;fill-opacity:1;stroke:none" />
+            <g
+               id="g13796">
+              <path
+                 id="path13798"
+                 d="M 2,11 22,1 42,11 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 id="path13800"
+                 d="M 2,11 2,41 22,51 22,21 2,11 z"
+                 style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path13802"
+                 d="M 22,51 42,41 42,11 22,21 22,51 z"
+                 style="fill:url(#linearGradient14946);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                 id="path13804"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                 id="path13806" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                 id="path13808"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                 id="path13810" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                 id="path13812"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                 id="path13814" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                 id="path13816" />
+              <path
+                 sodipodi:nodetypes="ccccc"
+                 id="path13818"
+                 d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                 style="fill:url(#radialGradient14948);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                 id="path13820" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                 id="path13822" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                 id="path13824"
+                 sodipodi:nodetypes="ccccc" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                 id="path13826" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                 id="path13828" />
+              <path
+                 style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                 d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                 id="path13830" />
+            </g>
+          </g>
+        </g>
+        <g
+           inkscape:label="Calque 1"
+           id="g13832"
+           transform="matrix(0.2766711,-0.1383356,0,0.2555605,1099.9201,-86.84348)"
+           style="fill:#00ff00;fill-opacity:1">
+          <path
+             style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             d="m 174.71965,639.58466 c -29.19719,0 -52.90625,13.34326 -52.90625,29.78125 l 0,119.125 c 0,16.43799 23.70907,29.78125 52.90625,29.78125 29.19719,-10e-6 52.90625,-13.34324 52.90625,-29.78125 l 0,-119.125 -0.0312,0 c 0,-16.43799 -23.67781,-29.78125 -52.875,-29.78125 z"
+             id="path13834" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:2.93746948;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+             id="path13836"
+             sodipodi:cx="184.11563"
+             sodipodi:cy="698.03149"
+             sodipodi:rx="30.68594"
+             sodipodi:ry="17.716536"
+             d="m 214.80157,698.03149 c 0,9.78458 -13.73856,17.71654 -30.68594,17.71654 -16.94738,0 -30.68594,-7.93196 -30.68594,-17.71654 0,-9.78457 13.73856,-17.71653 30.68594,-17.71653 16.94738,0 30.68594,7.93196 30.68594,17.71653 z"
+             transform="matrix(1.6638767,0,0,1.6225174,-131.61326,-463.20234)" />
+        </g>
+      </g>
+    </g>
+    <path
+       style="fill:none;stroke:#808080;stroke-width:1.86384022;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 137.80671,360.42556 51.84556,-26.41667"
+       id="path14050" />
+    <path
+       id="path14054"
+       d="m 194.61698,131.18107 51.84553,-26.41664"
+       style="fill:none;stroke:#808080;stroke-width:1.86384022;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       id="path14056"
+       d="m 353.51081,170.19163 51.84554,-26.41666"
+       style="fill:none;stroke:#808080;stroke-width:1.86360633;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       style="fill:none;stroke:#808080;stroke-width:1.86384022;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 315.96626,193.35769 367.8118,166.94104"
+       id="path14058" />
+    <path
+       id="path14060"
+       d="M 437.31556,255.53426 489.1611,229.1176"
+       style="fill:none;stroke:#808080;stroke-width:1.86384022;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       style="fill:none;stroke:#808080;stroke-width:1.86384022;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 558.66486,317.71085 610.51041,291.2942"
+       id="path14062" />
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#808080;stroke-width:1.86384022;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 245.47949,104.73463 711.6876,342.53959"
+       id="path14064" />
+    <g
+       transform="matrix(0.37276803,0,0,0.37276803,379.58977,-81.066902)"
+       id="g14066">
+      <g
+         transform="matrix(6.5383417,0,0,6.5383417,364.86909,935.55835)"
+         inkscape:label="Calque 1"
+         id="g14068">
+        <path
+           style="fill:#888888;fill-opacity:1;stroke:none"
+           d=""
+           id="path14070" />
+        <path
+           style="fill:#888888;fill-opacity:1;stroke:none"
+           d=""
+           id="path14072" />
+        <path
+           style="fill:#888888;fill-opacity:1;stroke:none"
+           d=""
+           id="path14074" />
+        <g
+           transform="translate(-68.205597,-63.743549)"
+           id="g14076">
+          <path
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 7.6108945,14.642423 -0.3365653,0.168282 -8.07756781,4.038784 -0.33656529,0.168283 0,0.420707 0,4.038784 0,0.420706 0.33656529,0.168283 8.07756781,4.038784 0.3365653,0.168282 0.2944947,-0.168282 8.0775678,-4.038784 0.378636,-0.168283 0,-0.420706 0,-4.038784 0,-0.420707 -0.378636,-0.168283 -8.0775678,-4.038784 -0.2944947,-0.168282 z m 0,1.514544 7.4044375,3.702218 0,3.197371 -7.4044375,3.702218 -7.40443714,-3.702218 0,-3.197371 7.40443714,-3.702218 z"
+             id="path14078" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="M -0.48215529,19.441925 7.5954125,15.403141 15.67298,19.441925 7.5954125,23.480709 -0.48215529,19.441925 z"
+             id="path14080" />
+          <path
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m -0.48215529,19.441925 0,4.038784 8.07756779,4.038784 0,-4.038784 -8.07756779,-4.038784 z"
+             id="path14082"
+             sodipodi:nodetypes="ccccc" />
+          <path
+             style="fill:url(#radialGradient14960);fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 15.67298,19.441925 0,4.038784 -8.0775675,4.038784 0,-4.038784 8.0775675,-4.038784 z"
+             id="path14084"
+             sodipodi:nodetypes="ccccc" />
+        </g>
+      </g>
+      <g
+         transform="matrix(0.6363961,0.3181981,-0.6363961,0.3181981,-697.62009,289.09977)"
+         id="g14086">
+        <path
+           id="path14088"
+           d="m 1044.4209,-4.5996044 0,78.9062504 78.9063,0 0,-78.9062504 -78.9063,0 z m 39.4688,2.46875 c 20.4177,0 37,16.5823004 37,37.0000004 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 -10e-5,-20.41771 16.5823,-37.0000004 37,-37.0000004 z"
+           style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter" />
+        <g
+           id="g14090"
+           style="fill:#00ffff;stroke:#ffffff"
+           transform="translate(705.44117,-218.9829)">
+          <path
+             id="path14092"
+             d="m 378.53666,218.814 -6.22099,11.28987 1.97176,0 0,18.4037 8.49847,0 0,-18.4037 1.95647,0 -6.20571,-11.28987 z"
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+          <path
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="m 378.53666,288.85884 -6.22099,-11.28987 1.97176,0 0,-18.4037 8.49847,0 0,18.4037 1.95647,0 -6.20571,11.28987 z"
+             id="path14094" />
+          <path
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="m 343.41044,253.56675 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+             id="path14096" />
+          <path
+             id="path14098"
+             d="m 413.45528,253.56675 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+        </g>
+      </g>
+    </g>
+    <path
+       sodipodi:nodetypes="cc"
+       id="path14100"
+       d="m 636.82641,381.35097 74.80771,-38.35908"
+       style="fill:none;stroke:#808080;stroke-width:1.86384022;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <g
+       id="g14102"
+       transform="matrix(0.37276803,0,0,0.37276803,212.00671,79.36386)">
+      <g
+         id="g14104"
+         inkscape:label="Calque 1"
+         transform="matrix(6.5383417,0,0,6.5383417,364.86909,935.55835)">
+        <path
+           id="path14106"
+           d=""
+           style="fill:#888888;fill-opacity:1;stroke:none" />
+        <path
+           id="path14108"
+           d=""
+           style="fill:#888888;fill-opacity:1;stroke:none" />
+        <path
+           id="path14110"
+           d=""
+           style="fill:#888888;fill-opacity:1;stroke:none" />
+        <g
+           id="g14112"
+           transform="translate(-68.205597,-63.743549)">
+          <path
+             id="path14114"
+             d="m 7.6108945,14.642423 -0.3365653,0.168282 -8.07756781,4.038784 -0.33656529,0.168283 0,0.420707 0,4.038784 0,0.420706 0.33656529,0.168283 8.07756781,4.038784 0.3365653,0.168282 0.2944947,-0.168282 8.0775678,-4.038784 0.378636,-0.168283 0,-0.420706 0,-4.038784 0,-0.420707 -0.378636,-0.168283 -8.0775678,-4.038784 -0.2944947,-0.168282 z m 0,1.514544 7.4044375,3.702218 0,3.197371 -7.4044375,3.702218 -7.40443714,-3.702218 0,-3.197371 7.40443714,-3.702218 z"
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             id="path14116"
+             d="M -0.48215529,19.441925 7.5954125,15.403141 15.67298,19.441925 7.5954125,23.480709 -0.48215529,19.441925 z"
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             sodipodi:nodetypes="ccccc" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             id="path14118"
+             d="m -0.48215529,19.441925 0,4.038784 8.07756779,4.038784 0,-4.038784 -8.07756779,-4.038784 z"
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             id="path14120"
+             d="m 15.67298,19.441925 0,4.038784 -8.0775675,4.038784 0,-4.038784 8.0775675,-4.038784 z"
+             style="fill:url(#radialGradient14962);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        </g>
+      </g>
+      <g
+         id="g14122"
+         transform="matrix(0.6363961,0.3181981,-0.6363961,0.3181981,-697.62009,289.09977)">
+        <path
+           style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter"
+           d="m 1044.4209,-4.5996044 0,78.9062504 78.9063,0 0,-78.9062504 -78.9063,0 z m 39.4688,2.46875 c 20.4177,0 37,16.5823004 37,37.0000004 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 -10e-5,-20.41771 16.5823,-37.0000004 37,-37.0000004 z"
+           id="path14124" />
+        <g
+           transform="translate(705.44117,-218.9829)"
+           style="fill:#00ffff;stroke:#ffffff"
+           id="g14126">
+          <path
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="m 378.53666,218.814 -6.22099,11.28987 1.97176,0 0,18.4037 8.49847,0 0,-18.4037 1.95647,0 -6.20571,-11.28987 z"
+             id="path14128" />
+          <path
+             id="path14130"
+             d="m 378.53666,288.85884 -6.22099,-11.28987 1.97176,0 0,-18.4037 8.49847,0 0,18.4037 1.95647,0 -6.20571,11.28987 z"
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+          <path
+             id="path14132"
+             d="m 343.41044,253.56675 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+          <path
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="m 413.45528,253.56675 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+             id="path14134" />
+        </g>
+      </g>
+    </g>
+    <g
+       id="g14136"
+       transform="matrix(0.84747589,0,0,0.84747589,-274.39071,235.43082)">
+      <g
+         id="g14138">
+        <path
+           d="m 452.22752,154.79534 c -1.32987,4.3593 0.97442,13.06343 4.32672,7.29809 0.55883,-4.21566 0.16853,-13.66849 -4.32672,-7.29809 z"
+           id="path14140"
+           style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" />
+        <path
+           d="m 459.05645,154.87353 c -5.73123,-1.99396 -4.37255,6.82514 -3.10169,8.88804 4.41472,0.3139 8.88448,0.68282 7.08957,-5.21292 -0.15325,-2.39014 -1.62637,-3.78967 -3.98788,-3.67512 z"
+           id="path14142"
+           style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" />
+        <path
+           d="m 461.48045,154.95173 c -1.09246,1.9721 -0.88144,8.20841 3.07563,8.75771 7.13327,0.55239 -1.24277,-5.48505 3.0235,-5.57782 1.36821,-3.25204 -5.37175,-7.28408 -6.09913,-3.17989 z"
+           id="path14144"
+           style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" />
+        <path
+           d="m 469.14346,154.84748 c -6.26267,0.075 -4.66384,10.71977 1.4292,8.95932 4.83425,0.31308 3.44625,-9.88021 -1.4292,-8.95932 z"
+           id="path14146"
+           style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" />
+        <path
+           d="m 468.85674,155.68154 c -5.85015,2.68836 -2.79296,6.6586 2.86712,4.84803 3.28424,0.8454 -0.45596,-6.36406 -2.86712,-4.84803 z"
+           id="path14148"
+           style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" />
+        <path
+           d="m 475.63355,154.84748 c -5.82517,-1.97942 -4.54812,6.74301 -3.23202,8.91409 4.84187,0.18324 3.39963,-5.16968 5.70816,-6.35977 0.24428,-2.37476 -0.19418,-2.73428 -2.47614,-2.55432 z"
+           id="path14150"
+           style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" />
+        <path
+           d="m 479.49112,154.87353 c -5.77442,-2.02369 -4.43922,6.79664 -3.15383,8.88804 4.41473,0.3139 8.88448,0.68282 7.08958,-5.21292 -0.15836,-2.36396 -1.59101,-3.77955 -3.93575,-3.67512 z"
+           id="path14152"
+           style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" />
+        <path
+           d="m 485.56417,154.84748 c -6.19598,0.15033 -4.65067,10.675 1.42942,8.96143 4.93021,0.35507 3.48048,-9.89643 -1.42942,-8.96143 z"
+           id="path14154"
+           style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" />
+        <path
+           d="m 485.30352,155.68154 c -5.85015,2.68836 -2.79297,6.6586 2.86711,4.84803 3.28424,0.8454 -0.45595,-6.36406 -2.86711,-4.84803 z"
+           id="path14156"
+           style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" />
+        <path
+           d="m 488.0403,154.95173 c -1.06389,1.96915 -0.92086,8.22865 3.04957,8.75771 7.16539,0.57531 -1.21095,-5.48429 3.04956,-5.57782 1.3682,-3.25204 -5.37175,-7.28408 -6.09913,-3.17989 z"
+           id="path14158"
+           style="font-size:12px;font-style:normal;font-weight:normal;opacity:0.17777776;fill:#313235;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14160"
+           inkscape:tile-cx="150.57283"
+           inkscape:tile-cy="1057.5979"
+           inkscape:tile-h="104.60061"
+           inkscape:tile-w="105.36077"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient14964);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.179335,0,0,0.149728,502.1893,-24.02897)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14162"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient14966);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(0.284001,0,0,0.193224,407.7236,-73.15871)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14164"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient14968);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(0.340554,0,0,0.231701,396.3144,-88.95173)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14166"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient14970);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(0.249954,0,0,0.170059,406.7992,-32.10751)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14168"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient14972);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(0.260403,0,0,0.177168,412.2819,-25.25605)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14170"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient14974);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.104126,-0.150834,-0.146719,0.07084417,668.335,91.43843)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14172"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient14976);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.154671,-0.224051,-0.217939,0.105233,738.2325,88.88709)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14174"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient14978);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.138006,-0.19991,-0.194457,0.09389457,722.8067,97.77468)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14176"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient14980);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.117791,-0.170629,-0.165973,0.08014087,677.6847,122.0894)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14178"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient14982);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.09614486,-0.139271,-0.135472,0.06541328,635.5166,142.1226)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14180"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient14984);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.164683,-0.238552,0.232045,-0.112044,265.1906,314.0698)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14182"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient14986);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.172846,-0.250377,0.243546,-0.117597,239.7257,330.3731)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14184"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient14988);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.177232,-0.256733,0.249729,-0.120583,225.1178,318.3329)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14186"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient14990);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.166524,-0.241221,0.23464,-0.113297,227.7161,329.1711)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14188"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient14992);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.112183,-0.162505,0.158072,-0.07632533,314.1776,290.1886)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14190"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient14994);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.11826,0.171307,0.166634,0.08045988,311.5686,16.07786)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14192"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient14996);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.0943583,0.136684,0.132956,0.06419815,331.8395,50.2111)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14194"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient14998);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.114364,0.165662,0.161143,0.07780872,322.2702,30.08746)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14196"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient15000);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.140702,0.203815,0.198255,0.09572832,286.7172,18.15027)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14198"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient15002);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.162185,0.234935,0.228526,0.110345,259.9411,6.05945)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14200"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient15004);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.160583,0.232613,-0.226269,-0.109254,748.0707,211.5833)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14202"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient15006);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.12628,0.182922,-0.177934,-0.08591606,697.8146,196.7379)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14204"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient15008);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.137748,0.199537,-0.194093,-0.09371803,714.1281,221.8225)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14206"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient15010);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.120979,0.175247,-0.170466,-0.08231039,662.6019,207.1803)" />
+        <path
+           d="m 200.40415,1074.4789 c -9.38924,27.3323 -39.31505,41.9316 -66.84118,32.6085 -27.52613,-9.3231 -42.228996,-39.0382 -32.83977,-66.3705 9.38924,-27.3323 39.31505,-41.93159 66.84118,-32.6085 24.96138,8.4544 39.77465,33.9403 34.65958,59.6308"
+           id="path14208"
+           sodipodi:cx="150.56367"
+           sodipodi:cy="1057.5979"
+           sodipodi:end="6.478369"
+           sodipodi:open="true"
+           sodipodi:rx="52.660198"
+           sodipodi:ry="52.289352"
+           sodipodi:start="0.32872637"
+           sodipodi:type="arc"
+           style="opacity:0.17777776;fill:url(#linearGradient15012);fill-opacity:1;fill-rule:nonzero;stroke:none"
+           transform="matrix(-0.14434,0.209086,-0.203383,-0.09820396,735.5011,232.5166)" />
+      </g>
+      <path
+         d="m 409.69532,571.95715 c 0,13.80622 -11.19215,24.99836 -24.99836,24.99836 -13.80621,0 -24.99836,-11.19214 -24.99836,-24.99836 0,-13.80621 11.19215,-24.99835 24.99836,-24.99835 13.80621,0 24.99836,11.19214 24.99836,24.99835 z"
+         id="path14210"
+         sodipodi:cx="384.69696"
+         sodipodi:cy="571.95715"
+         sodipodi:rx="24.998358"
+         sodipodi:ry="24.998358"
+         sodipodi:type="arc"
+         style="fill:url(#radialGradient15014);fill-opacity:1;fill-rule:nonzero;stroke:none"
+         transform="matrix(1.155532,0,0,1.155532,26.16756,-503.197)" />
+      <text
+         id="text14212"
+         style="font-size:10.00881386px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#9f0021;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
+         x="469.55161"
+         xml:space="preserve"
+         y="161.44913"><tspan
+           id="tspan14214"
+           sodipodi:role="line"
+           x="469.55161"
+           y="161.44913">Internet</tspan></text>
+    </g>
+    <text
+       id="text14216"
+       y="25.73774"
+       x="469.02438"
+       style="font-size:9.67604542px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       xml:space="preserve"><tspan
+         id="tspan14220"
+         y="25.73774"
+         x="469.02438"
+         sodipodi:role="line">HA Database for</tspan><tspan
+         y="37.832798"
+         x="469.02438"
+         sodipodi:role="line"
+         id="tspan16599">OpenStack Compute</tspan></text>
+    <text
+       id="text14228"
+       y="86.196609"
+       x="89.344864"
+       style="font-size:9.67604542px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       xml:space="preserve"><tspan
+         id="tspan14232"
+         y="86.196609"
+         x="89.344864"
+         sodipodi:role="line">Servers running</tspan><tspan
+         y="98.291664"
+         x="89.344864"
+         sodipodi:role="line"
+         id="tspan16603"> virtual guests</tspan></text>
+    <g
+       transform="matrix(0.37276803,0,0,0.37276803,648.08423,56.950946)"
+       id="g14286">
+      <g
+         transform="matrix(6.5383417,0,0,6.5383417,364.86909,935.55835)"
+         inkscape:label="Calque 1"
+         id="g14288">
+        <path
+           style="fill:#888888;fill-opacity:1;stroke:none"
+           d=""
+           id="path14290" />
+        <path
+           style="fill:#888888;fill-opacity:1;stroke:none"
+           d=""
+           id="path14292" />
+        <path
+           style="fill:#888888;fill-opacity:1;stroke:none"
+           d=""
+           id="path14294" />
+        <g
+           transform="translate(-68.205597,-63.743549)"
+           id="g14296">
+          <path
+             style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 7.6108945,14.642423 -0.3365653,0.168282 -8.07756781,4.038784 -0.33656529,0.168283 0,0.420707 0,4.038784 0,0.420706 0.33656529,0.168283 8.07756781,4.038784 0.3365653,0.168282 0.2944947,-0.168282 8.0775678,-4.038784 0.378636,-0.168283 0,-0.420706 0,-4.038784 0,-0.420707 -0.378636,-0.168283 -8.0775678,-4.038784 -0.2944947,-0.168282 z m 0,1.514544 7.4044375,3.702218 0,3.197371 -7.4044375,3.702218 -7.40443714,-3.702218 0,-3.197371 7.40443714,-3.702218 z"
+             id="path14298" />
+          <path
+             sodipodi:nodetypes="ccccc"
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="M -0.48215529,19.441925 7.5954125,15.403141 15.67298,19.441925 7.5954125,23.480709 -0.48215529,19.441925 z"
+             id="path14300" />
+          <path
+             style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m -0.48215529,19.441925 0,4.038784 8.07756779,4.038784 0,-4.038784 -8.07756779,-4.038784 z"
+             id="path14302"
+             sodipodi:nodetypes="ccccc" />
+          <path
+             style="fill:url(#radialGradient15022);fill-opacity:1;fill-rule:evenodd;stroke:none"
+             d="m 15.67298,19.441925 0,4.038784 -8.0775675,4.038784 0,-4.038784 8.0775675,-4.038784 z"
+             id="path14304"
+             sodipodi:nodetypes="ccccc" />
+        </g>
+      </g>
+      <g
+         transform="matrix(0.6363961,0.3181981,-0.6363961,0.3181981,-697.62009,289.09977)"
+         id="g14306">
+        <path
+           id="path14308"
+           d="m 1044.4209,-4.5996044 0,78.9062504 78.9063,0 0,-78.9062504 -78.9063,0 z m 39.4688,2.46875 c 20.4177,0 37,16.5823004 37,37.0000004 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 -10e-5,-20.41771 16.5823,-37.0000004 37,-37.0000004 z"
+           style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter" />
+        <g
+           id="g14310"
+           style="fill:#00ffff;stroke:#ffffff"
+           transform="translate(705.44117,-218.9829)">
+          <path
+             id="path14312"
+             d="m 378.53666,218.814 -6.22099,11.28987 1.97176,0 0,18.4037 8.49847,0 0,-18.4037 1.95647,0 -6.20571,-11.28987 z"
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+          <path
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="m 378.53666,288.85884 -6.22099,-11.28987 1.97176,0 0,-18.4037 8.49847,0 0,18.4037 1.95647,0 -6.20571,11.28987 z"
+             id="path14314" />
+          <path
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="m 343.41044,253.56675 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+             id="path14316" />
+          <path
+             id="path14318"
+             d="m 413.45528,253.56675 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+             style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+        </g>
+      </g>
+    </g>
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#808080;stroke-width:1.86384022;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 390.32112,506.41711 624.87859,387.18591"
+       id="path14320" />
+    <g
+       transform="matrix(0.37002536,0,0,0.37002536,524.25122,174.41947)"
+       id="g14322">
+      <g
+         transform="translate(-369.48339,-385.43051)"
+         id="g14324">
+        <path
+           style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           d="m 607.23277,879.49528 55.44283,-27.72141 55.44282,27.72141 -55.44282,27.72142 -55.44283,-27.72142 z"
+           id="path14326" />
+        <path
+           style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+           d="m 607.23277,879.49528 0,83.16424 55.44283,27.72141 0,-83.16423 -55.44283,-27.72142 z"
+           id="path14328" />
+        <path
+           style="fill:url(#linearGradient15024);fill-opacity:1;fill-rule:evenodd;stroke:none"
+           d="m 662.6756,990.38093 55.44282,-27.72141 0,-83.16424 -55.44282,27.72142 0,83.16423 z"
+           id="path14330"
+           sodipodi:nodetypes="ccccc" />
+        <path
+           style="fill:url(#radialGradient15026);fill-opacity:1;fill-rule:evenodd;stroke:none"
+           d="m 634.81813,937.76977 22.17713,11.08857 0,24.94927 -22.17713,-11.08856 0,-24.94928 z"
+           id="path14332"
+           sodipodi:nodetypes="ccccc" />
+        <path
+           id="path14334"
+           d="m 633.56811,935.45788 0,2.25237 0,24.94927 0,0.86629 0.77967,0.34652 22.17713,11.08857 1.99247,1.03955 0,-2.25237 0,-24.94927 0,-0.86629 -0.77966,-0.34652 -22.17713,-11.08856 -1.99248,-1.03956 z m 2.77214,4.50473 19.40499,9.7025 0,21.83061 -19.40499,-9.70249 0,-21.83062 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           id="path14336"
+           d="m 611.39098,891.10362 0,2.25237 0,66.53139 0,0.86629 0.77967,0.34652 5.54428,2.77214 1.99248,1.03955 0,-2.25236 0,-66.53139 0,-0.86629 -0.77967,-0.34652 -5.54428,-2.77214 -1.99248,-1.03956 z m 2.77215,4.50473 2.77214,1.38607 0,63.41273 -2.77214,-1.38607 0,-63.41273 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           sodipodi:nodetypes="ccccc"
+           id="path14338"
+           d="m 621.09348,895.26184 0,69.65004 8.31642,4.15822 0,-69.65005 -8.31642,-4.15821 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           id="path14340"
+           d="m 633.56811,899.42005 0,2.25236 0,27.72141 0,0.8663 0.77967,0.34652 11.08856,5.54428 1.99248,1.03955 0,-2.25236 0,-27.72141 0,-0.8663 -0.77966,-0.34652 -11.08857,-5.54428 -1.99248,-1.03955 z m 2.77214,4.50473 8.31643,4.15821 0,24.60275 -8.31643,-4.15821 0,-24.60275 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           id="path14342"
+           d="m 650.20096,907.73647 0,2.25237 0,30.49355 0,0.86629 0.77967,0.34652 5.54428,2.77214 1.99247,1.03956 0,-2.25237 0,-30.49355 0,-0.8663 -0.77966,-0.34651 -5.54428,-2.77215 -1.99248,-1.03955 z m 2.77214,4.50473 2.77214,1.38607 0,27.3749 -2.77214,-1.38607 0,-27.3749 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           id="path14344"
+           d="m 662.6756,850.21454 -0.60641,0.34652 -55.44282,27.72141 -0.77967,0.34652 0,0.86629 0,83.16424 0,0.86629 0.77967,0.34652 55.44282,27.72141 0.60641,0.34652 0.6064,-0.34652 55.44283,-27.72141 0.77966,-0.34652 0,-0.86629 0,-83.16424 0,-0.86629 -0.77966,-0.34652 -55.44283,-27.72141 -0.6064,-0.34652 z m 0,3.11866 54.05675,27.02838 0,81.43165 -54.05675,27.02837 -54.05676,-27.02837 0,-81.43165 54.05676,-27.02838 z"
+           style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <rect
+           style="opacity:0.5;fill:url(#pattern118687-0);fill-opacity:1;stroke:none"
+           id="rect14346"
+           width="47.62381"
+           height="45.980042"
+           x="747.37006"
+           y="1269.7253"
+           rx="0"
+           ry="0"
+           transform="matrix(0.8944272,-0.4472136,0,1,0,0)" />
+      </g>
+      <g
+         id="g14348"
+         transform="matrix(0.6363961,-0.3181981,-0.6363961,-0.3181981,-304.10649,883.79115)">
+        <path
+           id="path14350"
+           d="m 1042.8959,100.2653 0,78.90625 78.9063,0 0,-78.90625 -78.9063,0 z m 39.4688,2.46875 c 20.4177,0 37,16.5823 37,37 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 0,-20.41771 16.5823,-37 37,-37 z"
+           style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter" />
+        <g
+           style="fill:#00ffff;stroke:#ffffff"
+           transform="translate(606.95622,-331.6564)"
+           id="g14352">
+          <path
+             sodipodi:type="star"
+             style="fill:#00ffff;fill-opacity:1;stroke:#ffffff;stroke-linecap:butt;stroke-linejoin:miter"
+             id="path14354"
+             sodipodi:sides="3"
+             sodipodi:cx="241.13728"
+             sodipodi:cy="609.1156"
+             sodipodi:r1="15.395656"
+             sodipodi:r2="7.6978278"
+             sodipodi:arg1="0"
+             sodipodi:arg2="1.0471976"
+             inkscape:flatsided="false"
+             inkscape:rounded="0"
+             inkscape:randomized="0"
+             d="m 256.53294,609.1156 -11.54674,6.66652 -11.54674,6.66651 0,-13.33303 0,-13.33303 11.54674,6.66652 11.54674,6.66651 z"
+             transform="translate(212.65401,-137.99186)" />
+          <rect
+             style="fill:#00ffff;fill-opacity:1;stroke:#ffffff;stroke-linecap:butt;stroke-linejoin:miter"
+             id="rect14356"
+             width="7.6689839"
+             height="34.386734"
+             x="471.7662"
+             y="454.18146" />
+          <path
+             transform="matrix(-1,0,0,1,738.13162,-137.99186)"
+             d="m 256.53294,609.1156 -11.54674,6.66652 -11.54674,6.66651 0,-13.33303 0,-13.33303 11.54674,6.66652 11.54674,6.66651 z"
+             inkscape:randomized="0"
+             inkscape:rounded="0"
+             inkscape:flatsided="false"
+             sodipodi:arg2="1.0471976"
+             sodipodi:arg1="0"
+             sodipodi:r2="7.6978278"
+             sodipodi:r1="15.395656"
+             sodipodi:cy="609.1156"
+             sodipodi:cx="241.13728"
+             sodipodi:sides="3"
+             id="path14358"
+             style="fill:#00ffff;fill-opacity:1;stroke:#ffffff;stroke-linecap:butt;stroke-linejoin:miter"
+             sodipodi:type="star" />
+        </g>
+      </g>
+    </g>
+    <text
+       id="text14360"
+       y="411.54996"
+       x="635.02393"
+       style="font-size:9.67604542px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       xml:space="preserve"><tspan
+         id="tspan14362"
+         y="411.54996"
+         x="635.02393"
+         sodipodi:role="line">FW/VPN</tspan><tspan
+         id="tspan14364"
+         y="423.64502"
+         x="635.02393"
+         sodipodi:role="line">giving access to</tspan><tspan
+         id="tspan14366"
+         y="435.74008"
+         x="635.02393"
+         sodipodi:role="line">cloud administrators</tspan></text>
+    <g
+       transform="matrix(0.38356737,0,0,0.38356737,539.82216,219.62884)"
+       id="g14374">
+      <g
+         id="g14376"
+         transform="translate(134.05913,35.984128)">
+        <g
+           id="g14378"
+           inkscape:label="Calque 1"
+           transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+          <path
+             id="path14380"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <path
+             id="path14382"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <path
+             id="path14384"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <g
+             id="g14386">
+            <path
+               id="path14388"
+               d="M 2,11 22,1 42,11 22,21 2,11 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path14390"
+               d="M 2,11 2,41 22,51 22,21 2,11 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path14392"
+               d="M 22,51 42,41 42,11 22,21 22,51 z"
+               style="fill:url(#linearGradient15028);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+               id="path14394"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+               id="path14396" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+               id="path14398"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+               id="path14400" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+               id="path14402"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+               id="path14404" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+               id="path14406" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path14408"
+               d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+               style="fill:url(#radialGradient15030);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+               id="path14410" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+               id="path14412" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+               id="path14414"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+               id="path14416" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+               id="path14418" />
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+               id="path14420" />
+          </g>
+        </g>
+      </g>
+      <g
+         transform="translate(15.21711,1.7214477)"
+         id="g14422">
+        <rect
+           transform="matrix(0.8944272,-0.4472136,0,1,0,0)"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.75346398;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           id="rect14424"
+           width="36.695312"
+           height="35.799278"
+           x="395.43951"
+           y="330.15076"
+           ry="8.8706169" />
+        <path
+           sodipodi:nodetypes="ccccc"
+           id="path14426"
+           d="m 372.22665,145.64754 -0.13558,32.8959 -2.71818,1.81754 0,-33.0536 2.85376,-1.65984 z"
+           style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           sodipodi:nodetypes="ccccc"
+           id="path14428"
+           d="m 385.06359,155.06606 0.16889,4.18009 -30.14532,15.26938 0.34578,-4.66405 29.63065,-14.78542 z"
+           style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+        <path
+           sodipodi:nodetypes="cccccccccccccccccccccc"
+           id="path14430"
+           d="m 373.89476,146.06666 0.18935,0.85117 2.46154,10.52408 8.33137,-6.09926 0.22711,2.41718 -8.55848,6.65757 -0.94674,0.61318 -0.37871,-1.43183 -1.70413,-7.38993 -2.65089,23.5191 -0.18936,2.39483 -1.32544,-2.17115 -5.68048,-9.30487 -9.13434,3.64409 0.25777,-2.59705 8.68723,-3.52121 0.56805,-0.42199 0.56804,0.93049 4.73373,7.75407 2.84024,-25.91394 0,-0.541 1.70414,0.0865 z"
+           style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+      </g>
+    </g>
+    <text
+       id="text14432"
+       y="239.4852"
+       x="676.28735"
+       style="font-size:9.67604542px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       xml:space="preserve"><tspan
+         y="239.4852"
+         x="676.28735"
+         id="tspan14434"
+         sodipodi:role="line">Monitoring</tspan></text>
+    <g
+       transform="matrix(0.96760451,0,0,0.96760451,-805.24344,-540.25988)"
+       id="g14436">
+      <path
+         id="path14438"
+         d="m 872.99052,751.77872 80.99826,41.26416"
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         sodipodi:nodetypes="cc" />
+      <path
+         id="path14440"
+         d="m 993.06325,743.40092 53.58135,-27.30108"
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 966.37299,729.633 53.58131,-27.30109"
+         id="path14442" />
+      <path
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 926.45966,779.63802 53.58133,-27.30109"
+         id="path14444" />
+      <path
+         id="path14446"
+         d="m 1019.7535,757.16885 53.5813,-27.30108"
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         id="path14448"
+         d="m 899.81312,765.75453 53.58134,-27.30108"
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 953.5252,793.2422 53.5813,-27.30108"
+         id="path14450" />
+      <path
+         id="path14452"
+         d="m 873.44593,751.73134 53.58134,-27.30108"
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <g
+         transform="matrix(0.38524834,0,0,0.38524834,864.78502,532.73899)"
+         id="g14454">
+        <g
+           transform="matrix(6.5383417,0,0,6.5383417,488.78696,875.42775)"
+           inkscape:label="Calque 1"
+           id="g14456">
+          <path
+             style="fill:#888888;fill-opacity:1;stroke:none"
+             d=""
+             id="path14458" />
+          <path
+             style="fill:#888888;fill-opacity:1;stroke:none"
+             d=""
+             id="path14460" />
+          <path
+             style="fill:#888888;fill-opacity:1;stroke:none"
+             d=""
+             id="path14462" />
+          <g
+             transform="translate(-68.205597,-63.743549)"
+             id="g14464">
+            <path
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 7.6108945,14.642423 -0.3365653,0.168282 -8.07756781,4.038784 -0.33656529,0.168283 0,0.420707 0,4.038784 0,0.420706 0.33656529,0.168283 8.07756781,4.038784 0.3365653,0.168282 0.2944947,-0.168282 8.0775678,-4.038784 0.378636,-0.168283 0,-0.420706 0,-4.038784 0,-0.420707 -0.378636,-0.168283 -8.0775678,-4.038784 -0.2944947,-0.168282 z m 0,1.514544 7.4044375,3.702218 0,3.197371 -7.4044375,3.702218 -7.40443714,-3.702218 0,-3.197371 7.40443714,-3.702218 z"
+               id="path14466" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="M -0.48215529,19.441925 7.5954125,15.403141 15.67298,19.441925 7.5954125,23.480709 -0.48215529,19.441925 z"
+               id="path14468" />
+            <path
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m -0.48215529,19.441925 0,4.038784 8.07756779,4.038784 0,-4.038784 -8.07756779,-4.038784 z"
+               id="path14470"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               style="fill:url(#radialGradient15032);fill-opacity:1;fill-rule:evenodd;stroke:none"
+               d="m 15.67298,19.441925 0,4.038784 -8.0775675,4.038784 0,-4.038784 8.0775675,-4.038784 z"
+               id="path14472"
+               sodipodi:nodetypes="ccccc" />
+          </g>
+        </g>
+        <g
+           id="g14474"
+           transform="matrix(0.6363961,-0.3181981,-0.6363961,-0.3181981,-338.72869,1082.8342)">
+          <path
+             id="path14476"
+             d="m 1081.1367,402.39569 0,78.90625 78.9062,0 0,-78.90625 -78.9062,0 z m 39.4687,2.46875 c 20.4177,0 37,16.5823 37,37 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 0,-20.41771 16.5823,-37 37,-37 z"
+             style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter" />
+          <g
+             style="fill:#00ffff;stroke:#ffffff"
+             transform="translate(456.4439,-26.889185)"
+             id="g14478">
+            <path
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+               d="m 660.00267,458.32498 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+               id="path14480" />
+            <path
+               id="path14482"
+               d="m 668.28911,465.32717 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+            <path
+               id="path14484"
+               d="m 660.00267,472.20199 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+            <path
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+               d="m 668.28911,479.13574 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+               id="path14486" />
+          </g>
+        </g>
+      </g>
+      <path
+         style="fill:none;stroke:#808080;stroke-width:1.92624176;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         d="m 939.68273,715.86503 53.58134,-27.30109"
+         id="path14488" />
+      <g
+         id="g14490">
+        <g
+           id="g14492"
+           transform="matrix(0.38524834,0,0,0.38524834,-61.179222,752.04337)">
+          <g
+             id="g14494"
+             transform="translate(2350.6149,-222.65428)">
+            <g
+               id="g14496"
+               inkscape:label="Calque 1"
+               transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+              <path
+                 id="path14498"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <path
+                 id="path14500"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <path
+                 id="path14502"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <g
+                 id="g14504">
+                <path
+                   id="path14506"
+                   d="M 2,11 22,1 42,11 22,21 2,11 z"
+                   style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   id="path14508"
+                   d="M 2,11 2,41 22,51 22,21 2,11 z"
+                   style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   sodipodi:nodetypes="ccccc"
+                   id="path14510"
+                   d="M 22,51 42,41 42,11 22,21 22,51 z"
+                   style="fill:url(#linearGradient15034);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                   id="path14512"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                   id="path14514" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                   id="path14516"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                   id="path14518" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                   id="path14520"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                   id="path14522" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                   id="path14524" />
+                <path
+                   sodipodi:nodetypes="ccccc"
+                   id="path14526"
+                   d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                   style="fill:url(#radialGradient15036);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                   id="path14528" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                   id="path14530" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                   id="path14532"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                   id="path14534" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                   id="path14536" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                   id="path14538" />
+              </g>
+            </g>
+          </g>
+          <g
+             transform="matrix(0.7,-0.35,0,1,2334.3228,-284.85697)"
+             id="g14540">
+            <rect
+               style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14542"
+               width="9.7841024"
+               height="9.7841024"
+               x="358.0549"
+               y="293.20496" />
+            <rect
+               y="293.20496"
+               x="368.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14544"
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14546"
+               width="9.7841024"
+               height="9.7841024"
+               x="378.0549"
+               y="293.20496" />
+            <rect
+               y="293.20496"
+               x="388.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14548"
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14550"
+               width="9.7841024"
+               height="9.7841024"
+               x="398.0549"
+               y="293.20496" />
+            <rect
+               y="303.20496"
+               x="358.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14552"
+               style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14554"
+               width="9.7841024"
+               height="9.7841024"
+               x="368.0549"
+               y="303.20496" />
+            <rect
+               y="303.20496"
+               x="378.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14556"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14558"
+               width="9.7841024"
+               height="9.7841024"
+               x="388.0549"
+               y="303.20496" />
+            <rect
+               y="303.20496"
+               x="398.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14560"
+               style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14562"
+               width="9.7841024"
+               height="9.7841024"
+               x="358.0549"
+               y="313.20496" />
+            <rect
+               y="313.20496"
+               x="368.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14564"
+               style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14566"
+               width="9.7841024"
+               height="9.7841024"
+               x="378.0549"
+               y="313.20496" />
+            <rect
+               y="313.20496"
+               x="388.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14568"
+               style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14570"
+               width="9.7841024"
+               height="9.7841024"
+               x="398.0549"
+               y="313.20496" />
+            <rect
+               y="323.20496"
+               x="358.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14572"
+               style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14574"
+               width="9.7841024"
+               height="9.7841024"
+               x="368.0549"
+               y="323.20496" />
+            <rect
+               y="323.20496"
+               x="378.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14576"
+               style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14578"
+               width="9.7841024"
+               height="9.7841024"
+               x="388.0549"
+               y="323.20496" />
+            <rect
+               y="323.20496"
+               x="398.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14580"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14582"
+               width="9.7841024"
+               height="9.7841024"
+               x="358.0549"
+               y="333.20496" />
+            <rect
+               y="333.20496"
+               x="368.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14584"
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14586"
+               width="9.7841024"
+               height="9.7841024"
+               x="378.0549"
+               y="333.20496" />
+            <rect
+               y="333.20496"
+               x="388.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14588"
+               style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14590"
+               width="9.7841024"
+               height="9.7841024"
+               x="398.0549"
+               y="333.20496" />
+          </g>
+        </g>
+        <g
+           id="g14592"
+           transform="matrix(0.38524834,0,0,0.38524834,-34.001281,765.86687)">
+          <g
+             id="g14594"
+             transform="translate(2350.6149,-222.65428)">
+            <g
+               id="g14596"
+               inkscape:label="Calque 1"
+               transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+              <path
+                 id="path14598"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <path
+                 id="path14600"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <path
+                 id="path14602"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <g
+                 id="g14604">
+                <path
+                   id="path14606"
+                   d="M 2,11 22,1 42,11 22,21 2,11 z"
+                   style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   id="path14608"
+                   d="M 2,11 2,41 22,51 22,21 2,11 z"
+                   style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   sodipodi:nodetypes="ccccc"
+                   id="path14610"
+                   d="M 22,51 42,41 42,11 22,21 22,51 z"
+                   style="fill:url(#linearGradient15038);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                   id="path14612"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                   id="path14614" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                   id="path14616"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                   id="path14618" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                   id="path14620"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                   id="path14622" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                   id="path14624" />
+                <path
+                   sodipodi:nodetypes="ccccc"
+                   id="path14626"
+                   d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                   style="fill:url(#radialGradient15040);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                   id="path14628" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                   id="path14630" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                   id="path14632"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                   id="path14634" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                   id="path14636" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                   id="path14638" />
+              </g>
+            </g>
+          </g>
+          <g
+             transform="matrix(0.7,-0.35,0,1,2334.3228,-284.85697)"
+             id="g14640">
+            <rect
+               style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14642"
+               width="9.7841024"
+               height="9.7841024"
+               x="358.0549"
+               y="293.20496" />
+            <rect
+               y="293.20496"
+               x="368.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14644"
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14646"
+               width="9.7841024"
+               height="9.7841024"
+               x="378.0549"
+               y="293.20496" />
+            <rect
+               y="293.20496"
+               x="388.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14648"
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14650"
+               width="9.7841024"
+               height="9.7841024"
+               x="398.0549"
+               y="293.20496" />
+            <rect
+               y="303.20496"
+               x="358.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14652"
+               style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14654"
+               width="9.7841024"
+               height="9.7841024"
+               x="368.0549"
+               y="303.20496" />
+            <rect
+               y="303.20496"
+               x="378.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14656"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14658"
+               width="9.7841024"
+               height="9.7841024"
+               x="388.0549"
+               y="303.20496" />
+            <rect
+               y="303.20496"
+               x="398.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14660"
+               style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14662"
+               width="9.7841024"
+               height="9.7841024"
+               x="358.0549"
+               y="313.20496" />
+            <rect
+               y="313.20496"
+               x="368.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14664"
+               style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14666"
+               width="9.7841024"
+               height="9.7841024"
+               x="378.0549"
+               y="313.20496" />
+            <rect
+               y="313.20496"
+               x="388.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14668"
+               style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14670"
+               width="9.7841024"
+               height="9.7841024"
+               x="398.0549"
+               y="313.20496" />
+            <rect
+               y="323.20496"
+               x="358.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14672"
+               style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14674"
+               width="9.7841024"
+               height="9.7841024"
+               x="368.0549"
+               y="323.20496" />
+            <rect
+               y="323.20496"
+               x="378.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14676"
+               style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14678"
+               width="9.7841024"
+               height="9.7841024"
+               x="388.0549"
+               y="323.20496" />
+            <rect
+               y="323.20496"
+               x="398.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14680"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14682"
+               width="9.7841024"
+               height="9.7841024"
+               x="358.0549"
+               y="333.20496" />
+            <rect
+               y="333.20496"
+               x="368.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14684"
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14686"
+               width="9.7841024"
+               height="9.7841024"
+               x="378.0549"
+               y="333.20496" />
+            <rect
+               y="333.20496"
+               x="388.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14688"
+               style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14690"
+               width="9.7841024"
+               height="9.7841024"
+               x="398.0549"
+               y="333.20496" />
+          </g>
+        </g>
+        <g
+           id="g14692"
+           transform="matrix(0.38524834,0,0,0.38524834,-6.8233912,779.69043)">
+          <g
+             id="g14694"
+             transform="translate(2350.6149,-222.65428)">
+            <g
+               id="g14696"
+               inkscape:label="Calque 1"
+               transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+              <path
+                 id="path14698"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <path
+                 id="path14700"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <path
+                 id="path14702"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <g
+                 id="g14704">
+                <path
+                   id="path14706"
+                   d="M 2,11 22,1 42,11 22,21 2,11 z"
+                   style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   id="path14708"
+                   d="M 2,11 2,41 22,51 22,21 2,11 z"
+                   style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   sodipodi:nodetypes="ccccc"
+                   id="path14710"
+                   d="M 22,51 42,41 42,11 22,21 22,51 z"
+                   style="fill:url(#linearGradient15042);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                   id="path14712"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                   id="path14714" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                   id="path14716"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                   id="path14718" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                   id="path14720"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                   id="path14722" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                   id="path14724" />
+                <path
+                   sodipodi:nodetypes="ccccc"
+                   id="path14726"
+                   d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                   style="fill:url(#radialGradient15044);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                   id="path14728" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                   id="path14730" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                   id="path14732"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                   id="path14734" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                   id="path14736" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                   id="path14738" />
+              </g>
+            </g>
+          </g>
+          <g
+             transform="matrix(0.7,-0.35,0,1,2334.3228,-284.85697)"
+             id="g14740">
+            <rect
+               style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14742"
+               width="9.7841024"
+               height="9.7841024"
+               x="358.0549"
+               y="293.20496" />
+            <rect
+               y="293.20496"
+               x="368.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14744"
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14746"
+               width="9.7841024"
+               height="9.7841024"
+               x="378.0549"
+               y="293.20496" />
+            <rect
+               y="293.20496"
+               x="388.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14748"
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14750"
+               width="9.7841024"
+               height="9.7841024"
+               x="398.0549"
+               y="293.20496" />
+            <rect
+               y="303.20496"
+               x="358.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14752"
+               style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14754"
+               width="9.7841024"
+               height="9.7841024"
+               x="368.0549"
+               y="303.20496" />
+            <rect
+               y="303.20496"
+               x="378.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14756"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14758"
+               width="9.7841024"
+               height="9.7841024"
+               x="388.0549"
+               y="303.20496" />
+            <rect
+               y="303.20496"
+               x="398.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14760"
+               style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14762"
+               width="9.7841024"
+               height="9.7841024"
+               x="358.0549"
+               y="313.20496" />
+            <rect
+               y="313.20496"
+               x="368.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14764"
+               style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14766"
+               width="9.7841024"
+               height="9.7841024"
+               x="378.0549"
+               y="313.20496" />
+            <rect
+               y="313.20496"
+               x="388.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14768"
+               style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14770"
+               width="9.7841024"
+               height="9.7841024"
+               x="398.0549"
+               y="313.20496" />
+            <rect
+               y="323.20496"
+               x="358.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14772"
+               style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14774"
+               width="9.7841024"
+               height="9.7841024"
+               x="368.0549"
+               y="323.20496" />
+            <rect
+               y="323.20496"
+               x="378.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14776"
+               style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14778"
+               width="9.7841024"
+               height="9.7841024"
+               x="388.0549"
+               y="323.20496" />
+            <rect
+               y="323.20496"
+               x="398.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14780"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14782"
+               width="9.7841024"
+               height="9.7841024"
+               x="358.0549"
+               y="333.20496" />
+            <rect
+               y="333.20496"
+               x="368.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14784"
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14786"
+               width="9.7841024"
+               height="9.7841024"
+               x="378.0549"
+               y="333.20496" />
+            <rect
+               y="333.20496"
+               x="388.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14788"
+               style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14790"
+               width="9.7841024"
+               height="9.7841024"
+               x="398.0549"
+               y="333.20496" />
+          </g>
+        </g>
+        <g
+           id="g14792"
+           transform="matrix(0.38524834,0,0,0.38524834,20.354516,793.51394)">
+          <g
+             id="g14794"
+             transform="translate(2350.6149,-222.65428)">
+            <g
+               id="g14796"
+               inkscape:label="Calque 1"
+               transform="matrix(2.7721412,0,0,2.7721412,162.13246,32.470516)">
+              <path
+                 id="path14798"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <path
+                 id="path14800"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <path
+                 id="path14802"
+                 d=""
+                 style="fill:#888888;fill-opacity:1;stroke:none" />
+              <g
+                 id="g14804">
+                <path
+                   id="path14806"
+                   d="M 2,11 22,1 42,11 22,21 2,11 z"
+                   style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   id="path14808"
+                   d="M 2,11 2,41 22,51 22,21 2,11 z"
+                   style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   sodipodi:nodetypes="ccccc"
+                   id="path14810"
+                   d="M 22,51 42,41 42,11 22,21 22,51 z"
+                   style="fill:url(#linearGradient15046);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 22,2.4375 18.875,4 22,5.5625 25.125,4 22,2.4375 z"
+                   id="path14812"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 26,4.4375 -0.21875,0.125 -2,1 L 22.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 29.125,6 28.21875,5.5625 l -2,-1 L 26,4.4375 z M 26,5.5625 26.90625,6 26,6.4375 25.09375,6 26,5.5625 z"
+                   id="path14814" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 30,6.4375 26.875,8 30,9.5625 33.125,8 30,6.4375 z"
+                   id="path14816"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 34,8.4375 -0.21875,0.125 -2,1 L 30.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 37.125,10 36.21875,9.5625 l -2,-1 L 34,8.4375 z M 34,9.5625 34.90625,10 34,10.4375 33.09375,10 34,9.5625 z"
+                   id="path14818" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="M 14,6.4375 10.875,8 14,9.5625 17.125,8 14,6.4375 z"
+                   id="path14820"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 18,4.4375 -0.21875,0.125 -2,1 L 14.875,6 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 21.125,6 20.21875,5.5625 l -2,-1 L 18,4.4375 z M 18,5.5625 18.90625,6 18,6.4375 17.09375,6 18,5.5625 z"
+                   id="path14822" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 10,8.4375 -0.21875,0.125 -2,1 L 6.875,10 l 0.90625,0.4375 2,1 0.21875,0.125 0.21875,-0.125 2,-1 L 13.125,10 12.21875,9.5625 l -2,-1 L 10,8.4375 z M 10,9.5625 10.90625,10 10,10.4375 9.09375,10 10,9.5625 z"
+                   id="path14824" />
+                <path
+                   sodipodi:nodetypes="ccccc"
+                   id="path14826"
+                   d="m 11.95092,32.021472 8,4 0,9.000001 -8,-4 0,-9.000001 z"
+                   style="fill:url(#radialGradient15048);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 11.5,31.1875 0,0.8125 0,9 0,0.3125 0.28125,0.125 8,4 0.71875,0.375 0,-0.8125 0,-9 0,-0.3125 -0.28125,-0.125 -8,-4 L 11.5,31.1875 z m 1,1.625 7,3.5 0,7.875 -7,-3.5 0,-7.875 z"
+                   id="path14828" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 3.5,15.1875 0,0.8125 0,24 0,0.3125 0.28125,0.125 2,1 L 6.5,41.8125 6.5,41 l 0,-24 0,-0.3125 -0.28125,-0.125 -2,-1 L 3.5,15.1875 z m 1,1.625 1,0.5 0,22.875 -1,-0.5 0,-22.875 z"
+                   id="path14830" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 7,16.6875 0,25.125 3,1.5 0,-25.125 -3,-1.5 z"
+                   id="path14832"
+                   sodipodi:nodetypes="ccccc" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 11.5,18.1875 0,0.8125 0,10 0,0.3125 0.28125,0.125 4,2 0.71875,0.375 0,-0.8125 0,-10 0,-0.3125 -0.28125,-0.125 -4,-2 L 11.5,18.1875 z m 1,1.625 3,1.5 0,8.875 -3,-1.5 0,-8.875 z"
+                   id="path14834" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 17.5,21.1875 0,0.8125 0,11 0,0.3125 0.28125,0.125 2,1 0.71875,0.375 0,-0.8125 0,-11 0,-0.3125 -0.28125,-0.125 -2,-1 L 17.5,21.1875 z m 1,1.625 1,0.5 0,9.875 -1,-0.5 0,-9.875 z"
+                   id="path14836" />
+                <path
+                   style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+                   d="m 22,0.4375 -0.21875,0.125 -20,10 L 1.5,10.6875 1.5,11 l 0,30 0,0.3125 0.28125,0.125 20,10 0.21875,0.125 0.21875,-0.125 20,-10 0.28125,-0.125 0,-0.3125 0,-30 0,-0.3125 -0.28125,-0.125 -20,-10 L 22,0.4375 z m 0,1.125 19.5,9.75 0,29.375 -19.5,9.75 -19.5,-9.75 0,-29.375 19.5,-9.75 z"
+                   id="path14838" />
+              </g>
+            </g>
+          </g>
+          <g
+             transform="matrix(0.7,-0.35,0,1,2334.3228,-284.85697)"
+             id="g14840">
+            <rect
+               style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14842"
+               width="9.7841024"
+               height="9.7841024"
+               x="358.0549"
+               y="293.20496" />
+            <rect
+               y="293.20496"
+               x="368.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14844"
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14846"
+               width="9.7841024"
+               height="9.7841024"
+               x="378.0549"
+               y="293.20496" />
+            <rect
+               y="293.20496"
+               x="388.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14848"
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14850"
+               width="9.7841024"
+               height="9.7841024"
+               x="398.0549"
+               y="293.20496" />
+            <rect
+               y="303.20496"
+               x="358.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14852"
+               style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14854"
+               width="9.7841024"
+               height="9.7841024"
+               x="368.0549"
+               y="303.20496" />
+            <rect
+               y="303.20496"
+               x="378.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14856"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14858"
+               width="9.7841024"
+               height="9.7841024"
+               x="388.0549"
+               y="303.20496" />
+            <rect
+               y="303.20496"
+               x="398.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14860"
+               style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14862"
+               width="9.7841024"
+               height="9.7841024"
+               x="358.0549"
+               y="313.20496" />
+            <rect
+               y="313.20496"
+               x="368.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14864"
+               style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14866"
+               width="9.7841024"
+               height="9.7841024"
+               x="378.0549"
+               y="313.20496" />
+            <rect
+               y="313.20496"
+               x="388.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14868"
+               style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14870"
+               width="9.7841024"
+               height="9.7841024"
+               x="398.0549"
+               y="313.20496" />
+            <rect
+               y="323.20496"
+               x="358.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14872"
+               style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14874"
+               width="9.7841024"
+               height="9.7841024"
+               x="368.0549"
+               y="323.20496" />
+            <rect
+               y="323.20496"
+               x="378.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14876"
+               style="fill:#ff00ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14878"
+               width="9.7841024"
+               height="9.7841024"
+               x="388.0549"
+               y="323.20496" />
+            <rect
+               y="323.20496"
+               x="398.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14880"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14882"
+               width="9.7841024"
+               height="9.7841024"
+               x="358.0549"
+               y="333.20496" />
+            <rect
+               y="333.20496"
+               x="368.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14884"
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14886"
+               width="9.7841024"
+               height="9.7841024"
+               x="378.0549"
+               y="333.20496" />
+            <rect
+               y="333.20496"
+               x="388.0549"
+               height="9.7841024"
+               width="9.7841024"
+               id="rect14888"
+               style="fill:#00ff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+            <rect
+               style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.21589765px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+               id="rect14890"
+               width="9.7841024"
+               height="9.7841024"
+               x="398.0549"
+               y="333.20496" />
+          </g>
+        </g>
+      </g>
+      <path
+         id="path14892"
+         d="m 993.20143,688.65267 80.25197,41.01585"
+         style="fill:none;stroke:#808080;stroke-width:1.926;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         sodipodi:nodetypes="cc" />
+      <g
+         id="g14894"
+         transform="matrix(0.38524834,0,0,0.38524834,984.84554,467.7792)">
+        <g
+           id="g14896"
+           inkscape:label="Calque 1"
+           transform="matrix(6.5383417,0,0,6.5383417,488.78696,875.42775)">
+          <path
+             id="path14898"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <path
+             id="path14900"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <path
+             id="path14902"
+             d=""
+             style="fill:#888888;fill-opacity:1;stroke:none" />
+          <g
+             id="g14904"
+             transform="translate(-68.205597,-63.743549)">
+            <path
+               id="path14906"
+               d="m 7.6108945,14.642423 -0.3365653,0.168282 -8.07756781,4.038784 -0.33656529,0.168283 0,0.420707 0,4.038784 0,0.420706 0.33656529,0.168283 8.07756781,4.038784 0.3365653,0.168282 0.2944947,-0.168282 8.0775678,-4.038784 0.378636,-0.168283 0,-0.420706 0,-4.038784 0,-0.420707 -0.378636,-0.168283 -8.0775678,-4.038784 -0.2944947,-0.168282 z m 0,1.514544 7.4044375,3.702218 0,3.197371 -7.4044375,3.702218 -7.40443714,-3.702218 0,-3.197371 7.40443714,-3.702218 z"
+               style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               id="path14908"
+               d="M -0.48215529,19.441925 7.5954125,15.403141 15.67298,19.441925 7.5954125,23.480709 -0.48215529,19.441925 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none"
+               sodipodi:nodetypes="ccccc" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path14910"
+               d="m -0.48215529,19.441925 0,4.038784 8.07756779,4.038784 0,-4.038784 -8.07756779,-4.038784 z"
+               style="fill:#888888;fill-opacity:1;fill-rule:evenodd;stroke:none" />
+            <path
+               sodipodi:nodetypes="ccccc"
+               id="path14912"
+               d="m 15.67298,19.441925 0,4.038784 -8.0775675,4.038784 0,-4.038784 8.0775675,-4.038784 z"
+               style="fill:url(#radialGradient15050);fill-opacity:1;fill-rule:evenodd;stroke:none" />
+          </g>
+        </g>
+        <g
+           transform="matrix(0.6363961,-0.3181981,-0.6363961,-0.3181981,-338.72869,1082.8342)"
+           id="g14914">
+          <path
+             style="fill:#00ffff;fill-opacity:1;stroke:#00ffff;stroke-width:1.0990597;stroke-linecap:butt;stroke-linejoin:miter"
+             d="m 1081.1367,402.39569 0,78.90625 78.9062,0 0,-78.90625 -78.9062,0 z m 39.4687,2.46875 c 20.4177,0 37,16.5823 37,37 0,20.4177 -16.5823,36.96875 -37,36.96875 -20.4177,0 -37,-16.55105 -37,-36.96875 0,-20.41771 16.5823,-37 37,-37 z"
+             id="path14916" />
+          <g
+             id="g14918"
+             transform="translate(456.4439,-26.889185)"
+             style="fill:#00ffff;stroke:#ffffff">
+            <path
+               id="path14920"
+               d="m 660.00267,458.32498 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+            <path
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+               d="m 668.28911,465.32717 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+               id="path14922" />
+            <path
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+               d="m 660.00267,472.20199 11.28987,6.22099 0,-1.97176 18.4037,0 0,-8.49847 -18.4037,0 0,-1.95647 -11.28987,6.20571 z"
+               id="path14924" />
+            <path
+               id="path14926"
+               d="m 668.28911,479.13574 -11.28987,6.22099 0,-1.97176 -18.4037,0 0,-8.49847 18.4037,0 0,-1.95647 11.28987,6.20571 z"
+               style="fill:#00ffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.6164543px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+          </g>
+        </g>
+      </g>
+    </g>
+    <use
+       height="1052.3622"
+       width="744.09448"
+       transform="matrix(0.96760451,0,0,0.96760451,41.251644,-512.62573)"
+       id="use14928"
+       xlink:href="#g95384"
+       y="0"
+       x="0" />
+    <use
+       height="1052.3622"
+       width="744.09448"
+       transform="matrix(0.96760451,0,0,0.96760451,41.251615,-512.62579)"
+       id="use14930"
+       xlink:href="#use95651"
+       y="0"
+       x="0" />
+    <use
+       height="1052.3622"
+       width="744.09448"
+       transform="matrix(0.96760451,0,0,0.96760451,41.251673,-512.62572)"
+       id="use14932"
+       xlink:href="#use95653"
+       y="0"
+       x="0" />
+    <path
+       sodipodi:nodetypes="cc"
+       style="fill:none;stroke:#808080;stroke-width:1.86360633;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="M 406.29099,143.32618 295.25689,86.594941"
+       id="path15722" />
+    <text
+       xml:space="preserve"
+       style="font-size:9.67604542px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="82.531303"
+       y="55.793667"
+       id="text6070-0"><tspan
+         sodipodi:role="line"
+         x="82.531303"
+         y="55.793667"
+         id="tspan6076-6"
+         style="font-weight:bold">C1) Nodes with disks</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="72.839729"
+       y="1036.6479"
+       id="text16591"><tspan
+         sodipodi:role="line"
+         id="tspan16593"
+         x="72.839729"
+         y="1036.6479">TODO: image store ?</tspan><tspan
+         sodipodi:role="line"
+         x="74.431526"
+         y="1049.1479"
+         id="tspan16595">multicluster... </tspan></text>
+  </g>
+</svg>
diff --git a/doc/source/images/NOVA_clouds_C1_C2.svg.png b/doc/source/images/NOVA_clouds_C1_C2.svg.png
new file mode 100644
index 0000000000000000000000000000000000000000..f7526bd1f8872913c6c5f8ddbe99c8d098ef9d3c
GIT binary patch
literal 448574
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%0AAL<|{@qpN(#u
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

literal 0
HcmV?d00001

diff --git a/doc/source/images/Novadiagram.png b/doc/source/images/Novadiagram.png
new file mode 100644
index 0000000000000000000000000000000000000000..731adab95d7a36302dc901fac50cbc5b284eb5d9
GIT binary patch
literal 52609
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
I(SGoM0ANH-p#T5?

literal 0
HcmV?d00001

diff --git a/doc/source/images/base_scheduler.png b/doc/source/images/base_scheduler.png
new file mode 100644
index 0000000000000000000000000000000000000000..75d029338b5e3d81f7e251677777bbab34580e6f
GIT binary patch
literal 17068
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
WTuAdi8afWSg_0Im5UUh14ER6D7q0aH

literal 0
HcmV?d00001

diff --git a/doc/source/images/cloudpipe.png b/doc/source/images/cloudpipe.png
new file mode 100644
index 0000000000000000000000000000000000000000..ffdd181f26a426dd36d19395936376de424a1237
GIT binary patch
literal 89812
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
b{`zK=FfDxq(IfpEz#m9nO|C@NH0b{Uvb0fS

literal 0
HcmV?d00001

diff --git a/doc/source/images/fabric.png b/doc/source/images/fabric.png
new file mode 100644
index 0000000000000000000000000000000000000000..a5137e377f854714a63698338e8a8b4d5a786e25
GIT binary patch
literal 125915
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
LsebLgjH3Snm;m4j

literal 0
HcmV?d00001

diff --git a/doc/source/images/filteringWorkflow1.png b/doc/source/images/filteringWorkflow1.png
new file mode 100644
index 0000000000000000000000000000000000000000..58da979d793e03662743078b5690cc7160173702
GIT binary patch
literal 66997
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

literal 0
HcmV?d00001

diff --git a/doc/source/images/filteringWorkflow2.png b/doc/source/images/filteringWorkflow2.png
new file mode 100644
index 0000000000000000000000000000000000000000..e0fe66acfe2f082da0f8e5140d6e54c89a180b35
GIT binary patch
literal 75288
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

literal 0
HcmV?d00001

diff --git a/doc/source/images/multinic_dhcp.png b/doc/source/images/multinic_dhcp.png
new file mode 100644
index 0000000000000000000000000000000000000000..bce05b59515b8616ec0543eae56e7609df3f0343
GIT binary patch
literal 54531
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
Q@_P<YRn$}{m9q@_FN5y+z5oCK

literal 0
HcmV?d00001

diff --git a/doc/source/images/multinic_flat.png b/doc/source/images/multinic_flat.png
new file mode 100644
index 0000000000000000000000000000000000000000..e055e60e870d3be286dfd52c19fbc5de31a65c97
GIT binary patch
literal 40871
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

literal 0
HcmV?d00001

diff --git a/doc/source/images/multinic_vlan.png b/doc/source/images/multinic_vlan.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b0e4fd6391ccac8db65df712f90e9485e3d19b8
GIT binary patch
literal 58552
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
PwF4>3tIL(XF%A4*ZkxBc

literal 0
HcmV?d00001

diff --git a/doc/source/images/nova.compute.api.create.png b/doc/source/images/nova.compute.api.create.png
new file mode 100755
index 0000000000000000000000000000000000000000..999f39ed95afdb067f9ec47c988eb9a2bb28c35f
GIT binary patch
literal 50171
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

literal 0
HcmV?d00001

diff --git a/doc/source/images/novascreens.png b/doc/source/images/novascreens.png
new file mode 100644
index 0000000000000000000000000000000000000000..0fe3279cf89b2290e6365b784792df692c37595a
GIT binary patch
literal 27949
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

literal 0
HcmV?d00001

diff --git a/doc/source/images/novashvirtually.png b/doc/source/images/novashvirtually.png
new file mode 100644
index 0000000000000000000000000000000000000000..02c7e767c2b1e1be2446fc69ff4c00ffd63120fb
GIT binary patch
literal 39000
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
a0{;*Dp^5t`F!22V0000<MNUMnLSTXwk`JZ;

literal 0
HcmV?d00001

diff --git a/doc/source/images/rpc/arch.png b/doc/source/images/rpc/arch.png
new file mode 100644
index 0000000000000000000000000000000000000000..8f7d535b678549e62b75e2fdc0129c600571d0f9
GIT binary patch
literal 26690
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

literal 0
HcmV?d00001

diff --git a/doc/source/images/rpc/arch.svg b/doc/source/images/rpc/arch.svg
new file mode 100644
index 000000000..13f0b7965
--- /dev/null
+++ b/doc/source/images/rpc/arch.svg
@@ -0,0 +1,292 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Generated by Microsoft Visio 11.0, SVG Export, v1.0 arch.svg Page-1 -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
+		xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="7.88068in" height="4.96134in"
+		viewBox="0 0 567.409 357.217" xml:space="preserve" color-interpolation-filters="sRGB" class="st16">
+	<v:documentProperties v:langID="2057" v:metric="true" v:viewMarkup="false"/>
+
+	<style type="text/css">
+	<![CDATA[
+		.st1 {fill:#dde2cd;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st2 {fill:#000000;font-family:Arial;font-size:1.16666em}
+		.st3 {font-size:1em}
+		.st4 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.25}
+		.st5 {fill:#ffffff;stroke:none;stroke-linecap:butt;stroke-width:7.2}
+		.st6 {fill:#000000;font-family:Arial;font-size:0.666664em}
+		.st7 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st8 {fill:#000000;font-family:Arial;font-size:1.00001em}
+		.st9 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st10 {fill:#000000;font-family:Calibri;font-size:0.833336em}
+		.st11 {fill:#4677bf}
+		.st12 {stroke:#4677bf;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72}
+		.st13 {marker-end:url(#mrkr10-82);marker-start:url(#mrkr10-80);stroke:#4677bf;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72}
+		.st14 {fill:#4677bf;fill-opacity:1;stroke:#4677bf;stroke-opacity:1;stroke-width:0.22222222222222}
+		.st15 {fill:#000000;font-family:Calibri;font-size:0.666664em}
+		.st16 {fill:none;fill-rule:evenodd;font-size:12;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+	]]>
+	</style>
+
+	<defs id="Markers">
+		<g id="lend10">
+			<path
+					d="M 0 0.75 C -0.414214 0.75 -0.75 0.414214 -0.75 0 -0.75 -0.414214 -0.414214 -0.75 0 -0.75 0.414214 -0.75 0.75 -0.414214 0.75 0 0.75 0.414214 0.414214 0.75 0 0.75 Z "
+					style="stroke:none"/>
+		</g>
+		<marker id="mrkr10-80" class="st14" v:arrowType="10" v:arrowSize="2" v:setback="2.875" refX="2.875" orient="auto"
+				markerUnits="strokeWidth">
+			<use xlink:href="#lend10" transform="scale(4.5) "/>
+		</marker>
+		<marker id="mrkr10-82" class="st14" v:arrowType="10" v:arrowSize="2" v:setback="3.375" refX="-3.375" orient="auto"
+				markerUnits="strokeWidth">
+			<use xlink:href="#lend10" transform="scale(-4.5,-4.5) "/>
+		</marker>
+	</defs>
+	<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
+		<title>Page-1</title>
+		<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
+				v:shadowOffsetY="-8.50394"/>
+		<v:layer v:name="Connector" v:index="0"/>
+		<g id="shape1-1" v:mID="1" v:groupContext="shape" transform="translate(453.783,-16.819)">
+			<title>Box.8</title>
+			<desc>Compute</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(11):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="56.6929" cy="328.87" width="113.39" height="56.6929"/>
+			<rect x="0" y="300.524" width="113.386" height="56.6929" class="st1"/>
+			<text x="28.29" y="333.07" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Compute</text>		</g>
+		<g id="shape2-4" v:mID="2" v:groupContext="shape" transform="translate(453.783,-300.284)">
+			<title>Box.2</title>
+			<desc>Volume Storage</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(11):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="56.6929" cy="328.87" width="113.39" height="56.6929"/>
+			<rect x="0" y="300.524" width="113.386" height="56.6929" class="st1"/>
+			<text x="32.96" y="324.67" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Volume<v:newlineChar/><tspan
+						x="32.18" dy="1.2em" class="st3">Storage</tspan></text>		</g>
+		<g id="shape3-8" v:mID="3" v:groupContext="shape" transform="translate(269.531,-300.284)">
+			<title>Box</title>
+			<desc>Auth Manager</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(11):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="56.6929" cy="328.87" width="113.39" height="56.6929"/>
+			<rect x="0" y="300.524" width="113.386" height="56.6929" class="st1"/>
+			<text x="12.72" y="333.07" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Auth Manager</text>		</g>
+		<g id="shape4-11" v:mID="4" v:groupContext="shape" transform="translate(269.531,-158.551)">
+			<title>Box.4</title>
+			<desc>Cloud Controller</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(11):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="56.6929" cy="328.87" width="113.39" height="56.6929"/>
+			<rect x="0" y="300.524" width="113.386" height="56.6929" class="st1"/>
+			<text x="38.4" y="324.67" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Cloud<v:newlineChar/><tspan
+						x="26.35" dy="1.2em" class="st3">Controller</tspan></text>		</g>
+		<g id="shape5-15" v:mID="5" v:groupContext="shape" transform="translate(99.4526,-158.551)">
+			<title>Box.3</title>
+			<desc>API Server</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(11):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="56.6929" cy="328.87" width="113.39" height="56.6929"/>
+			<rect x="0" y="300.524" width="113.386" height="56.6929" class="st1"/>
+			<text x="22.85" y="333.07" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>API Server</text>		</g>
+		<g id="shape6-18" v:mID="6" v:groupContext="shape" transform="translate(269.531,-2.64582)">
+			<title>Box.6</title>
+			<desc>Object Store</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(11):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="56.6929" cy="328.87" width="113.39" height="56.6929"/>
+			<rect x="0" y="300.524" width="113.386" height="56.6929" class="st1"/>
+			<text x="36.46" y="324.67" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Object<v:newlineChar/><tspan
+						x="39.96" dy="1.2em" class="st3">Store</tspan></text>		</g>
+		<g id="shape7-22" v:mID="7" v:groupContext="shape" transform="translate(439.61,-2.64582)">
+			<title>Box.7</title>
+			<desc>Node Controller</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(11):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="56.6929" cy="328.87" width="113.39" height="56.6929"/>
+			<rect x="0" y="300.524" width="113.386" height="56.6929" class="st1"/>
+			<text x="39.96" y="324.67" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Node<v:newlineChar/><tspan
+						x="26.35" dy="1.2em" class="st3">Controller</tspan></text>		</g>
+		<g id="shape8-26" v:mID="8" v:groupContext="shape" v:layerMember="0" transform="translate(319.138,-300.284)">
+			<title>Dynamic connector</title>
+			<path d="M7.09 357.22 L7.09 442.26" class="st4"/>
+		</g>
+		<g id="shape9-29" v:mID="9" v:groupContext="shape" v:layerMember="0" transform="translate(212.838,-179.811)">
+			<title>Dynamic connector.11</title>
+			<path d="M0 350.13 L56.69 350.13" class="st4"/>
+		</g>
+		<g id="shape10-32" v:mID="10" v:groupContext="shape" v:layerMember="0" transform="translate(319.138,-158.551)">
+			<title>Dynamic connector.12</title>
+			<desc>http</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="7.08661" cy="406.823" width="40" height="17.6036"/>
+			<path d="M7.09 357.22 L7.09 456.43" class="st4"/>
+			<rect v:rectContext="textBkgnd" x="0.414953" y="402.023" width="13.3434" height="9.59985" class="st5"/>
+			<text x="0.41" y="409.22" class="st6" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>http</text>		</g>
+		<g id="shape11-37" v:mID="11" v:groupContext="shape" transform="translate(0.24,-314.457)">
+			<title>Circle</title>
+			<desc>Cinder-Manage</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(11):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="343.043" width="85.04" height="28.3465"/>
+			<path d="M0 343.04 A42.5197 14.1732 0 0 1 85.04 343.04 A42.5197 14.1732 0 0 1 0 343.04 Z" class="st7"/>
+			<text x="4.83" y="346.64" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Cinder-Manage</text>		</g>
+		<g id="shape12-40" v:mID="12" v:groupContext="shape" transform="translate(0.24,-101.858)">
+			<title>Circle.15</title>
+			<desc>Euca2ools</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(11):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="343.043" width="85.04" height="28.3465"/>
+			<path d="M0 343.04 A42.5197 14.1732 0 0 1 85.04 343.04 A42.5197 14.1732 0 0 1 0 343.04 Z" class="st7"/>
+			<text x="14.5" y="346.64" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Euca2ools</text>		</g>
+		<g id="shape13-43" v:mID="13" v:groupContext="shape" v:layerMember="0" transform="translate(85.2794,-321.543)">
+			<title>Dynamic connector.16</title>
+			<path d="M0 350.13 L184.25 350.13" class="st4"/>
+		</g>
+		<g id="shape14-46" v:mID="14" v:groupContext="shape" v:layerMember="0" transform="translate(42.7597,-130.205)">
+			<title>Dynamic connector.17</title>
+			<path d="M0 357.22 L0 300.52 L56.69 300.52" class="st4"/>
+		</g>
+		<g id="shape15-49" v:mID="15" v:groupContext="shape" transform="translate(22.8857,-254.929)">
+			<title>Sheet.15</title>
+			<desc>Project User Role Network VPN</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="31.1969" cy="340.209" width="62.4" height="34.0157"/>
+			<rect x="0" y="323.201" width="62.3937" height="34.0157" class="st9"/>
+			<text x="4" y="319.21" class="st10" v:langID="2057"><v:paragraph/><v:tabList/>Project<v:newlineChar/><tspan x="4"
+						dy="1.2em" class="st3">User<v:newlineChar/></tspan><tspan x="4" dy="1.2em" class="st3">Role<v:newlineChar/></tspan><tspan
+						x="4" dy="1.2em" class="st3">Network<v:newlineChar/></tspan><tspan x="4" dy="1.2em" class="st3">VPN</tspan></text>		</g>
+		<g id="shape16-56" v:mID="16" v:groupContext="shape" transform="translate(14.4132,-30.9923)">
+			<title>Sheet.16</title>
+			<desc>VM instance Security group Volume Snapshot VM image IP addres...</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="340.209" width="85.04" height="34.0157"/>
+			<rect x="0" y="323.201" width="85.0394" height="34.0157" class="st9"/>
+			<text x="4" y="301.21" class="st10" v:langID="2057"><v:paragraph/><v:tabList/>VM instance<v:newlineChar/><tspan x="4"
+						dy="1.2em" class="st3">Security group<v:newlineChar/></tspan><tspan x="4" dy="1.2em" class="st3">Volume<v:newlineChar/></tspan><tspan
+						x="4" dy="1.2em" class="st3">Snapshot<v:newlineChar/></tspan><tspan x="4" dy="1.2em" class="st3">VM image<v:newlineChar/></tspan><tspan
+						x="4" dy="1.2em" class="st3">IP address<v:newlineChar/></tspan><tspan x="4" dy="1.2em" class="st3">SSH key<v:newlineChar/></tspan><tspan
+						x="4" dy="1.2em" class="st3">Availability zone</tspan></text>		</g>
+		<g id="shape17-66" v:mID="17" v:groupContext="shape" transform="translate(439.61,-158.551)">
+			<title>Box.20</title>
+			<desc>Network Controller</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(11):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="56.6929" cy="328.87" width="113.39" height="56.6929"/>
+			<rect x="0" y="300.524" width="113.386" height="56.6929" class="st1"/>
+			<text x="31.02" y="324.67" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Network <tspan
+						x="26.35" dy="1.2em" class="st3">Controller</tspan></text>		</g>
+		<g id="shape18-70" v:mID="18" v:groupContext="shape" transform="translate(439.61,-286.11)">
+			<title>Box.5</title>
+			<desc>Storage Controller</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(11):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="56.6929" cy="328.87" width="113.39" height="56.6929"/>
+			<rect x="0" y="300.524" width="113.386" height="56.6929" class="st1"/>
+			<text x="32.18" y="324.67" class="st2" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Storage <tspan
+						x="26.35" dy="1.2em" class="st3">Controller</tspan></text>		</g>
+		<g id="shape19-74" v:mID="19" v:groupContext="shape" transform="translate(718.627,48.2425) rotate(70.0169)">
+			<title>Dot &#38; arrow</title>
+			<v:userDefs>
+				<v:ud v:nameU="ControlX" v:val="VT0(0.059055118110236):24"/>
+				<v:ud v:nameU="Scale" v:val="VT0(1):26"/>
+				<v:ud v:nameU="AntiScale" v:val="VT0(1):26"/>
+				<v:ud v:nameU="visVersion" v:val="VT0(11):26"/>
+			</v:userDefs>
+			<path d="M-4.25 357.22 A4.25197 4.25197 -180 1 0 4.25 357.22 A4.25197 4.25197 -180 0 0 -4.25 357.22 ZM157.39 352.96 L157.39
+						 361.47 L165.89 357.22 L157.39 352.96 Z" class="st11"/>
+			<path d="M-4.25 357.22 A4.25197 4.25197 -180 1 0 4.25 357.22 A4.25197 4.25197 -180 0 0 -4.25 357.22" class="st12"/>
+			<path d="M157.39 352.96 L157.39 361.47 L165.89 357.22 L157.39 352.96" class="st12"/>
+			<path d="M6.32 357.22 L6.68 357.22 L154.96 357.22" class="st13"/>
+		</g>
+		<g id="shape20-85" v:mID="20" v:groupContext="shape" transform="translate(56.4886,25.2394) rotate(-66.0375)">
+			<title>Dot &#38; arrow.14</title>
+			<v:userDefs>
+				<v:ud v:nameU="ControlX" v:val="VT0(0.059055118110236):24"/>
+				<v:ud v:nameU="Scale" v:val="VT0(1):26"/>
+				<v:ud v:nameU="AntiScale" v:val="VT0(1):26"/>
+				<v:ud v:nameU="visVersion" v:val="VT0(11):26"/>
+			</v:userDefs>
+			<path d="M-4.25 357.22 A4.25197 4.25197 -180 1 0 4.25 357.22 A4.25197 4.25197 -180 0 0 -4.25 357.22 ZM131.09 352.96 L131.09
+						 361.47 L139.59 357.22 L131.09 352.96 Z" class="st11"/>
+			<path d="M-4.25 357.22 A4.25197 4.25197 -180 1 0 4.25 357.22 A4.25197 4.25197 -180 0 0 -4.25 357.22" class="st12"/>
+			<path d="M131.09 352.96 L131.09 361.47 L139.59 357.22 L131.09 352.96" class="st12"/>
+			<path d="M6.32 357.22 L6.68 357.22 L128.66 357.22" class="st13"/>
+		</g>
+		<g id="shape21-94" v:mID="21" v:groupContext="shape" v:layerMember="0" transform="translate(382.917,-179.811)">
+			<title>Dynamic connector.13</title>
+			<path d="M0 350.13 L56.69 350.13" class="st4"/>
+		</g>
+		<g id="shape22-97" v:mID="22" v:groupContext="shape" transform="translate(386.681,-128.378)">
+			<title>Sheet.22</title>
+			<desc>AMQP</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="24.5827" cy="349.217" width="49.17" height="16"/>
+			<rect x="0" y="341.217" width="49.1654" height="16" class="st9"/>
+			<text x="14.09" y="351.62" class="st15" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>AMQP</text>		</g>
+		<g id="shape23-100" v:mID="23" v:groupContext="shape" transform="translate(383.492,-243.591)">
+			<title>Sheet.23</title>
+			<desc>AMQP</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="27.7717" cy="349.217" width="55.55" height="16"/>
+			<rect x="0" y="341.217" width="55.5433" height="16" class="st9"/>
+			<text x="17.28" y="351.62" class="st15" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>AMQP</text>		</g>
+		<g id="shape24-103" v:mID="24" v:groupContext="shape" transform="translate(390.445,-178.898)">
+			<title>Sheet.24</title>
+			<desc>AMQP</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="24.5827" cy="349.217" width="49.17" height="16"/>
+			<rect x="0" y="341.217" width="49.1654" height="16" class="st9"/>
+			<text x="14.09" y="351.62" class="st15" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>AMQP</text>		</g>
+		<g id="shape25-106" v:mID="25" v:groupContext="shape" transform="translate(28.5865,-185.071)">
+			<title>Sheet.25</title>
+			<desc>REST</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="27.7717" cy="349.217" width="55.55" height="16"/>
+			<rect x="0" y="341.217" width="55.5433" height="16" class="st9"/>
+			<text x="19.86" y="351.62" class="st15" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>REST</text>		</g>
+		<g id="shape26-109" v:mID="26" v:groupContext="shape" transform="translate(156.146,-328.63)">
+			<title>Sheet.26</title>
+			<desc>local method</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="27.7717" cy="349.217" width="55.55" height="16"/>
+			<rect x="0" y="341.217" width="55.5433" height="16" class="st9"/>
+			<text x="6.48" y="351.62" class="st15" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>local method</text>		</g>
+		<g id="shape27-112" v:mID="27" v:groupContext="shape" transform="translate(297.878,-243.591)">
+			<title>Sheet.27</title>
+			<desc>local method</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="27.7717" cy="349.217" width="55.55" height="16"/>
+			<rect x="0" y="341.217" width="55.5433" height="16" class="st9"/>
+			<text x="6.48" y="351.62" class="st15" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>local method</text>		</g>
+		<g id="shape28-115" v:mID="28" v:groupContext="shape" transform="translate(213.988,-185.071)">
+			<title>Sheet.28</title>
+			<desc>local method</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="27.7717" cy="349.217" width="55.55" height="16"/>
+			<rect x="0" y="341.217" width="55.5433" height="16" class="st9"/>
+			<text x="6.48" y="351.62" class="st15" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>local method</text>		</g>
+	</g>
+</svg>
diff --git a/doc/source/images/rpc/flow1.png b/doc/source/images/rpc/flow1.png
new file mode 100644
index 0000000000000000000000000000000000000000..ea325ad0826e301ac746e86b251ba1ec4c46eca2
GIT binary patch
literal 40982
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%0A63da2y@kO*WT`Am#B9Y10-HvLh)>)aaeE!@SZ%
zP8_wr`Rc}04Q5e0y-T>~PR;7DZBCjFbb^>6d6?C_cu6p1o%TDW13FuPI$$<<oP_0K
z!BQ|yVxW2e7x^~`qt8o!oRU9MMSbIi!(2*$J)dbnCHstqi_lB2+YI_Iar#3aV!nbj
zoRo?FF|`uJuI`j?Yk-=N$vCJIe(<&u@jdR|T7;VDA~$19Z)yz?UA)S-2Z1rdG2*cY
z@39p?)wNB`_j<lf->5p|Wqm#Eb2>fJLLyZ-<9*npX@G$F(>}6M=Tz$}s?^cS?hUCh
z(O>TlQ&&U#4uI~7Q~K2%I|xe0nyCusr2dQPmWQ#a*Ji-St6_pJU60pc7E)bbOzI1d
z=qgigluRzIoMe*}tUTP#G~>7UJhCKDuFD#XjI+FBS9SY1F7mh`g|j@X!l7CxPCd8M
z{DG}+yFO|~dZq6<WohS<$zbMnNw_Lx9yjqt?#4uC*HO>aCo1f9U58YJ^QvY%3mj@s
zXS}p`XBw0)w#sKA_=}dATlD%mKNfW}`(waR2Of1a$1-oO8{if%!euHxx(txlkqP_6
z<d?$I_D4mU#t&m^uPN4J0x_R;)#KB8XwOJDiS=-w=Qw6@;o^X+t?K^ns8~)V)TXYO
z?Us4UZC-{}mnNgzm?-Y)GS^%#h)`X>Dm>yih=qFu7eTWsy3wo@ftVxSs6Xu0Drq=L
z_Pp4xN*i2GFfA5+yEf;#M#JZo%_!WpU%HObmm5y=k4){G;^UeHKrBd<LTKBXMLbmq
zfnWIC1fsDYgb(X<+j5f0ZZKtqKbs9bh?d`Yzt~X<WLj011I4kSwaJrMuL8t-HIDG~
zar7R&6c`rf5;nEkKxcfFk92}a1p*&GwE5zF(U5OgwZlrX5zQhy{Fzm0SZueRLX^j}
z(J0M*AvCK@)OF@*1j9Q=3)hHmnU=Q)qy<4`gQ-IJ8IAQb7Yu|@VKOsky2?H>dA<&K
zM)3lY>{eY8hBL~IvpkM;93^4-iQ+Z)uoN%R4{}iZ*4HJ9Z1V^}I255{vl9H+=N4&n
z{vPt>ZF=tDp~3y!G`9)GtCOlG?cK(US3T<;>|b7h3RKJ6n(?XBrO{1!D&J}T6eIVE
zC_4GZ)Jx7b@HYZ2B~aBW*NGGf<!*BM4I|<0dA)20j7rAiApo7DY0YBqMO3yh%8A~o
zzq}!N8xwUYNf5NAMQ6OZj&=w<j=3e*uktG-mTmmrYv96LAM0}a-JP4r(_(i8VVK;J
z0$us^Y~`eH4RzCvM>`w)6_0%d8Sb4bVk;ZFvVqP7%mOx^6-dQ_#xz$v7~bNBTg-%u
z4Jq8hASo1Cp)xn$HlH+yIg&V#A}7wat*i7KH(eSgyvd;44u+`e%kNM9t&B+meMXO1
zz%R46lRleHl3v0^=<Q&4&3rBY`FMovu3WD0jJs^ZX}U?5V0Pevd<5-?o%a?P;cm4}
z>rCo9H=VbjZy~4{rySaa?uQr%+^T1@IEjxgNa0-KIb{s9%WZMsmTrrNFNVku6RWlT
zQqK(&3Du&3$B~-f7O;Qs(k6jmNuHtZnnfw00`DVP4zWc^MuUhhK2?~s?C3iBdg-Uz
zb(NmpMOxXk%{{hqk8~%`$(^t?>14sh0=PvjxLpE>Db~ei&mybRH@{pT<@_29<7>=~
zlsM5d_ja)U;A(}Jc^o`oR}A@Qqe|2ULmn2`u>I5+{UFQtcfC{0svg>x1TIaObTfmY
z3@aWl%|erHoOfo<02oc@zwO%f1ousDTS$e@0I-Z<gZWzS>{EqVOFZ7%v#W*kKTiZB
zafrTMqLVTW-b@P1$!=Nwz^?%OYD2ea!+%j|(jhZj?Mv~D-_2ER7JIt8%<<+}31%5h
zaM*tJi1e+~Jf_RPMuif8`$h1JY&I~O>YX<zTD<3woUS)cl5XIoW9pL1DNP9rwNP8S
zH~HPj%TcGv)vU*S-pPxJlj6AIRL$;^>xaLOhKmxuK0upJ6r#313#4lJ<@+~3hEy7j
z4;_V?-rn!{r-lo0x}W*DSq(sbb2*zBYs?0V(PG}lKQEo!=1C;~d@WvYqjP$ZCiafk
zpSx|@+1ud?{%ETU_{TAr=EP@wzSyi)jr!K8qN1Y3u3Z1=s%A0zE23}f@!=Q-3}Oce
zorUDwYMOTfioN%QePv~Gi_U%ueOHMP|6?e*w>F`)mAIVb(c_Hu(9*9?^)vPHr`jaf
zHn%PNF*=XeJMeeoY?c}6@IM?<J+%)a{dpezdKmb)bJDh`3^gwTaF5#fEPaw6=5MFZ
z^gQ0k+G)D+J)RF{8Wn_m?-N<2H@_NZbCQ^NEM^eTKy>e)^Xgqxa8u6EJhQ|@42Y*}
z4z#ateyPS8J*k8mL0lD3Le*IsP*M#MX(l+yr1I|;r?L`h{!Y>d6%A?7&fj7CRm*UV
zlNPrn*@s=vj+caEIo0hv)ju(Le2>hf=q0dRNZoUk@uoMKweleZWu#+vr<jBBh&wY5
zipeMsPm}U%^gLhB8Tny5H2kV=JDXU1Px^SPyf0ts=B&?EMNjJFV)n+jgDz~p77T53
zt}6Q}?tewymHzlS7CL=?u#NZH+Dq<ACS=<iF72{a2;_-m-<rg_=g9F(Xei9E1A`#5
z?a_J9`TV<BOGfJD=X!5hX?UuLGI}3d39|Gp|LBuIN*)hurOUVT{oJHz{iQ%{^x9wM
z<F~@^U0-p8y3IM?n!Hz4fE!o8&M^34^C|g(+53%w%wSp}heU%4J8feYDpCoT73Gl}
zwJ+qqcfg=#cl|A^zL67C{~w#EEm<I@{0rx_Ofd^xnwiqUy8P3V)auJtN>%#u_2p<t
za!hBwE`B3k@tAjV*HgijOMia6H^drV>^3unv9;gMRN^*a%g$$(%JBKp4`mko44TGa
zeRFjh^}R40!@+bKnQUhpEi#z^*J4FBUwj-7DNXIQN^#6?i)1K}JYUPK&3UufRzb_;
zHJH~j+^OxE_vO}mBaO|cV8|hdxs1k)p1nm&l4_Dl=+#{N(YNO-xxi@PgeR1{zK+~#
zi}t=UyohD$)bD!LPuyLFmVC&&K12e6E8ng}=G&+ahiTnKUeDfKeepc#U>_NfXWEX4
z@>$CW9!?gt-$*v`yK?<tjaSU4x!RkOTe?`hT%n5h>#ynQx&71t>q0Q_p(<5nc`eEB
zmJ`Ke=!tcY5ptazB0H<KW4Cb-%gsSOwbkx0RwKQWm^~{oOqv*xBv;;5|F~J>jaAQG
zs8A}eLKc+Y*ST0|36Ql7s(20%@a4N(ed-e@!6R$DKHpUG*sEIl>E`a)<Flm4G1Q$R
z<b#VSu6nM0hARjr?C9`Hz*j%_VSfiq1MK$Zer{wXm}vT)b(wA?&#}%pHC;Vtp0uvp
z_DK-t$Y=jyvTAGrZ|#Z|aaqC49#WGsc5FBv^*{Sw*ywYSzp`SLbD8q0HV<9YXqnUl
z&Ut(Xfq5>8=dYT4X1k}W{-Uw=!iap6P_YjnPNW1U!a%^4y*g+p#4RPj>g3V$@D#zH
zWB>t%Y}?R6kZ?nt5ckA#k}Evn1zQw8RL@`Ag`TgzXu<Z`)$;sZfXmz|%fUMZao?51
z=TIBv4-`n$LW^nGy(S&2JZ@50e!?~IB--5e8|R#WJfb#e3(B{ZQuq7BrV>2jz|Ek5
z8|n}UTr7m~dCqxGyN>1c2+tZ_ZCOicIW-)|pZ{5m+DzV?LfI7*J!kgn{~0i{kj3S`
zy}9&>=RWdItdFULkXK&=HfFZ3*zUK=sWNMrB&U6flVd^U(AQPX6RO%NW4GxZPA6fB
z@9kO2OL$tV4~|<s`}FHf@erjallGLVp#Fm(dQyFyb7XtAUR;p01F>r%cGb_$-TL7w
z92HM)-J~o-M3>DyKU@Ji@qa#DKD3P)?jfWIqSo<EC`GKOn2$d3m2cShiv7}z!3|Kn
z{;2+JKN2dwPsau)mu|huKD`yqWp1MaZ<YMb^*Ti;s=$~D>JVE+0TC)3Q{l=+ghzJE
zaK}9US$7s@dMV@TFl&O&u+wpLfD;nGKLG}{Z}UXKWJe;p;bg*o#PsHTtTxB=`XFJZ
zW-b-1XGXwiKTKCJMruKUJ^l^qfbxnuE4PoOfSGSs;UVy($``$<GNdAND;^(y2GVEW
zT*=t%r_AoM;RYu)2rJJpJKm4ewoUPogzI`)t$a1daeUXv9EacOjQger@lu*YoXeL{
z=aMZ(c6_olim1*u2&_T+c{GRInw2OSQC>SW^4s4elBJCNd@775D>ufPu8$3Xuw_S`
zVxv4NZoRLO;s**9AW)lM<FcCHbhYi|s#4N;o-aBdNb!6IrJ5#IpdZz1E~e1Wd<SVo
z-M#S0;_!tK2&9_sWVl4Qp&?{O)Rv^y1_WWFx~Dga@8Fw0#WCSBXsMv!JlxKTj88&^
z0*2aJi}zHEEbmqa0;utF>w*=gYxU#dxqQ=)oGSiyC2rgIp<7%f_1}O9_cuRUh{bZj
z`o-vKKg#dL7w-c_V+tfKMaS2}r+U`u;j2Hs5P)fVo7Kdmj=_dJ+_g*%d&8)fEAL7c
z-m@c+Wdejnn+XI~CF|e<#TDUpk#xtBxbl_lnDTGJuWO^V?07i381<Bq7GBEepfDb`
z-=sWc;rXVtlKWL+?r37fq?ZzjLs3!F!Zl_BDd4pc%ASug@navU{h131HQ*O}(AMs@
zKG<rQaC@`r`fArtP5f$+=|&w4NPhK-IeXm5KMg-<8lUCj{M{wlg!Qde1-R=5TG?`q
zPX~$@IWkRv&0(3LR7FF+l*^n9v-<0uxE0S)gDP&&K*@lx{lb-dsw;)fpd~MTQcUaS
zFJqf~3FWvXA&pneSil~z>taWaPMpU;P-;O@>P#TGEk-J{ddD2bKV(BKvEu4V1YCew
zh&$tWd9SF_@!Ei_N}8y)4;V;8zxPRAC|`j=Q|IP#RcZwEPDQ*8N19Lv20{*~gC$(z
zV9n}y!jNfcN1r@+KV|eGh?QTteFwaPb^>zNB@;OfX-Q#eJ8=~PwwqbO?&Obt^PZKQ
zxIyg-xOpq;EU{qoai2mHl;;AfZuN5t5KVTig#?eJMxadO+IgvOlsq24s({}<^~FT#
zITid4|K;~?bH{^q|0*<{ek~xj$2sh_dIA55G92qDVtCHu8{_HyzMeM|cPF#*6pfub
zSc}-+eC9`x%WyO50o+z>zF;xd5SornM7#9i;H4%9U`3C|IMye1Gj&+o2wp~$qt*Zt
zNd<TjM*TM;au^rJ){3D+9$1b)(LS{oJatdK@LrAniO<<<{=L)zTBy~;a2r`^Kem$?
zAv9rwr*-m3`cIXXJzno{Vfk?Vmd&1-=I0hnJppdjmaVr$<+56uJ;?>1DB(p^*jz<S
zhK@<L<57U2%VEh2X^WsZpzw_TOt;B+xE<`_`Q?){W<Kl&N*XR4a`OH4=wSQ=`$Aw0
zj{o6qHXmV}H54T{>^A*c)^*%6fwNm?3yJ_MsbYf$&x&M8pW2P-x+>ALrI?Wvr^Y-m
zGi8Nu`rTZZqEokgkHeL`b|$}6z>xiQ94I;!c4Ql*cQ0t#b9MN4dbx%K#UgJoXm3vP
z*a%g5^Xz&M?5U7;iwGL0d({1s+s+CEJ1Fyx5!n6@Awr{*yboJCNnp$R2eU#E8|Aw<
z>P0nIGruFLM}Ytqyw|vOUzm_4E<J*FH$*~v^@xj2yfn8_3XySUu~$=%ov0R`GwMN5
zQdjG08=&OXb&Xx)Hpa_yXa%got6p)-_!Outy!jwcoo?bDg@;(D@lu2n;UFr7Pd+Rc
zh?5ju)qNQo9f=9^22i0fuk;J1oZDN<m)2Xmp7-5~HM@@5#{JNCz2YL@S$-JgBa|fq
zLWp^@Y)H|LU&@hSyG8|G0duRlzA<ulWN1}ZsjSD~ZY#|eA$*Lh$>j)2#gpy>cCE9V
z7AxHGn0|d&|LSVkY@_9w(p|C20+x3jiCiO!=cwYdPkkgXY952{CnM&+bE>*!yjPN}
z^LZ*xkLRgMxW&urY@)Vqu6J*OpnC3#x<v+AK_pDY=O^2nAI`2fO>gkyFpc;}Dd#)&
zq-f_mK=>BPB^we@60nZf>aKUmcM3+Jo81Y&Q_W@}X%^r1u=^ccO?Vvf1gouXTVY-d
zvkGNVKH~mHBG?;mz}|q8YqQ(1e&v_b!>|U=&YK(}x|#cY*CdDHozG3s2CD*h{T!M^
zPl=0zNW4_Y8PHdmsPj}2ffXIq%{WEQ%oJ*6W+GgB;@`oGut<j*oydSn)>tOKU~-@M
z@KJ2KwgS0N*OM8t1>+vZ>0Dn<rwn|=cMOiNKaNodED%c_&<H*W7ObOvzYLs2itVUh
z9f|A~N+9%b+^#Rr?2spu1^nlJsbX^{K*NbW4GA|uB|vdk;;>u5Zr11Yxb1i2(V)@{
z&FI%a{$gC}>$S|N`UfkPUGZeFO?uv~vEDU**Fz-qS~-!DS+F4=uIVp*>DYW1IT$GK
zAW$_q)<(<{zX*A$!Yt@dyPR?X`MTdt3J5`{n#@x0#yyDmK*cB3W9qRdC3a{)-oZ!I
zzWMXY8KfWDL|-ZAbcp_PkIqE8cF4hd+;I16YKLa?Gv<YB_ia}4Ie7*yq}0uCSBz$i
zTu%x;GCJ-H3hFz&Onog<MJ?Dp!~e%?W2#&}pNuwt@p+5unep*ct*R-vD2iWT_USGd
zbv<(`9&ih|XeQuuk9kbgZx4cXQbTzu!~$)e1&OXGCvtYNKpMb42aLY$1YAM7RFiZ1
z6%<HHrtlOH8tqSYgMT24O2F$P_x6}SAH1{UjfsN6Db=#@3ZUP~CBvPTC=@82^0paV
z8`6c4_|lW}O;(chbZ6b-DBh+dz~0N;cr&im8$7yJ0<d|HLO|p`DLyQ?n#RhbFB9UH
zfsLBqyCd>3)m;ee8beO<z@$u31RKRdL=<yy9sXLRNy-r<oygDy=rWzgpynvm3E|V4
zEeBYc?ZbqKa_c@FhT}3(Hss8^Ssyzw2{x)#am_w;ahZS|F62x4!h77~=GRdj8MSWP
z`NfUrc1}WOih%AVQFZH98}1WTE+p@$fL2uPp5`tV6v>3wWH}&RlGXe7gnijHsgXd|
zZOQN^m6H5Gvar)(Mn8k~+A~Pu`p-C@0I;esfI2L!n8Xt+z<UNqp8FZgLLAJMXdJ(p
z`Dp~*9wn6#Z&;pMG;x-nJSAGRcNE4%Z9yG=vHWuH7<^&x_0iMs>4T>prgiaI#y>v=
zlHA3tNhW>St$C>{!7G@@`ff(AL5|_=UWQ%g@a^9I7abTEQ!agZbWZge5}<QsCE;%N
zArmF!+j35;+#2q{gU$Ng_^{%YlM91=Y-&-5YvKp3%B?g^brv1ud`5p_)Fk)kjvG#A
zlvt56hl;|}*(c+taPlAc_2jUC_JC1nr~b4qK*nst`($z9Cua9cCNXc+v#?x%YI*L@
zV>XD;#>_+AWiptHtH`GBLxiK&rb4(8gS(1x{axC({B-;>AA&b76(hY|{W8^`q!mKA
zM_>DF<mGhs(ucd!^S{wT?HA}8y?M6g)695x<B|-+Vd+%8jo>YI4Kqf+D|wEe4gA-j
zDERqj(*^!x&to35fHoPX_!)>Hmmyrc>~ZqVJQ+;a7dL!2FuT_oPr%}Pbv!m={BAny
z0Y&LO5E9#2GLN)9u5)MtZ}CW!-{qnX<HQfhmbZlB7#g1!U3=5ahM4dh!cYp~5vJ0v
z&n1uKis2a-AV@JW2+Z!fr?!I9rpH)R;ffGx^<8nh-Del6U%_Hf|5Fo3q|x2C=d!G)
zP^ukiRgY6tbdHIdI9i-}rt_5?X$LbNDGOAUXs@y&hw<NiFlrTdi%RI-pg`)&S?32f
z#TWRA&wRag-?v}vHkrEa&ZGf`OLV^5E>R4y`J}5CQLdL^C(T!iUW@OgA4hJFG}~8z
z8CA}t+xkKgrI>zB%h6M1(4TqDURR2$%f9;ZYI?X(zg%2x1C22hixSq<sV0WtH6__L
z2jXqe5LIQr6Cwh_T;19?6l+Mo8RHrBII^cd<Q|RQuWr*E)8v)ORpI!U*<)R!JVb$y
zl=UKOu+Vu4ksq404f>Nz!INbE@=E5trI>gXv<aHz+b#eZE({KoND&~IMB2w&_vxiB
z+gpvLnZwcuiJ*ls%H2<~yl){OIvAVIX}n`irz)YaBuqW{!u7@O?vpjMV1^Y}BpB}N
z1;oLs$Q}N=@HwL)oChMr$|Gt#5<<wKLc)E0{laTj@?rds+?+Sq@U-K#`utwXQ{MWJ
zL`xc_0dAveb+g-PV4w!JeuYwuz=*ykcIO2!64ZI0Ib%6-vFSJKja1G08X7y#cx>eG
zELuY9_C|>%)|mgIs*v+UUBBakjqjOJIt98Vui_BIJisXSq-T^r7V?gfdx*)Q@bAO>
zq=rvHKo<6+!*hnhR<d&2?8EBFQQ3lD;97IbMpe9B*0S^aQ4=hVNj~Z&cV9jRi+V2c
zVz_pbD{OmqPwJqySR-Y{Uc2}eNLGnV|Lf#5{2u}-2a1Ug2@u&hl#JsKX8Ilgo3v$0
z@a4P6T{6<RH%Dp`ZDi(VQmIuOx<MWl00E4WZ!79}P!xAo7~-}uoX7ZmLiX{if&K~o
z5|+BE8Js-=zOBJ5B}yyq_(#5%?j$frM3FFZ!V%9rf=tdqb;82SDvU;keng_(`Ld;C
zyTV{`xC6{_9!Dj_m4SKj2{!#RQH5Y8kb-fLE6oc~?cuf%nKdfF^#zuw5g^8Z<N&A`
z4KIW06;}Re3k1?!BrYo|ly0#z^8j2AcuZbWz(3)%$NQ+1@K<I?{^@Zt)r}@ji86<o
zHx#*GrM#heR{?CDt)^!B*3Nj^Wi+0?n|K*Uj%*IAOG|h4h`2Tes506Pq#EZxwF<eL
zsfllJ9QTUt#*zakHrq*pel4@M7<z}E;@PGS%v+<xV7zoDbcj7IYKT>hwY-SKaw=&E
zSDk9_mN^5n@e4;PkU1xfed{+C5_+c<gX=+<lfMX^0@fW!%5RXsW7g~oa4oY~+*a(2
z->-5ua*!2){$Qg?`5NADF)X{me6~+_O-$=TNA;p>8J%h+fc%Cf-Z;W$1AuB#x6Y1l
z(~cV>Yb?;`a=(3~i?6Bh+~+WbRT}I2b#<O1gYVwY{1jrAM)hF26xe1FdqD#tkpthX
zT|w_T4yeWot>lCOvNT9h!rFLFX(}NIM5kaen=`ajXh9tcuY?G4K<*R<z6BL*n;!xF
zSPa-lB?-=#ks}wX*^u}&=O0K@GCFg=Fsy`&GDnF73E31nzL>keObQBG2@k;!-Rg|v
z8p-{1SAuVg?+5$w4+>Rv*^?PVl>w!tkX6b(QQvMFlBZz8JzG$&D%OKBZg?d5x&5%2
z(Zd2y2MadqeW+rY!wqnoG1C*O^KHacfRvtyidn09G>J#rzZ=R8Q<w4Y(GM|(jHZ7;
z1@=4#?1M;CEHNS62hEfB=35SUGJ1|_W$E~l#KWtoyBOP&dH2a-=Gds!FMcMjgXRXh
z>s|#B*aHF;?4yBW1$=c5Jh%<3>0ZO|cuV)_vBTz#D|ITk>s0ld4GspKaQ+Ig;Y{vU
zhAmd;bUgtwkn(s_+cTi7Sg^_Fwq<r!w4l0p0x(F}<{oeaqGp&bemlhhql66DM>^2{
z=jsk#nl4a8;seOPoQ6?c1h|n#G<;`Rgb}76!XHW@jwq==_$Ye4*V0g0=qa&LF-KWW
zKG}h-C%sj(S(xejtpV}dYeZYu10c{lR(i~~0VlO0#6pI5BtG$&srN9U5ioI<_%j!P
zzuEDPXsc!ns0@I+N&oI-ve-{<d#8ejc*LJ8y@3C;St)c(v>hjW>Ag+Mn>i!L+@C4b
zt|0}c9&8Trldn82$qu+OYJW#H^*n(2o7{f40Y#h)iacS|8^$>f`njoV4Rzq%efVA}
z4hXBzt6D>8xc0-&!7RP@4)Wz-cCVbmgXW-iTlb^GuM1UmyNz{A{;hw;V~)aqHPpFj
zlSmvzS49C^_9YG3mzv2Cs;+ieURulX1X9l~*c`SPfD5IqDAEP#U@L<rbBbAp{tE7#
z(>aMn6VIHV41$!IIz+c5A*=$TQ=bDZSmADc0#@j5BQt!sFs#&8E-ri2L^%!nJ`^b~
z2c|GbAOYkC55WR)oA_aC*EiEJaxMD(T}@C|!x5&^6TmC~BsFq?6klyaQS{LtYN;C!
zeRn|!mC0nfXXOHarhHW=A8@fzP;$R1RtS#uJ(A&Fk?7i-tVC2v5-uXJ(DMmZ6rJfL
z*ahn9w{mpJkiJ(ROTen>O#aCz`a6WGpZbwf333yp=k0n(SXP=QxzaS5y<~+K)DTV1
z^9cIM>Mw}23hBRZ?+(~@(|cH%k`5E8RK}$I;Ya=e#0ig8?;(Q#6nL+V9P|8-&F<cM
zj0@wF*cB%+u$<cLn4k#jpO(7bkFtyjkC8H4Q+FcL6XQ!Kz-5sOajto>OZrk@DCgam
z?a}u-PzUchX^zZFTaY{UuUERf6%v@h;rJH+sq>T1*r<ERVvcrZBuH32i+u_wf*_jC
zdYoP`nUk|g+p@wN)`RGVGbRE)Dkess-jRr;v~RvcUv2cK<np>(pf9!u11_QI<;o?2
z0RmQg*^FLOq4`=ly_6Xvn5eY#?FF73t?xhj8gX(hxlC3Y+TXO-fYeI89N)TxUe_8e
zRgg;i6K#_}gUyI_vF_9`gQat5_*Dc(KHfigv9rDOv*izfgIVFq<=J6FX!Oaz{PhqK
z$<{TfG!R2Iu_xR*S|1uo_Y5yAT=&dK53N?pQJt|+4XB`gH~3xApVW}p84Cu<i_?@~
zdjm~WtOgOu2!H0VeZ-JeFYk-@y0okG+H{s8N442SAdxBUe9>PtK}hW^1Nw=B6p!zj
zCI!_3XTNDqMupuIG;;ofCDPx~M_?d?cpe>}mu8NdUw&o<qs7I3)CjuIXX3fe>ZG%f
zCNw>4D2kJ=>u&sR){aZi>%?J1C18vE>Za1T)?MJ1ZVcEh*z|yvzH-QVK>`;fvQ<Vs
zIy>=dz)R`$unc>QO*LZ$<<1ar?7wXZg6FC_Tz{#@&M)A=CdZ5HGIYZhQ*YJ~WE_A=
zT_$4t!-s@pC{gy6*YN?ftGq;tFthgP>*?oF{$T5@7^eW|WOvu&b=6S6n9E9cGC+ki
z;vAuaIR?-yzU-rslyMw)+5Bt`Hcq3%$W!%nL?<X9qa9EG2MS>L(D_2>Z+}GzUes1S
zl3#((f{mO30V7tvt=po3)iLRb>*w*VCi7-KHq)+6M!VVp8>lW`ExxA9vIMK{#QC3G
z%v2A!nu5=+m-+nGJz$XBC!9r_NT?CtZI>*AnvI6$hNl@gLJZN`J%{j%YGW}lc?(tk
zw;Tsqv-oj&4rs0p7^@5;_SbO`VN^Vt7nR{3p8a_McV7F6Q;>E%i%T7UJ2=NCTH<Y=
z#2BrgB*MwmiOrnE;#hASVcyP9cR(gjKi{KHA3KPT7%>W~-;#y927IkI+P#yG^Z#|=
zXl@+DyQw$9s~-fdSsD*}#YTu{FSE}-T~DVtR=ZfEJ7~pNxfJZGM{Lf67-b_Q#Nr4$
zI96)yy<y1WyVahQ97ey(H%_4?I85IChP^neRjVc#_^Vh&**s4xNWde}X&XMb7Xd3!
zill!lP-(d9t@~QzXc8cJ=t^4i5_%*Q|8#pyP0)9l3ynLw7U+kR)Nb4#0rSX_qN<tv
zcs|peln0>{%vC8t(>dv$`3{mzSAP3prtXaB$T!1D1{=as1|byVD7$omshk7Bdtk}`
z`#&W=v@laWsZ$QLa&-T9geJ{&#M}^4Dz;OdSqp+^x7v_*0%_DATXx=ZN+Ci#>6(OH
zxQ-d;5RaJXaTg3-wlL`!5x4U?btm%Mt@UTv?Ju;df^=wJ*d1i{rss=8qd7@T6mB>S
zr1ab=3;7JiM2QPw|JS6}QXlNgRivkX$NO5_E4rDR87cZ);sj;Rh?G2?a<S{bz9>M)
zlQ<k98xOki8AUJC(qUpYe@_rgdakq}4tCu(=6p_h>Yhdd+#7SrG%~4-HsHdm1}_ek
z=OllQMKS8JD~UdYJB}4k^9{)Vhi6WiGfJKs3eXj5EQloAN!$TdfhNW1*t@^Xo-&V;
z%Cn&VG1j$^3L+1T$d`m0VC%{NEF9mvD&FmrG)&8zr^NH?l8j+jJBbuDYsQ>)<{c`h
zZNVT|b5#K=^vt@66EZg`sDo$mGn9S%<*TtsVAG;P4jX}PR_~X^Z4VXsWGm*xClIR=
zu`z=k5`4<L+~&Ewn?VL$cR@86PV}>#*OiW*#AaTN&tny0*t@+2=SZ~cwo7&KEWD1^
z<|AALAwo8eIxb>BwS6%0OmeA2O7bl>|K=0JS2fQZM^I~yvW#`g5WPTwIyP`4gmiy*
zlT0`+KJo$F3@a&2_Nd9DR;t?t<WQRZo6tNxkb450tUFd}^bygu#j+5+?pd+JU>bYC
z>iAG?gc+$b;IEn_D(iR>!OI#wts8vt(rxyup#D|m7te*zjXMm<;pz(#$G_C>_K9mv
zgRH5Ut+u`HbeB<m`?#?2fO&tg5AB=#OFv`?q6(U$QE)x&FWbj_;EhiLd9>edRAetA
z%ZSN9KrYifd+AmPKFka9KC!I89~*VuAz0T;4|YH-an9Q|1nq`DB;>cX@wK(TEX&bS
z6=|i5IR{~+$L#RkO3xYw<&~o(-qrBqG2IlW$|M}bpQZvv_Aqg)qy!`9P|-^;*%}XP
zxd(L+MS_+Zxk;Ku)>&p?ss(O@=n1^2?51bvN)GN?tNSpClN{cfWDnSlg8WA|L20o$
zc2BS!F6j2POQ*g#^6>`hvv6eq@dX3eghV&6T%duBhXG9Po1HIh(`+}33w+NjN;r*k
zaVk+(@$3KrGf_%4vBTAT-ftl6!6itC7R$o1l30oDs}S#?&YnslkzmXxHtTdNIyFC}
zvfL2?amkHBJcQs$lLw#=EgWk2+@bsl;=tCI9+wT>zaK5q!coLP72eI@wxtUlm-IPz
zFQ+i~F0_}qW@tQ9aSg{F7o;_TAQS+@@<K35p$?I~X=1`}!L$~(=}IzhsTNGEVuzgZ
z!pSbGoG>UV$s{v6xYGyDYJIO=tB5l`aH`*L!#~YYnh|oGc)TpDZ?-|7-N<nC=TG4i
zZV)tH+{tno5pO4m{H2(>abr|+QuF*Dv4LXk=xTdz{S+j5{&Iq|&-#{Ff3JG`e4}pm
zs`z|**LSr?XDhi^eEX4WZjcTH6)gB`CyVISxZly*0C@HHe^F#mKq{|;R5c_JVF|_R
z({-onyi8B|k2c5pSPK%Yort2Tjo*IK@`dlDinyd6EJ(Ut{cZk2Bj<~XMx~3}!PbZc
z4@k?t`m#APV-3F8jk^~m2UpQ_WGt}3x9H@^uMAM|lnRex@I6s*GU67^k(0>WyKSAC
zk?wcxk@I#jLfF$Bh6URv`pO{uDz&N!;D-H3KKgw(Di?I->Shl)hMmBMEP~<b<(*8;
zl)FgmyJj>r_mJ6r?(9f5`{$&vp?4(J6Ab_N%A`gwF{uNUiADePe-?HF`Fh%8CSFBV
zk5sdc3QVu^DUrNm(KY47IrMMN*Jph99$l@;OC5;UjogFi6<R96Rc7|kEU9&W9s^yv
z-7|1_!7s87YNsv<b*Mj;lTZR1T3T0^3|`Tatl?tws|292@<R*X8kIAq<#;+C7LotH
z^T-)2;n8lo(H6{<K=($!CF04M#v|(X;*ZJ!0kSt;!caSAr*2o01kT?`;y8y|RI?CM
z_{yN*g=U%JA-3LUg6W77+_BWrZ1Et599)C5hEyc4&BBM#Mhj#hQ3O|l1O)BvWA0YC
z+&$@gGVs!)$fQ@*^VlOQeKPe~y<Tl<zGb5)AQ_;4k~)1DftS&p_)Bi%^<bWLZd}2P
zl2O>#szHw#bk7=`&cTw;L(}CZU;gW*NMTyeEY6xlAmN!n@wH<AAvOmFce-2K-rygU
z+r*Hl^O8b^&A>NJPc%7#gjnLm{N$zab>rN70&#e&+t}OV5#0iws;M%};)|_!@aE5K
z9@wov(&_%jfS%B2pFR)$b572h+YxqXJ*t!$-323-5M_VRZGFh61-$LiqLf;Y@Gv6K
zCr*(FAfztmNk%~Q3p&K`ZYl$tm|jm*Rjon1BQ{S!GvkQ?L}17BZ{mjHP9a+_@JfcD
z38ICaSz|NjUsoE}z|PEY@zp!sKam&X4Dx3@LejS)KGxs*@R2P3CjogzB6q$&C~g&P
z_TXiHaHh~6@4?0C?rslh{p<PWvh`J|n;IMhy5-!JjfV0V-uxoVdQ+@7u?kLFW^YU_
zKEN(hXZw4)EJ5-ts6OQXZ3M;QMh@gEs4D2{|4kMO$AZwyTC(F*8>y+G0(%|OTt_u}
zdV1`3rfTedzQ?l9(#Vwa0Kn8zdG_t~*=iN-s^``l_WRu-saVxqG7SGPc}G=36*i*q
zSe-(?eSd^ec&3bllsx|hJ$csF&kA+8^-fx}3*`SF)>>5PpozbBVrt=05+{FRp3mro
zM>T-iKDxU)eIE}gxrfB)RMr!70o#>)+fD817{j2K%sTN70}6b>-Z0u&%I##H8tnSl
z{t(fKO>~8S(4~6Kg~!r<u!XtT+#(9{nzOe5%wn6PK_qa>gaib0<lf+XFDI<epiS=0
zFV(sI*RoY4`pulPjNeUWVtz~X#<Oqf{USB1w1;TM5ObV(#5e8S#bek1^+}ui#Eu;}
zi<*5cj)xdebN`-fAN*z(^i{aox@j1E=7_1-O?E<3u*?0dCrO|^&xR)9KeJR`yG0L%
zztZ+>R;Ybx6kF3q(gHS@vAS@ORq_d%vXJ!55XT#;H{iQ3wj&GYXb$|eclt?QIAI5G
zsN8EaO{?K*IsNC2rcT37@N<wHa6kqQox#J<q;>}@!Y9g=!=>gq<cW;ldq3^k!f!Jo
z8QoB3_?tC%hH26b-oB5Bh_L(hTVo?)#Qvd6r0pY)g<=W`#7_kpY-|k!8s>Y*wwr}O
zVDn|9JKWTrgd28<Cj4%c{~yye2Zdk@=_2Vh-RWWd=mCi0or05K{>^_G@K*RcKxQUy
z{fm}$>P7R(AGV7<_v<fq>bSa%rUuXQcCY5-=~t8YJ}ZpS@}jp)GY5{bRJjpAbfn6!
z+FGIN^Olq(+y{w$hW-Xp@K#?dT<40u_3tNlkt-+HE1??x3gDOrIZOZxF&O%iJo|2>
zXeDMLwD`(xM!U!JtqEHnCnpArV>{YWg2Q$voBBNAfFUcg(;Zx^AbYm(CLp4V1RNg|
z`K#=nM_Xo^*%BuchR5Ttyad;?Cm;Io+G2El-;n)lQZ6>efl{o{LTo)Rajx{1Y-;WL
zqLr;yTrwec=Z6i|D7G0xk8Jr;BQ>Kd3<<=%6aCH;tdF^W3BGGx3b~F(*s={>|0LHP
zDNHxEHhRUfdc7lg@(1##VCJcF`Yh1`j}&L`=^7t$7*jpzm*QyjGsz`kb|HcPb22C8
zbKR$ruTW0VO3=wF7{Vw14humY4&vWuGqNhSY|&o{E97#XCC5hU5g<=SvSOvhxw_VX
zdsp=ta1HJ(jI|%^Z^=ox<2xYrcgD+|CzqiwyW(_rsS{83@er={7#=qFqgnp){c4+)
zCPdXn*{^TwJ4XC-kq>kN@DSL)eY4Hn4*ck7u~|(sldV|V$YTgx4*+p+E=R@BTn+U?
z<+kliFkl!g#+M;0)Jc@wzwe&t&GkA!Qlgmaa#@hAdw{M(DEjr^=|4O~2OX_1VDDk6
zYoEwa;)g-cwx8FE5q3^AU@Hm{I!lPwfW8R?2tdjluN0@o*CgtDth#rYMr=CUZJ)YP
z1ttW}vvx*CSy~Rg{#V<_X1!QgkV35Tt_oeZ>T5@eRgAzsJuc)zNam-5E&sTzw+9om
z&u|elb>VwG(O$o@03d!yrag<di>LPQP{^co^FPCXv`Am^eYxX437p3{tKe+vAqg#Q
zJgm^xK$8Yu0XvzG-!BWn4L_j3LVlARnyhrZIKuRaIKcPtkSqy-2z8!xl-YsyWta({
zO2dDl4refF-ut{7nYg;LLN;SPi}7Mta*`A7z&I#0JE3zt>(hsH8PA*L&6f=({&|$|
z63!%L0y1>_IQbrafHd<O*XDvWxW{osi-X4$*}Y~Pbv;6p!xasw)jqR>OY$Q!FvgRM
z>Wq08hLSqZ;Gm#qwZ`3{%sc~@g`r<lJ!-@I`mV>%w)zB6UnpRQ_L<-hFGmlnV_k4t
zZKC4czidk0Bs_ZjGG3t@GwJBfp>sV5+?-ksbSu>^pLnJAVr^16RgMd%x<4Q!Tw#D+
z>{h1KT6D*$(zXv|Gu9sOG-GU;($UVi7lXawRpCdMPv1@MrOJH@+H?j=E8>s4Tu1e-
z1tk!#_(+FFqex+!PPpyb7*GeJ&N8F>UmFN)y%JX|Bv<ZiRiv8JT3P)1jCCBeX7FgK
z@tFVU-$B(UaH4g7M#SliJrCXIw{*UyO>fT>n%=%qVRvXen`QIn4|)sxsL4S(meEIG
z*!J@zq(cvBp^-4AS808B)rZhwa9g5d5uEp`$Iz@7g9x=!2WxlLgT-i|IATR+v*K+e
zCh8oi%QF^!;rpfs7hziFl}Nhq2yj3NP37zo<3@b2<`-m2cwj|TG$i;Vo&0b~MZ;FJ
z3}j!7Z&TwUG^UByxq^X|M*C*kWqE%+2vxc$jU)y8^tV0XMn_rP`CL>`U~9Xj7?oH8
zRu5~GL(_3@o@JLTZd$B0pIhWrkNKb5md@OD#a1=GlL!XO$<_CVNGCv#yYLlnHShUc
z;>yCdmB=!cD~Y*!{1E0Ugr}$MyXry87sdtuV=>e5lFud_6txPB7xX<scRk|^5@s9C
zewfWH5lW#!gmh!;Bv;s&jZK4+?528y#D-$>g7`GcUVSIzGgOa|;fZNbAP0SuWLn?w
z>%JFIhtw)XpDs4!sIDKQ#4P?Ve8k#PBRE*V2btOXDkLWEARmnT_*0~YsFXYHz>_;>
zrm-w%%fhkN?}<9)82uS99U0X+4>w_u7n-J!NB(zX{mt><6U)p^!z3Qv+i>yAsH^37
z{x%|vzU|k!)NR$twF)(5YI-CNtSS~Mu@Uyn=7wDBEYiGVKSwcY=Y<bN6UXo-U(=79
z_Uaag#X40ItbG(^iQ3|uyxmLR3(HUNN6&POmWxrsN01+nO`Q5~Frek<why_|F_E1v
zjC_m(BpEkz<y9xvd=R06D%k4=Jj730{@^;O-kM0>v(9OI?WWXHj6ytK=)3HMkw@7*
z4-DT%yCYIeUeLYWIzUVxao~SVf?0SSSfm(J`BKAVYAS<oH7QPGR^Mwvei7Lj;R{4b
zGSO2Y?bM?0%@{h65Fnl;|K5Mi`<v^5p(07bVMRl2c7{1r>|j259#s})Y<;NGge;wY
zwT72F9sQ9GJ@JG(2iaysv<B_=YW6ptqb$Yd?L>$Zfu^Z)=oQX6N0SKCp7W^p6US@5
zrbXc``&WlysbyUWmt{?{?8ltc9@@plnv$J|1=g{BowyLHN*)IzU(Ig-*v_QB!#*PY
zn`q*elqm<P7&4h5Vs=T&D%cu4ui%1*0OW<JHpNzVw3c+Dv0P20ym-*bi8In><y4H1
zPOl46I8BxU+rk+$19T2_2A_&I3Vlx)!f<sKF|A?C4IpZ98$S^l2kbouv3z@6$V<Fp
z<*>RwGKQezg<JhT2dOaf`LI&f>bLp_RBA=0n6bATFfLkre@6I#`D%BSL_=i}Ozv3W
zw)?nkymjMLykvV}!Bz7(VM1iNR0t`oLur4?L_49AK(pfQ)WHAZ>#W0~{@QgvLrNnc
zNQ0DwbPI^6sC0J>-QDRRrBWgdQX*YLgVacelr%_7gOY<1de-oJ_q*SHuCveOzc}As
z>xujRJWoL`>7c%Yk06uhGV4;uER&5@+)QAH*X2%O^%y{>RLQquRVGfnr!f!(ZcHna
z^|({QMtdG)ow?uI4rnqUQSJMO!@Se){XRraD5Rr9gIa}EbtY#xk^l2oRAZuubiUMe
zY~gb#+Fg_!)e^t7&&>5}fzLqk!^e-j8&zFX{DZ=IC3`8=7;R+Qw`@!w!echGo;@nY
znh`b%znlnxWRSsc*$Ui$WdPBUdi^j#So;WhUhc$oT01Broy^P7&(ENDpN{hMoj|o2
zWa<fdakD9|sdM>s&T&#z`G>m9CD1M;mzp*B6|UE7XN1_>VoCuU{ZJfde1%Xk=%*sy
zY!<*jw!9_s{}Dws`NP2&G8J1}9Wq~*eG(;@tlM)u*Qxi;pHl&@Jl#rR<pfrxlKyIt
zn_=p0f3y6+`g@6FVvl(ACs8GlvGok8oPPXe&f|{kkK-K;$OL*Bt9A)u3`su=$C1=s
z+&YYRUtbT-Xcg-MgG|HXy6{a*Osm00V~<rXq4%>BEL(xft!foca4c#;@e1E{Hy(2H
z{oOE+#B*}dywD->T2>I9*uCt^lcj-7xyW(U#1Z)az~mX~r|I;CbrOqV2rIO+E*-s_
zK^^oQ@(2%th|@#$V=h>FXe#7_cR(>n2$`N47WQVKQ9e)?Ll2K$L^{B_H$2Gdk}&wG
zV2HN$W8P`z{#5<h=`i^kqnfO{igLz7?oQ$&gUQdCFCmmx&p3Eb`Juc#NS&`;DC;>s
ztby&Do^2XWk7-h;7usS`63<&%m1b~Y%_i1Gdf$3*1}hofp+CdRRI>Q@&rOXL>^R>W
zC`8l34wX=t6YlDw)_RCiTpd(=+QoWz=~CFsy2lPpC%NnA8{%1iv1SYmf<K)BkN?HF
zWw|%j3>I{1-Rx(zXsM!vHAABQ;FpkfR7_q)(r|gQ2V$`NNrL^ZS=_o;Q*3b06N%8g
z^dsXPq}1did$xVFL7<G9P+;08hxdgFMei$c27**MR!{j?*jUbSXPqM!BIqT}BZvpT
z`W?NT2~?+lQkyJ+)rV#C;2^g70qEzT)0t?7PX>+spqZf#{Kv}F$esm>?@fXFf)J+7
zlxp7}f--pWZ{8<J%ZNp7c1yk}Kp*t3<RM*BJT<)gSTVvSRp=r)s_5M-wqrI6wHsB5
z+!q4}jMO`K=DTT)23=VKdMsaKfM9&<$7-=!2=D}f1-M7@*!^A39hgnrde!|k)?JG3
zDwt8~rk3+JcZyzf>O)_{D^GOH>S3)q;V+qnq1RNn-fiCGWh4;yatZ5MpUcRO0|u|`
zt&w2XfIA$s?CW#A^?7c47AuV?84dOwho9M&o+Q$Ux<&bK+4vNXu89z05XD~##BD`h
z`vz#ELpQ(B`w_te$e@kc{)n9BBaE`+tBz=`oKgIL5ES&p@+@IAtPAL%c}C8V(IHz3
znj91_RxkeH;)8w)dH+Y)&B@4aH7FNp?sX`*5+jfKUyg8EGt;cd4>u5AzQk--tGrvj
zppN}*Knj<OwEdsI4gZh7eL<C7%mTuk13G++fsYO3Fd?sz>T0bV=j$^mU&bbvm?2kW
zT?olP^&RcbQer9hvTFUxNT!V5$;vlXH$%`XXas5D@uFpUk?hX3t;G<^W8Hk3As{d!
z8>UYc|8n@|CoO{(8QT}mst>f-{bJBpHKC7nT26YM>zDtOzP&p}>$RQH<&Q;a!iwFq
zn?P^yk(^k3TK3iRuSn%{J&3SJh$kImRApg53+>Y&#AR$#uqoR@uId=%!M3+v;u;io
z-)HeL$Xz-3GlS2!?RU!?h`(@Ho$k-;iinBbUtjVZSDyTJxR!Zzr)4C+t?!@6^a>Ru
z<U@kmZtkQhr-#I3A6;Ly`v0)|4VNUni;54mUk<<Vz?4hP7LMJ=oCbly6y1p$nS6_V
zf-Z&eON1K6k9VeVfZVJnz^xjzPB1jvGkwM&^W6N|iFHE__1gFM5DA)p$^)G8yce8&
z3R^N<s=_s8CRmg*J12bNq;c;eUnKwFMi-dTT|9X_gso?-Tc&fXrQl6i!dTi<&H{`y
z!8ad7mm!gQ!u0Fr@g8A=JJ!oVEGuHSzcnmM)Fr9FCGkFYd;2;b(xR$D^jbb?uuGL}
z_~ke@Un-o&2d(?wo#rK<SM#}y-7m^(dUby%7<gvOcbNU+m&!;^s#+)1O>vW-E?d#|
zp&Q(i)D-B1cLL~$4^la)L8jHe^(Bu&Go%BvY}*OD3pxey!3Ymtskhd<_eWkXm|Dm_
zV)Fx!EOTsVSi7<>1>#g_`D!OLu$pAx_<n)o(}j54CH64<vN`_fYDn2eqwbz6e2B`3
zl+sUn4GrMn2z_~-D@rbK&3<_dAKLJ;D6h$tHG}FPzhqfW6VKN5_Rldq2g&B+cb6Kx
z^%;w*%~F@9cG1Pgj1p}UD$_Cr*&H(`qG0#**P+?unjfdop>H@GI>PgH#H_1>f;$UE
zfBj^zOy?v=YhZ0S{!}$JtCn*BaiA>;wop<273wp2l9N2h$Dk|3sxOsiCYA2}yZ%gT
z$7SP~fLrv1(4gxfVk&@+*X)C6YEJM3-!@QvcnL!Mw~X>K-El1K?d{Vg%~oT=_eT<(
zm(&?ZMCB-);8q`1K{Rk)f#;COh>btL(&P^tQ-|uY@ywu#fX&m9DksThni#PNQ6%A6
z>8&dlWSoBkpdpUc@)!_Q^a@LhEkl8$9atMtCeM#-v1V8&H>%zgfcrujp~Ln|I0odL
zgW|dY##)!oD*l!cHwZ4%n7hnk0-IxR=+;X&1~Ye|Se30)5!)e87DhvoOY@>4MfW5G
z9z2Y6Vp;;}V@4V0ScP%31<=3eu_?`t=UDWrh;hst_||>|-!gl?aGd62Y<v=gAVC%N
zo2ch;knjz0O?avFqBfJBT(p%On+LnOuX7b&eg8*Ab|dqEd=Y*1dSk}lL+`u#vu-QE
z4cXlUKhG0C65YMK$>i@!xf&QMPshY5<lC$6{nZL|;6(UxEOm}Q?q(!|q$dhkO5Ou7
z6hA1NR7*cDhEV$dV6+OM<|`eA5V+Q)w8rcEnuTSMOZ7)1gA-)T7!%oGcC_(=1pM{$
zgA-WgH9NYD`inp=o-!7n7Q5aUJh(NpdC#w^Qi3ySiRX)*z&rgo&knEF9;IG^vDB7t
zc=J=M(MHIqI{O^SJ&B2T*^mskLHOjz2Momjvtk^WE1L@yjrLJb?sQ8#DW>e?dlPiU
z?p9K7<bhFYKe!ycjWyI*q1Xx$tyr7mD>w3tB8Lqsf8Wrk{CGqPvolu<>AJ<l$Hwco
zj(PO*<K9cl7D)gephAp7xS5ej$yEZ6qLfEI{tlqa$~GVz0;W5YqrzlKx209tvZXEy
zRJAIcU;n=T9L}Ex>8Qrd?|-nKoquK>sGn96jf<qx4({!AQ<phfz1?TAwDxO(ZY?(G
zqg4B5$onV=&w#wlh0ze{mAhBMafdhc4!oLmuCubuu4&{3g1RA5?}~>@)<j`edky>f
zEOx)I7kZ7>86{p5z5(lgD;#4!zJ<DI&5HPFcQUO(@?fns`KZxFfN9F)Yd_tKd+H<@
zPAD>MZ`<Z3<K*1x`I|YE^Q7u`{IERPgc*7tQD6_$^hUA7g)PkY-W4;UYuBY|=Y?=P
z2r5b|K}bq62%o>TFf*0FrIvxIP9-M?M1!ZG_!|8bzUL<zi<rDkG=3Yc8wu8jdo9xv
z_vCqZ<5hER!Ef;kSJp^7G*I`rM4rswgkZF;&&BNjPP!Vpfp>9R6fy8+<w#=?OD~|_
zWg^eWS0ENIN7OVnE&k?1uTqMaUr1M@4VlYJmr_e>R{AG2p+_3hlV=j5e9s1WpY@df
zQ&Fp1QTF|a<5mYfB%T|T#!JL|m2RRg#A=$uXZup9`Hy;e8jp}~ULZMTCp?c4o(?gr
z;5nu{5Nm1i4ttjB-{ln(I*^Y$)vwX<@&0(GyCC_k8#?e7iZb;N621?~lJ1}3qI;-#
zE?9c?A-Ct@VcT=EKsQjYI~k_qvA@a$dv~~3&@hQjcGVM=f;q&$d>b3t(d;nH>P&2i
zn9lPa<LH+HE2p7-&ag-?CkLo%!m#@kKhv<K=S9jGEIp3v3tiX0CdM3)v9z$-u^#Jf
zpWI0yVD7<Ep3$+>F~uwIp7ERyrS)vRl0tY>lilG-cmkx^5<jL;$WK%K*s#zY_RS~(
zR3CSOd^mKQX=rs$1uS`aK<*(ZkdOz$iKn@#G5D4M>GF@M-HP^A712zBcpAA-|3`Ut
z@!6Wo<cypf<doX!wS8ey)Y<lbtt%a(&r`EZWIx~~v-99z;y)YssNl{Mc7gvM7g}aa
zIl#ZmF2u6t1Jz4=t!Hi2^K+8tkesSEeI2aaUs%90uJq+Qs98>_-?h%e(7&#WvbA*G
z;Cp_%S4v(|x^hEY2XFmWWhs&>n93IG?pzH<9-(YWuu^&5N0og27gi5AHKodc&+0N(
z@C%AX)@kbb4wnUNC}{5plF-M2<k|!d)4NZPEV326$QLem?j3MjSdRNX0Lq*H?daeU
z&f@HR!-1Hg(knM^t4^yK>-uv0@Bnbb7yn_iBb>=9qXmR%zLVW)+lNK)z>Z)2hlJwI
zY>_PGb(I*8&nqH@DKu+-eBUhQ;=C`t%#9Iu{URnrd9~5+0S=IVNZt9j^@Tp%T$JnW
z6LbaiT65yWl<x#Fc_M4YHe!)@5b0JZSRgXs9%VxLzyG%mMTM38E%^r{?K4@MQpPX9
zz4d$iA9|K<M=hqPe?_DiJpW+!qQRE2YsqjEmT76u{uCTNR*o&H{5fOMQw`iTH}^`U
zZ&1V|cM!^OJY(UNXW><4xRpiF8j5CNfg}tB6L{qR`mg^bO+1K^Q{crajaR(BlxqYi
zU_w2c2amYl1jHf0>Z8S!0ZyaFZ$WR@@h)lc*y_1=*6*!;vuoC3pUZW$0=X86yvDcG
z1e>R5C9Ojy5%|HAmVc<72%^X63bYE&fAJA#!HbhIwA*7~^C;w545h!;(XRSR-Fh7w
zs_2SVfN@}gvjt8I^$<tkNd8wi0!rmsRR8l7AzQf~L_P!kN@(e)3OM!#FE#gjX6!p6
z21ZN6LX6T9=xcXt2mz)_O`wce7pfq3Re=w^y@f2%0P#C$h0N$#TIFgXHQ_zR^wG_Y
zL_W!?;ymuOsc7WKi1$3V)Y99wvrxujfFeE6Pg$;sg(wn);;V&x04<Dr{shavdy644
zpRi&+-FbvPlBq`TLz^n<Q9oxf0%ddEpQ|giA1{bGdtqUbC%HXgX1`u?_Unt{a@tdP
zOwGJCxDWW2XuuI=g@*Tz@0$wyzk6C@sPwO?ipbQcc~_g?VV!pxLV7pu*<)8^N_uIm
z^~7kpwEZsd2VJyDKo!t@c}>MBBH+_@DKqJ`F^wJp9p1elF%ns9M{JxO#t6;i6LfAj
zQrGuLnSD1wHe(eudu_YAZM$w!bNT)V+i9GK^fWMd9xRi+2V$#FTX#-@s<8wOhtW<K
zvWYzhlo8{B`Eo-abjRb@Wz_cXr||sO53$K~;Vp@c-;+rC2;Nl_ygS?>g&CU4(zpsx
zySmZ-<jIEXO^Ct|%O1rEx0cXP=-XuGn*{8OoTBDkbd@v<RkT|J&Uix{L2;WqjDbpf
zuyHu!f8BTTs}yW)X!~HadiASb(y^z}WP#>Jy9l$+iKF$wNi>Ot%lO6BDIl~s=U1a<
ze?o@!=*%*hkk;Qc%uj2IAby-yx-nF&R#dEOlh@^cK43L+^K;eXmHzS-hyRd_9fpB0
zp9vLX9)HeJoUfQt0<1U<JGJ(cTwdTtmlD%UCd#5_)>O10R`u<3bBxfbSq*#l;r?hX
z_|4KZfOwoyGOn1=MT>*--4x&;h?k{>G{)YRP{6d-#N!7r#*(ZclztsxK=geD;%8|l
zQ7CoqdUW^XBOs6Hr|bxOM{<ANlAVjR44kZ9-eZr0m#kbqKS-|CRwjZFz7x1M35otR
zu@IK2;D*9v(=j`ntMpb*=)`Jw)MUWVZ7WxEg}aQsAt_YF2{M0X+@_EG)Vq&gg4IHi
zXrgID{D1to@OIv*^2sYHy{zk%&+e^`*;{M+H+p{^A%~z9t<@WwsX*EUG+iaY`CtUh
zg)bC%q)$d4*@J%T-O1cd9mCT8hNZzx`B$6hbus$?y)M#xU?x<5X)223<C`vC8gBMq
z29o<=O|zcmv!xg9&f8OlF51!oD4vi#1_1NY^AP1T==Edx-xp{*IC`bmn8Wcun;pjN
zxjI`iJ>8j9T=3h>M4KOr96s$;4|<AwY?Ad61JV&i^3iK@NR0_FPyf%A8z>c}`*Pfz
zA9Wf_4w(&n#PQj7n4x%>hYkkpd<!T{s-0_V{?rAOV#6w%e@J=(Z(T7I6Q>B1L~1mn
zaT`r~GVGwK*?jMzvYYny^h@9St^U91U|}u0^&k6Vk&@N;fsk5gsrf(!PGiJPVab1Q
z($DN@`Jt%o!fYJ^DqgK=Baav~z@lM;JGt%marR%MhA<JEI3TNgCq^m6YSF=|B-KrI
z+q47yrWi2)#}))G1UeHQu%Dm2;7zL;A&eC1jKalm<Y}ObsYs+b5{_^<+feV^v)jT&
zj7S|vZ-z+k0%Ps}AW;;c-K<xrc>s7>_~fMv&|5Jh<H?(xK(o^x3#8OB!dYYCY0<oo
zwYEH+mQe2Y0!czQVJxHqUQccydCwQmCf?lQP8IwJt)K?rO~W@hRM2EJWmCin7>llz
zc|ZcN1Jrs)K!H`iEaEUVA#%+vns++uZZ!Ug#uWjftx8PRssC#rw%n;<f$D(+!92~p
z^9T(0=Eqd-ML=jnl&HC1LNbhP(N>3=TZ^Nhn%}!-J#xR#f%2~i0mij(|DJyJV`<R(
zx8Kb4(Fw&R(cx=7d3Qc&`bT5h^LR+CA$@B*Clt5zcT_SZ>Nn6I?KH4p&u{>pq&$`N
z-A|-rIT1mMK$T=wom3oI;k;x}sss{NAn281jhL9ra<6@1M#R(c?2=zDrr2#pbQvGP
z*K+XEpx!YJjUbr=Dz?dyV3g1)c&&@$9{g!^#&ejAWso-T0%FJS@zSV9^2zF3l~g|@
zz(K0X?qJUpwjC1v*P%zY-L7u>1AU!5v_mB(CGF)c+bMniLltF4bYG?bCvhp0z((&k
z^+YP%3N2~7$?_Dtz|1DAJR)0K5EMDQdQ?Zehwpz8;ER26o@UdOLi+*q{sz^aW7zA-
z5)Ck7A#N}S?^X3CLU>v#5Bkgld1NUa8m7q2-S)(m0yP0n%8u=olcVFwkI6gACm;+F
zqydQu=5SFYlRP0pB_=lQohIl}9?(jylCFL?a2Aby44+(M1Uwyer=^C<Pg@_NFvi6`
zd8$8(AjAWepE`$W6(U9%DgM7`T*{Q`iz{T{U7uchA1$!#dk;iin(gcvn7-F+_^~h>
zEFLWSRa6ZRHZpB8g)+TJr}>aFDFD5OJ#_3LQ|o|jfkdbI$EVWk{Rp@T45qOfWxl_C
z1SlZI$L#idjSei6+*{$Yt@Yq5Bm`ov&-;cz1Q+yf7N}WYE-iyS{^x?+ZOw=BbP%8!
z%}5%wnRf~(?N8unwmdzmby@msc+RqQJfW#t97}&6$LhE~+qDA^tx{F-i|16zG~SK!
zxP$zPN$cqnzVHJVA-3R|Feg7E6ZkIpvyh2uqVVI9KLGW~ty`gm)-yK*?-AeM%OQSn
z=^B1&_!n%TlOobUs%Fn8ozWKjF2HW-in#B}19(X%T*zSr&PyP+{*mwnR7EH+anNu0
z&yB^m?gBZ0A6U%~O;+1+AL&Z!#nSUt$Nkybu+#7v$Nn|W1LYSAaUA$qGrFchlbF-M
zGoj-(c9T5C*gNg~pp#^hBRf!|;pD9S?*gVn$V}sjqGA(TSf2qgbiGK1?0RNfiUQ@_
zvY0q9p$DWu=E>xgNcN~m(Sm^~@|Q~RObL&IosYe7!BZHOpxmL30p1#^on%Aj;vcPN
zCfIM4B(K0)rG=(2P_X;m0Z6=TtMUV7&+y1813P{B$OLgKmkKHj0Csq=aDlG6s#joU
z{FurLye?hq<N{eSh9fX5Ss18F9zFB=?7!=`s0*D5@|iC;zft82gCc;YFhZ>OYezW2
zWX{9TiN(3RX4|nlr(oUe$pYSn7rx7HNH@@zIg~083dsm$Ou1kI!XDfTL23%9=u!j6
zb$K)9C&NDo;`gsOMMj_jgnKQ1$66_<{mC6lxN%-P$s}|4(pSX@BVe*$q(KP2PKXXU
z#hgJK@>+ouWe4~G&)8+}qhSC5g;^*A$RmB^$kV02e;QKwn<n;VYtVwO8;HYGi*VjF
zbdr2R^ma92MC2a^&vb5je^vplA7J(TdAf3chqI+djp5NNi`M&^7L8NmyPX0EI!wb6
zRIkO0?Nd}n*LDX0-}TzshU0oCsgUf32~<VyP`5#=r;U9wao_Mln*C4h`4Z0txGS~5
zf~|>;2O+~nWI3npf3GS#+#pM-K&ndXz^L=91Kp<RSi<7G#WW2e;O|aN1z&l;;=*Y)
z1sbXJ5Ko8E@B7W4Vu8KT_ZWR{iS$p>Zes4)mY*RL>ref)qR=HVX~YS#U_(O9nVSBK
z9HDJDtBO<Gxwe;zqFxnzuin3!9eJmxMdt{Kk8Jz<=VI}(Dq2;(Gg+GAfAAUiR!@me
zhRokf4-%uBywNgVKnRAVhpKyhvW<T9ijP8_2xwEX6Ysta0804u99&=Q2>>TLt%8&i
zB^~^k^Lm9LmB+<m4xdD+VqUi;-_mr}WtrUd2dc($n~Sw7?f_V}-v;%yO|rGNSKFGI
zA$Wju@h_P{U`lW@(S(CUBvkK<(j`D3`B|8sE%=zaMDr}40b)#w2bpWP4BAm;P;L3z
zA2n-(hY0c+9a{|4e;<|`Zw(Jm=us;0kaz3?Y!oHtCssn%#qVGBBIP?2pV!WQpksMQ
z@WJIE#KQ|0_qGE1A?)MEHKwh^Cw&5huRr*^k5^y#npe@oqohCp70AgrK<>i(M|9-Y
zg<{iPlJ#Y?mzNOgz_l~s?a)tXQ`{sTxX)iP0S3iB3v*ox0q+R9IMsX<ZRP3Q_S<^$
zV%L=KUe&n%h+g#TY$Is|WCl&+$`8|j6M)()mXD<?mie`ei7j59$p4VMrQ$9w^B2Ch
zUjWOyZn7#U38+5h_^Lw4j<#@PPEzjph=v7kL+<9uT8q5;hh}HzAs!RG#RXCrj_zmA
zrDL_8!Mlf?Uf%l?QAi>7%2(--mI2@0VigLH42>?VTcP~BCJ*3eETmCad(|aPH`nF>
zrFGXS<^Oszq2MIZqJQg5F9YCUtJ7{6&jKPn`q_dQ8i7FHyKwBl^zBTa#l!Qba2^w~
zK})5L1~|91ASet%tbtr}w)vVy1iC--X&Co~`->jTw0YC7R_k^q1EJv$nd07fd^`YY
z@_mAB-~{g$Jtm@brU`gohW8om(4NJ`dGu;`tW48G3FG<|{)(BAzA4K_vga`(T^Rf4
z&)H-gv2^XEpybu*ZJqt_BX-}NPb(3_08<5eb%51k0-6@3ZIV3HCdMH;-*^rN%n9#V
zi?Son`R+e~d;M6eqI6Wwt_^@)Eswq5#hxG9dT>dUq1{p^_%}-25K$@apai4fr>v};
z=|-ej1*g@9p!e{C?DI?l0z~5qtK-ZFro&<*MhlsYqY8d_Aeq75nfEJ5#(4nKFn&Rg
zYk48n8wNdp*zW8fUq>-C=3%$VTzQhp#P{Jn!}>3V^0+mm7V_r4X1H5yU<SsqipxuO
z4|+X)`QG<kc%)pwK;I6cko>>vK1zh)e>@vedv}ZgH|haOF18Ab1X_QY-Ve3{=YX8y
ze2&SA{e&m*q*t;JF0_!h;z?J#Zqn-LtRVrajr-;+b0LfSNUG-_ZswOEOumXAlfxVw
zF6@??-$ERg-h&#V-(~VTGcq|{g2T-|sFxgknEAMXT00?y`%(%4xG*hZ!xLC~WoQqh
zRq|@*i6wA?d+z}Q2=IC@YDik|6!d=ma}q{Abx!XG8J6}xv0X0*2%|{dmbW0#O`C$~
z4Q1B_RpTQBN1~jv(_Og_Zd_2B=##T6H_x~<f492f=CmIbpj#=Muvqu>wE0DqO)|S%
z2Q7QRr9CNfwLF1d&T(-|lyrV^p0$@HEGVN}08v-}=gmdo|8<jnNE{{Lnc{9AXv$g<
z*>-%6h4oI-eW%CBYa4dX;-XVtjMQ7~S9eza5`zF`b24e^djL>IGa%C$3_*k@`ZB8t
z6p_irK>3b-2NaW04NLs@=X+R@@}nC1kFO}6-A4`(I+3lp49oJkU7}c3P|9!IFlR_C
zOyjARHoiDF9$JxcwDi9dz`ap5s@s#%*b&@$i&Av0PZdt&v$PdOZLLHEO-8>I+abzB
z9ytaiXd|`uG%<aPm6yttLl>}><vT$4*fui@gXhTXqYtZlE85#|E6~}+Sx|fy6FxkO
z-$KX?gA-ClR8PokeZ#GB(XaelIJVxn1<*>MTKLvms<38g4B32CQ!wnX_4M(d_LO1p
zUomM|6ZXX5E%P*di;;LmZ<X%QKM*VkSq!{=L)?Qp)3eTSdhW6zH}~%g8k(NnT7^P>
z=I6x%M!VbLAJFfDfBgf7W^WQ6YpBfM_Z}0fA}zdK)vkt)WB6b$LuLu_=v#b}dp!dR
zWN)1=2Xv)=EvUrhUIF2M;Ua*3X>>?dK>&j765a6pgc`Ftx<v-tx4MH?G$@>ePPi)`
zj$#^GaIgP3)n+P(&_?zOx>zM2B2m-#N}As2BxML7<{-2m%)F{qN|i%_xKpBbh=dYd
zw3D;^bzu#PF%uvre|k<<W`O?8R@zs?yT3}-SPyBSgAX*ycdp69hD2>$A5V2}()7w6
z&lcP9G+NT0@#=_baQhkBUL*xaTfebpb|5;Yq3My~+GA&hZYgq*GI3=~clH1rGb(tv
z5KjC{xT%M-ewEMu{)RwT6(&;IFp-(VO<~O`ty=OXOt+TiGK;P66gs2ndHgb^s`!m{
zvOYkp{AABe7s*-7AGcwzC4+U+F0mu7d(<-rXQQ=gHPU(Rz$;k<#_N=9@EI5geVM|z
zjzSB!@?C;+KU28+cienhlwumJzh8Aam8GkbmGHpXUV|z-phEJnC{Ig_z%m}!!p`N>
zHam%0JpZvkwCfiQM-G4mZHbPZsvYxP`Gmt~Qo7ZA+^F~iO8ICUOZ;$OjGX@iG+uR2
z<8q&hm#1^JE6;xO^Iy0&tI)ZcwPerFYF1SPM_}V(aM^t|0t_BO@Yd4Y703e5iEby6
zq=?S!V?k_$uV#5?sA`CA9UWq>eH@c^k@TM^ZRIB|R8O|-W5vR!(gYRy0z^5DvIDkW
z+3cKCC{c@uS+kwm)eo7AB17RX=?9V~BaeBQ-aIE)MMKq+7HyOXzVnVP0Wa~r^_%b@
zkn|;GqJ5`<kJbS2x>#Y&zCv*(2sKlGX3F4b`zwEmKo`TY-@jiPS%6J3Za{+Jn3NnC
z?+r}5w6LF3I8T}*B9?YV@7MNtXZXV>BXsyO<#$zrUvt-Pa4x+#eaw>`O_x+;hOW^>
zh>WKF6(Z44_5}kUa(=FN#!1O5f7%wcnJKviTXB;HzHMm|9;sp*dw!9X)15(HLjpNy
zergxqD7T+LGU|hRUQ5f3hY`3a;0QM5W+OrzxOc8eTkS+Y&W`8ZzY3yP`E%IlF!|t2
zI%iVcB0Ht*1Q~4BM+!S_;k64NWZiiJFCY8B*YN}JS!7rl9(*S~y|qU4f-RJDaNbjO
zY5+b!o~Yx&D=E|R!Hw>;?hmTr%ua;XrRhceLVZKJlwUO<z1uIfg^Hyqjp8brdF{;z
z+|6jX!fG{HAI*IPy7ro>lFd_8n<pZzd(S4OL)O{me<V!M@)P_tW4m2~g#eyW^{2qF
zzw=&bSkHl8FFNGO4FSMn7$1&_VT<F+dT@glr^Q^U%(NP+6ZyL+(;szm)KN+RM}yq9
zGE9O_wZqrifr5YWNIJFd_UL_=MXA#+a@8V$t_xUmv-y&${>jt`J~}J}9I(>9F?Y0@
z)7LKck8^Q$+GCqEf);I>-;CO$py(hf1B=dj<u=w#Ah~T^a)XvgCL6%QL81f@y0#YP
zYY`EJ_BZI0Q9@F0P+FQ6Wr&&|-^J|ks7*|WPS&lmU(f~Geptjtud*=%IeZ#uXM4yR
z^U~kk&2X==0y?A#urJsT5{YTy?##Z7+-op>0>@S}r!=QN!}p~xOqo19&KYpQKn!}B
zdcd<@`;Iy{bC&&mvwyrfat1Io$%<~6dpGEl+}{TC;<Q3s#~P=k7>5l%%23P51uc3w
z*w_v!E`=T2riGe&VtGT*(RWGHCuKYN*Co=QuSo*JyZ#e&&T{Y}QRFJlgQDCOx&_LD
zr;sX6ySb#&5Vh6hd^dw3K|0GDu7r-issOSGBw+GEH_s}u5Qg@RpSx7dY&h$ol;kyz
zl{OF=`A7^4N;4-yER4O8r_p!Ai7n&`$4~b1UfnKA{A4dKqZ8m10DN)hplmnJ#rJ^)
zf`$+%%u;Y5(e+}j$C89!=P(aK&vQOFPLsQRT>Z5CWNg|qy{ex*oVa)BW$$E#MHj=2
z(oFr65>}9Fx)hb^zw%-<pnH`>YaC#Oi#;U6BaaEPG>2Zw-dl3tlxa_&V2NcNQ=O#}
zA%K6v-@?R3TC#G-+YDnbkyBGEfWE+an28PxF|C@KLp*8WvhLUT(MqnseWm^A0tt#f
zz)m<$fL(tq1F|&+<ekS&MsLVr0{UpY{Z_ue>bDaP<CJz=m-E7NNsG3ZACM&@;){bU
z{9V8$)d*@oG0VIPZa32~^^~Boc5U%ria*!<^1e&th0>QVd`lV?pyl(SI&rweJpz5s
z028`|b0dF6L?~tKA;lvKSE~S6!x)3QY?0JYE+{}+OXYY^0ozT%?(^NsN<;-WyGOdP
z-8=vNy6F;y+k^P<@(IQsJj7Sg-W|Mm-b)^`ww2!Roi13U<EIO0%KnzyWP69}1E8?}
zH}peHWbWdWZ!*`prwQR+=GrycN2eK_L`<oZlD{B4Kd@wZrb6%SJ*6d(_Uv%%E-k|o
z^z3RmF0@yD{$5`FtCdh#Dl-_@(j-MkvhrD7^{yr6-b|InWNwdA$N5S@{b)j_^q*gA
z_OsPi|BzOHbuvy^#7P&Nd+mG=r(W|Dw_5O;Oa|I=sJ~PxgU<)zy`}cm+fxc_hMU8g
zyHK83P0nuV*W`1AE%T#Alzcu$P9wCmrM){i;PXdP(!y@Oixbi3p8Yrz%U01bQ{KCq
zixIrr8^Ou4-ExAIoG(fHk_r@MM7Z!e7f5?}Mnc>3>cAF&pXu+R)6MsK<@Vw>wxn6S
zFGiW@NylwF^bJWxb+oMfsO0zmt-NX(V0KgEn`UGs8o<wh<Ta>$w%_)9gH3gxD~!nJ
zM;Y3vSC=1Q5Iz4*CBV#P_`SXxokNpA1qK2n%|EsC6S0tTiY?;EFco#*mQJG#e!upb
zp$3^L`mx9DB46+jY>GM0|B8InX_npnW>Mk1rW&+Hn+vZrXg)aKt>k+`-LVm#z)mRM
z!A|_f7U^A;X-xmHh~WLx$t+!IU_}Ao$nn+})(}cDBeg#MMN;N$)?@3=p*OU*topp?
z0|=g>=B*j$gJpB*q&yE|S{lc$({k&SBQ>#O9C_-#%?9Hgu1)g76yW?04z(Y7!~&ZN
zii=Roq3VJ6YnY&;PsM$a5wBBBy?KJDx2qzO`}w(^dLA{Bz}<fO7S*W0ir-R!cBkW(
zvP6*Rvdq_V`k8SncTr#=AQL$hn}U-1pMC%eZVq33!!Tz=o8t$~8l36v)Xym(bc*!u
zOBY7IS-5eZ6wjNJw}!hb0$VSU;6mgEKOTZOCS0FPn~59}MN1~;%H~q)H@+s{rHm)u
zvigR*g;vwqUW$;^ocZsdcOXl9n0Bg|aBzd!OkgJ)6W7I!K7~}A0r@Lv-O*eA-3W_x
z3;%rQUqml5F0iF7JDkyFu=bm<x~HMwOB*7i``%Qso;-GwZ_oHswtb!rrM#YiR5?|x
zQ>pV*4K6{;>R+MLLA^9bJcmYeWj)8A1r27#Qwj+JznwZ|wn$8USHh8x;a45^T`<ak
zznHC5rPX|Y5?{x+6*5)34kLI&j)mfWw@(`XR~a6@zhxtq!Js#j9lUP#;Mj*8#yy*l
zvFM#<-uvc?eoCjD{ed*%cbh(d`Uf)@2nl!mEKl@%^u}hYZQFIc5mL5omQ?+Pme{I~
zRyf4U<31{d)ULSH)VQSSHTV7_fbIYlK49D)`aRJWgzJJApF?s4WI4a&?2ZYGf$kG*
zF@Ebw47FhL4tm~}p>s=>q)qFolnW2!R&ICm>E8Ckg4sek#BN0vF3O&$trz${L$c_a
zA9VN{p2UG+TtuMcIRGj^E;^$f;}{6R3hj-TRr`ui?QwkzdDb~%ihh#KXbGv2Xx6Sj
z=8<>e9&@g`h+FNwH80K(_v(5W_6a{sG4tK+KTqL9XUZAe;ETL*+(U?=_YGFCIT7}h
z3SRy_w~qO?pWAT;3DxDj+zwu5CeWqrg4{RAo_-s+B$zu4I;7~3h)&2@t5IpSWe^JR
z2QsD0;q(<3`OFvln-6!;O)LGvtP=m7w8+Y7*E!8dVocHfHk;M1*NaMBshN!#5zD`i
zHzQx_0p`|ABeI=Ou+JFbvr#LpnbHCEfMcDUE?^NcU3rHs*Gf80eHfFr#K+v41AB)E
z;a!_UfLvwZ=Wws?ZAxd*8&|>ko*w_Ip6Yfl<@}8I#Io;(02{u>0BMmjhS7TJP0W7}
z7f^zfL16g;hz%mn7%?6&66zcBD7l~Tj0m5Zm;ez>uJJn@{usMtec<(N*eSs!PAw;(
zZ8M!kBu3rrB{h#AZLTHXc)hg70}1%Op28jWmluG)&~Qe4HD3VcDeeKIaKJDakh*71
zu@Fl<Uij7iclW*`f6E8s(~qjDxxc7rJXIx8Gf3+2q1lKRXU$7~@<Qz4?$5Dij+ndl
zeDid37=Xd)q3o@*2)qbhhy$@(=)O&-wFIc1%@Na*%W}^)kzsQ(cVR4Ilv&^Q{O0YX
z1fd0pk|nt)LvvQD$4kqYn>)0`{1m#K6h*b2_H2(IcF^vL$-8$p`N9UnEoa2CuJ{qS
z4Hxu-fp_~dirvRkZDufmefNro`MNp<YAMBj#B^>GRcw6g@lP3wA#oUp5$Ut{=gC=i
z+Q1(pDEUzFoABR*NRt}^faXC^By#pysb_tF6dv9?&4zZiK2P5}h3HjLnK{gP<Y-|c
z>Xr40VP=?vJbj{lII~TCE)k@IOB#Rul`w8q;fj)(C{*unT<HO34l6{*d~4k)@yjT8
zmeMy*UkB__?Akk)9VhNMP##o#kP}In5^1=_fV<2FZAA|4ybE3Vw{O)2<#e=uc!;K^
zeGPQAwfPCUq<QN2LJF0VwEzsnn!OA!H1N#lw?~&eh9!Cd9TQdv23Yi%c&Aax@j#;T
zJzsuxd2wM_H+jArU|}^fv1a`=E6BSvsD2bCW%reJ$(<A<`VWPdt1=<;A9u>tZzsu|
z(((RKM+uv^5~gpc*=*xNM9zFpk?9vR<hkGiH>CK2y*Q8swIMc*2B5t4jpCpY|0E5w
ztBOdB&e>U?x3}f>@_sGu`?Z4P*GbE>w+^}+_P3vy0PQ+Y4ISP1PrW{u_U8$L&`N9H
z+ND2ke)ZIHbh`_n?F@2lP#w@bqf2eKEuM3VYX!}byr(3mz$`vMuo8Zz1rfE?r}el%
zgGt235`4{|UDd6-5w!k`#_dN~u$#ks>FB(;H>)|)qOE!s;FMO?Zf2<IH1R_zhv~*;
zBKGYgn01ekbL!FN89+K2M3|`QOu5#$r{8Sk4|8z3+FpF%0m;zn<Qs6ifv8%{DHbx?
zU5WXp22gvSLC9BWAM}<dK$GZR$Q~%8=P?BARh2*}BYr%;r??Y6wm5TjaeB;dh*66H
z!`*U9G4>oYAmxTcwV07{xSgBR>je*RL4t%|Orf6BA_v5^@n(~3ACbfMXW>J$VQhCs
zT`0{x@Sdi5_P-Br{CZn24KhH;RzXpm8Wy7rFE8IO403_&5!LAk7L%^B(gcph0)Ru^
zsqVMzf7iMHNVozft+vIQKSN)zcAS;;dZK2Ft4T_oJ{!rAkL`F*M$GNpuJI{jU8myD
z*E$B{6Q!PmVe`N;;~$_aycbStfm-E%jSdaBT7~csuaGr)r;g1OYIr22k4fi#ufK3?
zV7X<Lnx1IKNOCc!9^MzVwC`tlX-&~10R4m#ZNFNp2h{4Sxdt!37WL_z;wb}Cm~NM-
zpY}J<rm3Hr0>z*s&oOkJSdDfC1#_|cMsv^b@RJ~ipM7P@5cPd;$GflS{Wj7{N=+1S
z$t9tdH&t3{7;NU{|F)M{1@1}AHHv)JgHX!*rJ`pIY}|yc)&G8@B?A@Jxe#RxM>lEi
z-Ak(>ZD`Ba{OR|4{;vFQbf`tPAKm*3=OtrC!?S&aMZ1RHp^l+bJ{ZfyQ0KX=Q5Z)0
z-6Hq^b5c9<CPCj0KOc#0{K5UBXMSj!*JcRz+X!VNTv0|*OC_85=Om8t5TPF)zy;uG
zvtIlUt!FpjDf-CQB`Nl7%mkNqU66kkV^uF*{qT`K=wemn?Z=wkt;3}>>wczNSrd!f
zsL=yjE>dtnE^^)iV&w!j>fcSIFt06_Z*NmKfX6s~N%J@NTQF)f5)0jGVHC1!l;7{a
zeie)6DF&l@=4n2z0YrS!icQ=}Pq%rXV_w#)?P#IlgQ?hVU-6VMFO&N_2=g#fOxQ~J
zeqnFdA^_Pe{y~o$!9~Ew?8(?eFtA2a1@f@wA8sa{?gyQ_Q<_I+Wq>EI?Qwc6FEn5q
zi6TqP*SC>PWPaeMf%f5E7e?LXnL+B1;RU<ve<dK}J^DE^8R7;A5<2MiPQzZTVh5`V
z1_C~_ExBK6!`aiO_lOcg5a%QUswf-|f?qxU<y~FWkl=~F-edt}8@h)AV-BKD$Y>sJ
z(}ED4`B4PcMuPj?Hl8^kB{QTl?mnul>|MmBXPgH?;M2)wAD6<GKE{IKiqmchuW|XH
zvCpqJv!e?qwKvfssrkTCA3RI9%5OjdgYVF$qX32@imuAcv0P{dshVe}3EB8V2vnU!
zo<nq|I>QQQP6Mmc(eRu{>DMO&1mxJm|4g#LL##)CMlZ4~^0Dp;4`hCD*w3gw6<>dn
zmMSt?=Q!PBL-@e(s_{3+@OngXjRU=_%I(lpZOn{Q6)Io(AZhjm&y1bXT<{`9G6pwN
z{b}|+G+$yJ+@j0-T;~$UumjMGJnQ6e>{mJoKfn+qudQ5D|HzB|7R4VwX@L&oGrDAW
zEjP!oL1RqN-LRq<%j6W78>^>7sMGGK;_>0zi(ooX(`MFg`LTT=ufOyRucX21hvN}b
z2il&B4$LU8JDsfXpKiVMg`|^^O75P`)ozlW{f$;9pui(^2B9~)lUiyiq{(Nz|FBLc
z6WjtPyGMmvKmXL#7t-x#2Rz~`%M}MSfr*b_%33O0Pec6u4+VER^`nF)uP3Vlu@W4R
zVSsRH2f$R+0JDlK-=U(Zhjz*S5BrM;K+OQS8xr)>p4<5;CCXw8wVq!<H6p%4d;u|%
zSGK`{l+?$&&JX|F`m8^lx1nE$77!=aZq{n&@#7>#G5^{kCzt>*c6~i%v_sPipsokA
z{`x&=*8_9h&N_D1zDA^Sw3^JL2XCH<wd6i)-mlL<lhDO1-15VuAbMX|=@Ns%W>ReI
zJ)7@I7)D@W<UBTq4Rj)<=y)~{G!*1}mHL6j=iV<OhC@Ng{<?3Dbj7X_+H8-iw;%!E
z$A)&mATU5AF&jGdFas@nZD56#?lXE?`P+X&{b?~;h!RdfbzWdMUf>5t3M{+hDgJ=D
zi-oL#nF!opoK1vXlaASdF#-Zw`tuDpD=~K`wo*AIuz`}I=~JiqKmpFd2af4Ie2<SE
zG<v}iR%1}nz8Sy^XkF~iap>JIucYtkWeB)@&bHhoKB>st^!T100#@z`=C%YtqN)(V
z+o1jLBr<#oRR0tMeAOF3h(vow10Hm=YpOfw+#CZ2s@*0|N9$421oLIJAoE3^Pt7tn
z_^mWTBSnzT?~0Q%Vg@MZ`l^YPXkjby!jG)0=>M`1-rTM=>y*CY=cV{NzxD{2Lmo1O
zZ6+T(V-UuxWhKT`HTLoSwRlm}R+O<My2sI;vBcX`3)&XR;m7r-uAB*eH(KqSG5?$C
z)G%XC;00EUlEUoZPl*UZ62K(wvhEO{&XNvDMoDiif5u;P8V_uHJ{beFUy#T62+v{5
zaf#5~f@?{{y@Yb5c!*=YN?Kh$#%oSli@_UIB2XQe281Gl5w6DW*AXTUm!uYY(~fN$
zue+>DD8EPW>{N*95J<~oV+5hy8hjGTi7}EnQsmJ?l5<`+1WnweYGUsy#=dsB91%cZ
zea-Ps?A`~nfkt=PeC~bT0-C?|aDtKS2c}>o!X&0%7#WLly72S;wu>M6Edb76$=@a#
zwMnm=3CIvZz6ry(o?E6x<n)7+{wlF1F)55R?=T2<F8~fz8>+;@1TJh_&)<+TWIA4D
zF#nBFikyU?E~YTCajZEo8rPk{5Z`vP{Nwl5Cu!_VgH?NiS8_SZe6DY+?7@tV-#AI#
z`&bKQbx<A`Auwic(to#nbK!;4T&+3~5mcuOTD`#q6X@QYS{~l7x5%7T>@n)MDH=(2
z!*DD)_tS|0l21vXq%05JlCm_T$T_rv@(^muGIm%gW71_kpS6zIP_X5LeI;Z;5peR_
zj9$dttNTpuYUlsJ&8WB#uetztDq@EzhaWmssX~XTc$dijk>5=0y7M&~DzYx<0##C6
z{M-p}l=7EUB)#-jdYg1UO@R*n45<{D%7Z-sj%_ubgK-ExvC~839Xe8keZ<BmByA4a
zGOeg*0}VW>szH!)icp)f5&Lbr$#<qkz`jrmoqHBv|3K6we$K2nn9a6Z2)f&E{>?Go
zvuMKz4{_)<$CCyw%n|(fP><Ju!oA+zH^lu4R^&w-L{)+oFe{@HUok79=YaHSGlAEL
z!L)x^fx=R)_nBrer1=hF+mseEIiup(q-b?=*m|JyPhJkUJIgwlLi$TK0C>Xng(upr
zTK_@H#~oF;a?aTXbCImWzp<$Q;`7AxpG%Dv{Q4~irLnXE@gRfj1ePM+T9SS!)Kj!b
z!M93UM#Pq^kRK9dF;E4R^470BZu6B%zfSOL`+yA&*Ts(gP)fyno(7uCj&tjo5wH@h
zzSEUq`nQ$9DF_O96vz$_J50_$V$$iib-8jo1Rqt}+0Ku0&#S34r70XX8z(Qhv3;a=
zjox3~zNMFJ<@4n{;xPRKu{XWI%_JUZnETamT28$2=yKg!T~r=GK?*r@R-Nl>0TFC<
zY0tkUupoSsYi>GGqKh!g7rg5Enl8k~Va&)7=h`Kz_60bWh8pv`c5KwaISy3N{QC?+
zK!k$`UXxD{US9u2b{^$I&B&dl=aF%FPl%I4UzedY71p_H61@xL|J8{!UKM{-B+_2v
zV{yxx;7{EhqibP$J&<`3icYYqpgeMponOvrQv~89pS`nyk#QdTT>Na@>2QyN^0W-M
z3|pfG+p`+~%ozXAUwL#o=KSoxRiPG`dNhZ^tFzZr>t!^-awzoXKZNsK{f^4d8KQd!
z>aJ~#(5ckMH$9>uQE2tw4%(Vk{r~eRz-XUo(;|O)1>ktna_!gU=0yzO1w=c^w5Q-W
z*8>L7w81a(*wxp7lnky;5rw>XtFeS0(YHgQ@bzLaSh|7{DjLQ9v|ExK=Hc^v*Iy26
z=F`APsAh=oKYD(|NgH~iyJZD<SZgB0J8F{9dg2e8zutnK(fAv~Cz+CnFam?^&ZDS8
z5=kO-F7F{vC#^Jl!hiVb*5)U(e)cc^_jbuF(%3KgoR-1FjKrq01bWG+%hWN$qdsq6
z&Z?6HV}^lNKxkMLW!<x>7o(%SNOlM{i;FzBU@Rv1lTy9@erUZ!tsw^$CpkB$pJvrh
zrf-+JF12NZ$YkzPVVCF2+^wMjB1h;`yRY-ph|6lOb@l8V(Ul2)@L+(y^sP5G1`#)v
zMY!J^OpcbRmZ^tMNUZ0O6nNGiE)wg#8SOH0RyP>k!6_Ye@Bjt%T=n_Q2<KQgYfj{_
zS_XqS1C@))D6(i#z8L-Dlsg=7F0byt8XWIAU{cS760N4x2Ra%qiAb4|1+9u!SJ!jb
zfgoKir191b;j)*6e9j!BXaRq!6B6}u&eghs>bqDgLKN6!2ZO!+Fq*BK?mlX1J9wK8
z-xHH~*Cf5=dv|`M)IJ+`xF1!L+^l;!jNbbU{mMa(>f_UQ1e|3#7}p2j0qf1Wo-BI&
z^s{+5kvm{r*ZjaZf>?_p)3fC9^1<Zz6Zto|lZ5j`Yvr|{`L}!_ihG!<m0*&=($Ikw
zvJ@{j$>d~)=J#hVs3?Ik*X}cH^fdHBjQec92ID7HDyj#*Qd%gAR}-%J9I;vA=mRl<
z367>=Hx!?_mO}_gxCR6h91IBw5O=8{vB&(aRbU>dY@GxB4aDrOl)eR6aEoNsDIhK8
zawQ*`P@F+!$5D59M{2mxu7>N^3OE{G0uH-;JLxKdVMZZA82h262!z|JqmygR?U3lz
zldWnAJMGcKss$35^3QucV_z{1wHX1&|N186$b%me!S7pO(Ph%;oa|P!VDR6X!8uyM
zF@jJoD$1sny)cNv)#-Sv%vVM|KwH~muLplJySm-ogm0^0TNNhA5;kLnWBvf1<k9ix
z0QEr$!}0qSBSExEh_aVD?JtT3?X*XU7YlXrGmI)U!QhzBWTCV$w;IJ)d~GZD=xrx3
z|IUj^9HsfiI?s+QQgzQT=mnT2hF)Ewo|sIi4yej9Fnk~eu8-{?3t-83RZ9dpP>L&R
zeH<M|G$^itOix=fVaJ_UVtV2Sk!)XgVD+5FGT$?`6U;~SCXAXDw@Wlv<24k81{d7-
zv$#qg6A00hOYZdd-aV~;HMljAD^~fFS-_I0{}N(v>Rcr-v}8uG=Hpn2VzJU{esGot
z=;C1*pu_b-mi?>pz5bTsb)RF>8RDWY+>5@>m4W2;!+VV6Ft$o5ezk}_0=URv_n#Rm
z5|+!@c84HCN;!6GWwnrJMAQD%ic-#P(*7-NEp7U?nEKhioC*L@goj$)7N>a6fS?+R
zn@OuLq!6_!Uj$%t$%^|9>ZI6!3gBXkn;fFj^xI14s2@}Ak7)1s+;42y`e*YE;KGkt
zJKs0l#VlY-5g9Lh4$nV}0ZSfO^j?ZG?Jjg2b17~ui-jo+x&$vBRLJAS+1-tTWY{(5
zqz^<jOx6mmh~IqrN}t_PaeVfrQ_=^#t2-D@KyB8Yb^PQG?S8)!+xbne9+`rBMng>=
zj9hO6!0Ai{TUbS2nKwf!eC?REn#A<__((_(f26mYnKm7=1>Rm-{hSnq#LIDCqH87p
zlDU$Ivlio()BDybC)EkEGJsKBT@Um}w=+3M+{<0fs!WydQwq-hZGKEXcQb??Ik4o7
zb!Q+vD9UA=nPn`F%<R?vC0KdX9){S1mPPqDqYdSs_=qDI|B@^aw;;hU=_!NZ?;)Gv
z2n{8@6|YS%8`=XG%o8N#;9FY>L&!(?2Vcu7Jnu4O{=NkL3`Xt4u`ut)If<AqCDPxB
zQ5Bg>bnG1U;wfo7mO|^#b@ODwN0Zxn!;QbSPSAO>EK-W!vZcgVJ)h7|78WoH@%M+7
zHg(L-qwR-icM$p?cpZTs$%gQ;nnj2@1$MJ0(^oo1g89k!d;OEt7LmB1{(BqsUHvG7
z+UiDz?f`;W@};KDO)aJ+d{A*z>*D+J5H=YY%DP7M_zAh(J}Lf1%q^5aFO(E^yg<3W
z2dqO|F*#4)Tt8LtWFdxxm>ruuY#M4EKJne2>0m7I{uIE7)H}IJ0qB?;WabwbE<Z2j
zw>rtiBo^cQ?8^C0%k%0b;pcnp-vZqO56f0VLM+?Es|N*hC+RSmE;80|FL%`U{XE)F
zfVU}sGyGpiV)_cUO=XutMvoy@qnWILCvv{~TkZT~Vb+t}fT;iI=cNkh$at{84z-Zl
zAqL5fAsh|KSH`=2f!kV48hPPaRQ@J2V7I=UgRqNrSjy|$G3u4pXL)sFsp;z<PpWc&
zSN#4ZmOa}_$HrSRI-L!Rsuv`*%6AK4az(zr-8J09^yAy1?E)s0j2Mm>L?Myai*;AA
ztZ_`OKg}yC(T7n^OlhKUD|3Xree#Luv?q4p3oy^?^;A1UZ}ibQ*k$+XHI3_$AL(!2
zRkP#E4o$$LRo=qQ)xd$@X4KbzbcgU}$lduHh+=2CGCK5Dz@!)QIHvk85o>Z1VW67L
zj*$bcIGBeP&bp4QNfjoIkj5p4L6_ZtL)U&M^ivxmFbVhS7qQ`)@OKU*j!)Z{s$>ke
z$C&9gw3_bd1sm)DAs88sh=<MXg`a24=x;oC#Qg1q2@#OZF|r8TELdQ1z;OKLM84be
z10=n5vbWly&TBHk6YG^mr&;#)bFMKzSTfv4RgWnCS)|chVIt>SiM6}-7E$Z#RPTMA
zc3(KHIEk3uLPY#M^%%X7e<y`XRSkIt;gia_O~rLF!=U~hdeDy=k05e6b$s;4@aKC2
zlwaijMjJbF4tdWje(ibd(7D-*OPBhGzWV#;gKkeqj$2%b-TZ^sK0N>uo|3r+m%l0l
z=aM>+=>7kniwea6JcY$xK$2B?wNCgE?P#m2g@#CyCw~`%=OP(lqhTr@558kAGn2^K
z#~(CMdplsTut!z5rpyrgqC!Ov;R>^Gc{){gcObt&-da@eXITr}5Bh%T>a6i%0(xOi
z8_PM5sH7G&8Wy4jwHIyP+8NutnB?!dao;8W>ns3IPBW*tcsnj`$dDpxg(gX$%YEnP
zlQofLk)nE{Uk_7FZwSDLPbM(#VB4~_OGH)qx~ua&ct&|Q(O;KF@y*&??x!Rvgs9Zo
zZIrm_WkevxP%wjjv7v<8(CT+x@j^UumkH)BWlhbgg(^vOi~!7e8qhC+?BhO>-$X=a
z)nBB2z9*7o{={B0r&FGGDBW}12}{p^3H`#G+hJBfxDzN}_iD&RK_3Sr9sWdEAT797
zn$|m_2Ol;r`A&mD$*oP+zpC{~fFu0gkR~y#hF@n!bzD>R@3sxV96qQl_gP*1=eTMv
z*!)3fNPpcs-w&Z>dN2bd?P;&yK>{CkIxflY&r2nz6|N8bH_%7ss)LSe(g?o>s@nt0
zIR@<qZ-tI0XzU$S1;hPyFcGLmL(LS01i7Tr_Wh*cf!6x%f{dWD=6;jkJ6wLE=%a<0
zb3zVksGNsiVpJ!mNR&$qvp6tiVVCdf_Z9#t(BA~0TYBAn@$Ob=)G2FN6;anX&dZj<
zU<(UqbwQ-&0Kar9#5isFnVi!Qsl|o=9Qot4`Te)B3*TV$9PKjtYDdN;hBXIgK3qiI
zOF!wk6EG}PYrcM8rpTtS$KpOGa^32^C4T1Xu{XJFYs7Zi%k0JiAEg41JbC>Z8RFk#
zvd{CUG!{jUbz1abl1wChnrbGR$^Bducex?vtkvN%Bv2~&n!FxLQI#G1tIi-D7k<}5
z1sdFEA!q%6s=M-VsMq#C#vmePcP!bLV^RnsG$?D<l$}f%%GM#vM4E|^EJ-tHq(L%D
z3?hRvLW8lZV;Hh8g=}#cOYhe?=Q_XZ)bH>2y55<;p6mL4uX&#Pxu3Z|&%J#L&2vuZ
zs<odP1m`34Ng>wYQJB`A&>YUo?2WDCAbW5HDw>R(NH6_ElRI=LeKu_`I+jOE<f!><
zv(d!)F+cYcvR@|bgsmm7iltRUH4$uMRn1NBb|^1&UKXZL>iVr9(Xv4YG|0)OEh%!;
z#<#I47GqgT10@HI;yZaaG}B_&TJyDa#?R%Fn|PY@*AU49Gx8$)w}F~!mIi>6={i~`
zYE{kv|3=|?q`|nc;M{uD=lBW;b0LJ~A=cwV-f8vU1oX)COM11NS_l!wPCK|cX+S_K
z;CMmo&8K@C4^AubGdf09tahfJ-+ZujxUE00m~*@d?_DYkb-07z&Gjg;FJ%UF=3Otn
zbHb(fqVmkSDzINGlE{ue+%P_l8C^;FPGc#iyvQDa^javUB?u7umtdPbR6&XmOjG*z
z(z=C=tBua&Wv+ml@pv1{x4RzkM?z(e?&H{220BvK-LsuHyz*3bI&BL_^D2Addd}H=
zai354^yi+urnzPP!+)6BvXmRT=SXons8l6XEP7@psk`(V%g>lsfx*!;u@e^VUXfaz
zHifSd8=dwvyhbIo7|%IC#D7K{;}{j!P5**)yg1DapMSe`>4Ez7Nbws>boQi=?4V~@
zT!mrO{qmCVw=w`DaXD7ujs;^kcD-4fPH1`(w$$%*k+=ErgYyJ8If)!$zG+|6$-%H#
z{+3j(xZSx`j6O6~R2SR}6=tyi!p1b_Nz&k;n%rC%zrp9DG>Zh{B7^HVJ(y(s*~o^R
z7ox|mn3xP%%bTdwzJlz}JVx@|@Bz@7wHfO7X-N?U(&cNB^d88tnUYu=0JB+ENJI#!
z)wPpByl_d*;p;)RZ?!jP0T**zT0c^x{B#Rg!ec4gW62^zsZG<A7(^~aw(sT+Y)s@k
zx^zk8H8D26#@@v<E8$jez~CsP@w7I*#Ehg1?39FYV!i5_@u^7gBR)~3LlOp3o_6{C
zh{}mu^uo<V{bNnz&Eqm*Eqf#zt3*Lvu?EDgXuMWwfOgf1K(})IZ_s`d?QX+Ve<Nst
zp#3c|(rrVoO_b*}GK1qzbf&AKLlBH*^aQ_Ao0S5hxe8pOS2Ks<sa+Kv`2@6Q#UHQt
z>nOUSmh6-k{f@g#rA&ok5Hm!H+2&;u-Rr`s-me%cE>*jFSQ3xbk_@32qHiy|f@}{)
zc)on#+sFH;vz9s7Pb}aZ3Lj~I{G#I=KZFD`Wn7soN|A6jcP0BpT(s^U2-*SJ>c-Xd
z6?@$p=B`0CB|9%i5jR;%IJ-9RI(1(Wk{5K|<ZQuTmPIVo_)Vl_d^cv*fU_%<$(P9k
zmFWiJfgn3wd_eV}=GKyEXlOiIs~>-$u8TWEkf_2z(xMFZIGGbIP`mlt9Xl}_MK@I^
z)Uc=MjFq}AR{;J|@84`8#|5u7`LzrWtGDPMIe9r$=<@JRq|=zf;U$$l-0Mr~#Th8p
zd~UL{+_R&M-QTZbcS%<7)Vw=b_Jo&;w|a~oPjzNFJ8rXkyWLV70@$@5pVANMYby%1
zgerc!8*TIimh6W!hk1#aRr8bp#(pT2LV<hDnXA>d4CfRsVg*jTDge`rhweu7Lfi+4
z^{-e;O8V?L^#XOBx*C6{ee>*R#p4-;bj90Z&4;$Jm@nXGGvPq0M_$VrqxX=pcr~w0
zpZh4XPb363osz-Xu-aoJiHh}pi*34CN!5&7mlWP^_uX00jrgjE%yi!_%Wm*fmX4RA
zX;J?Cj#Xil?R|+~@xd#(xxZ~Dh%U_}Io;Ilv-VW+(=qMk3YQ5myvxm9khe%EZ|v=6
z7u>FK;Vsd}35RRvXl>FBj;(cM8F-|~CiEsDT-es0IbdAsaWUG47qm?@r|F-jJ|uM|
z89$>CHWnET8j-EMd)1Mjxqcy?1j=dmtr*u3yCe|YLv$`bOVRcqMrC=Vud73q%-MFN
z&g-Rvbm{S%T8+HbPfEl9zPW7aS2K?)uu_7vcPqTl%hRb7r1T!Q>`LRk%)HQ#U}&o1
zku+GT=ofzz$%&knY%f+Qz(y|`;+xC5nlG+#qg<#C-d0WVvcnj#b!eZ)WT$YiBDuAB
zgA7ov-ci?^9x9`nz|bI%91eKP1p+yc5q^{sNd{VoCY`_s)JQhT7HjV-oc<7q5Vkoe
z3#Y34pK{wwI~E_U7S$M?Q^l=cIeQ^}?(|*mlfEC>yt$rQe8`RK;VNkh*G=ki;GvqL
zLd5B~)gxlUjD-URgWXWxu<G%_R8L4Ejl9)~3+O^7*Jh<B!Eiap#~e;-bT^ijCOdRc
z-@L2r;Tkja{PYxYwvk76Ice!Ctvv0nwt0AsN#PBk_n3<#qAM1)mPesf2QoZ(vjPL$
zmX3m4o=T6xckFN85b^3f%d;<QI=lK1d-Vc&y=c{qx+dOJ`?WSuwg1*1ou<O?fu8`q
zw@gEb*m;{hBBzZ8BifTyg5P{;@oT9mRiYK{`%cah4D4wK1?z`l#)_(*M=?a`?R~6d
ztH^d^Zc<CEd;QeK*n|{kmX%)}LPb`PNnXZ#5fW!y0ZTnn1f-8dCH5wL^icb1x{sFs
za>o3PGMDY7EFrmXbU{FXSh^m8i?m$5Ob7zC%fVri1%eqDa;W)#`fmPy{9o_>R|XY@
zAY?^zNxD<P(0c676}PvIRePw8g!yuNNt@)^vp+1zpjrTwMOS_<FF=CE_O*qfI6km$
zmH+-^p2NrHAZMGBYnKi;ly=&XNw7rMK+mc5tb3P4htyltDY9hNNV;*9x8G|W`B6rR
zCM+x_1_jw56*TT@<GHJu5K4Y2v2IZsLdUXNZP&YZ*>@EJ!7%YT<ow<5b~cXp6Jn4O
zDlGc#DPpReq~76R=$(IH{a-@E{338dKX+oW>Gp<pm4OIFDLJ99)PfJBl54$92am_B
zwxSO1yo(k4cElFSk=$cN5oBh21kOoO-)Uv0xl==yfofvA4AhS^ZLJ4mjl$V3yJKiJ
z$#S6TVdHB+CY4Z2os%-uX-r@=hLU)b%{HC7#QIXc+aLiaJHXDQsqMb!<M)(k_7?i<
z;_-jmT2W>ok7o169?aZtl+IOS^lmf;<i`rFFKoS4XdOfF9pFIS7vA=~)X+VKo1|&2
zv~tngU>8Dft-&_+{c=hHvc5iE5j)d|M<Cnz3HPXuUzAQ|s=yC;8lMs8_ZhEsU}im{
zX+9S)N}f**v5O(k|8mVN=-E&D22la3gxMAXlvs(aS=JcEt<iW{7OjWUhvhuX;8Gg%
zUPp_>EooWyqOA9JJG{&!to&Ye*YQCnayn|6(^d1f)+ls?pWyW{OSER=;Gxf|juHKn
z{_*h1&1sNJS5tjytLq_8`I9d7Bl%H<YITOQor{0n2>!f={Vk14Z0#&i!b`Urm9gfH
zT#Lk)JgQ(4*lMCslcr63z&udGb=V7zQ4u538VmdnsKupUy8<sG#VuQm?4s3L4_-}L
zdNcrWTDa5|HSd@!+81ym*Gd9l{DQ|wPx7fRa*QlT)56rx;HO&>?qz1bmjCx51?E6;
zW(m!g3e_V5Bq1&9lN{%<Mo6|ByLtrx%leYCZG7O2A{QF)yLf3`Zvz}_1t6ye=ZwI|
zK$Tp$j^hW%(^#WNc@4YDMPBz62W%pCW`s|vN-_x3@oo&EHM^e<x5c@t#MkF3tmunD
z9anS)civgDdAb`uKX0ays^WprNY>&)V=DrsGMM<>K_ZZ06z&U0Yre_Ff*ejNM{v7V
zN{#H62FmlkPUggsf<6I#u76bjM}o_&!l4V^I=s*^2f};t<5!|S{|exaln@zJDW9n0
z1z@M*7oslnTrWxyjWM%sUuBp8i(fn46V*88V!8&aMo#ej5!H*{4M1z2c{9Da@%mmS
zd4|0M{NssGN(E!zQ`oH@$yE;Jb3X-qwt$hBaB)5KrJbeVASqj#VfeB{93TYLwMdL0
zJEzB@PyLEE)(P3&eH+`A&iKc7{f~&cxGt<lGE-g)M6SB3DnKdB&Q`H0jNl0ks)NZi
z=8oUQ2&BG!i#`e49qS1O%Qf7S+FIazxU&jy8c%7`R$ip}A1IF#;rQ&K8b{x#(bd*N
zKK)7I<1P~TYBoC+T$SbMyieuepw_)sE&g~bUim#OIJi6984Icw_hdum`josJwXBVq
zRSs*?s{0gjXri}@I*6-70yKl)gtj{myKxd}pOt2PY;t{mXOz4cJ(x;bOxybZ76n0l
z3P>x8v|>3v^8hxHr=rd7ps>@J<sxoBMvvFw_blhxS{B>jC%($8EryWPMX?X1-(5Hr
ztaE6CZDH_9$T(U3w<Fb)!5U8;(0o2PG2g34i})xqW%ZzCR;N%=i79@Y7i4Iv{#)lS
z2lNZShHy88;y4RQo%ISZp;G*l%ui&5y6jI%PY{>eLYbvI65i*eJH_x5(=|O<0;fR^
zMj`2r4|q<)at*}V)$?qmI*)&=7N;c5+NS#EddUN+s+uMeKyzY)LQcxemW6)#2;1dY
zkPuaa_N}hE!u=bNYqTEJx!U0$=by%8qAC}|E>91ySfQuafN1YO8@;czm{viM(nXg(
zHpU|9{1nHBtWWw=<xReeqkt{9KSa0|GP5!TLlZ;%lVohjB=;3|=3?5-cC6^DP9IM3
zUVwCT2X+giNAc-7ZyYnk;Gs-2&E2o<5YpUa?KK+w{c*C}W3Wy9d;@!N$It&cm}DiX
zPgmh(NE2(!$DftN79*o<8}xWY<_abBPmJ*IssC#o|HA`=a)Hh7LV^*hrttn55b!ZK
Lwmw^G<azr)_FOTH

literal 0
HcmV?d00001

diff --git a/doc/source/images/rpc/flow1.svg b/doc/source/images/rpc/flow1.svg
new file mode 100644
index 000000000..6d8f7e280
--- /dev/null
+++ b/doc/source/images/rpc/flow1.svg
@@ -0,0 +1,617 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Generated by Microsoft Visio 11.0, SVG Export, v1.0 flow1.svg Page-1 -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
+		xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="10.4093in" height="3.59931in"
+		viewBox="0 0 749.472 259.15" xml:space="preserve" color-interpolation-filters="sRGB" class="st23">
+	<v:documentProperties v:langID="2057" v:metric="true" v:viewMarkup="false"/>
+
+	<style type="text/css">
+	<![CDATA[
+		.st1 {fill:#e8eef7;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st2 {fill:#ff00ff;fill-opacity:0;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0;stroke-width:0.72}
+		.st3 {fill:url(#grad31-9);stroke:#ffffff;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72}
+		.st4 {fill:url(#grad30-15);stroke:#ffffff;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72}
+		.st5 {fill:url(#grad32-19);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72}
+		.st6 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+		.st7 {fill:#ff0000;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st8 {fill:#000000;font-family:Calibri;font-size:1.00001em}
+		.st9 {font-size:1em}
+		.st10 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st11 {marker-start:url(#mrkr13-65);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st12 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.22935779816514}
+		.st13 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st14 {marker-end:url(#mrkr13-77);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st15 {marker-end:url(#mrkr1-91);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st16 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st17 {fill:none;stroke:#000000;stroke-dasharray:3.6,2.16;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st18 {fill:#d8d8d8;stroke:#c00000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+		.st19 {fill:#000000;font-family:Calibri;font-size:1.5em}
+		.st20 {marker-end:url(#mrkr13-190);stroke:#ff0000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.25}
+		.st21 {fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-opacity:1;stroke-width:0.47169811320755}
+		.st22 {marker-start:url(#mrkr13-205);stroke:#ff0000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.25}
+		.st23 {fill:none;fill-rule:evenodd;font-size:12;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+	]]>
+	</style>
+
+	<defs id="Patterns_And_Gradients">
+		<pattern id="grad31-9" v:fillPattern="31" v:foreground="#ffffff" v:background="#a7a7a7" x="0" y="0" width="1" height="1"
+				patternContentUnits="objectBoundingBox">
+			<path d="M 0 0 L 0 1 L 1 1 z" style="fill:url(#grad28-10)"/>
+			<path d="M 0 0 L 1 0 L 1 1 z" style="fill:url(#grad25-11)"/>
+		</pattern>
+		<linearGradient id="grad28-10" v:fillPattern="31" v:foreground="#ffffff" v:background="#a7a7a7" x1="0" y1="0" x2="0" y2="1">
+			<stop offset="0" style="stop-color:#ffffff;stop-opacity:1"/>
+			<stop offset="1" style="stop-color:#a7a7a7;stop-opacity:1"/>
+		</linearGradient>
+		<linearGradient id="grad25-11" v:fillPattern="31" v:foreground="#ffffff" v:background="#a7a7a7" x1="0" y1="0" x2="1" y2="0">
+			<stop offset="0" style="stop-color:#ffffff;stop-opacity:1"/>
+			<stop offset="1" style="stop-color:#a7a7a7;stop-opacity:1"/>
+		</linearGradient>
+		<linearGradient id="grad30-15" v:fillPattern="30" v:foreground="#ffffff" v:background="#dfdfdf" x1="0" y1="1" x2="0" y2="0">
+			<stop offset="0" style="stop-color:#ffffff;stop-opacity:1"/>
+			<stop offset="1" style="stop-color:#dfdfdf;stop-opacity:1"/>
+		</linearGradient>
+		<pattern id="grad32-19" v:fillPattern="32" v:foreground="#ffffff" v:background="#c0c0c0" x="0" y="0" width="1" height="1"
+				patternContentUnits="objectBoundingBox">
+			<path d="M 0 1 L 0 0 L 1 0 z" style="fill:url(#grad27-20)"/>
+			<path d="M 0 1 L 1 1 L 1 0 z" style="fill:url(#grad28-21)"/>
+		</pattern>
+		<linearGradient id="grad27-20" v:fillPattern="32" v:foreground="#ffffff" v:background="#c0c0c0" x1="1" y1="0" x2="0" y2="0">
+			<stop offset="0" style="stop-color:#ffffff;stop-opacity:1"/>
+			<stop offset="1" style="stop-color:#c0c0c0;stop-opacity:1"/>
+		</linearGradient>
+		<linearGradient id="grad28-21" v:fillPattern="32" v:foreground="#ffffff" v:background="#c0c0c0" x1="0" y1="0" x2="0" y2="1">
+			<stop offset="0" style="stop-color:#ffffff;stop-opacity:1"/>
+			<stop offset="1" style="stop-color:#c0c0c0;stop-opacity:1"/>
+		</linearGradient>
+	</defs>
+	<defs id="Markers">
+		<g id="lend13">
+			<path d="M 3 1 L 0 0 L 3 -1 L 3 1 " style="stroke:none"/>
+		</g>
+		<marker id="mrkr13-65" class="st12" v:arrowType="13" v:arrowSize="2" v:setback="12.6" refX="12.6" orient="auto"
+				markerUnits="strokeWidth">
+			<use xlink:href="#lend13" transform="scale(4.36) "/>
+		</marker>
+		<marker id="mrkr13-77" class="st12" v:arrowType="13" v:arrowSize="2" v:setback="13.08" refX="-13.08" orient="auto"
+				markerUnits="strokeWidth">
+			<use xlink:href="#lend13" transform="scale(-4.36,-4.36) "/>
+		</marker>
+		<g id="lend1">
+			<path d="M 1 -1 L 0 0 L 1 1 " style="stroke-linecap:round;stroke-linejoin:round;fill:none"/>
+		</g>
+		<marker id="mrkr1-91" class="st12" v:arrowType="1" v:arrowSize="2" orient="auto" markerUnits="strokeWidth">
+			<use xlink:href="#lend1" transform="scale(-4.36,-4.36) "/>
+		</marker>
+		<marker id="mrkr13-190" class="st21" v:arrowType="13" v:arrowSize="2" v:setback="6.36" refX="-6.36" orient="auto"
+				markerUnits="strokeWidth">
+			<use xlink:href="#lend13" transform="scale(-2.12,-2.12) "/>
+		</marker>
+		<marker id="mrkr13-205" class="st21" v:arrowType="13" v:arrowSize="2" v:setback="6.2" refX="6.2" orient="auto"
+				markerUnits="strokeWidth">
+			<use xlink:href="#lend13" transform="scale(2.12) "/>
+		</marker>
+	</defs>
+	<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
+		<title>Page-1</title>
+		<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
+				v:shadowOffsetY="-8.50394"/>
+		<g id="shape1-1" v:mID="1" v:groupContext="shape" transform="translate(247.525,-23.6348)">
+			<title>Rounded rectangle</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<path d="M297.64 259.15 A14.1733 14.1733 -180 0 0 311.81 244.98 L311.81 38.05 A14.1733 14.1733 -180 0 0 297.64 23.87
+						 L14.17 23.87 A14.1733 14.1733 -180 0 0 -0 38.05 L0 244.98 A14.1733 14.1733 -180 0 0 14.17 259.15 L297.64
+						 259.15 Z" class="st1"/>
+		</g>
+		<g id="group2-3" transform="translate(304.218,-162.532)" v:mID="2" v:groupContext="group">
+			<v:custProps>
+				<v:cp v:nameU="ShapeClass" v:lbl="ShapeClass" v:type="0" v:invis="true" v:ask="false" v:langID="1033"
+						v:val="VT4(Equipment)"/>
+				<v:cp v:nameU="ShapeType" v:lbl="ShapeType" v:type="0" v:invis="true" v:ask="false" v:langID="1033"
+						v:val="VT4(Device)"/>
+				<v:cp v:nameU="SubShapeType" v:lbl="SubShapeType" v:type="0" v:invis="true" v:ask="false" v:langID="1033"
+						v:val="VT4(Switch)"/>
+				<v:cp v:nameU="Manufacturer" v:lbl="Manufacturer" v:type="0" v:sortKey="Equipment" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="ProductNumber" v:lbl="Product Number" v:type="0" v:sortKey="Equipment" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="PartNumber" v:lbl="Part Number" v:type="0" v:sortKey="Equipment" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="ProductDescription" v:lbl="Product Description" v:type="0" v:sortKey="Equipment" v:invis="false"
+						v:ask="false" v:langID="1033"/>
+				<v:cp v:nameU="AssetNumber" v:lbl="Asset Number" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="SerialNumber" v:lbl="Serial Number" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="Location" v:lbl="Location" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="Building" v:lbl="Building" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="Room" v:lbl="Room" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false" v:langID="1033"/>
+				<v:cp v:nameU="NetworkName" v:lbl="Network Name" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="IPAddress" v:lbl="IP Address" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="SubnetMask" v:lbl="Subnet Mask" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="AdminInterface" v:lbl="Administrative Interface" v:type="0" v:sortKey="Network" v:invis="false"
+						v:ask="false" v:langID="1033"/>
+				<v:cp v:nameU="NumberOfPorts" v:lbl="Number of Ports" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="MACAddress" v:lbl="MAC Address" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="CommunityString" v:lbl="Community String" v:type="0" v:sortKey="Network" v:invis="false"
+						v:ask="false" v:langID="1033"/>
+				<v:cp v:nameU="NetworkDescription" v:lbl="Network Description" v:type="0" v:sortKey="Network" v:invis="false"
+						v:ask="false" v:langID="1033"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="HasText" v:val="VT0(1):5"/>
+				<v:ud v:nameU="ShapeClass" v:val="VT0(5):26"/>
+				<v:ud v:nameU="ShapeType" v:val="VT0(8):26"/>
+				<v:ud v:nameU="SubShapeType" v:val="VT0(66):26"/>
+				<v:ud v:nameU="visLegendShape" v:val="VT0(2):26"/>
+				<v:ud v:nameU="SolSH" v:val="VT14({BF0433D9-CD73-4EB5-8390-8653BE590246}):41"/>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<title>ATM switch</title>
+			<desc>name: control_exchange (type: topic)</desc>
+			<g id="shape3-4" v:mID="3" v:groupContext="shape" transform="translate(-0.359055,0)">
+				<title>Sheet.3</title>
+				<path d="M28.35 259.15 L42.52 250.97 L42.52 218.82 L14.17 202.46 L0 210.64 L0 242.78 L28.35 259.15 Z" class="st2"/>
+			</g>
+			<g id="shape4-6" v:mID="4" v:groupContext="shape" transform="translate(28.1575,-0.0944882)">
+				<title>Sheet.4</title>
+				<path d="M0 227.01 L0 259.15 L14.17 250.97 L14.17 218.82 L0 227.01 Z" class="st3"/>
+			</g>
+			<g id="shape5-12" v:mID="5" v:groupContext="shape" transform="translate(-0.188976,-32.2386)">
+				<title>Sheet.5</title>
+				<path d="M0 242.78 L28.35 259.15 L42.52 250.97 L14.17 234.6 L0 242.78 Z" class="st4"/>
+			</g>
+			<g id="shape6-16" v:mID="6" v:groupContext="shape" transform="translate(-0.188976,-0.0944882)">
+				<title>Sheet.6</title>
+				<path d="M0 242.78 L28.35 259.15 L28.35 227.01 L0 210.64 L0 242.78 Z" class="st5"/>
+			</g>
+			<g id="shape7-22" v:mID="7" v:groupContext="shape" transform="translate(-0.188976,-0.0944882)">
+				<title>Sheet.7</title>
+				<path d="M0 210.64 L0 242.78 L28.35 259.15 L42.52 250.97 L42.52 218.82 L14.17 202.46 L0 210.64" class="st6"/>
+			</g>
+			<g id="shape8-25" v:mID="8" v:groupContext="shape" transform="translate(1.88976,-6.80315)">
+				<title>Sheet.8</title>
+				<path d="M4.05 223.81 L0 226.12 L4.05 233.09 L4.05 229.38 L7.09 231.13 L11.14 240.9 L7.09 245.98 L4.05 244.23 L4.05
+							 240.52 L0 242.82 L4.05 249.8 L4.05 246.09 A59.6713 55.5985 -178.23 0 0 8.1 248.42 L12.15 243.34 L16.2
+							 253.1 L20.25 255.44 L20.25 259.15 L24.3 256.85 L20.25 249.87 L20.25 253.58 L17.21 251.83 L13.16 242.07
+							 L17.21 236.98 L20.25 238.73 L20.25 242.45 L24.3 240.14 L20.25 233.16 L20.25 236.88 L16.2 234.54 A89.6201
+							 83.5031 -177.36 0 0 12.15 239.63 L8.1 229.86 L4.05 227.53 L4.05 223.81 Z" class="st7"/>
+			</g>
+			<g id="shape2-27" v:mID="2" v:groupContext="groupContent">
+				<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+				<v:textRect cx="21.2598" cy="277.552" width="131.44" height="36.8038"/>
+				<text x="-39.1" y="273.95" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>name: control_exchange<v:newlineChar/><tspan
+							x="-8.44" dy="1.2em" class="st9">(</tspan>type: topic)</text>			</g>
+		</g>
+		<g id="group9-30" transform="translate(465.793,-205.052)" v:mID="9" v:groupContext="group">
+			<title>Sheet.9</title>
+			<g id="shape10-31" v:mID="10" v:groupContext="shape">
+				<title>Rectangle</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape11-33" v:mID="11" v:groupContext="shape" transform="translate(8.50394,-5.68434E-014)">
+				<title>Rectangle.10</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape12-35" v:mID="12" v:groupContext="shape" transform="translate(17.0079,-5.68434E-014)">
+				<title>Rectangle.11</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape13-37" v:mID="13" v:groupContext="shape" transform="translate(25.5118,-5.68434E-014)">
+				<title>Rectangle.12</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape14-39" v:mID="14" v:groupContext="shape" transform="translate(34.0157,-5.68434E-014)">
+				<title>Rectangle.13</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape15-41" v:mID="15" v:groupContext="shape" transform="translate(42.5197,-5.68434E-014)">
+				<title>Rectangle.14</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape16-43" v:mID="16" v:groupContext="shape" transform="translate(51.0236,-5.68434E-014)">
+				<title>Rectangle.15</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+		</g>
+		<g id="group17-45" transform="translate(465.793,-139.855)" v:mID="17" v:groupContext="group">
+			<title>Sheet.17</title>
+			<g id="shape18-46" v:mID="18" v:groupContext="shape">
+				<title>Rectangle</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape19-48" v:mID="19" v:groupContext="shape" transform="translate(8.50394,-5.68434E-014)">
+				<title>Rectangle.10</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape20-50" v:mID="20" v:groupContext="shape" transform="translate(17.0079,-5.68434E-014)">
+				<title>Rectangle.11</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape21-52" v:mID="21" v:groupContext="shape" transform="translate(25.5118,-5.68434E-014)">
+				<title>Rectangle.12</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape22-54" v:mID="22" v:groupContext="shape" transform="translate(34.0157,-5.68434E-014)">
+				<title>Rectangle.13</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape23-56" v:mID="23" v:groupContext="shape" transform="translate(42.5197,-5.68434E-014)">
+				<title>Rectangle.14</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape24-58" v:mID="24" v:groupContext="shape" transform="translate(51.0236,-5.68434E-014)">
+				<title>Rectangle.15</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+		</g>
+		<g id="shape25-60" v:mID="25" v:groupContext="shape" transform="translate(360.911,-193.714)">
+			<title>Sheet.25</title>
+			<path d="M9.45 259.15 L9.81 259.15 L56.69 259.15 L56.69 230.8 L96.38 230.8 L104.88 230.8" class="st11"/>
+		</g>
+		<g id="shape26-66" v:mID="26" v:groupContext="shape" transform="translate(445.95,-189.462)">
+			<title>Sheet.26</title>
+			<desc>key: topic</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="49.6063" cy="252.064" width="99.22" height="14.1732"/>
+			<rect x="0" y="244.977" width="99.2126" height="14.1732" class="st13"/>
+			<text x="25.98" y="255.66" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>key: topic</text>		</g>
+		<g id="shape27-69" v:mID="27" v:groupContext="shape" transform="translate(454.454,-119.855)">
+			<title>Sheet.27</title>
+			<desc>key: topic.host</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="41.1024" cy="249.15" width="82.21" height="20"/>
+			<rect x="0" y="239.15" width="82.2047" height="20" class="st13"/>
+			<text x="5.28" y="252.75" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>key: topic.host</text>		</g>
+		<g id="shape28-72" v:mID="28" v:groupContext="shape" transform="translate(360.911,-156.863)">
+			<title>Sheet.28</title>
+			<path d="M96.38 259.15 L56.69 259.15 L56.69 230.8 L9.81 230.8" class="st14"/>
+		</g>
+		<g id="shape29-78" v:mID="29" v:groupContext="shape" transform="translate(630.202,-200.8)">
+			<title>Rectangle</title>
+			<desc>Topic Consumer</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="237.891" width="85.04" height="42.5197"/>
+			<rect x="0" y="216.631" width="85.0394" height="42.5197" class="st1"/>
+			<text x="29.37" y="234.29" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Topic <tspan
+						x="17.63" dy="1.2em" class="st9">Consumer</tspan></text>		</g>
+		<g id="shape30-82" v:mID="30" v:groupContext="shape" transform="translate(630.202,-135.603)">
+			<title>Rectangle.30</title>
+			<desc>Topic Consumer</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="237.891" width="85.04" height="42.5197"/>
+			<rect x="0" y="216.631" width="85.0394" height="42.5197" class="st1"/>
+			<text x="29.37" y="234.29" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Topic <tspan
+						x="17.63" dy="1.2em" class="st9">Consumer</tspan></text>		</g>
+		<g id="shape31-86" v:mID="31" v:groupContext="shape" transform="translate(525.32,-222.06)">
+			<title>Sheet.31</title>
+			<path d="M0 259.15 L104.88 259.15" class="st15"/>
+		</g>
+		<g id="shape32-92" v:mID="32" v:groupContext="shape" transform="translate(525.32,-156.863)">
+			<title>Sheet.32</title>
+			<path d="M0 259.15 L104.88 259.15" class="st15"/>
+		</g>
+		<g id="shape33-97" v:mID="33" v:groupContext="shape" transform="translate(457.289,-156.863)">
+			<title>Sheet.33</title>
+			<path d="M0 259.15 L8.5 259.15" class="st16"/>
+		</g>
+		<g id="shape34-100" v:mID="34" v:groupContext="shape" transform="translate(616.029,-51.9812)">
+			<title>Rectangle.34</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<path d="M0 259.15 L113.39 259.15 L113.39 57.89 L0 57.89 L0 259.15 Z" class="st17"/>
+		</g>
+		<g id="shape35-102" v:mID="35" v:groupContext="shape" transform="translate(630.202,-63.3198)">
+			<title>Rectangle.35</title>
+			<desc>Direct Publisher</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="237.891" width="85.04" height="42.5197"/>
+			<rect x="0" y="216.631" width="85.0394" height="42.5197" class="st18"/>
+			<text x="27.83" y="234.29" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Direct<v:newlineChar/><tspan
+						x="19.79" dy="1.2em" class="st9">Publisher</tspan></text>		</g>
+		<g id="shape36-106" v:mID="36" v:groupContext="shape" transform="translate(596.722,-24.9734)">
+			<title>Sheet.36</title>
+			<desc>Worker (e.g. compute)</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="76" cy="249.15" width="152" height="20"/>
+			<rect x="0" y="239.15" width="152" height="20" class="st13"/>
+			<text x="57.6" y="245.55" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Worker<v:newlineChar/><tspan
+						x="40.37" dy="1.2em" class="st9">(</tspan>e.g. compute)</text>		</g>
+		<g id="group37-110" transform="translate(472.879,-60.4852)" v:mID="37" v:groupContext="group">
+			<v:custProps>
+				<v:cp v:nameU="ShapeClass" v:lbl="ShapeClass" v:type="0" v:invis="true" v:ask="false" v:langID="1033"
+						v:val="VT4(Equipment)"/>
+				<v:cp v:nameU="ShapeType" v:lbl="ShapeType" v:type="0" v:invis="true" v:ask="false" v:langID="1033"
+						v:val="VT4(Device)"/>
+				<v:cp v:nameU="SubShapeType" v:lbl="SubShapeType" v:type="0" v:invis="true" v:ask="false" v:langID="1033"
+						v:val="VT4(Switch)"/>
+				<v:cp v:nameU="Manufacturer" v:lbl="Manufacturer" v:type="0" v:sortKey="Equipment" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="ProductNumber" v:lbl="Product Number" v:type="0" v:sortKey="Equipment" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="PartNumber" v:lbl="Part Number" v:type="0" v:sortKey="Equipment" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="ProductDescription" v:lbl="Product Description" v:type="0" v:sortKey="Equipment" v:invis="false"
+						v:ask="false" v:langID="1033"/>
+				<v:cp v:nameU="AssetNumber" v:lbl="Asset Number" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="SerialNumber" v:lbl="Serial Number" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="Location" v:lbl="Location" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="Building" v:lbl="Building" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="Room" v:lbl="Room" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false" v:langID="1033"/>
+				<v:cp v:nameU="NetworkName" v:lbl="Network Name" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="IPAddress" v:lbl="IP Address" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="SubnetMask" v:lbl="Subnet Mask" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="AdminInterface" v:lbl="Administrative Interface" v:type="0" v:sortKey="Network" v:invis="false"
+						v:ask="false" v:langID="1033"/>
+				<v:cp v:nameU="NumberOfPorts" v:lbl="Number of Ports" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="MACAddress" v:lbl="MAC Address" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="CommunityString" v:lbl="Community String" v:type="0" v:sortKey="Network" v:invis="false"
+						v:ask="false" v:langID="1033"/>
+				<v:cp v:nameU="NetworkDescription" v:lbl="Network Description" v:type="0" v:sortKey="Network" v:invis="false"
+						v:ask="false" v:langID="1033"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="HasText" v:val="VT0(1):5"/>
+				<v:ud v:nameU="ShapeClass" v:val="VT0(5):26"/>
+				<v:ud v:nameU="ShapeType" v:val="VT0(8):26"/>
+				<v:ud v:nameU="SubShapeType" v:val="VT0(66):26"/>
+				<v:ud v:nameU="visLegendShape" v:val="VT0(2):26"/>
+				<v:ud v:nameU="SolSH" v:val="VT14({BF0433D9-CD73-4EB5-8390-8653BE590246}):41"/>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<title>ATM switch.37</title>
+			<desc>name: msg_id (type: direct)</desc>
+			<g id="shape38-111" v:mID="38" v:groupContext="shape" transform="translate(-0.359055,0)">
+				<title>Sheet.38</title>
+				<path d="M28.35 259.15 L42.52 250.97 L42.52 218.82 L14.17 202.46 L0 210.64 L0 242.78 L28.35 259.15 Z" class="st2"/>
+			</g>
+			<g id="shape39-113" v:mID="39" v:groupContext="shape" transform="translate(28.1575,-0.0944882)">
+				<title>Sheet.39</title>
+				<path d="M0 227.01 L0 259.15 L14.17 250.97 L14.17 218.82 L0 227.01 Z" class="st3"/>
+			</g>
+			<g id="shape40-116" v:mID="40" v:groupContext="shape" transform="translate(-0.188976,-32.2386)">
+				<title>Sheet.40</title>
+				<path d="M0 242.78 L28.35 259.15 L42.52 250.97 L14.17 234.6 L0 242.78 Z" class="st4"/>
+			</g>
+			<g id="shape41-119" v:mID="41" v:groupContext="shape" transform="translate(-0.188976,-0.0944882)">
+				<title>Sheet.41</title>
+				<path d="M0 242.78 L28.35 259.15 L28.35 227.01 L0 210.64 L0 242.78 Z" class="st5"/>
+			</g>
+			<g id="shape42-122" v:mID="42" v:groupContext="shape" transform="translate(-0.188976,-0.0944882)">
+				<title>Sheet.42</title>
+				<path d="M0 210.64 L0 242.78 L28.35 259.15 L42.52 250.97 L42.52 218.82 L14.17 202.46 L0 210.64" class="st6"/>
+			</g>
+			<g id="shape43-125" v:mID="43" v:groupContext="shape" transform="translate(1.88976,-6.80315)">
+				<title>Sheet.43</title>
+				<path d="M4.05 223.81 L0 226.12 L4.05 233.09 L4.05 229.38 L7.09 231.13 L11.14 240.9 L7.09 245.98 L4.05 244.23 L4.05
+							 240.52 L0 242.82 L4.05 249.8 L4.05 246.09 A59.6713 55.5985 -178.23 0 0 8.1 248.42 L12.15 243.34 L16.2
+							 253.1 L20.25 255.44 L20.25 259.15 L24.3 256.85 L20.25 249.87 L20.25 253.58 L17.21 251.83 L13.16 242.07
+							 L17.21 236.98 L20.25 238.73 L20.25 242.45 L24.3 240.14 L20.25 233.16 L20.25 236.88 L16.2 234.54 A89.6201
+							 83.5031 -177.36 0 0 12.15 239.63 L8.1 229.86 L4.05 227.53 L4.05 223.81 Z" class="st7"/>
+			</g>
+			<g id="shape37-127" v:mID="37" v:groupContext="groupContent">
+				<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+				<v:textRect cx="21.2598" cy="277.552" width="79.22" height="36.8038"/>
+				<text x="-12.99" y="273.95" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>name: msg_id<v:newlineChar/><tspan
+							x="-10.36" dy="1.2em" class="st9">(</tspan>type: direct)</text>			</g>
+		</g>
+		<g id="group44-130" transform="translate(298.549,-68.9891)" v:mID="44" v:groupContext="group">
+			<title>Sheet.44</title>
+			<g id="shape45-131" v:mID="45" v:groupContext="shape">
+				<title>Rectangle</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape46-133" v:mID="46" v:groupContext="shape" transform="translate(8.50394,-5.68434E-014)">
+				<title>Rectangle.10</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape47-135" v:mID="47" v:groupContext="shape" transform="translate(17.0079,-5.68434E-014)">
+				<title>Rectangle.11</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape48-137" v:mID="48" v:groupContext="shape" transform="translate(25.5118,-5.68434E-014)">
+				<title>Rectangle.12</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape49-139" v:mID="49" v:groupContext="shape" transform="translate(34.0157,-5.68434E-014)">
+				<title>Rectangle.13</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape50-141" v:mID="50" v:groupContext="shape" transform="translate(42.5197,-5.68434E-014)">
+				<title>Rectangle.14</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape51-143" v:mID="51" v:groupContext="shape" transform="translate(51.0236,-5.68434E-014)">
+				<title>Rectangle.15</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+		</g>
+		<g id="shape52-145" v:mID="52" v:groupContext="shape" transform="translate(278.706,-54.8159)">
+			<title>Sheet.52</title>
+			<desc>key: msg_id</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="49.6063" cy="252.064" width="99.22" height="14.1732"/>
+			<rect x="0" y="244.977" width="99.2126" height="14.1732" class="st13"/>
+			<text x="20.73" y="255.66" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>key: msg_id</text>		</g>
+		<g id="shape53-148" v:mID="53" v:groupContext="shape" transform="translate(358.076,-85.997)">
+			<title>Sheet.53</title>
+			<path d="M0 259.15 L97.91 259.15" class="st14"/>
+		</g>
+		<g id="shape54-153" v:mID="54" v:groupContext="shape" transform="translate(630.202,433.721) rotate(180)">
+			<title>Sheet.54</title>
+			<path d="M0 259.15 L104.88 259.15" class="st15"/>
+		</g>
+		<g id="shape55-158" v:mID="55" v:groupContext="shape" transform="translate(82.5801,-51.9812)">
+			<title>Rectangle.57</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<path d="M0 259.15 L113.39 259.15 L113.39 80.57 L0 80.57 L0 259.15 Z" class="st17"/>
+		</g>
+		<g id="shape56-160" v:mID="56" v:groupContext="shape" transform="translate(96.7534,-64.7371)">
+			<title>Rectangle.56</title>
+			<desc>Direct Consumer</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="237.891" width="85.04" height="42.5197"/>
+			<rect x="0" y="216.631" width="85.0394" height="42.5197" class="st18"/>
+			<text x="27.83" y="234.29" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Direct<v:newlineChar/><tspan
+						x="17.63" dy="1.2em" class="st9">Consumer</tspan></text>		</g>
+		<g id="shape57-164" v:mID="57" v:groupContext="shape" transform="translate(63.273,-26.4694)">
+			<title>Sheet.57</title>
+			<desc>Invoker (e.g. api)</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="76" cy="249.15" width="152" height="20"/>
+			<rect x="0" y="239.15" width="152" height="20" class="st13"/>
+			<text x="57.66" y="245.55" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Invoker<v:newlineChar/><tspan
+						x="54.76" dy="1.2em" class="st9">(</tspan>e.g. api)</text>		</g>
+		<g id="shape58-168" v:mID="58" v:groupContext="shape" transform="translate(96.7534,-175.288)">
+			<title>Rectangle.55</title>
+			<desc>Topic Publisher</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="237.891" width="85.04" height="42.5197"/>
+			<rect x="0" y="216.631" width="85.0394" height="42.5197" class="st18"/>
+			<text x="29.37" y="234.29" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Topic <v:newlineChar/><tspan
+						x="19.79" dy="1.2em" class="st9">Publisher</tspan></text>		</g>
+		<g id="shape59-172" v:mID="59" v:groupContext="shape" transform="translate(181.793,-196.548)">
+			<title>Sheet.59</title>
+			<path d="M0 259.15 L113.92 259.15" class="st15"/>
+		</g>
+		<g id="shape60-177" v:mID="60" v:groupContext="shape" transform="translate(298.549,432.304) rotate(180)">
+			<title>Sheet.60</title>
+			<path d="M0 259.15 L116.76 259.15" class="st15"/>
+		</g>
+		<g id="shape61-182" v:mID="61" v:groupContext="shape" transform="translate(336.47,-0.80014)">
+			<title>Sheet.61</title>
+			<desc>RabbitMQ Node</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="76" cy="249.15" width="152" height="20"/>
+			<rect x="0" y="239.15" width="152" height="20" class="st13"/>
+			<text x="16.72" y="254.55" class="st19" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>RabbitMQ Node</text>		</g>
+		<g id="shape62-185" v:mID="62" v:groupContext="shape" transform="translate(15.0841,-196.548)">
+			<title>Sheet.62</title>
+			<path d="M0 259.15 L36.71 259.15" class="st20"/>
+		</g>
+		<g id="shape64-191" v:mID="64" v:groupContext="shape" transform="translate(6.58013,-193.714)">
+			<title>Sheet.64</title>
+			<desc>rpc.call (topic.host)</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="34.0157" cy="240.646" width="68.04" height="37.0079"/>
+			<rect x="0" y="222.143" width="68.0315" height="37.0079" class="st13"/>
+			<text x="16.55" y="235.85" class="st8" v:langID="2057"><v:paragraph v:spLine="-0.8" v:horizAlign="1"/><v:tabList/>rpc.call<v:newlineChar/><tspan
+						x="5.95" dy="1.1em" class="st9">(</tspan>topic.host)</text>		</g>
+		<g id="shape63-195" v:mID="63" v:groupContext="shape" transform="translate(224.848,-196.548)">
+			<title>Sheet.63</title>
+			<path d="M0 259.15 L36.71 259.15" class="st20"/>
+		</g>
+		<g id="shape66-200" v:mID="66" v:groupContext="shape" transform="translate(550.832,-84.5797)">
+			<title>Sheet.66</title>
+			<path d="M13.95 259.15 L14.31 259.15 L51.02 259.15" class="st22"/>
+		</g>
+		<g id="shape67-206" v:mID="67" v:groupContext="shape" transform="translate(224.848,-85.997)">
+			<title>Sheet.67</title>
+			<path d="M13.95 259.15 L14.31 259.15 L51.02 259.15" class="st22"/>
+		</g>
+		<g id="shape68-211" v:mID="68" v:groupContext="shape" transform="translate(550.832,-156.863)">
+			<title>Sheet.68</title>
+			<path d="M0 259.15 L36.71 259.15" class="st20"/>
+		</g>
+	</g>
+</svg>
diff --git a/doc/source/images/rpc/flow2.png b/doc/source/images/rpc/flow2.png
new file mode 100644
index 0000000000000000000000000000000000000000..19de2aafd66ac1b30b6df80d932d69bc4c14ca0f
GIT binary patch
literal 30650
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
MR=-qq!Tj$305|Y03IG5A

literal 0
HcmV?d00001

diff --git a/doc/source/images/rpc/flow2.svg b/doc/source/images/rpc/flow2.svg
new file mode 100644
index 000000000..fe4cdf341
--- /dev/null
+++ b/doc/source/images/rpc/flow2.svg
@@ -0,0 +1,423 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Generated by Microsoft Visio 11.0, SVG Export, v1.0 flow2.svg Page-1 -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
+		xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="10.4093in" height="3.59931in"
+		viewBox="0 0 749.472 259.15" xml:space="preserve" color-interpolation-filters="sRGB" class="st22">
+	<v:documentProperties v:langID="2057" v:metric="true" v:viewMarkup="false"/>
+
+	<style type="text/css">
+	<![CDATA[
+		.st1 {fill:#e8eef7;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st2 {fill:#ff00ff;fill-opacity:0;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0;stroke-width:0.72}
+		.st3 {fill:url(#grad31-9);stroke:#ffffff;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72}
+		.st4 {fill:url(#grad30-15);stroke:#ffffff;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72}
+		.st5 {fill:url(#grad32-19);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72}
+		.st6 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+		.st7 {fill:#ff0000;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st8 {fill:#000000;font-family:Calibri;font-size:1.00001em}
+		.st9 {font-size:1em}
+		.st10 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st11 {marker-start:url(#mrkr13-65);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st12 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.22935779816514}
+		.st13 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st14 {marker-end:url(#mrkr13-77);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st15 {marker-end:url(#mrkr1-91);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st16 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st17 {fill:none;stroke:#000000;stroke-dasharray:3.6,2.16;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st18 {fill:#d8d8d8;stroke:#c00000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+		.st19 {fill:#000000;font-family:Calibri;font-size:1.5em}
+		.st20 {marker-end:url(#mrkr13-129);stroke:#ff0000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.25}
+		.st21 {fill:#ff0000;fill-opacity:1;stroke:#ff0000;stroke-opacity:1;stroke-width:0.47169811320755}
+		.st22 {fill:none;fill-rule:evenodd;font-size:12;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+	]]>
+	</style>
+
+	<defs id="Patterns_And_Gradients">
+		<pattern id="grad31-9" v:fillPattern="31" v:foreground="#ffffff" v:background="#a7a7a7" x="0" y="0" width="1" height="1"
+				patternContentUnits="objectBoundingBox">
+			<path d="M 0 0 L 0 1 L 1 1 z" style="fill:url(#grad28-10)"/>
+			<path d="M 0 0 L 1 0 L 1 1 z" style="fill:url(#grad25-11)"/>
+		</pattern>
+		<linearGradient id="grad28-10" v:fillPattern="31" v:foreground="#ffffff" v:background="#a7a7a7" x1="0" y1="0" x2="0" y2="1">
+			<stop offset="0" style="stop-color:#ffffff;stop-opacity:1"/>
+			<stop offset="1" style="stop-color:#a7a7a7;stop-opacity:1"/>
+		</linearGradient>
+		<linearGradient id="grad25-11" v:fillPattern="31" v:foreground="#ffffff" v:background="#a7a7a7" x1="0" y1="0" x2="1" y2="0">
+			<stop offset="0" style="stop-color:#ffffff;stop-opacity:1"/>
+			<stop offset="1" style="stop-color:#a7a7a7;stop-opacity:1"/>
+		</linearGradient>
+		<linearGradient id="grad30-15" v:fillPattern="30" v:foreground="#ffffff" v:background="#dfdfdf" x1="0" y1="1" x2="0" y2="0">
+			<stop offset="0" style="stop-color:#ffffff;stop-opacity:1"/>
+			<stop offset="1" style="stop-color:#dfdfdf;stop-opacity:1"/>
+		</linearGradient>
+		<pattern id="grad32-19" v:fillPattern="32" v:foreground="#ffffff" v:background="#c0c0c0" x="0" y="0" width="1" height="1"
+				patternContentUnits="objectBoundingBox">
+			<path d="M 0 1 L 0 0 L 1 0 z" style="fill:url(#grad27-20)"/>
+			<path d="M 0 1 L 1 1 L 1 0 z" style="fill:url(#grad28-21)"/>
+		</pattern>
+		<linearGradient id="grad27-20" v:fillPattern="32" v:foreground="#ffffff" v:background="#c0c0c0" x1="1" y1="0" x2="0" y2="0">
+			<stop offset="0" style="stop-color:#ffffff;stop-opacity:1"/>
+			<stop offset="1" style="stop-color:#c0c0c0;stop-opacity:1"/>
+		</linearGradient>
+		<linearGradient id="grad28-21" v:fillPattern="32" v:foreground="#ffffff" v:background="#c0c0c0" x1="0" y1="0" x2="0" y2="1">
+			<stop offset="0" style="stop-color:#ffffff;stop-opacity:1"/>
+			<stop offset="1" style="stop-color:#c0c0c0;stop-opacity:1"/>
+		</linearGradient>
+	</defs>
+	<defs id="Markers">
+		<g id="lend13">
+			<path d="M 3 1 L 0 0 L 3 -1 L 3 1 " style="stroke:none"/>
+		</g>
+		<marker id="mrkr13-65" class="st12" v:arrowType="13" v:arrowSize="2" v:setback="12.6" refX="12.6" orient="auto"
+				markerUnits="strokeWidth">
+			<use xlink:href="#lend13" transform="scale(4.36) "/>
+		</marker>
+		<marker id="mrkr13-77" class="st12" v:arrowType="13" v:arrowSize="2" v:setback="13.08" refX="-13.08" orient="auto"
+				markerUnits="strokeWidth">
+			<use xlink:href="#lend13" transform="scale(-4.36,-4.36) "/>
+		</marker>
+		<g id="lend1">
+			<path d="M 1 -1 L 0 0 L 1 1 " style="stroke-linecap:round;stroke-linejoin:round;fill:none"/>
+		</g>
+		<marker id="mrkr1-91" class="st12" v:arrowType="1" v:arrowSize="2" orient="auto" markerUnits="strokeWidth">
+			<use xlink:href="#lend1" transform="scale(-4.36,-4.36) "/>
+		</marker>
+		<marker id="mrkr13-129" class="st21" v:arrowType="13" v:arrowSize="2" v:setback="6.36" refX="-6.36" orient="auto"
+				markerUnits="strokeWidth">
+			<use xlink:href="#lend13" transform="scale(-2.12,-2.12) "/>
+		</marker>
+	</defs>
+	<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
+		<title>Page-1</title>
+		<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
+				v:shadowOffsetY="-8.50394"/>
+		<g id="shape1-1" v:mID="1" v:groupContext="shape" transform="translate(247.525,-23.6348)">
+			<title>Rounded rectangle</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<path d="M297.64 259.15 A14.1733 14.1733 -180 0 0 311.81 244.98 L311.81 38.05 A14.1733 14.1733 -180 0 0 297.64 23.87
+						 L14.17 23.87 A14.1733 14.1733 -180 0 0 -0 38.05 L0 244.98 A14.1733 14.1733 -180 0 0 14.17 259.15 L297.64
+						 259.15 Z" class="st1"/>
+		</g>
+		<g id="group2-3" transform="translate(304.218,-162.532)" v:mID="2" v:groupContext="group">
+			<v:custProps>
+				<v:cp v:nameU="ShapeClass" v:lbl="ShapeClass" v:type="0" v:invis="true" v:ask="false" v:langID="1033"
+						v:val="VT4(Equipment)"/>
+				<v:cp v:nameU="ShapeType" v:lbl="ShapeType" v:type="0" v:invis="true" v:ask="false" v:langID="1033"
+						v:val="VT4(Device)"/>
+				<v:cp v:nameU="SubShapeType" v:lbl="SubShapeType" v:type="0" v:invis="true" v:ask="false" v:langID="1033"
+						v:val="VT4(Switch)"/>
+				<v:cp v:nameU="Manufacturer" v:lbl="Manufacturer" v:type="0" v:sortKey="Equipment" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="ProductNumber" v:lbl="Product Number" v:type="0" v:sortKey="Equipment" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="PartNumber" v:lbl="Part Number" v:type="0" v:sortKey="Equipment" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="ProductDescription" v:lbl="Product Description" v:type="0" v:sortKey="Equipment" v:invis="false"
+						v:ask="false" v:langID="1033"/>
+				<v:cp v:nameU="AssetNumber" v:lbl="Asset Number" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="SerialNumber" v:lbl="Serial Number" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="Location" v:lbl="Location" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="Building" v:lbl="Building" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="Room" v:lbl="Room" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false" v:langID="1033"/>
+				<v:cp v:nameU="NetworkName" v:lbl="Network Name" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="IPAddress" v:lbl="IP Address" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="SubnetMask" v:lbl="Subnet Mask" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="AdminInterface" v:lbl="Administrative Interface" v:type="0" v:sortKey="Network" v:invis="false"
+						v:ask="false" v:langID="1033"/>
+				<v:cp v:nameU="NumberOfPorts" v:lbl="Number of Ports" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="MACAddress" v:lbl="MAC Address" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="CommunityString" v:lbl="Community String" v:type="0" v:sortKey="Network" v:invis="false"
+						v:ask="false" v:langID="1033"/>
+				<v:cp v:nameU="NetworkDescription" v:lbl="Network Description" v:type="0" v:sortKey="Network" v:invis="false"
+						v:ask="false" v:langID="1033"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="HasText" v:val="VT0(1):5"/>
+				<v:ud v:nameU="ShapeClass" v:val="VT0(5):26"/>
+				<v:ud v:nameU="ShapeType" v:val="VT0(8):26"/>
+				<v:ud v:nameU="SubShapeType" v:val="VT0(66):26"/>
+				<v:ud v:nameU="visLegendShape" v:val="VT0(2):26"/>
+				<v:ud v:nameU="SolSH" v:val="VT14({BF0433D9-CD73-4EB5-8390-8653BE590246}):41"/>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<title>ATM switch</title>
+			<desc>name: control_exchange (type: topic)</desc>
+			<g id="shape3-4" v:mID="3" v:groupContext="shape" transform="translate(-0.359055,0)">
+				<title>Sheet.3</title>
+				<path d="M28.35 259.15 L42.52 250.97 L42.52 218.82 L14.17 202.46 L0 210.64 L0 242.78 L28.35 259.15 Z" class="st2"/>
+			</g>
+			<g id="shape4-6" v:mID="4" v:groupContext="shape" transform="translate(28.1575,-0.0944882)">
+				<title>Sheet.4</title>
+				<path d="M0 227.01 L0 259.15 L14.17 250.97 L14.17 218.82 L0 227.01 Z" class="st3"/>
+			</g>
+			<g id="shape5-12" v:mID="5" v:groupContext="shape" transform="translate(-0.188976,-32.2386)">
+				<title>Sheet.5</title>
+				<path d="M0 242.78 L28.35 259.15 L42.52 250.97 L14.17 234.6 L0 242.78 Z" class="st4"/>
+			</g>
+			<g id="shape6-16" v:mID="6" v:groupContext="shape" transform="translate(-0.188976,-0.0944882)">
+				<title>Sheet.6</title>
+				<path d="M0 242.78 L28.35 259.15 L28.35 227.01 L0 210.64 L0 242.78 Z" class="st5"/>
+			</g>
+			<g id="shape7-22" v:mID="7" v:groupContext="shape" transform="translate(-0.188976,-0.0944882)">
+				<title>Sheet.7</title>
+				<path d="M0 210.64 L0 242.78 L28.35 259.15 L42.52 250.97 L42.52 218.82 L14.17 202.46 L0 210.64" class="st6"/>
+			</g>
+			<g id="shape8-25" v:mID="8" v:groupContext="shape" transform="translate(1.88976,-6.80315)">
+				<title>Sheet.8</title>
+				<path d="M4.05 223.81 L0 226.12 L4.05 233.09 L4.05 229.38 L7.09 231.13 L11.14 240.9 L7.09 245.98 L4.05 244.23 L4.05
+							 240.52 L0 242.82 L4.05 249.8 L4.05 246.09 A59.6713 55.5985 -178.23 0 0 8.1 248.42 L12.15 243.34 L16.2
+							 253.1 L20.25 255.44 L20.25 259.15 L24.3 256.85 L20.25 249.87 L20.25 253.58 L17.21 251.83 L13.16 242.07
+							 L17.21 236.98 L20.25 238.73 L20.25 242.45 L24.3 240.14 L20.25 233.16 L20.25 236.88 L16.2 234.54 A89.6201
+							 83.5031 -177.36 0 0 12.15 239.63 L8.1 229.86 L4.05 227.53 L4.05 223.81 Z" class="st7"/>
+			</g>
+			<g id="shape2-27" v:mID="2" v:groupContext="groupContent">
+				<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+				<v:textRect cx="21.2598" cy="277.552" width="131.44" height="36.8038"/>
+				<text x="-39.1" y="273.95" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>name: control_exchange<v:newlineChar/><tspan
+							x="-8.44" dy="1.2em" class="st9">(</tspan>type: topic)</text>			</g>
+		</g>
+		<g id="group9-30" transform="translate(465.793,-205.052)" v:mID="9" v:groupContext="group">
+			<title>Sheet.9</title>
+			<g id="shape10-31" v:mID="10" v:groupContext="shape">
+				<title>Rectangle</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape11-33" v:mID="11" v:groupContext="shape" transform="translate(8.50394,-5.68434E-014)">
+				<title>Rectangle.10</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape12-35" v:mID="12" v:groupContext="shape" transform="translate(17.0079,-5.68434E-014)">
+				<title>Rectangle.11</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape13-37" v:mID="13" v:groupContext="shape" transform="translate(25.5118,-5.68434E-014)">
+				<title>Rectangle.12</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape14-39" v:mID="14" v:groupContext="shape" transform="translate(34.0157,-5.68434E-014)">
+				<title>Rectangle.13</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape15-41" v:mID="15" v:groupContext="shape" transform="translate(42.5197,-5.68434E-014)">
+				<title>Rectangle.14</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape16-43" v:mID="16" v:groupContext="shape" transform="translate(51.0236,-5.68434E-014)">
+				<title>Rectangle.15</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+		</g>
+		<g id="group17-45" transform="translate(465.793,-139.855)" v:mID="17" v:groupContext="group">
+			<title>Sheet.17</title>
+			<g id="shape18-46" v:mID="18" v:groupContext="shape">
+				<title>Rectangle</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape19-48" v:mID="19" v:groupContext="shape" transform="translate(8.50394,-5.68434E-014)">
+				<title>Rectangle.10</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape20-50" v:mID="20" v:groupContext="shape" transform="translate(17.0079,-5.68434E-014)">
+				<title>Rectangle.11</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape21-52" v:mID="21" v:groupContext="shape" transform="translate(25.5118,-5.68434E-014)">
+				<title>Rectangle.12</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape22-54" v:mID="22" v:groupContext="shape" transform="translate(34.0157,-5.68434E-014)">
+				<title>Rectangle.13</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape23-56" v:mID="23" v:groupContext="shape" transform="translate(42.5197,-5.68434E-014)">
+				<title>Rectangle.14</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape24-58" v:mID="24" v:groupContext="shape" transform="translate(51.0236,-5.68434E-014)">
+				<title>Rectangle.15</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="225.135" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+		</g>
+		<g id="shape25-60" v:mID="25" v:groupContext="shape" transform="translate(360.911,-193.714)">
+			<title>Sheet.25</title>
+			<path d="M9.45 259.15 L9.81 259.15 L56.69 259.15 L56.69 230.8 L96.38 230.8 L104.88 230.8" class="st11"/>
+		</g>
+		<g id="shape26-66" v:mID="26" v:groupContext="shape" transform="translate(445.95,-189.462)">
+			<title>Sheet.26</title>
+			<desc>key: topic</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="49.6063" cy="252.064" width="99.22" height="14.1732"/>
+			<rect x="0" y="244.977" width="99.2126" height="14.1732" class="st13"/>
+			<text x="25.98" y="255.66" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>key: topic</text>		</g>
+		<g id="shape27-69" v:mID="27" v:groupContext="shape" transform="translate(454.454,-119.855)">
+			<title>Sheet.27</title>
+			<desc>key: topic.host</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="41.1024" cy="249.15" width="82.21" height="20"/>
+			<rect x="0" y="239.15" width="82.2047" height="20" class="st13"/>
+			<text x="5.28" y="252.75" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>key: topic.host</text>		</g>
+		<g id="shape28-72" v:mID="28" v:groupContext="shape" transform="translate(360.911,-156.863)">
+			<title>Sheet.28</title>
+			<path d="M96.38 259.15 L56.69 259.15 L56.69 230.8 L9.81 230.8" class="st14"/>
+		</g>
+		<g id="shape29-78" v:mID="29" v:groupContext="shape" transform="translate(630.202,-200.8)">
+			<title>Rectangle</title>
+			<desc>Topic Consumer</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="237.891" width="85.04" height="42.5197"/>
+			<rect x="0" y="216.631" width="85.0394" height="42.5197" class="st1"/>
+			<text x="29.37" y="234.29" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Topic <tspan
+						x="17.63" dy="1.2em" class="st9">Consumer</tspan></text>		</g>
+		<g id="shape30-82" v:mID="30" v:groupContext="shape" transform="translate(630.202,-135.603)">
+			<title>Rectangle.30</title>
+			<desc>Topic Consumer</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="237.891" width="85.04" height="42.5197"/>
+			<rect x="0" y="216.631" width="85.0394" height="42.5197" class="st1"/>
+			<text x="29.37" y="234.29" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Topic <tspan
+						x="17.63" dy="1.2em" class="st9">Consumer</tspan></text>		</g>
+		<g id="shape31-86" v:mID="31" v:groupContext="shape" transform="translate(525.32,-222.06)">
+			<title>Sheet.31</title>
+			<path d="M0 259.15 L104.88 259.15" class="st15"/>
+		</g>
+		<g id="shape32-92" v:mID="32" v:groupContext="shape" transform="translate(525.32,-156.863)">
+			<title>Sheet.32</title>
+			<path d="M0 259.15 L104.88 259.15" class="st15"/>
+		</g>
+		<g id="shape33-97" v:mID="33" v:groupContext="shape" transform="translate(457.289,-156.863)">
+			<title>Sheet.33</title>
+			<path d="M0 259.15 L8.5 259.15" class="st16"/>
+		</g>
+		<g id="shape34-100" v:mID="34" v:groupContext="shape" transform="translate(616.029,-51.9812)">
+			<title>Rectangle.34</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<path d="M0 259.15 L113.39 259.15 L113.39 57.89 L0 57.89 L0 259.15 Z" class="st17"/>
+		</g>
+		<g id="shape36-102" v:mID="36" v:groupContext="shape" transform="translate(596.722,-24.9734)">
+			<title>Sheet.36</title>
+			<desc>Worker (e.g. compute)</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="76" cy="249.15" width="152" height="20"/>
+			<rect x="0" y="239.15" width="152" height="20" class="st13"/>
+			<text x="57.6" y="245.55" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Worker<v:newlineChar/><tspan
+						x="40.37" dy="1.2em" class="st9">(</tspan>e.g. compute)</text>		</g>
+		<g id="shape55-106" v:mID="55" v:groupContext="shape" transform="translate(82.5801,-51.9812)">
+			<title>Rectangle.57</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<path d="M0 259.15 L113.39 259.15 L113.39 80.57 L0 80.57 L0 259.15 Z" class="st17"/>
+		</g>
+		<g id="shape57-108" v:mID="57" v:groupContext="shape" transform="translate(63.273,-26.4694)">
+			<title>Sheet.57</title>
+			<desc>Invoker (e.g. api)</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="76" cy="249.15" width="152" height="20"/>
+			<rect x="0" y="239.15" width="152" height="20" class="st13"/>
+			<text x="57.66" y="245.55" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Invoker<v:newlineChar/><tspan
+						x="54.76" dy="1.2em" class="st9">(</tspan>e.g. api)</text>		</g>
+		<g id="shape58-112" v:mID="58" v:groupContext="shape" transform="translate(96.7534,-175.288)">
+			<title>Rectangle.55</title>
+			<desc>Topic Publisher</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="237.891" width="85.04" height="42.5197"/>
+			<rect x="0" y="216.631" width="85.0394" height="42.5197" class="st18"/>
+			<text x="29.37" y="234.29" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Topic <v:newlineChar/><tspan
+						x="19.79" dy="1.2em" class="st9">Publisher</tspan></text>		</g>
+		<g id="shape59-116" v:mID="59" v:groupContext="shape" transform="translate(181.793,-196.548)">
+			<title>Sheet.59</title>
+			<path d="M0 259.15 L113.92 259.15" class="st15"/>
+		</g>
+		<g id="shape61-121" v:mID="61" v:groupContext="shape" transform="translate(336.47,-0.80014)">
+			<title>Sheet.61</title>
+			<desc>RabbitMQ Node</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="76" cy="249.15" width="152" height="20"/>
+			<rect x="0" y="239.15" width="152" height="20" class="st13"/>
+			<text x="16.72" y="254.55" class="st19" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>RabbitMQ Node</text>		</g>
+		<g id="shape62-124" v:mID="62" v:groupContext="shape" transform="translate(15.0841,-196.548)">
+			<title>Sheet.62</title>
+			<path d="M0 259.15 L36.71 259.15" class="st20"/>
+		</g>
+		<g id="shape63-130" v:mID="63" v:groupContext="shape" transform="translate(3.74548,-199.225)">
+			<title>Sheet.63</title>
+			<desc>rpc.cast(topic)</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="39.685" cy="249.15" width="79.38" height="20"/>
+			<rect x="0" y="239.15" width="79.3701" height="20" class="st13"/>
+			<text x="4.74" y="254.55" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>rpc.cast(topic)</text>		</g>
+		<g id="shape64-133" v:mID="64" v:groupContext="shape" transform="translate(224.848,-196.548)">
+			<title>Sheet.64</title>
+			<path d="M0 259.15 L36.71 259.15" class="st20"/>
+		</g>
+		<g id="shape65-138" v:mID="65" v:groupContext="shape" transform="translate(550.832,-222.06)">
+			<title>Sheet.65</title>
+			<path d="M0 259.15 L36.71 259.15" class="st20"/>
+		</g>
+	</g>
+</svg>
diff --git a/doc/source/images/rpc/rabt.png b/doc/source/images/rpc/rabt.png
new file mode 100644
index 0000000000000000000000000000000000000000..e3923b9a7d0d60a9f02b0306f68743d9a8bdd09f
GIT binary patch
literal 44964
zcmbrmc|4Tu`#yfpFqFMS+1u^3F!rsIRF<+6M)rLt`)HvODxvHl!eH!-ZHg%SZWv2t
zUxw^EziZU{^LhWiukU}~=h5>#!|lGd^E%JtJkH~MUTCVT(9^KfKoCT)dh5o02%^A3
z5G?Kp75EO4CBG8<3+8@b<r<XN#yJB%P+BXgDM3&{B<-#l0(?Gge(Sy(1o>WsAoNoR
z+6Lc3PeYLBB?y{DL6G!&2s-JKfV(FPesI*~mVrC?e2n}D)^u@20fO@BRc|P1KQbXz
zA1&w9`EZbYaQZmYE$C=GrG=huDD+1B3H<EKH*bQKI-Z|<EOb*z$@M5-oyMu>XVac5
zQc^}=_<r&6ksC2g@Z*YJmrozz6Of+$`Rc0s{+i>0pVUTr_MEmS_-i9Gc}jM}t2fJC
zJzy?3Z$oR*pdozh37il8|NM2yg68hsHt)e((jr?jf~w9dr33Q&HL1*oDF`H*9z`+X
zh&p&<-THB)$m%<Hb%F>@3Uv6Tcnr~}c7;dUHCksflBagwRAO{iO;jLY{QHL>qFJW#
z&03<@ehr54C_NVD0C7wYQF)EJ=PPi#&o4P0P%vzV&1}tD#%#4870mZ{Ty{7<H2Y0}
z=Y%5c-`A<KAGZZ_J-TlT=I`=KF`P8@{p7d5A^N5R;=ogZH>PAF|4jd$8a9}E@RPDE
z->21nU)J?^eNmM4`mAi(JqV$B_!XiR+^c7@RWfQ~9xi?$Ira69?`%5MQg!L@B@l;=
zHHC)UMr!=px2S{l!T!8$B8#s6uY+T6xYQe;72Q0X%_$Q^#*d?${aWe=&IvaYZi3Z-
z-wqBefGJxlY!_(M6mQSk@1FH}>U^at(zT8AKSSRLPN(h56sx(Vu2?H6RLnfZ{&(v5
zvS1>sklP%lY=4EBH?MHxwQP-)+JDw9kI*&tTwAPiZlFGReh&N%&VT?RI~I{CCku=;
z2G+fE@^G^%A&W2C*wX$U1s*Mk9kjFeCw-6PTFDIb*0)hmmpD8;0@|5EW<i$Z&3y4L
z!5hyrmcae*{OBU#Kc1eXuJ$Y|+vCn;%w+sKH&lm%BC~96*?vf^TGFf$eS1`OrnR(O
zR)Fr0^pc6jsp6z%BJERoIq@I?71)W-*MoCcQT-Hw9SN*$)GC~R-=T=ax^$j%%I&XS
z$Qu9HbVX)(LntHqsh-ke%k#;5fqri~c)vdX{us{J(MWSX3c2^Y!G{*D*XLeOK39n2
zlnqD6TNlIrsz{yzF|Pk?rctnEY(VRq9n!(b!Rc#CPvQUOd&&W|EIqe(#%I}Cd`Kgx
zjr-p(Y-<HCHH#|z^4?Hb9#^b&<)I3F<xVMkIKuOy;4snZF0}`i(OY|4gpA&Q*XU9`
z%_|;-{r7A<vg7TNa<1x((jS=*_wk7th2fm6&#nf?!;>jZTFLKEAS;{T{IvfDyU(KU
zGZDR*=-0b;!<20$<nNJP(nkLI)ZOMHm{<OLtDHKT59@Tl>G$p1sZ9UQ+9nNOzcd!R
zC)oM)%kzsaTon=Epwaa8M6}g;6Q>Fm6a1aeH(*fdaW;O+!;wyF1he^R95gEY`cp3>
zYx7L^@Oioj`b!_QlH!@FdC=i8FJJv#%_o*yF>MvAg4RiL+Qtnoveb=B<A!d+1>ovv
zacq8nbM+ub_C}=O-suTNEeQRMH7*@roPPP$52r4ckHUPK(ePJ6-?rv@w#FVg907a1
zJwT-{JJXZSvE*i&Gg~2DKLKH{`!8`kn!WlK*=mcbv^h?bqL@izGauOitre{(5nYqO
zSmdkHG>9kP(u<g?<&s2s4XHp*DD0S+Dp;7R-jmW4#b_F#wQRjTQr46SCF+CEiGL@{
z=lFAwW3u8XGq3!Ei6YNi&2Uuc>Q{-?Vi+OB<W$@<IG3OzWz1*gfzOCWGa0ZGmyRG)
zEXTzXGRCL{5D=E27<B?d#e0a`(9&pUK~a*w&<u|$nxs&T;91Q+stBp|N3pVc);e1b
zTwR4Y7*;^5KSXSk{fK1FE`-&|RyE-3IFEqz6KV?8dH!bv2(LRC?LmREcB~z1Q}2H+
zMqod$`}w4*P9Q`O=uH<oVe=La2{BBcmP|>Y@OlL-!O{^z=e7vW(BNmc-&L1#_AAuV
zLJpQ2XAmFpKLsKDdV8b{<HJ0bLqqE&LXgpid<y)PV-IFx>HqsV-9@@zs8s&L$M(!A
zz>jJeAX+>e8$GOk;whZ(bru8>71UW7F89-rw=j72a9~w93Z@U077|}P1}+iO=N9<H
zBOuw*E7M~0GJ~M#?m(WMs-YaeZJ_0+>IWS{4S3{~$;{*;tMPNe8h1Vh1eF2oEVgb5
zH9dJfw6Ne~U_tPYsQyl&*iPHs&81Es9jDG+%LoJCnNPGOSvG+sS<{yrId?wP1S(PC
zk%P@JROmQD79vjXyl(iYSOktFI5IGpaqva1mmP)M>xT+uBfdFCp1nHeMU|;rIxd~&
zR_#fojJqF>4`=-SJlXPLY+d2!X{gj7a$U)e9xOVhWQy%auzM4Ciz~2pdR+*OppkwC
zk7x|p{ze56{MQjEj$J%=TLugZIT$okqnZU8UHLjZ!1{ltnf`p@^)M%K5CSjC7+^Af
z&Oyq8$j?zE#&JG+Fz`f*0il`lg$BYZDrIWomk64*1oE?REWOvQu6Qc&9|6|IVyD1E
z&EO%tN-dt6RIe*j0)tr52vp^~wzjD(cwX08=iPJQ<wpN6Zwi<yA`dyrCQJ{4%yc2J
znLnMPf0Sejdey<PAy6=ahzv{bNk%YOuMx|IRETD^3_PUS!GFR<7TF_;guqWA2fcup
z7pgNwf_WdEq4kjX1s8*v^=BJ;xSpN>Mp3Wi?Utj_F#~g>u6y!&4l*Y~;e3}qA5J-+
z$FL`ozR!{Z5&|>z>Ww#$;16*9CccWm%P+0cI#sVpoKoA)U8<cs5D1!Tlbx&5-GWaF
zG?Oe1Act?>4BtNDPXpV9GgkYf?n$icWzvJ?2th=hNGlr{vN(s7;iTYltjp;@mjY{C
zEy2%;pt?iep6T`LFO~}mGX8C-@tPS#c(au41LYja#zBJ5hQrqOcEdy*m34)a_d`nK
z`<@Y&ll_|<GMyUKwn*W&D*2FC&YPFLK~fj_gDTrszq=LArtYryn{}*x_&|s}p3F%;
z;<J-qu5r&>Fag^p?_?fM8FHY+(>V3+ZJbkS@o)}m91)J_Jg|y~YfUU^y;m^~Eooi6
z<}ktS^7B<+fsVJ)!ur(|T1ZBi|El-h(ksJ5y~M{~@0~UYHc-{QAP+g1RtL|oQ#@XV
zb()p_JM>vr7*+}rET{W&zw^Fh(eo@ww^k>xM~Ap8dj_8o{-T7>sdjhL8-}tzZ`t;v
z=n;g}IJ4dlt}I6u@|Zq4!<5^pnAwQbLj~!BZ3_2bXtJb0xkG(t^FMOgRVwNd>2>#H
z9~%XAWiX*we(3a+bdP>F;bz3gRL)4+VZp6Bm(L5)o>*NDRvsppCjK*zbazb=4u}JW
zwKdm6WR}X&qb$n;lbBGsm9B}knL7Qwg6PCJZGUAczbU>GpC7;=<o)|#_|MyCZuk(i
zwf<S+t*Mj;NT`$oT_RFvc@|h*_LsI>rITJ~`reE+56Gx|RGa`t_2w-ci@&L5_QcC9
zUI(}_@`ZWRrc~hoIWXWeJlAp`(mCjd%vX)}Jtyf<mL_DmpP=zjArGksvEKU3ew>dn
z-Y)yE9dXQXzH6q!PePcO@AvdjMpi0O(lg%t30PI)JB=Oj>jgDCS6MP!uW`oAX>9lO
zj9SzhLk<=35ou&ALoWN0XQCiWusP>t`0T&l*vF4|ioQ?6m`BLfEMDZjf5T%zr$4jQ
zi22IEeW}M?my$itu+9(Om-!`))sWr0mP5BE9$)JCa@me&4j&Q!hM=W=^0(V$+dV$b
zYB=POo&gD=G!dsXsl0j^|7*jIGNJg%%C!r4uVugY;xDv#E!XP`ZlIcnJvhbn$s5(r
zj7G?A|N3&1qo7;hpN*3DxKtgcTN1L*0m*a;SG*j>UyOzQALn~YY%BOC5!){CUnf&4
z03n|eK2qp=@|TL6<?Qa+`+__A|Jw}cS~rhfF(XHA(|?(lk(`u6V8!)V$)?@%j}(OL
zz{TxcPN+0hCiLO9A$b><VOYFUt=zbcDAK6!e||CUjato+@Sfxgt%1?cX7YJ@P>vJD
z)p)bTVmKn^)b-%=Y-9(6zoc-9dTB@lK!(1zwCNu7%f}WbIRDqxpKLSDh!`lcuH@Is
zxKRee2Fruh_o6{t%}!aLV!n=)PvNX679aIj?l`gjR`M_P*h%n3V7uSGbPhSLnR14P
zDLA}}iR^Dkp~ols?ag26G8NqFPdMTrzr%_kNV!jz?=eb#&WBy!xbu)>nPXE-1%_zo
z;o7<q*ghK&vO4>L9t63`v<uZ*DBt^QuSRr66~rm9t^SuD_|?gJ6CW!FkWQ@6o{^ki
zgJTCa#DFb#Ju4U8jmlCLTvY4Q^(}z#$Zn0SZ37|#9nHlRYrWL{mhJ{>Mf;%wjo4j)
zYz!Ewg6H~(4l;u*b9+3SuPYDU@WKYp7~D*u2_-uvdabaVTFoA3F2ae}P~QWIsg7ew
z?<L&?p!wIb2RI0O&-?lW6yNcu{=C{b`e#(}Hw@T52<Sm*M=Ctc{a$+KaccjT(WA^4
zrNiwpa3{Vrw*Jcae%PV6d$=J5BDc426RV_*)So$3_C=NsW_0zh44H&367AyDfDyAI
zBPIS~2X0$<tfBhdc@=gB`nUG-)$^j<jnQBX;mK)jdTw%BB(v{s>hf6oNxyA(Mn$|6
z?nh$4`hXLuq@R1Z=GRS*N`Ru@hT5tzc4y~%8c%>&D+C$Mdvl?M7q4skkK_0!dTFra
z7<3p;qDtd&)qcNcPCi=q+8U7IgJkGkxENeY<`STJ%*&u7{36%D#=TF|y7086;?Hpj
zpJnMZH0}!(M>(xXIeu?Bww6;ZQenSbW}$rSI6m=GoO6HK`~s_p@6%A*Se^_WlR0Ss
z5y@DGuqX|2{1RFfx#I}=E%O%{wHxfM1r;f{)wk%1m9~v8nPKcxp!L3zKDS8O<s-Ie
z@p5ybqtQJts8m9O`fv{4t}91fJ$g;}w}2!|y8Pa1_lKEGg}p4l{>l+?-<Hj#vEesY
zBV8j!0+T`oPRlg>y&b~ql?(tL2Hm}T`@Y0a0fiD6=4?JSr{uZW4+7tHigkk){T?m7
zH*c$*zAv$nJ!eFWR^e|sXL`-2Ydz;KX=RT-I?ICCQ!=1P9Q@5=PVAcPMG}K14W@)$
zYX&o)7tJ=?`LWb!>Qg~7c&x<pON@BkEg91)A@YQ~e?*p|R$kXdoVr@GmhyzbZDYhQ
z-*57Rb!wN6p7BKKi0@qIm5aHhaXVeM);Hu_WNc*``>c5r?dT6-M8OUVT6jUmg7c#Y
zK1@)MH1XIDrmw7z&^#j<Qrp<X+o4nTP}yotZ#1C12N{f=C=&Ux|HyDI8&lh~v+g}F
zx6RqVG`P^8>v+3VZO1WwuVmU)KcBInFR*te_E-O>F;6F5^;2&aR@tIG$;fD3r=A_1
zyO~*oa)lf&t7OhImR&SkZme*s-CJJ>;c#-P-R{l5{V6|yWbf3Ku9|i_=R=tI6W4)t
z*9UT5nxSonpoO(E8Af;<aouaZ2BEJMhZYuo$oAOc)Tdr=9ua!GJ*P&hXSy*pp|9<B
z9>R3-Q!1J|8KrD@1z)oFnY%c88gTR6r!Sx5-XMo5fTe4{Juzj1j9NPRX-@mbR}M@X
z)f~U9mZJ5?fc3%N7<b^NnRop$m2%4%1FPcQnVtFOLYeC$pHBU~akX<~G_F1h$0*+*
z%8juosfBgTO68MS&FIrU30xh@c%D=GN!i~VrkgS#a@&55osYK7^HoZ}l|kPqlO6Gk
z=RKa!w*n8*V`F&yo1r6D1$R`re?Eo?4<pp)BMUAX47%r6t9-ft+Gn*>rSe<Y$x7?w
zfYPpF)E9W!RFYrKeZ4F4x>q^uL&gZ}Z}VlmI%ti-MPNk>dnr(0qot$*Xt9r_VcL~H
z;xO^9?|Fx~DX_lC&EZ#dBHu3?KM#XrO0LfPIt+g_PpupF&+vqyGA~$8M*Pstu;5Oz
zlQ-O1i>ZJ8zTWl^FLw6+$=?PqE(k3BxOeC&#`hl4vWr)|y=cI`b=j*sQ^R{>*gM&8
zp<)UbCsMQdu<Ta|M?_x^TZDMGt4aKTX)gV$p~m4#!-l)TuI1e)?;39rZf(|EjuyqD
zyjIE62*)&OS5p-Ro_rXt<ap9pE$ozaul<z8vGFRlXlg!q4yrFfc8&`5VmIdHE*$Gq
zrt7^yf&Ipr=;h+pCv{R%E!*NJZon$OqQZR&H<hemMU!_q@zL)W<}t$qfsKj7;VZ0A
z;q|VP|31CIn_wPEq}e{fN3<{vwB7KNZYu$G4vM+R7ix3Y=68;tIc2o*uz5^_(~{T(
zVIsmm*s`HXKLbz0Wj5dF#or@;xS91+lYAMYsIYOes!@Dw<#ukLwA7`(?QQqhE*SXE
z7c>r?3FW+E)nML=ZYh*WG+i`N(O;RR{_C{@fb;lyx9Y(SQwmIQMr)1zF|_~*bV**r
z<GV^0?5hnoP>%OAi$9=y6ZQ9>;t5t13}-5Y@P<2%tPgV(5?r#4&r2_|X?q<!XVm#{
z`65DD8I^gFE&p@2F4%5TM~u~lM#2A_TKe9l{MvoNVXsK(S-y?UvB=8N-ARe?TN1+_
zQAD#)t}1bBUg_5757uFIu8G7uW#W|orbq+)o4}eJes;s)HLuHw@lUxc+0QY;AEQdu
zvm=hiCLJv^V1xfGwzQ)xpu)~tVRi%Mjjs0vB~8CC_N{x7I<L>M!=8u8ac?qG|IE=|
zU;@Kng8X&L$Y{~a<_^GAXtG1#C8_vL=;+$QerM<8%|=K~p4zBq)+j$|^62BencbCk
z?<igkZo~k+#9%ou<7X$?RX%qNJ>Y%+g`aSbQ_Ds4l=$Vl{9XszpY%jw$kF0+?&O3k
zJ<9^%>T?K6l+3|LBw7x5_Ti7A+_QZK)?6DCqCpk+Ai<PC;5UbO<(FPuX1;5iVbS{j
zK`+H~H|erW_5az2Blw%rbXx-u;mim7kKI$+gG-Q56n}Kw-5(9<eS5K&v0EBXohBhv
zn3Oc>EY@^yR&SV8HoA~kG09%mF27SwDkZk<O{*xl)$Wm;Iik6Jr$6fM+~j5zPU&s=
z@hXxu#EM(e6g9kfh@!tOSVE;&L@9u?xl_w@Xf5j#OZm6`-2m<fBV2}Lg7*ErrxLw!
zD{V6Ejx}483(5O4$wO(8^0R>(m80SU#zA{)PEGIl^Y6+>x1?Y`ybFUfZ^@K>6!_1I
z<c^Y0mYgoz^1#u#Y^b2^?qpoEXszs39j?yZd25Ban)Q<WHJ0?!ZuAicOU8)%2pIX!
zorV1RjlC<L(VoNw?ezzF+UHed$n0;988y%B?r+pOYfF=gyNB#XmKEae8C(_AJF4@p
zw<7VI-I0HRhaN3FA)n4g2|j)b0KwM^Ew}meiIMq;&<uQY6p^5FZNAUQndC)uEW6!|
zDGX2sL0-_$<(<G0GEjL3BLH8M$?|6JPpHDY$-#Di<)Z(T%)+;mrViS^%RhLBTRvQE
zd=)u-fPONx7b$D7ZFYk8!T8(|RRH}z52*peej1{NSoL#z6d;s6l|B#Q#0!=x)@S8r
zZ6L(1|K!v88yIM@vstc-)f>3EyvjBb_@`5>v6pRl>|Pzue#htZ&r3$5+kKat7dQ_p
zM9VXi{0h3LSvm$QhAnOXvsT)_YZbdZ@V=$aaK<_&kFovLL*#IzFAPghMKE%%?hTkX
z=dmX{4a=h)B{n3+pv}5Yf9VG52cA3(l}tMmCN5tP0f-LB;giDZGg=CiOb{PIs2=$u
zDm=JEr2ZwI9Y5kd8nCdxv*_(U+2R`SQ20V-{Pp!AGPb^{gh|;hY!-3na4hcR`>vi;
z6%p_L>w@I5fIkgfXh%k@#HfE!n5uPxYsj5Ip0wrcs?@D!PWR1Up_SnhBa%2Z<&_*Y
z<wz+2z!H4zSJUbo9H~&Wl?<NTfW`Xap80a87Gwi~i&t|Brvr^|W*SrK;<KkQxP$HC
zhycajKw@Uz*FKhk_B7IMs*=YB6Wyg7Ra0`g2RRF+L#;<HLq@&ET6rJ^k$`rJlJ{E3
zcCfILd{AX%pIb7Nm6<fVzuBmO6iM`7{^9iX>Cv>)m2*a3-eto2J^gKVER2KXe93CG
z+gT$fe9$#BF|BJ|W_}uZ8+93Z&?DiTT($b5J>M;iyNKkaHGI+ek-0~F#`&=UiIGQ9
z)4O(BAI#OI_FmQOt3jydEk<!J1h7a;HOHH7KNG5+Wa<n!qB<a5D2^&-@Zz+Xq8O7-
z@lE2YL<=(<6Py$M(R`bqh890LY&bm3i1*?_v3v*^ZW5HqWwt-2PeBOf2_*2}moaa6
zrF&z&Nig5zV2S6T^Ybd%^D+khd6LGIQ<fge=|$PRAl8!wp=4?^<98oFF4YMNfDsn9
z*|=gD@W@pItu^O+`Q!u~o?viHU-?FNLxW*)FSWj>==!-N_ydLCvlJK{``qK45vQA~
zl?Gn1ke6?2*htkMa<C>1u{F(J!z|^=Tx_16Fa1j6v|$<J%A4SFO#nZ;PYzBAF(m^&
zQ;Eaee)GSIb?1`zS2J&32p<@>%}i`~6=^w;*hb2<;{{2`h<MgEyOv2w|0%R%aSr+F
zTGD&ix&3tYp{Bq(Lb{r9RM=l$6GvglmN5zpo(0`{Rc*Zt(9EQvV>B?Ykt&~sKj$A-
ztlOK6<=rv4bU`A^Z`7@M0**PGs3E&_!`^>>doF)be(Q$@4&a==y{+~jC++RNvKn#R
zd>a7YFY1vk6^FY7tN+!-1SXM8iAT<}b?1&Yirhe@(Q%-KVc5i*fcxPip4Z|)K!i4~
z5++pH-IyjR0a#`1&7UQF`2F7}Yi-s(ORf{ljZWu?d<Qqgls#&Hr}m%{F?f!VqYP9r
z0_65{jTpyFqCtEL)YzCEyyxtk#|05>B#r`aTxpjAIdFgwUGuA@&cGbCw}kOAN7d~~
z$6Ur5m#hT~aDo+^(ZJTx-qp>CH9hxpzvp~9drTiT|NC3mu$G40gxHfMC2Fqm4E4m>
zz~!jq@`K&>gL#AP{DW=L4TXahg@ujUgMc{+D)1gJ983suxSD@QB2U~>*F6_TxLGMq
z&Vh9(5GW#qN$IjW(r4;P%fM@XpF7@De@7^?v?TtS{?_=d?TKyX>z?krb}W|Owsa19
z;Q_B{s8KTB=q?;nt<yJ_VRw1_MRSzG?k~nNE(&|&=K<*6<1+2CE3YcIXLF2d*>*@}
z$$r3_+CL-2n)qfR@?KVr1Z)iFmimuzj6x`mS#1cLINa@?j~fY?y~^8>lk#zWnBImO
z#X;(AG4$+J6?LrXjW;<@UrOb1W&zMEaWF~Fy4mYVXR(j(2!Dzy?FkPL){!@I;(b7^
z+xV=}j-M+!=Ur)y153(4?iGkIA}<-jg_^*44I+?^$1@|jd@OP}3Y1ZZqQwV+K4mMc
zM#Wa_>(*yVRTBnb^Z9{mf*V8b?G;6B(#^Tm>w~$Y=#!@Yokv9~qxS(6!;ypT!omLH
zK|;#5io*7r?s{#=!5ZB|Pdy~cj3&)*A2I1S3VISuMWA3vxcp~Ie_WmdCAf0^;>8OS
zB1ZSI$mp!oY_@;I3E3%*+HVt&I3Ru|AYW*e;S2aD03SaT^of?u3(ZpH1Zo6aN)GJ!
z?8-$BJ=0-1+2hZuCAI{g_ol1I^Uh^+yWwHEmW9Qy)Q_P9_P3^nyEPO@0C#AV(@P9>
z7<&y^s;3xuUUAX!Hmkl-xiuLNBgntF1;g$!V#`FUY7y_ZjVS9Mt{k`Iwm$~~_sO%e
zF2fdezngBSoj&ndiOft2m%L+yjOvC5GG3Zd>r443UUTTXBAuD!YbQ8s7bThd-s2oA
z-p(yE>g_?ly5c&(R-$y++O1aSAzIO@p9|F+CT0C5eidLU--I8Oci6tN%T)cjU3;)o
zoBKI0wSHx)of@@6`GDR8BJ5KWIGk{4y~?IR<{#hrPvpyhN(K)cuY2(VqW2RhYryc?
zI|Ud0?QVM%M|eS4&*9XWH3%yzBbTV?z=|L7>^EMZx6hk75zu>Hy^+)XZVv4dZ>(`C
zqTuCs_1mR_$$i1$GuJRjFtGVW0BZW4-qthrj3&w&IP01_lxUdiG@lR7X~5Yn^C^e+
zia@1RT0?><z)4hEnVtN7wO!izh0SM2t#{fpfCA=3v;u~@w*Hi%vTXF?i%e6S37Lb`
zJ69VAlKh+Ibpb4m&UduZ=#wXAF5qi&`4@?!1!XJ5&&aJy4xXEh&n9L!O$J<s0Xr1E
zbp~WH_wQ>O1KNuPa^S)filuRs*sI6uk_}>)Hr(Z)dBHX(gXfOaSOCzHh*r;78ZZ<)
z1=krpWpaz(-q|*&NIU+1&!da0TnJC|P<W46yB8lX>r*HLu&I%`o_Q2rXY2u@j!|wE
zut@tmzy!i@SEx#_+Ne=TIWpHDJs<F%*`J1cP0xo;-SIc?7YE4@-Pioji+xvv`Xr5%
z@=Ws?lXOda9UYg>^eJk4es+{LIoMgtRKm4sq3qXaAJ0+!FzKZR=<geZjaF4vV&OZD
zOia`x*Op>la?+wiZ*eE^@JK8ey?FB@BKwv=PSbL>jn=tleW!{EC#mH$l`>AQuC)b>
zyNFA?W6iUjUy;sXUL%7r3~s%~vgt(G;OJhW%&(`+H?7YkUA2xNo`o4HoApL-22*qM
zaR!5%7&P}aea(PT4f2UnL%J$#eql5`){8ms(yKCNEnZY`8pi`$|9vOlqcLcKwzEG+
zPu<OU?RYSW&We74GVpQBrQ`febZJTOI}|s<jacYrH+u4X^xHuB!%3z_JcqWRX(_Eh
zK;cz};g0a2{p(yL8(k<A@1^cJV9z`YL#;g6o!)~SinT2;O2KTZToq9-4?!?`SlkDj
zx3-Kwh!?zlxMn-Ou_gn%tWSYOUqU#_E?zlXjro$^tLsi&#JY<yO~B>>=A4gF?R&Nc
z(;d6xeaB?v!R6!6<o2VIh3K&C)bY^(HZha|?1(F?COIxlDI9E_dS3E82fyB5yI<0M
zUoOtFJQ>pMbdyT7*D%RM(BhobT%N{vP(h{c=xDX0tk*Sr*Glp#S$m6ZvU%>U1$Ue+
zR(3c?k19$*4kd|)6*6|3ag#VEKRtm6O_~71-@Q$ftq3SJ+hHf_EIH%ZYqElu{V&K%
z(R4i9WU=1p{MKHkI9(s5E=+md2l8u|+bF+&Fkw1`IQig`6&C?O|0<Sey{87$OgC`X
zpqzrdK;MldKOCrLKWssg4i>y?iE+7`<zo@{p5nTCW}m=%+JztWF3ax0v4A{$D0r;~
zz%w4>C%P#xyogj<Hs|tL{EZPkF|l$ji>t5F+3^Cu1zc966wI+aEIN8asl%=?LYv98
z6D8Il+tEAvZvnx4<Pya@O6KgX^Jdw$W#=P)<l5)z2xLp#LQ70f0srFO{!SQy4j8zH
zbNq6)Z0((6qsLB|=i`TvZq!-ZzMne_mHFZgJ$=E6aUN@Gfr~>UN59+2S$o2C#XOdN
zf6M*xjxrX6y1TSuB@CF0uE!sR*fzEz-Q#)3OuN^!=+sV&I}R4>dYjF84T(ZI_AC30
z{@>MZ;S4#jAwe(jHNXEb16vH-oleh<o%L=ECpp;<2dwoks&lSXz6Ck3S3=*XikBkw
z2Az}dOBt?lL!}t%f_lJvk(~yD<^~Ki%Vw%%nR}KBhGH@P@udB|tgYpDHW5Dulla*Y
zkbrphzZ0ZJ2mENQ`16*visoIDq<JDV|G_$G;IUrV*HQ}oFN^OiN`E;A%o$}tmD@Qc
z(KwA1U%<jt0*~r_H+JkI1t#^EsWgc$bAe>gG3yKxNWzs3r@_m%W7qeNWRo^NYIpWC
z-S>RuDZwyzk5WQZARal=+f<Ch_!TP977k|mT~867X7Qg=`+XuQs%eckAp15kBZdMW
zv%+&f0%T)RZyyV2o@Pf0ex92+>w6TNyf<&17*kZBZDqjm<rDX5(&?)$X$#LldgE!|
z`c3w^HW8%Ti9`NA6JllxkkNpnR(6URH6cI2r<CZP?=20}GMLI{MhAez!)Q1Zft^+N
zU+dMgzKN>+Gow+tQ9CKVU@VwNcv)(9mQUFt`b4l=#-P1pnd82x+QkcK`g6sAvBAux
z*vwsNeiaGVdqMz2`IQhq3(m?0#7PpBY2P~aQaKaK@d|IytIw@e4(QqT+YWI@;Fig@
zV>a|Rh%?rmqf8b7ml$II-1F%RJlJ$$ODuLR4BR*4U<OXnji-y@KdVNSL%Jxw*Tw17
z9eyJ#N!PH1qxc5sDim+uSM-*XoS~ocLX#*Tv~JCxKxxR3#5OdVMMvX0Y$LO@v|#Jx
zWUMm3%FTX{P%r2N%RgI2RVd?to3YWe2+qZE?5Nt~Xi(S79og}58F2=iWPUd>{fDCX
zT)tI=6)Q>4>Nw90tix|9{^e{wYeQm})w#T7&fN*mUAOC!YmJi)J*HwocR#4LQ~XWt
z|GM`}{?MF?x`x!myFMfBz3_1T7#M+27|n=o6}N|wda1Ej>16P_zw|w6u(Rx#PaehT
z5vkbz2kx!!FJnQ#_a<U$eC=z0_G(ZSZimMyz)K$w0+jA`*AR<RqD5WDItt*o`<0C=
zOYTOT7N<qcTpJoFZx>jgXgcLbFO+IfCSp*;)IS^%n9T_4oPeo;VYk@dq{$;fI8caJ
zFPmuC*J^R6LXR1!)f5t)D#PJ<Ae0~k^HVDZ7ghAGf7j_Zn^>x3$`J{pG}@ELXVY<|
z$?ga8gfPl){_MP>ZBnj5q?{r(@xl9*S3uRKMn)?4B5<LNwOZ(2xim`;dE9*A!ralP
z+~w`^Y0wTi1>-`Flp`|b%LS4di+{x3OWR@jAO`@X5wn5;nNcx<=A4TTb}U&RO4S27
zk%hej1{bh1{0g`$Qh72ujc0H$$Eh50Sn`7bEd?X&-;IFKEO_?aqbCr4@}Hj_yZ1zk
zix*vDzU!KE1|Kqth;9;<L^731>m;2$HYlp7)8)OlMzs8iDa@5sh#b`!Y~rU$Nt~oc
z36?9%@WBB)KmWANodw##Q!o~%V&R=XRJ|X1ZuJV)?_8KGPl~<UHeNTkb5Y%6@lK%L
zMcyDpwV8$Py@A#~lS*;Ff(y#7Yko_s-5R2AwvVC$NF|tvi$4b!0VlE=ur4eYQo)0I
zj`RvlPCdhJH2`EJ!OWM}0hM`$pZ_x)5poj6LeGM3S}OW(a}2$9E=hWX`j;%a<hvvL
zY4%Gy#)*g&`O`TIE~&gv^aZt`xn!fvONNt=pwh=i#ZS(H)GHAu0Ie4^a=VANz5lf@
z9^Bg<wfZG!-+E)~ynvrJyy#3-oBT{V>(l++DFyGM2!$F%VWUXd(0l)vUz6P1q|&f<
zkf6TW9YdUo<D==1p@z-7HW}_p#Sz`k{jCzC^MR{rJQX0W=81RqNYpHacP>=Xo|J>j
zUhFi3fch|azZe8T3f_nFADN@_f5>9|HB*k!(DC4DW`&L}`)dlpvA=}s1)9&M02RXb
zoYZXifXl<o;>*}yNKfI?ymn+-p|V}BY#2TU)}9>!L;3kdQD75g9_Ya4xx9xuU)I#T
zAKG9Bb%B<2wa5C(CiEtIx3U$ziqidDev7}lhEX;XPKIGpakfW6632i(DOOLl-3>%4
zBim<sBH+gNPt%}!9Z^;~^wSepq#w&G3n1Rx-Wl|u!6J2$j3~tOS!svUvylbiF#WK+
z?K|*+gFs5;JcBXI`v%~G|3wGV(65)EU?U3HDU-~j@h5)m4zveOa{K>L%Cz+G$miS6
zTFRqdtPK)``?+0e(D~!LeX{mFyPVDq&mD;xS2{e+BbH}-lM=N9(l=c&qott0kV(EX
zGLT6J6UVd$#~~%c`3z342WCs=LQ?u6qSIdAsYfkw&j`tM0#qn^cyvEr+Me|{)|iAl
zO@XDaov?G@hKLn)(bU++mV_DIyJxcx77zAnAD|N@oRi`cFl+2y9IRDV${Hndl={l%
z61P(;tlN@?r5DzT&dz%wN3@IXD*%zfm0O0*dPOHF7!!$C*i(O90>T}mv~DFGKFwq}
zgyB&uc1@?Mpo+C+7URcd6<8qs3UHKy+1ZOekp0#>J<H88YxC2CF$YV{_Y4BHebALm
z8XCnhzn1@UB4({{0+}?eHft3hzBkrbSsmr^^(gN+9FtnikyqF>U4QpwRnq!1(Q@8o
z|3b$r=-#L5hFZF#LAzr-k=*Wpl`ILo-ZLyIxJHY&Ge~6CknXjeG~3G%xJ>Ih<t6*-
z=T|9ni9(Qy=^aH--4D+CVZasZZFQYFn1#}C<G~Jx`g;paduB!c<OHFhtweCE^6CPO
z_l4?zQL5Q$&h<M_Y#P6zK80GDkKQ{6GK@qSmop%n{NuMysB?_+_|>c5)3@1c@%ED}
zTBq!H5W#<?GY`N2R@%Tg$gvXbS^Fv0>B}OUbwa@n3A6Yc>aPby#66E^+B?6WVvw3Y
zQU;K0W*!1?8%~XQPIiVIpp_`U!FQ>OhK>$jIwwD`@{naf`(5|q<lJJJo0!?#pH~u|
z|47B!Hf~zZ60mA7zc)B&NoDJiPFRFC+L#(vK5Wd_eUpF392L5uF7#*;a+p%LKZ2c8
ziyK!rwaY3PMxTS$@zv{YrgzSk^abd5YPVj(xE7Ld`*x!>ehV}5%ljLZ%3-XZCii}5
z1a`f|%WqGoIcjM^eWquvyV85_f9y@ozk!k|`(=hW*~URU12^ihJuO2+_a06`fz?rD
zvy{DJB{%5h3t_AGE`Z$6`{y;Z+)v|00Xl55<f`VzkMj@h|M=dz!r&DM#~MzpU2Wu=
zN&=Okh_?-WA=SvPg=Q1LSFL^j&^QjyVa(q>aFei8unl<d6SLySK_7bk`dMuC+V#&|
z2w$MwiN7HO>;KIT#;S5`3<p%KcgHn!^<<p=(BM&Y&A70=`>o>!a;v8M7d+|aYk8T4
ztKGjoz4u6tU&?D%*QmtmnC{7OGPo`^*CU48mjsjzx!s{fAwK(L9i7A5IU0n!5BoNi
z-n(??<Zr!s{kHPse|op7!$aymo`Hx)3Qq^`rNjb@fE@VI)F?k6A{?tD`Pnu~^4UH8
zToTS1p1xB{a&-Fj^;uf;v_B{UkkidBzIl^`SLVZhQ;9}*<}rzixwvDr7Pb3p`QGG$
zjevxxI1IHn=XP*TqtuFh1b{J|Wei*UDS}1U2QM#LJOj0d&Jt0XO_WGOPVTQ<=C@V1
z{B)0rrYGgE;75GOMn_MHveeyLf*zF*sFw?=*jet~Mb-0O-Qs;NdZqy-m7pRx^v<FR
zb6RJo$MVrmIMR(#_K%`{>L<qeGE;js{jjf-YWN<f1K`_-UgGUiKUejLq1O`UF$F+H
z^8ybyPdtdB&j|qtI_VouRTb2$!yjv=Pyyi=AUtw^-ORz!0N<4<YR{Iqp`I)+&AM)X
z^!Y-(2R$oBJ|Vp|YI?R$wI3D#Nz&(cWvi}H>o8!l(uycefrQs7?2T&yF|Rzea{TR`
z!M4+!6xhez@6%uWUck+XNCfTg_H`M-QLTCY!=C*mKX*7rHydouYYzwbO>DMR&u;h4
z*Y9w-Xtob_<hZwI#~yK*+VJSk<0s85h$8@hBm@$(^z;-QsM?Ta3VD^eUwz5UWSS6~
zWqv?kUpTEurLZ^xhX`8e&G(wUFZ5bxT<5@fWw5{W=cR-Tn~VKM`79r*&#G2Bml-bz
zeKjbe8};Z`%RPdz;*U@TX_w^sok3BExFr{EOdm_$Aaw*drgtZ_V}W!KBA!PlzB#qu
zf_qh)JO=~j+EWPW9&6dC*%{8|!{k!rIPyqsq9lB_CWgI_^Yz})SiIZkBsXPmdZ#+b
zsx@vx4E9b@uaf{0z|@|A^)a4<as(F044k#$;6{d-C^13A+WtH}<W;h2Cfeune^Q+1
zYSvTH6y*92=bVVzZ!y8k`s6H>?93`jknWt2AkB`(4>w6bMSq<Zs*ls2;rd~rmUF>n
zd&VNyI(IEDhO#Q^?R2i9#0R#zJ@ez=TAPSYJD?&#fa?d_I?RTO)YmOM%1l)F@0I5r
z|GV;FIE~eWx&T?U2{|CVjfR!U<JwVS$?P_{CO5(^;R}eF(uUV|4ZkQh1{%W;4)$v=
zLpd+rQNHEb##0*}>-4%qoG;p05Prl`FW|NlmAreNtVNRzH)X-wy>fIQuRq)b4c4FB
zpL??OT4Kw!2L<ggysi-6H_vnkYTnNK*6$tO`|5~;iiC9|;K;$sWk}16Y0T^-kU%>v
z3{{vzx<&M&QFnijtDq2ApXLF=J~^Xv%6#)9K}>LIXJc4mTVL?HBNLwHvpF*etB$L1
zCP2DXIaOm>W<fdA>udvShcH^_^(&xZ{vMdUdjmG#lipyF^u|tJg7@T1%=tl=IYayC
zm$To#GH>CiGYSTQv~=jI<sGsqc$KKnjC60XJtOE{c)eA#QQbZaDsIC1RX|-Z#B0^&
zaq@x77n_s6&q72)W~70j?o}2+8X5kX2+WauM!Yj95%jg-4Ky7fK|bNPaq_g686=}5
z%_tHNLg*_)JkE&BDG9kgkbt}<vvbsaZC7$fR?pgE#r1*AWB-n2%%+>tJt*hZSWfmS
zG)Yds0dAAI1rf3r;@l=6Y_C+1VV7l;M3w6a3*Pfr8InD^RKYsE%{*CZ7Hf74n+fB&
z-`E!p2yawy=1~J-;vc&29mR9|t#+C>y~q8y==4NK&#^aJcYUqjbo3>j#y{*lR4Tpm
znfCZ|{Q9VPPBZc|?=TV~xb0tWx;G3F3~=&<g`Wp`7uL@oWHo7s;dOQS56jbci{6e!
zZ;tZ;3HX8LCeYE8zfi6B7;hw0|DtzxnMw}YKZOqX8BG1)O}eK(Z+Od1Oo@d=f@G($
zN2hX{<q=SQI9uBoxI30L0g804ja+#)cFWRON%0$~g5cSpx)3$3zr4qu+=ltUXk;*)
zkc<JIXy^I4TR;$idolV}a{R}gFo9rZbhtk^3_I*Yki~8Kcz-uj0WdT0J^3zXPB@$h
z7LM{7c}VL${C%)sR=vs`{-crGQ#%Jk0$EOpP&?HRq}q9wnEZj)EWy1ssQ{Hmgue^;
zKE<U%Sz4Q?H?n3Cv;nlF95a{3ttkLi(ABxD1S4cUX7BoA^BS6W-Kq`ml!6GivLM2O
zv<j%cje8AR_TPJLjGWou>5L347H7~Iei4>VR`)r+z2LLJ6|5f~DtBe8hS+CRDWRT(
ziB(jOlC56kIdFa9mS4GmW5v_lY(B4y7LO`usvs8}#vFyeR)OlvCmwytsa_%vWK^9&
zm_gao{HwYH=UJ?9i3!T_J0ILXpo;q-c7pxE8_Ci5@dM<|DWHY@1V_!ewuscM-Y#py
z<?}qNQH{DN1)E7#4x_oiwbGE@|5YYx!h_CYN~F3t{&o7+xhPr3_bvLnPk44wcPq9<
zK>0(~5_pivL~Yn@$l>5YjzFG-rAJ^jjBqRTi~`4DS$=EdsFdbuEg+Tbk|bw2$@<jG
zpoig*r*x_~Z)expOfK^qyMANIT`ExSn#oL-r?N2Re9>h0Hq%1-(MF$RDVx?vNxumZ
zPViZoj0PhGcpbObFaX9sZ@>1dF2X}*q1at}Fff!0Tt~I=rkpEblcMe|pqjau;ZS7k
z5&v>hFTRO$C9yeAh*a!lx2VI(_`iF!>ih){M2U;cZXh}nvjDhTd-5V?Sn5vz&#9~O
z>(z?^&VpAADIZ4nD|(HdpUoEe2G{@88g+!^UAr^fxlD&bq*^i?Kc6d$zS1TI#Rnvg
zpZ+#@z-E0us^CJ@Cr`oJCSk+IU!gn;NcD!w#!{f-j5b<*KNca=Mhe0!eM;=Rf;3qJ
zVIVW9etL;H>fkMdXLR8EXOC{BoI>ZW)_lau>i{Xi_%jNWAN7U)kxT841rzZ%mAon@
zV%$}Do5yVU6H;w+*81$jgT>K08xK9jOWnkrbdKq(oz+3Yu+>G;XBlK5A~(u-T*dsG
zo?1-C%e@n=<PvY%8A`2;yDuE?+rPi|W>=tm`Z6en!%*jv%Pa&zDFTo<R}#ik*i_@9
zys<d?BkY?gip+-^YB)sn<CB_8pdA8L+AB1LbNRJ3GCT7{v`QGOGwU$j(>bn%nTcM8
zIh+&(4(F=QXf?=T(eVP61qkSUN6PqK0nIa`dSNeshhUJBGC*F&yfg7E3ofLelq8P;
zgu9MZ?`-@rc=H*HD;eWmC0%VYi}RqROMtALn#ypL7__0oC&jkhtoriw=t7GH1{0wt
z1^m`E8C4|h(#e`X2&*$rpS56z5v^d<6UU??O;`N`G+V41Ft1!Ixs`NmH1oC~1u927
zs?hEp5V(fX#cD(V!7@<VeUEhgP-XbmDzc0uP7|7cThXK86<cnJ(Mgd9??2F?dOaV-
zTgc8=W~jLv?({}nMpy4|&l&U1ka;Syrc1DhKfg4N**{iFFJdNw^iT0Q0ta=zL+!|6
z3&s1&8@$H|h0AW7G^?6_C7mZdTB~P$%YJZ-NYcDyerq#(vUc-Z-*$nmDpaX*ygHyR
z&Yn!PIKPn9Gx;Di7Ig!KD6#AgRoFEvy9RG$Ju?DiTZw%Yxp$anUli#8n1?`(EwJpU
zfoy#G>9`(Q#JHu~rNjX8{3Xc~2w!r!siiZEBelk3kZnOc-yrY=yTpJ6vo~3nhM;AA
zr5akb7_cy=!d+4C)x5E{7*q>rM)(7<tja&*KcZBKmw@`zsqI-Tlt=F=a0o09#hvR-
z6fd$*q8+D;GVFqE#wQ-VyQlpDFxB_fnyv-M{Z-@W9H1KCZIF8t&xCSawi-wTD7e|y
zHbG{w>Z*Wkt^o`a@j~t8xE+;NSh>j6K!1BKBOILs(dzFgUXgIDxD@9^HVk$3u%qMD
z=aWBxoSWlmnkI^m<*(icKaeXsn^)N_QW*iC0B1ADATxhS!g)lN3{gvM0h|y<_d3-3
zsLnOkOvx>}f`Vv{%3NGcdyV>Bzt`LlUzxPbKSkFbD4Y-O&CsF)fHHT;ch0#3sk4<J
zvw~SMY@bqk3_NY;#+mTz!B+ebp4HtW+aHP+zBBCIuW#OZue`@F+H|`sHWe`KQYClb
zzoYd`e2V9D%Le*vs|O1mC(5@;w0{+n8(aX6nSy+Q-+Q?AamgA2KWo7IzPNa}hcv7b
z@m^|skKDGh&&hTEQFI{W@I~gyJl~}jfDwVhC<FR{TgsMMbOT+Ud=5@Ut;hwL(XEI|
z;AmoQ#hM2C2*Ps;u)vfsOC^2AkM3Wo#5Rl~C;V+ysuBU}6M{H`YNyK(fSRK<l;F2@
zCAT?gjzXA&gyZ-?P_4F*zfKnB@(pFkjTV~{g_8p|Rx)6iiAAbQ-aArscwPS~O->p*
z(4#}XK}3b0%FTLZp!_X^YS|?0trPQ0v?F3h3eqQ>DY5LdbD3oMd7{^#?ds;z56S*>
z*4$%a3#B$j-$&^{?m!0qgz6)Jj|I@?+?Wm#XoQPqoiMU}Bz@z@BsPIRy*1>bbH<&*
zWR*YcUS~?(a_>fWYP16hSmDm=$C{`=e~myb;MC{%MOLF4+Y>ipjhv*sd+w=J0KPOg
zTBLfl3lw#QFkKrp8*;oIYmF5P+cCoitk#f~-@juA3hBc(Gtgo2QyV>_qCu}6fM#j2
zt#qVac?#ux+VFVASOFi**cP%S0j|4}k^gff%lkLQ0aiR^wWS${YRe1-x;E*l#};&R
z0%@mrKwW(#(X|2eq~_e3=T+EJEi>#=el%|O3pr$C?!EL$Z@u?P-c0|;SP}pg<V`r7
zLNkoq<ngnYT5IkihD4Q2Rk81W!}#&ub3hvi6pfzE`{iDE*ofoqmE<Yd-Rc9HeBk2z
zmjts^Ui`<W#iEWImEjJuIsSCr5#4LDxC`WB7XjsfBsvszI)ctuhw!v;;aLAYGeKYs
zw0PD^Js6?s!378jM*#&54a(7v9Y4F3Bg>n7rE;x>0jB$h1}|dP_%CtL^*Yc3g&NSe
zaTZQC$H2$s&%(G}{i+=EFOQk4jJV)7f_`2X3cCsoKkJ@9_SfFYis1CR*U9u~5`>~x
z2d9jqp}=m1NWP^w?9o&Mf}HTG<A)ZN4D}6WQ;*E`8`UBTL5FYOu%t8WUO()ap0WF(
zs|(x9qrkplxE_dvkklxa3jsSa>)b1J@}OdE)NUOwCFz)e$=$K@`FaGS_OmBa{$+{J
zIKr<c`rFiVI3f4#a^7>%s06+a9Uz0b<pU#YiWL+%ZFXE9*#CX~@c&G<6{i10C)|ML
zDb3wF*8;fymxS=J-pkvg)T2zO690(ku~?!;^UNv@YNa)f^N@dYNbe&rg8Imf{EUB1
zKi>i~!9a&FNd}IEYtJ3$l)p-uUiwsh&`pLlm}SVY#^pC}aMt=3I(tMnuwwsJy;_h{
zRsiI%Pk%Gw3+O-yuWC5l86IwUv1@rg8GeJU52X0}TF_s!vzGp{4AI-twZ@h)W!QI$
zpwthcTWi03zr0C4D4<IM+CaK(il-}cL4JR;Z9)LuUt}bWAS|h}ut!W^7Xm_hcjTr#
zH54E8<c&G`Vx7weGPIUX*q@G^nSU)k1*7}`;hBAJ2i-&2AxsZL8Bo1zk_ppUGwq22
zgVgxRQPlV;f3UaT?dc9(<mQ_UI<du!zkNqW^FX|FSmw}yVb9bvaN)gHwmQZOVT4_d
zSDa7sK?9gi_~DsE1?}2$^uM+A7$l-O(+TalWh1ko6}*=)pZB*t=KpM$`JXnIMm~T#
zfO(W=Lw%tHXGY>Ff>}TeFgJ-)QdFkoRvvZ=tYSM>UWj_FYGOWD&WEdPFG7aV!?%t@
zLeL-h+rze*!}gnS@jfAc;W&$Aoau3*enNV@DwnN`ed=f!i=Ct>KTu^6c7_A?9$RQ8
zi|Ztx1X)6Plw%5c<3vRvnN4V?zFV}oFFt46tXtJb&0d3ds;k(X$9T7@+l}T)(&U59
z>aSD4`7vT&;>kXV)->$mz*OLYKWN7=QjNQ5_l^p8QG;u#GmT?y*KW{xKczVHu)*jt
zl{{YuC3%x`AUuOS9_e^{-vzd=<g@9<-C7$9QV~eV`1v`Wa*Hq>)Wf&;ijI}}OW~L#
z4$4YiPMPLIy3V;hYmXUe#DFRWxhw!-TYWDLZT$J&H~(bY=o^KSCHM}mLC09Hi9e7m
zokx;t%;>-k*3>9fduunzYrB2R6B25kepgaOZaiIPphB&jco>vOGaafC(##9m*h<Tp
zhtyoAZ+aX@JNAh$WbA1oqa?SU8+ynJg4W|JtNO6q0|7uF3{nFR(Hu9?Gmano_ZrYM
zq#2BZ)<NT=CukR`8?O1Yulv-sGK*Mt_Q}V(+_m;%4b`o>Tj>!xY|^?u^OeegHV{+U
zCkt7Gjn<y}P)4$g4l=+oCcVrtA1@nwIc@uawvljtK@AF$Ud4+KuS&IuJ=`+7j&$w!
z*i{9)g&p(^&^n1;@?NC7@x?1E`OlWOd^a08((P+YWJrd06ihWHHuA&sGTVARy0=2(
zcD&5Cr}JmB_X>IKLuXeuU{9YQ4sc};6_l-yh{PouJdZawx`E;tOPEhCws_bPX9&}6
zXOlbE2Q*Zj>DKh^j~7Psw*wZQU4Ub&H4~-prCdkM!u6l<$(>leq}df2eSp&B4t{#N
zp8Krt>rF-mE@#O45}Q-^hRZRRC&pi*n##QN2dH#xHA&awBbde5Y={;&1iIT)i1WL<
z%gbUNQad=l+Mi8}R1TyVbt==rj74b^5>0z89X{@+fW}nXvQA#LCiV)c5|(27sq_|O
zWzv3N_u!zT<yOC;j|Y9xte%|w>p0S9bsj}}^xmA4;nudQ_ryIZGd4+)VebdCU8m5k
zjT@==jAA-x{+wy~<wMg$h23|*(@t?=Mfv?B>`pr{szqIt0!<43Gu)E`bHKzTcI07U
zg5Jd1N7XGl-)ox7N`#-y%cpv_z-iGPr$1GPw5<$$P{)@tK^v@3tXsLNX`iX2d-Ass
z_KM;PQ4p<VbbV78epEV{X|m37{k~$HO>%zXAWO}SON0{l)pOtM+#luEt=rY|n3a@`
z2i9DY&NcV1&TZYl^8%ZA=GDp0@Ty^NH|b7theP*#=n;ps#MD8k&*WvpZo{-sruCh;
z_7v;HwaF_?PE%7)T`*VbMo<D*=igX)8X4_Mca?r3X~a9%HTBj=e*wba)qq=Lnkfb}
zJ@nXpMjKs=j=(>{*)s>|5T<A<f2ta@aqTsO!dup?*bv5euX`;*({yE-(Z`(Zsj;@$
zWU4r-ZK@RIb6BdmuJ8RqujU7dvtp0h?P3RGJX=@)-1d7NFP9GUIQ5Z{i-~JY#iAS1
z10}@FnlitF<6}dwGe4aE+o4nB|N41f4;;HbbcZA4_~0wKbMqIn_qS`F)(~G`n0twF
zlz%sP$4Ia)=uI55Uceu8;EBy~S+40XUZ@?x?gduXrJ%PM*ME=tCiX7f1uXyzRE6OG
zWKxAujDq?Ol*)MKnCw7b$DaPq>xT!8`+SVdcy?3>BuM{t=_8ICck|bEa{V~o^x%xW
z`IEiRE`!8nmv|}mzHgGRPH?;nEq#N$Dcz_0z5ni`UeG>61~@q*?e*!aLk6a_r75iF
zl9Q7@q9wWgQC~jqhsgQO4_LMz^ULCvuiZ^D4?Hi%idyrts(aDH@I+Uze|9a|+H8@p
zc}$@$Hvz+KJ?z^6!y*>x3e)hH1Ut^7OUh!_$KJDM34)r3$5FMp5C>ArtO=)=)`Bi2
zG68js@!E_9V{+;-!k<k{XmquidbfnI0C52q(l4FUau%|mIx~$_q_4bFVsBl>-Sv(r
zg9lyG<Qa3f<5XwDKr=b$K=x4|yn4ak%)Z^%ucp500lgo^mKPf>)=c9g#&>VZiXf=E
z7E+^^pA`1L{or6~^g&{XaGe_{Qmfr2^72!*z3<l5uEo@`2d9}%8Qi$yPZ7Vai=;vY
zOuw9Q;!@8`H+P8V;#ond&pkX5K~LY<e(F3i-jpXjmww;K?jYCYk@0mjJx@Kdt@Qun
z>rKF+eBb{6F}5O9c9SS&U&=D}r9_r2C9)eSS;m?rWJ@TDBKsOb7{)H^pvb<DVN3`q
zYgx1Zue-kA@AG_~-}8Tt!*P5*9ckve@B6y1>%7kM{eGRtaJv?7Js*!7=U~&kqI}A4
zlD};T>DR6J>zye)s{`yiI|$&lC~XY|%AfltImpz|CNr4ha`myoqtU=G)r(g~I#yl2
zlmgTIst(Qd;O1MInlQ(iTg&Z}wSiu8RQPZ?A^9_X_R34sAJq;SoC!+Go%STxik{Wo
zWa_u}u0Ob3ECR=`*vX`;IsKFZ_kMcEm~+dOVe+im)A5Y`bLa#`ZksmXbmkM2pu%$%
zzVWnZDem-)+UfAiEN?Q^r}}%3m2OPJ(cNqWg`mxhXy4+eH%DAkwiYSt6hnjqtI3cq
zcR}H`aQj$jwu%|0Ew3MxaMWkT31%@L+T}WxOIa>oIe9jF)!IXNxn0I7rE|EoCEoTp
zXHq?v=iD83IVGW6h0E}^in6;>`ig?>B|OW<O$P;HLQhh?(efH=U7I|3ljQKxw)m~%
zlMe0X5+n1DoW0%otJWV5k&F1b>W-{W(`<JtuM<6Pd|~6yEHlk7GWcuPs#{>$6v3I^
z8JGM#{IE5h$KI8-Smq>SFkQxEKuJ!;%<|l$x^%-*i)X}!{5w136xbm~iwE;2`xO^j
z{~5Kb!m4!n;%awUFBQ~#vG{C};m>z@>gnE`^SNo{v-hvN<a`sDpcJ`;;RO$#HNS80
zs9fF3G7a3UJ1zPvo;BETl^ZdBntrczrF#oLiW?S_DBLzOZBW93q=hBIDBI~Ul1K(8
zuy<5;q}@Idw7lQ~4`sa#;!38X;$y<P-adJCTFYqn3rE4<k6a`;j7%PsbZVt^)ZB?R
z*w7+h;PjjPliB#=LdTE792<(3WbIX7wv264K0WM@b#01b$apu6Y&y}5Cakxs7;NT0
zZZ5LQZ46(({m1BZ_PX_6tIcg^G25@Bs}E(%yA)`GFvj{3i;a+N9K^N~xH8dx?5CdP
z9>?F_C+qrl=gkv(hljfNX#N}@G$1p0Beiiro!>T*BossveE&PbeG4+4e}FzA2PB;W
zihT656p{KR|IOb{1ytM`I~HPjS4v?2G}u>7Fo-bld$dyR_Wj4n4G{)FdKdOTAOgfd
zU74wmQms^-Kne0+CVuGT6kq2pLqll_h1g**T>QhQWXJxOj|3~pL__OMkSAv;1#!_)
zsw?ifV;J3=^1rBr$VbOQ*Z-W$&3;!+!<Zhak)6lB#=~$`-cO}O8k!mrQzsed2Sr_)
zJvLs9GGgRL|Ldk8{~TDlNb*37a19j+C=w~lOpcs4G33(Ew7cGfp2KLe7Aqzg#<SQb
z1l(WzTGJa$M`uFq1)NVi!wYkXihfl>?%k=f4<`<(&kT=l?_6#_Te8Ww`87rF0k|p{
z`o|=^0kzb<A1~vpUUpyi)BRg#Xgmy|0j>cj_^Zs&dQ})>{U^A&*wkC%axAYJi%dem
zH7wbH<piz0r*7h<oAkFlOda0eQJXjXpthc%nEP3F`1LjrZh`zPvKf>apo0<d<AtuC
zoiUoZ#CMBB6!LHBNdEC;*w7VPafW>Gd}l)`QRRWJn4NA*8y~%W=cJ|M|4Itu4?@H2
z0o>&9qDEcqBL7>l-Cb}(0X8%!_eZaJyZZkPlx^kRBhD5eie%+>od-@FxD1$Fv5~<K
z)%HP*4~*#NPQO+i?~19>C_0|l>B9<*l7(NyS$S)d<#L55nuTV8tw=M3VaXgVnUYA$
zVnX5idYyTmT4^x#6d3@_B;NxJnw-}D6f`(ho8i}NFHi#{L^?jynfyKia9P0EfKnr6
zMT3TyvT)ZiDxNHtTjvOoe|)V4SQ_ObhfPiJX-1QDyOO;|bHqnx<m&zm?J1_RCX77y
zEA{5g?%~IUvBNt%C!P8W)(nkI(=W9+&bu9|B~<lZY2RHgM@mGoq3lm%`&pJ=A4BKF
z_V4{22n`vbtkccBk0~*IxacDknj;aYAzp5+#VjEi#uH%!rXi{!GFL3wE=v)HCb5kb
zny(&b>OO248qaedZajIOS!c6OweYZBbjW(g$Hsifk^;OT<N&)P*+KOTB+Cpz5{FPm
zB_}2Ov%fy%IqsXl#{ed~Oz_-ld6KB!1YD5tXr%CpP<QY<mTq!#p3BA}lJ4ZP3mawc
z!`(p`a?!kH*`5^9st~Yq*_9)fZ#9*`umliaD$-DDIP>9}RxHQ_Ruxjw;Jgei!9KMD
z?qsffn29#-o=(hc^yZ27=WXyJPaUHGWoEYtnDLo|^IKOfmnadBIzUb6mzbcSCw@zQ
zWujI+rx~vzwj@-RboCPq8#;Slf<{sm+>L+}=(=M?TLMq)xfi|pqJCUWMMhP<ut@@9
z)y|@-u}5Y?)kC5mk<Qg5aoHEal&?Aom)lX&p5S2;PXu1bW;VM>eDFH#YDiK8_8P2;
zwZMRn#v>n`W0h%3&j^z1^oXWXJw06dcsQ%)TmHSz;f(Irdo#BWq>Kz3m7VdtUJljt
zjz)X8tAj?y(TtKib41}bqek5A<t;KPihCibCi6ut%=!bCyDB-lCkJR5NhzNAF&EFd
zm)Wb;>+iD~VCe8Ditua|E(o3U>r?iR)<Q6_v#3_hmuSsYNqwnfn`FAZacbx2M9bp`
zN;Td$4ZpN%8X?i6%Ewtn2V#*sF;!zr9i?60^OXYaxer#aXB><r7P?9bkaIgfAh(~X
zq3*HW801eqDY|urJvKey2*~1hR2XAp+!I9J7a?h`2Gf8<uh7ZY=k+t4!HE>jZ8wUM
ze$m(&d?V#0f!a9o@vNH4ZLhqp-keH3C;K~9tNW}NtGV0}ds2Z7Cwh%6KaHTm2=Fk7
z>Bth@UI7Io7;)vIQC;l<oS@5Hr-iu-IULs&@H$$i<|g(4?IZ<e0G?aiFjHj&EK*}Q
zl#POob#E<YxUPYPu1!&Sd|Zjcyt3o@B3)v~FBNACq<I^@jMrDlz-Xj>c+>3mri<o?
z+*813i1T6jTa<^)3Z4Qwiv0R-!Mycj)4%Wu@6huwt1J~M`*NI>w#8@D!!dAVV9@z`
zR_#0Txh*m7@a;_WrKQ0VC#s}?3kD>2X4w-Zfxi*`#nhou)hpWtJi>ZS7mcbrH~mDu
z2hNSMSvqDn=3yq!c%9qoa$-%B3L5FUxcH@{$-aSaywZ>($@0)0h16B{xmM}X-{`EK
zU04fc<x+uk15zD|f*V`=CO4f8#6U@J{uEueO3E$c*41SRxJ*J20~XKILaiI3<y3xo
zp32yy++lC#6Q$>qa^Yu{p0OBCr5hYI1(p{P^3LPLNKx{u<Qj2vRv9M;>5>f-Vno{G
zymaVLPW5$_ciMmNtdBdGzE_G9pragr;v!_QJa}}!eGzXT3vShasR)K*#cd%K19;mH
z<(L!WZs&fa4!W;Cc+P~PK{q_1Hu?Agl{eK*CA-|7XHF*_M<re)hwV|?`zVS7kChqe
z@I=S%<mx8MmA&`c*{v7H+6!p&51tQ=kJ*}X!f(X==(|w7x;)OYa2l`4`t_}+B8>31
zVdJI3FLupBcRprv6vAgYtm-D%8s722i8rpFQTbYnBLC!stHmt1uwAUwcn2GfIUf#J
zS<FQ|Ns2mN$31V6AQ{xd!Mf<u$C1I|)w(&|ucBC@6Y%EF{GuZx9x-GTiPOrEd_;xf
z;lhO^&;@bUJC64~puladk01uCK)#XnED)VuXqSteRW(CrS|YH;rMrlzh6>R-CEWOt
zHLFE%(G^p)$58ZFTh9)<<#Q~kgVG8em~mS8Myd0-97AA{C=9U!J6n&2ElpVr1t?|n
zgFr^MRcLod*nUq1)DzS#bzxPO)QHS0F6c}@Bx>pc%rIwwE0Dd8w{&gnmelm`p+v_7
zmgd_&=Y|V}xhl%fW6zz~ogAuFYxg+k%o_aCzR)V%Gjxk*1l$<%M?cHRup!<$dpj?(
zU{x7<uc{c*q0JOXZ|df6w9C}ZUI|2J${{pTK6bQuaSVr@8gZqvG&>X!iExChdvB*V
zwaMosGwF#oFrog+HOhRrTT{=Wtmzv9SAvk8wCku<pcTi3aN^x@j@}n%qBwPjiaWe|
zFX;X&Gi$};KAZ>YP8s;&+pobF=e&ZUJ$oO<a!QW3d7h<09ODVJmK<JPbFhdQitoKC
z3vWL;yk>hYzU_%RXNpmE6Dfma+`a>IwDE~kJ`;jS&we>mxmz(AB<+-I6E`LbFRaS%
z^>V8GTw;}15;vJE>7QZ?&R&0$%sr#e&TN7^iqDghG6aefgun$DEkUv;DMyiT&jfKY
zF|>R>ELQe-1=IbCi>Sec&INVH%%oAJLLLf~|D6V88(yqE`l)G-wA1qUpJxoi;!;>F
z=({w`;QUTzbyZb`L%kjGf?8%aNWG?7fLi$fzhYsmes#HqKf!#+iQBw3H)_lFWiTdt
z#kvHfz5lz`8%Efz$jyy_Dx#qjsNm<;-j=d~D`b;YXo0j^o^TM~E}i_p{)OMXB$=*V
zG@WE0)i9+jX3?2*R1hQN!nsNB$N7KV6ruvPFCk5{mn#L(CWGa`miuQ|IycHDQZrtH
zly)R|aw6gensHE&>i{HG5uS1p!=Vk<V22(8tS0d5pTpn>?^Kv@1;n7t;Qy9Vl!?`O
z$ZOAld=8+0&~6D76tCzgceNo0OMEILiE4MTh2Gtf4CF9rabNlIKlpF4Zb7U_9S|9V
z3^O-^W&;Sd(18|WrYZcF{4bnS2UT0)-g`r-n&TllcfklCuGd$=w>TBSOH#6hs_VT#
zQj~sm>3T4gAoz>_@sU-*y~lO_mL(leCp+k8Y5|E{YDcbYYz6gyE*~>km?_NkT@0+Z
zhqaa!EPtZ=|9R1$&Rq?jHiQLnesSze+AjTH2DMens5%7Y^<V^g%2`*Y@1fwAqVA?e
zo%ghMX|*MXoT1AfM!&558-_%}rUfdeih(NB_T_)52+cx1-wuWwLU1{zgDKRY`clOt
zdI}&yO{bFgZKHD`=uz{aL0`kM&xeh&NIFnSGbu`WQ&Cek$bXE|K_B1@uiPt82`&Ih
z>6Dpkn<*i>ex;mflqSNs=KCpW{|x{3phd{xj3l5!2ApDn05Hw7mr@0-$_><m-Q{3w
z2Y!}?Ti|oF?H8^D(}2$jKFLi1B3`*_GEastKsDbMw3srvZ@Uc?6nzkw2>q@v@NoT)
zC*7y&i>;aWGTl0C>}&{#i<3a1{yz@Lgu!9PY+Uz+*gu>)p!~a&8VKazVWU(O#lZdj
z6rmij&!6aA`y+Ryg;vZ%Px)Zu^p9q0E{~%%u_JLR59ZSQkI}2>V_=*h3jOQ50rma1
zrFwT5K_Qf2l?N}6>3s7WhP@{3dxivC@tsf1_TR1u^!T-o`BlU*n!Mj#6;pdW1E}g(
zfP<(*2WU<s_re2zhY#3L;sAHz%cg_37zlVi04>U2gHpFf=V#~;jZv|W$OmXE<Si{A
zf^|!T(R#E)LUu{Ap<fw$Eo`n9e#@1lrLl4nRBdkgL7Y6?Iz4041Pbu=j|zW%0vNi#
zilTL?^Vj{s+qG%0qr(jC0yM{QTX~Fh`>rHx@UGJoaHM%A2X&k;j^)*H2b#bqX7!Is
z{kFy)$ZH8+pEDT)Cc}3_rxncSSF9fVEzAH=oa42qU8X<Pt}XMMRw?<%DaXMZq0Vs(
zM)aRQM$PoHH2AP87;+ey`K`%)ahGA77`V>0oc?%C6LJb0#-H`yxamC$BxHXGKgEjM
zzIj94Z3O*oaJT=la)G_2@tZy)%`BLq-yDZK$#7nM0xi?mz#iG;gaVQQ8MUh-f`V9u
zZ;3XkD(gG*8LOtIHLh=o5Bn4Wh(gib_LhtI3QJ1Cm)w6>$x=#A$u0nQJVwvap+Ez=
z#Tu|G-v`I28FipxlX;Rhn++L-Io&^>gTM}}92L1_za~CBB-y4oA#D$gJ#E?=3o6C_
zc{5<B#i8V6K`@VBGMx^>;7_%bUekldsPbAjvSwiw`k<A@J?HI3tE1WnKi(MVvP&p=
zwZ24p0oL+GZnJ@FdjID_I@ycFe%x%ODyR(BjI~V9u?H3{Z{^*A=n0pA^%V7-cCNq)
zPS4?+Hux0Mrbt~KKpw;I$y1p8-=o~2<n3ofe0M=y3QD_d6J`de%@Y8;^#eaBBUb<O
zD$k%^;I6^;R&|sAjW>`T3iTLGeUkQHk|)CBm!EHDz=251tnFn=8mL{VzHMffjz;8h
zH5LGDV@?cMT;++l)1wTCd_2_&6oi?oO>t=)^Zyybg$`bV5(6%Qd&IUJp_2MRoh0#3
zDeOL3HjmM=W?-Y@4BH1R!$$Sle7)dZGGuVl`{OlokSNZ4eMYdt9z3=iAnVdfE}4ly
zUP?qxkuO2Wmv4O;tHljlrq#fQSO@v2Nxq91V4mEwuo;wY+R>>_u0~?w_Xd_a2oLK0
z|5eC)t{ML^4e-5R>Syx7<aK`T#xmdW@aA%(fLLXom`YPI!5AxrD-R60z_)6`kY75Q
z&s`HjqkcMZ)1g-D*LA%iCJSVLcdGx@wxY_ltM4d~mK(HG-lwz(aTTK2x#~a(unsXV
z0=vgk%kpPWXDGYaIPI|$p7VA9wMo+>OoJNL5iB~Pa$41itZ3@n>+5IF(P62)(RCs)
zvuToP1wYK|C#QR6q~i;~ELM>Z8rdxZFO#05`4X5@zTRJ-^VLos9d5tWTuT72Zw9EA
zPaXv`eAwgiIsM9sybOlE+4nYm|2XZ98^%)?f5GhSB!Byc;+Y}PAC1r=*y`vRD#)?S
zUkWZpz)>@tX526gHn_Pum@R1Jn%08W<Dbpc)hb&NLdC9PfHY+jW2^TCyb%CZp$Kv7
zfCu$FcM2SQ&GGrSVXBhS5y6Ws+f5l?63HhJL&n@6zC09^6oJL_yKV>7YQy9eKal-B
zXwWyR(tEgp72^@&86^SO5k7!N*Jm&O4zl|!10NG+^X?JA%}Da50Zo)mTf469W3(U+
z@B=;K9tZjVY*)^e{s!A_8+ILdoxp4eUmE^c#?Vvld>%`VHYQR079~TcH<SeevNQ5a
zDJ8t02Eq0i!B2zTo(yc-gM2%{!{k!4i8t%x^qGCV0%U_;klO_DI^bZ@3R1l|1KkNG
z54~92V10Ig@Y)VYyKf{M3tG1PnV%BipHx;yfxQ_9X`<eJi6X<^+`cm^PKI@(-+7>P
zL|HwfD}O!DsXC1#?amxakJU!vvNvJCsoLT(q$TtNTEe)%BVZ%@ctIlQ;e@|wsP1LJ
z(Cgr<<JzC121;|Xr4R<C?+_1d`@Noj0c9CPi`k1l`W@Z&=ap{&n<6JzNOqO>#FdaA
zj$nl14{V&wC%|Yp+4X0e|0pojzX<DeQsLTU+hRve+WqI{C+#t`?6EP9XX5%g1(U7X
znPt^`J=`(b#M_ch;|3dvp!8kM-9+;}^M#DOdfwwS0C`YjwV16k^|p|nHY{<_nR-Ko
zjZm`NNeeuj5A-r~s*Ky4W(fQaG~UWmyzial0fUJDGo-enoeJ}L3~Av@X5*@$j2~zG
zaWFRUUvJY-o-phVJtj5a51+$g>AI`Qtbt@xr>Of2-c%ESD9%m+<Dn7teUZr;^s-zT
zSFV&c2)T?KymvjSch<V<b~+jk8t392X|d6YTZslA*B1&)ybSVmJy(54>n2ng6o=WK
zG3zgePRMnvCI?)9<E0T#VmFcpa0xGAK|y+u{1p;^R|T>)P)e;m&BzS|v#B;GaNo+s
zV2B6Wtu)6E+`pW|1^jxL@o=%EB1Yc-{ksi(e%xKMt>=8{u0T{LHUZwWWxQ3O|2CLP
z_ye$1dV<&_1Mzy8rLu#&%BuM0$T9^==%FxxSr{UZGk~<Nk!_L_&0lF!lsx9E9E>3I
z9f&3f1!=aOk#*Y(cmWE6bkT?0I%f*=F8ETcp3)DdxC27F(l@-NpObepC2LL7{+yVi
zP9T_|q@#n$qe^@wB`P|Bs$4Ljp5Df7k(aNbrhpML9v7hBTgd*I1bDYRLvv~vV*VN+
zccDq#YW{B9wj*+(u)Q9afFT{tT6#o%{Bs-)D#Lf-J#bb)^5#PA(pr|ISw3aAqn(T+
z6Gs4@PMCn0DK!wy!>gL)l`?co9=dt29m#Ml@OQ>RCeJRX-U>6Y?OZH~vS#@jaTakg
zk_<JIdJhJ|J&rg0Vk=(?%^<s9opVEFT}xz(W$KNu6#?S8=090`uNFPX{sUH0!YQqH
zORU^!+KsD&96or>4_t>o!_8cUuuERMAlCVIxE**j`rd+L)DL(=$gscyFzBbDcp@lN
zRm<%dEOPpdcxnNv;)bjRoRHL^SNJyql;Pt5&wP<eU?H+jx)3iwhiU@v&xal(^MQuh
zD@&~%NAei#6QWSkz;?Wuvs={*U16LOSYuZ}Sm6yQ9tA|#RyvX<U)n4fjIxa9GDc2d
zT+nr7yuy3JExhhWZVJrUWk;~>ul?6mLxBFrX`HT}updxUG291uJ)40<7VYE{R}8-8
z1y4BFEq{X`UvahA`#7vs6!_g<trJGi0YRjrI~lsGQv5e9U0_mr+eP<1Bxy@^W;Z_E
zX&UEz;~~V-AHb)H;MKnEzt6*Ek0Cc>LItj;Ox9!^?aw;{g10lob^yGrq&>j4Dbb1v
zE<9fnt+Z=LYdPY?9>nSB_cz-DY7AdfMah<4d@Os&$BfVlVy<!E@bx4wd-H6LqVSxG
zLkg^#i1Gm|zx+GrQ3Jyr@XsI=*{R@{53?ZM2E$_lm$#UdMV>IQ2oQDdn0!){7N`AH
zT(|TUnQ^IE;Pl?z7^M$OWzGpA)xwlm5L7(bBdrF^vxu0^ZjC#NRkxq@tD!#oD3j;e
zh|C?G!3!#fKlB0@ApZ{xA6dKWb?n~;a5BQJeKH&#EdyLAg$xfPIyr`oD1FpAFTWCX
zzaa)H9C3;=TFew+l_P;$NA&oa1tz$Ax~>UK2&S-`pFIKGhS8$g>p*-u=~Uasu~L8U
zMiH;K?}Nd2zq=*+UT{Dl9?C>2>=Wa6+M*wFMlip#xen}TRhTtj>O@r0m`kM_ISx3y
z5QP!HfV#r16>`|(<?u;_!BHgT;NwLIt>w>ruON~EIP%Rd#;10>>G$v@$@z_obhJ(Z
z_Nk!Sn&<I!Dr|vS7*Om9<fV#_A7W`s8w=}7v)(<?og^^7mpZ8vnJZWlb>}SU1m4Mn
zNYO{tZ~uC#w&FR4ItcSEUBHY6yuTaJ@_F_*R(ZwJp;mVpwgv2)-iv%U326x?Z4h@6
zgqbT3X<0=*_Uh+ER?3gpe@Ri;mi8wtYLOM;@6inbF|ZoIz25WQ{gEdhY;QRzbLV1n
zDQ^sb;)TNqFY<+en%Gj6I1`41BevQkttRGSJD=9Z;_mv-mhFIi6q`z5SNzR+w+0G=
z*6Py$YGVrz_7aASUC}A2ke}xacF>QDPMGa&SY&dj-=>R-(~}N6G-V>xN}5@CdYG&X
z<H!hFE@>^HV2{+52FoFmv);~Xq9HZUKt71MC><y{F|0uF5#j0}GEy14@^QhkUJYIb
zq^|dccE<pp_!2yY3Ok-FPOrGpkN<7_(!y|b>e6x3&4KZ<<N@P$81~ne3Plxm@s%e|
zpL}U9!AgmWWiDf}I*WCEGGC-X9&M1P<X0U9U`hR<1W{*DHGnN5Le9Szmr>>@tmc!$
zztDHN-SWBMC@fU;BW7~Mgy(&k)!Y>ka4>o34r&GeHRlz;c%5SuV*P^-pg7`7(`w_&
zMvhQvJaLT2WCkFw3J`8}ImZ*d2-einib*%Lf*b~nNJ$ah3&tXV5x`OnYO~@D)IoGI
zAAPlxOSpOsvR7%40^ApmNDLm&j|*$WNu4U%q!=k>sW^RUvF=ezVkYZJ3komLk%6p;
zA=w^`yFj$!Mc>-a!H>$G6B5FFk|)73E3(E9;<r>z@V`!Sj|LiR{ABg=KoG}KK+7U*
z=XtKm6IEHfsNT{2k%P97e+d9<nK^^O+oud!Cq!TXnz9GhyGaf%C=jV`t38BxU@ub+
zHcJBOaOxhcx^;&z^r@0y(U111Z`8^A2Y3l_p_(~8_+l$&YQ)!FFzB6oi(N4tf{BaJ
zuR3RV^2U9Ero#n75%aAG6<cZWs?xy;3Md`&n-UwYmug%d!_dPFBBu!aNo~N^Ig@G$
z2Hr!?wbf42))^I`LP-h4*q#7pfJNNlf$!pno##WpH!n17lU92v2>>}-g_F1;?_3(X
zH(%YP=$Wwwq{1X;uqkjdmICD$aI^e52=l-Zt{Q|m=@a5V>h^bCiyTZ{v;#k*Orv$U
zE&*hMIG$az(?XqZvWRx}`}Sq5FJqQ8*C8TWAv13JJ#Fw>rC-;nD9lB8ii0u8aUMXy
zl;S^@8Ndhuh#4Pm4RP&Ke0W;wH5=$$upMc&-=erP8;dD!0O^Ga2oY@h`j%`FV@!Pt
zUo6NNO0+8;?XPG5VW7+$t*lN!=s(-KxdCHyvLddx;0mk)|9ys|f;q0^*%)%j&^5`=
zd$M_+ZIYX^xQ!fMDnpb(wd1PLjtY}!7=)`#m+=YQ_@hy*W9gA?8?VnG0>xf*xErgs
z<6>9KzEV<v=5^}~Jnta^#RD5qSoWXwBn?)SRmK>@9zluaVDS5SxR(bn%Jk}7w3<w=
zG`3&O=_(BdtLC`%kPfN)-X1aba>?#lUXdR>fCEzfB3R@>2-qPksbB~g8qNB(KaWKM
z$eYX1GUs53`{mbA<*1(B9HPhAmNbRFU&`s;tEusQS=fN4N6LaiiIt+%Tccc#g~8(y
zhg)67;7wcLT>?x_WbZVP_z-eKSeGN~64pI{{f-L?h@(MPDMrar<XKw9ggd6V&6;A1
z1i;ym36`}|miQQkvRFPHcTK$t7DBrB7oQansBy+h9vZ<APr!ky7a##T&0jp%)O`NK
zXkC-WbUS`lN#7ToCY(3iFPYe&<|6l$d_kpiTs*mrhef#SE8}_WH5Bp7rHFt|4dF_}
z1&jiVR9tiDq(2W+P606(ChbUrUQQs(8+q>ppU!0%$IFsqNA~*@04(R_!$<#EH~@IQ
z?_1g(^HR!OE(<S{?J+%n2Vg>Rop4*pKAyPyljF%!fad7ePdo!AYPRJt<ODq~zWfS=
zvKb)F?6RZg0?iVvCRw8?3E1j)m!G&@1Jjrii>|UJPHv2aFW39ZK98-XvzxHKm=VBE
zZe}PwZY|13iCU&hKa4;4%pz3YUiR{P_zVa<!y$QO3cY3PaHA}%<<~d0ZoO#$%sY>`
zaB4W55jIkbjpftzfFcLS6HC>xb_**V-dx6kuddzYtKS`2$=0ke+EK;&Tftk)V_65E
z7-(~t6&@=BdHe_LX*H7`lU^`_t*_7l71rA21{s=7BZAWSAnJF6$Z{ZH#vCAruyOBq
z5AMqx%pA-le?9|t6nkcGL}IQed3AB6QFh%4$$?|L7#%VkN4@jNbe{mov~z<gy97;H
zY1DJ^nUyB}yaRffe5u>EN%!0804aL0(f!-l%D|_N3mO*_ZvKicgrlO9WQRCYUW8Wi
zFU>0**n0!KUY&@M$)|?zR|=*!mo-^i!_WGD?%C~rV2Ulw$1s#pHJk1k0!lznhH{hC
zbT)4&4I|8K;!gtU?KkuR1vbE?yC^+&t&g%oX*g_hh}Wjf^KQAXxkD2}aRB>xdS!`b
zJ*W=UztD{p4QK)fjIFwvwu7eE3EXKdg#mZ-qH~f1o%c%Qz|<atrncbJGx4u0)e33A
z16CR^4ndQj^QA2~n_=@MyN$@OPew*!oN;jDmrf)!$oknj7LP@Anm!$w+JvxH{7)B-
zOxn3tjkL2$1HRbAu4ZV3F|ikM;Ao77Vo=-Q1nn4Hihpldt*W!{(az~zld(U`x00LU
z>~7k%1-PmYf$4N5Kg_4LeaQ;sY$1c=8@zIERKYq>>26p6g2~<pwTo6AIOiHLb}32r
z)dE*|-@B|iIKeR{eAjfQ?V@Txn;}_=PgQ4t9yn(Az6G+Pe;;QCJv!mWT(;5#*BKTK
z3%}O-tCtKZaWrSQ6XixMF2jq67cco)iVKx8l=$(!9);3aP>R?5ywg#ebQP~#*?yHU
zU}a4Vbqbv{q%ewAefJLF;-(D6PHj|YEFprNa?L1kO1C;ooN3;$*k4b8Av>{<xNi6*
zZ;-`hAN>+J=ZSKjQ^q~0>jj!2@8V4tq}?}WJzkYb83Ut|TO_MkZ(hyoGwwN&kHLX_
zOf72QDLv@;<=_zu{@AP*{Q)?#NT4;^3zFL^b5*crAqL62#-V<<b@j=uD=s&rXB2`O
z=HksJnt{8o&<xspMk8Dg0l)Vl0OVv234e4SrvP|rwen-MR}Vy+BkE}^<M@Q0Z~*4^
zqd@nG_9%ri&ll(G;l>BN;L2d=rj|k#M9|B%b;mvk^y$gQ2?>Fy2;002^Do<8`dzww
zd+gMEbvkf9`Ct~c|9!w2^wfwQx5KIr9xwzs^);!HZGB5|@p9SSYieJq*`^`lie1JO
zIZ&HVR(|*SH<OM&$KJfz>;>~%c%N5GXJp!eiN(!=(=34nn80FVSgocL?=%<kdUi&n
zJJc~?7qse~#9t37U+h{x7GHT(MRax~D^igX8W{_%$(Uvi!jPZp9D&SnbHaIqo6w<!
z1LZQn_SS7C=IzxPTP6v4ckcq2#j}~(%Y&gZ%8$&bP~H>v^ZfbW^H!c!NUfwVT+6E$
z{g^zV=@a3_Wt1`q+wz;-ODDRm_mJchtQwhh{H?@!r5I36hjAq}4SYA)h)yy-*4f9L
zjAn<cXi+8F3j>5vx>&n)kfCiqW21e~t{ZJs0RCdPIoeE7penu0X<EbA!1tgC=<pj(
z4qW2(4V2Odxf6|$4lJBilF4Jh2a60^#Mf&-0gW7jKi@hz)|Jx1>sISKQ6m<mpdk4@
zSx*P#&)s^F;7NGF&CejbGd?Z6p~ODn@6p&Fekc|naQQTRshvT-+bRB<3gsIlG~AI-
z-s?GCjgy|nGuD$^-=ybT3b~Dd)5kLkaHtK|5umRG@tqv6o9|M`Jju(T+B+l7^VXk%
z9xiS7QPZHB)EKZ)ez*pnflD6@<wWyF7+pGR-1Y)xKe$Nhb%rP(x=rp>H*8?`FwP)e
zTCPJV7^^=Z&0g1jO?WQ#i`ajM9K<Mi@IVl>cV;8&^5h0OsEx_yK_7)5cHgGG0FyS^
zW2dqs5#%y@TpqP1Y9<cT88cpXdi~=0AE<^{z^}-vA73NIyg=0WxjQ@Q=}4$dpC*PJ
z^)AhlZRx|PJn2({rOEE6D|}o1KT2N&W4f7R81gi{E^^hL915*Dt=cJY%|&~7Gb={#
zmj3c0ZsBDv{?@LsxM9OBWl%xd{<#o-K!)oK5UhNsb;3P}7RnMhL6<VD`R#X&pNKji
zIIaXL0&}P!b?zm&kQHh@XA#?6cvuyQI}2cCnBt~*<zL@OVLXd<G*6}E-RepUFYkTp
zNg0J3>u`*Sj!<F`=z;w7zAimXn_Fc2lPO2a$zTzCnY>hYtwrn13eUAFL(QWm;Mf!J
zJhw}BCS|aVDQHCOhesATOX`oaKxfGj=mwG-%|5ToNG>uMXCqvq*$cU+nW_Uq3&2O8
zPBeK2%)6_#X)&7VOis+Wg;iw7HUzlQ(d9N~l>1SFcXN^skaEeey&4~VUZqFdvzVM%
z@)|5q;(_EK@Sg>y%eMv&^AFo+JLC@6y2M;C>k~{Fjc9oo;WQ{tYhE>uyTX6kZ0oM8
zx%p@~5La%Ddf46y`d2<9906_LCoC#NR+OR!Kt5wA3mZ|il8F0JdYyB`RQ<YAYp!F_
z^sogXtEBGY>(TXIxx&gXg&0~tUw9MsD&T*ZjopJ4`mWzfgE_u7?%6$)?P;*~ryvCg
zFQ!yozW2Nag@&HoT~6fg<~b`15YgGcRmIAvf(-$5lP0XEw|qsb&L2M(YOH>q{FzV4
zIiAa^LvBy3Ci%Sqs|TOL(v`PredivDX}s9|u^rxRd?g`ot+J<t4@2))XR~Rm7Byn)
z*i@^%=lR}3PS@pOOO+>M8`x;dPlp(O1-zxN0KW=D8>Bjo-{dUHwNI*i(Q8&;icL<{
z9JsA!91Q@&V@{n++fixWUh@}S9e(=WK5egfIK#!2cCP~;I&wLp#UU%NUNf-_KuH95
zL?H5sa{&UiH=qQ0(%uD=881HnvE4a*q;@b}215|ZnSz`g>m*_t9<CMDxsV~-YVKj<
z^++${x@-Jxszg6Oxe=o2Bmt|mE19~P$)73tdwARR7L}9sQ<u3)-y(YUYOC-oc~t^>
z$6CiroCLdSZ|u1|T9V-`TrQQ?8%UAuX86mj)}ui7vO}9>fJe9e!-)fu^JzZM?FKM$
zNY#LrJ5Y*UHM3=xKBpOxOJh9GyVw%oK6d~5^yUWWgwhO>znD$S14;XP?CCbKHqpAa
zZ1mgh0ZkzNWZLJ`Y=2{rb{E+EyGQ_fpv$Q8<2M&razIAq&qnXu)u+#4<OiT>>k?En
zsDsbBJKxp(XV}`Fb;Qm&l4Dg*V1chg<pz#j-F{Q0AE_L}9+gt509TK5nMyRe1At^M
z+-i?Dr+!&W7PXJBjv~Gdyex3vh_5l=7jahrbit79+gCsqH3X8fwk}LC5Pcp1aBz@|
z=6Ou=GtF2T|F4W0uB+PIo~;+)i(;ibi6om8r(4q-trE61fjXIYPEAzCO5LT*DD7XE
zmk6?`uzMY;2}AEq`oOB*?7i~p$H9xZK8tgW`d$lDyzH+$K6RV8bcF44Ifh-E_s_5l
z7Tq~udA8O*%mIi>JMXtb8<Y>ki>mVi_&jv2VMWjMtdK4Vz{9PEs@4*g-LWY7X7GUZ
zD{!3n%Aa=D^JDz#Qhp3=Its`eh(>0b><Vj>f<9??&XN?>_8n4m>oHdoRblrtFtZ*-
zgDNJlTIr}792jAei)=vddV|d~WCD=T!;uRTXcR$go=A@ptNos3#DvcX{S9%*<y}6!
zBZ`=upO^2D*j$ZeB|hn_7z=i(|D`VNb1&>`cFeQoywk^eQ#54?&-lF;&6D6g72I=(
z0S)zhPimi${s~)bO<TFr6rS^V@)h}h@#n_X<-K3$v~&Ec&jrwEnCN#elv^g)D=HsM
zC2bzwHVIhOx1n0>cz-Z`vg14`Rn&t3yR*oOa^yJn^4q-vm=UX?x^-K&JLrrgN`v(x
z-yt7d4wR5wylUR|Q%;r&Py_G+=4@cwgJa#0{bDe6dHK5ZWtbPB9AWsE90Iq!S3si(
z4`8I91SA=#G+}o6c^lZ-uKXC*LE2+Z6?UW}HEhLKC{U{(=FhT%^eC(f8=}7-6ii8|
zu#8ZH;kRR7lA+B&=11b`l>*oAS(8E%OFKzaBhyGkF`K;GZ9b(yJXpk^1ETNgJTDgn
zdhnh8?@PWZtihYn(mWEa<<i^%@?~u}7E0qq-~Qh3Fv8cS;Sg5}=#&5j94y-4Rf~sp
z+b(X@R`OM!X@fvEP+uj?MHfjbBN%^B!|$(=W_zljlGIH7Fri`~Mw&0p<Cf5q!qW29
z8(CFQGl}e|^@Og0--bH~0Q>j$fE1}5kK=>k#w447HJ%Kr;LE27u4{aB2kU+cpl?VV
zUy(AEF7t(<)i~pJhPx)iM)z|{)up*BEs{WWEU41CL7blJ?0pnff;b0z&}0dzYN!0f
zJUG>}yxDwE{kcdv*C?p)U^*oM8ztFFTX!<Aa%ABG+^kj4H>3~-c1e3M?<f^!R^kFi
ze?SdK<=($eZ}JTWoWap30Ci8VTfwRd0=V&dO!{(cj0VQ`a-+0nN^vFrbo)LL)Rqv=
zHRsBOmt)1a0X-)1qW~%F$5r#BSaE%r(Dzv7w8|()GzF5vc%6uuPzZ|4SkbEh#%TKX
z;oa1!>vvi$6Wb)guDWIA!g|+l?_{I>@hdkk6^19VCvW97ytIFyflP|A3JbLP?a9_1
zCau99G$Ol8ipOY|P9|g=Lx)mLTvvlqf3jd&ZOJDN9M<?*$dRg0uZdm@TcF1PTHJE;
zXDfq?h(FICaGe<z)to5$(Py!AcW-;r&t-e__2yk~tt>1+Ot6=y7uK?`RxMX0Io4Z(
zo*MvEgNV2Q1rcR_;Br!`8y!wi=g?g_!Dj@3ezeF?QuI3f0ZR^T!p27STNpajTP+O`
z<Rk4uQiraRp6DP{((rS}>L-i&5YFY|WiK>$48!BNy!1X7@St5DrEV2EU-2H7Eg;#q
zd(<JwY*0e=Zdy!~AWo<RaRM!@jU*J3Gn7gz=H^&b`i=jy!`<>BU3tuA>gY8cBo)$D
z(MY-PU4o@t?S*JtsV_c-n6{#M!JxEP-9|;4*@K-(K;8Iu9wOaq*Bn=)XO|1wY|k(~
zDVUn6*(|0!HMiaPCK?E9H_c{1&s#sqNd*QJX5UMKmK>{gLxIl)m=K6q^_^(p(rciE
zF#XaXiyxfD1fVj|6}Uw2#g)bcT~MX{+h(lmA}L_*nV?e~Y#!Lw8*T=@G>Mez2CSAv
zZ0$)$;UfGil24?F=_$)Oq9}Wyy!==(;N&jeuQ+pOPAu7&+N;A+kM-;6Ue(=ms+3ry
zLZ7eH_+yE4xLrkVOm*JmUKuBDydiyLPl5{NWc+q5cM}F`ZRJP1btlQ=wV&L#NCx!o
zFEW1$&1X!Y>Ad@OCGN_|kHhQf9;-*VaHy*M6GwjiZ8`tPfVCMeZ&R)7u)-Wb_%XJ>
zxD6oIb(GlT_r|db{-BG1CH!vB`vw4iF&}`=Oc%{V34k5X&Nzhm7RywzBGTcXxiJ+T
zSbq(clM+y{Qi{EPzb-wADreg5(3{L<{MwDq8FHuJ7N?BmkxK{cL+eB1nEEG<n=l=r
zycFMWaXlAwFM@m-W848L)C^XY%(Ywg4x9)6%wT%KL^n&fCbHb2O6l&0X6T(<K;{um
zy7`;2!?$=r*Zjh91<C>rav@{pk4gzSPBE)Oyr@E_-Nvn_$1%^7_sbw2j}e8DuHB!J
z-#-Ygjb6Nn`?}{ny3Me;d=ZG=a76_#Qba#)a_EY=+=f*Z)a9DXg8g-!23%>7<wS$H
zupA_)a-NI3!%jH{(QOVuO9ekiH2Sqiuk5@qSy={P0Rob-1M|CsYp11tb?rAZ1oVR#
znb(k)1bAk;+P{uHg^t(*582`!S=0F}o`HrOBqf?4&a*7vFXD6yYlt{WPxcxq_M-vq
znyi(TNd*|Xnu}~1G<uy$bq7z6(`Y_@z4!2C|8L{wK0pOfqzQ&pDP~<O6Mm}=p^)&R
z=b{Qet1P9sETZmL8{&GG!48}Nj<D|l&8*!LkeI3iG>n#E=xzU>xvn5yXZ_kpeh3Ov
z8?)3m|BwfSVJTs`3-S5vcfdjY?8EgQ={ipD@i8(DH{>(jo)OI%o9#zL%j}bT1^1|?
z86HoOW4`CN4KQm0RBn|Y>ErWkMup>d_4Lk{Q7@PG*~tRFt`05AlOawMytqV$-c!)o
z&Mwa&c7~xxDCC&%Pji}d5Qh3}bsnAqB0HJ9M9}Q86KsQ36wm03bs>G7(^{Bx)RU#B
z_x2a^ls4bv$4k{>biUqWRA|U4#dZjPmY#4`Ele#eX{@EhD(muA38Z|#x*x%LI@l>!
z`_Iwd_;0%*&k1|xQ8KWG3_)wiBd~^i--v<w#?{0bS^6;DoBSCjT?3iV>sA}(1)b^!
z)Uz4okKd)l9#wRUuaHxp>6beMeVZJ}inuFcKe7=LoItZTLTP@!40tk_&u_+AAQ;?#
zD(-H&J7EZ?C2){0Ao?U&WDORA9WMW|(U)7Atj&b7t~2Y~flZZWMvgk_RaQGv#bU^&
zHD*QIE|F??7oWuyk8`?b>@r<`N<IQ2w-rEcthv*$5cjJTqNkAn@+*V3R0-$c!>MK!
zz1tr?0W=(!sZh+XmoHd6{`E=M#w)g6ONg$J6OLt;XJKZh1|wrmIt?SfY3>afrmsCY
z>gH$r=VtT*rtH^Y#Y;$w-2<*`^M*+YmN$h1lWZdJZko@L%!=wZ)ZqaASwFMV0CvGD
z%E$@bx+OW=$4lX-*+#_WOwaO(97oMxQ29UvIss1U$$BX>Y{n{x!O$QYZM{DPWPVE<
zSv^ymASq&Px2pE<83+;>;rCAmUxaH@RQ;<uKkb^e#|gJn_8MPBx&pFBt*2Gf7ye7U
zO${r<26{S_1kP$gOM@u8@?KoY<BOh6WJS0tyJX;f0&NA>?BtQe$J%+7PJ0%Uy5oQ^
z{>>QlE7bbZaC;rf{5c4}_ZNVkJMLfgd0IA)ufN@dw?gQc%7Y=isYrsy@v6`BAm8&t
z6iBkFQO!>Vay%`i1d^M2j*j*wj{*RX<#FkctVmJ!y5*`A>E_{U(%m=jOge)T&Y4Kh
z*cg^Oh8*AvjP7eMcmDOt{_Dc-_Rd3%77SYKxe8NiB|+ogrK;M;0MP=}Fq5!lwspA;
zWah6@AeH>ce}l$$TQk06V7D0L(jPe2evJ?^g%$2!{sH!CZ=oV=i=F?__SoovKd`3@
zdGXyo1EZyVb2nHNLyoxr6(+21)@jF1j_?fh6alH!6R2v?oYDZi`U_sTU<vnWrXUep
zM*?AL(Q~Gr(wR8B{V}UF*=`xzO8*cbuw7EV^`;Tw#v*w`qJR1|44wFF)X1A{aK{!M
z>4~bF1?^C<DgrEQGC>U&eS|cj2Ajp_%LVtZq$Rz1_s5e|l^6?X5kp<xpo7)gIN6yH
z4Cz1Hv>k|yOjiJ{*`-G=HD0u7e+|O9piKvtTEObHZRZ0D$1Wnw>mbzwFA-4W{tkkr
zLg)?FffIf_zuyPWzy&<mLcXcp(?8|T{49VvY`#$75yDzsGQW6|HNUp03?iA#oJ6@;
zJ!)c1+zGNKR#;d#sy?H&zP7VoJGtA=zsjiB)GufTnq7=nLCrIcU*BvDXRTgaNUS)h
z(%WlwUxx`Uo+-NF$O`%gj+v#eEODJtq)gz5t(|Z$c@do^em{co#g~A+Wt+kK2^M&e
zDh{O^f+UwlTlh>!5GddC^abV~5#oqW4oU?zD6$I`pY_XW9-hL_z9Su52ig?lyCYvC
zCe{QgjY(R^`-_0aFz0PQs<1Oa$x0LyKbgQo`UcyB{V}oC_7v<D$%eyKo%TMTk}wmP
zC|N!Cb9csp@`=6A<N2Y^QLD=9freq8Gb2^AYt;)3(FSKnN)#NLwrJ6qG?t5%;x=ht
zF4a2R-*u{}YKzxwyj%6$GURPSTkeXYKcrlP4(i*W(HFLIBWe(YOyh84&x=(XBP9VN
zPU*rQvi+>=2OSD!)x1h0AJ_d$ENDo+^qayV9YKchy+?n&WH@%cM_BH<3k+H7bMIR4
zMIbEZ!N7xhyqzCY_XBc=648aY|2_A7v^y_lZf640==Q4z?fEB0AkUkvTsl>#l4K!$
zp!@ri{B%V_sV3y6#5`mnedR^`4&5ScpTQ{`(0dT`$w9BNdDu{!h=y2d!5*K0a1b<8
z>1GQuyz>?6o3aAb4%>-R7SX9bFNUt&B&dTN*I#;w7Ma%tQ1c2ddVB0%B|LtI*NFc*
z6KI&s<fHcXZpRBa2}o354g+iWL)Y$8l0hR@%4-D&RL>*OyB*ZSC+&#A_v6>u)$I%u
zK-cO5x!$Z+qcE7MPs{g`t#Fv*9J@!mO!GM$a8oFQ?ns}|BI@32CmM4fq&*Ba>sUO!
z5AlO~lBEingB3ydxONZLF93e4%cyG2`e_ONSAuIukKHkhA*U2)eg-$*Pz~n&;~}Ag
zS}xk${D^hL24`{)gq!b8M(6LkKClRklu5l0Gny-;!v}CR(iKQq8vZOmGN;+g(xFt1
zsZfz)rl(T4S5c0Ize=AJfoJL~d4BOo*}CQ0_Pe28n7Ov-P0D{NO97wH)WARuvIbm*
z-XJS34a&j*Z)-AC_XRa7cl;c{!U!;^cfyO}gkEi)GhHrqtFeDQSHHzpzc-(bjADgW
zmCLoU4{9VWKw+c0ow&sTv~o@4^jUSTny!_5)c@2P|I;NADT_P2po`Ru^{lLPuC<rg
z-_5k1612NPZmD)f%C@3Y^rN-Up$}UH%MbB0RU%J^D)>chz(sPnMp&94GZQSKFgCTV
z<1Sws@%aBG#%6gK&~o3SWfkf3ddf&YugRX|M)@dWDolcs_<N|LwBTDlkY$;^85z&1
z#h8`rjOVzE?36RL%X|h;xB6aM-pkS+_*UXthe5aQ0Br*n$SD6Qo&}y@CCvNx=Rp{w
zagL1ei0?Z6+uGxMi^YP;f-39T380BxO)iGgaqigpp{#UkANzscip~26{Dp@M=Zu$G
zt`#^P{<5EOrTnVa);um(5@1%TGspkqr~)~CkF{KR<Ej`s)A#@W%7wJIY}Doa+-+}6
zkkMJi(`AY#uV>0UUCmvVPLKvT5ud9;(Fj8R{99T6Pcb!kV{4~jG#m#S&e99dM22dC
zy7$2%l}LVN{`;&CChtj)NCf1o5^1kzE8nB&>W7o3Wqs~-x=alv!5L#)W9JlhGF5nh
z^#$R^Zg&le<}@n7ljbDwdcCU@#XY$lTv@B$1+)T-)eJ%Kp3-37zc!VB`%a3xh=qr>
z1>|2$0m=qWj@^{glF9x45*SGcD&_yQsOV-BRRS$W$XrAKW+<49U@Ln|rplZF4Fhh5
zg~~q{`M<kP&<#<iqXc|y$O$lHzc9F)ZgKi3Zsx?~)RDJ757a53?)BL!<X{O)nbVji
zxGQ4G(3$qg%+2@f<2fBu$>NtSEX`UEU}*9*#$@1NguF=?Bu6q;AYYA4ms*<QnvDbj
z_mdFB>!F=4t6e0-IUZzd#4wt^!YWUOD%=p{rv=s-Fjbn0SutwC@o?DEPnoQPuQvvD
z(Weo1@pSy~lxlMpSfoKPoWDPs2K`RjgEPlOmQV5W*wOj92L(@+4jzq4X7<3)<!98+
zco$P6^}kRtiAeUJ_NZLk9d|wgy|7(8lSU@7FDjf4r3?@rFXC=)_?r3~MTywIb4QyQ
zB`x=MY|Z_MG4jHH_&t9dhnx!jvd8;EFZrh{b>nVoszK)d7W}Q=>MEIO5S(8>99VaJ
z9(>5R(F&+&qpEczC+d*C_|HB|(ha1%t+hKDeb%ALsaj#)%Hzj(Ha*Xfk;}l)ZBub#
zj<Lu-HP6cVk>WC2p;h34LV?-+3Ud9plF}Tb=)(ekyfbk{_1)Iq{OqV3MD-cttKp|f
zu?`R#8oxWQ!}?V&eS8?)12BXjxN0%*!dirLpsrY<GnEjRTq`=BQly=Gyn`)p<oUgJ
z#o#3G=OM3U)_sor<L4`TKra`OLATBarwlkBaHEkZ*aSVwu$qD7_2RJLhR|sEZE|m+
z(dcoGlSC!|>h))pJ^HHt(*8G8D-l7Q?%_{{u9GpTfS+JFFqs!07Tct$t-0x7gWZwb
zuV}N=?TL^5=@gvIep?XBJ2!(xo@#JD7?>g~3S4421|?t=1DM9LJ{mb6>kRN`QQTS&
z<Cv@Lqb7W~W1&nn?0<<0wfM-vfSLwSTENc<2z(%WUAAx9M!EJb`6f~21Wr)S9`(ap
zYJ~}PAlfv2R9e+fk5c`<b?$ci*av>`h3hE)nvtzb=Mh6lF4Pdr>ORwQ{22om3m<?W
z{mgkzmy1$AQ;6n<w$_2i9j)B{w*Wkbnd~U;639MVyo?<KU%=5nc26ByRY4Q9ED1MZ
zL1C6TQXIGu>gKJ^{c33PAWq*qWMuj<%3b5&hcQ)LUqZHMEx8u2G~AY@0MlGW_tf?H
zdV+SW6E_3O238s?`f-`pE@D6=*I$rt>FQF#a)Pyu=XyM@!!d;cYt&eKn&@V4^K!it
zJs5Bvt2(vh8o__*BhAEkwgzaH{!x8&*#M+YVt8d^Dk%MyK2oj0@U{H~DVWTzjOFT~
zV@15-S^*_yuJ!{KaV7crah&qcq56=Q#WTa=pj+)@FK_`Acw2s?f6MctHA#j#YBSk_
zp^VoxL&rQU<!dXsf|jfDuIw-iaG%u&U1It5ff1$ZmHE9DYTz0RdTXY8Ztkv`CoyQM
zCxi3OW;l_;<?zu>|81VUC%u<q3Y^>Q=XT3MQ<f(5m5k0`33VN2>eqcns$8F^VigNU
zU82?QwaOh_E}<Ghc9n5m>8aB#m{h(~*_Xj-GC7j2A6@UBQU*pq?egxFlfotYPZMwA
z(QnX<JUPwx;~Jz#5V7Y%UtS75bhvg5D}I-K@V#ctO@R*mWgb<%#ofXgj~D*JEy+e<
zYfn!Z3*C`^;lGc}KQs4Bc{~@PJ^!kzsi~L(g8|+pmd|z(jGFRTHFTya;`4%ox$XJ9
zD~(8yJQV$u$$Fv5Oi^T3Z;xx|$M}jw&~nM(JQa$X)Kcpaa1O_Dq7zlE8`IX_8RV3@
z#36vSBX<9$Q`kOhUw#<Iy#%@j-1ht(<Zz#@-&B4d(LF_|<@)`Tc<}>&6&H9p3O(7V
z$2w*vu*|@LgH|E=%}M+wB_D{kMWmYELoSza9X~tk$bj1lsUA#3c4lma=sP6-Qems;
zq`4QT$PRQi?y3Ri95{!RqXF+GzhKZ;msZrDeDrAgqrUZ7a^oxRMjlcxYQmi8-ah&)
zb}`Qd%)W!USM+6!9UrVC2`ZaN?q`PHR*32X=kBWRC=|Xb?|`mOhhbrp4E5_d4S!~)
z;rG21v63d5+hcqpC2)<ea9ZK_!nAkC+)NsH0fHw<HFc`hgFrHQ{MLyIKkdWxD!Aw%
zM@1O7OJ%KomkQ&*^-Vo2w>o=wF|cJBFLjRYsz^!aX6)K-SeIE!Kv@L`5j2ioy+mIS
z+wNm61oo6m&w#xH|J`FF(D1F5vJ-{6r>(WV;6?+6H5bseg?=2Jd|d9Uvpbj6=MrH$
z*2cDb7G6yG5nb=hw!d&x*vg(G2zWaFA;_7sl{%2LcaFfWHpHFd89oYFn}m~L**pt?
z|B(I%w_HvtqZhO_mO{=+Zsyy#RXPDwMbPWXMe&Ut!%(^%+Ctj8iw`!FC9RZ1$`%=<
zE7tsL@W`&#OD#`W>nF<-D2*i~Lst&IqsQ4y?B9%p8t*OX^sJ>P0*1qoGd;T~7ZY1H
z3>F#7x;Xoq!K@j$O0R%^Gc4`-neeqarxxA=7gaL<BSoiuM>eTSht_42D}0gNVW-UE
zY%IcC&n5-v^+|pfd9-kE^*SYp8ym=u*Rg1jFH)B%>>7WmFp2P2WoREOa0>WnIQR4w
zNKj{wcz)>le=p5zY=Eu)D;>q$gRbi8XStNQ!-!h}zA{2?%rGIPV|7#roP!?$F~pU7
z3`d_XqMr6zB*iAF^?33LjUoKAvT9zXd%JVLT?|{sdaj1VUJi44uunEU&I%W?c$O{t
z>*swq%5Cj#n!?(DJv;i0)uCy2qPv`Rv?jA7DR{{Dx~W(vcDMh!3u`blV~(4O(e}M2
z(1x*<wr~0e&C^)fxPkW(;+?}?m;DRC{Zf^CMlUe`)M5{LNw}+d`2M!3dmexw=TirP
zRW7%>rwV7lRw1r2a`;n1WGqv(As|!G@pN8=Wvmh*OxxCU?68xUCV58!G-zn3WOo1?
zQN9+q>(`s;sb9-s%Pq%(;-CE3o<mifh>Ed)v?fqa+F`XAmw0yDtfC5CQfxm0S`--i
zFsT|w1wW`^%2m0QnS@6ez{d#2<fz51#mEHK;L3XIYtq8Rtmb&GAWlKXxqCNJK_K2C
zi!4aH(%G5|@F$Cyrr;F6k<D!EJG&wnR@155F%mQ2u(Ls;9<QJ2TIn0qa_rI?Et^9w
z%fP&X(o(;rC)b|KqZ2C1`Xrc;6jrDo18M@49Pe?zfvZ&s>NiV1^Gvema+V_Q46<Jy
zp+PR9M!!ebcr^&ql{;?F+{l(+s6)!1hq@s$-Z8l!z>_g3Nka)f1NuP~!L=I}3<LcZ
zKCqGzCbxS#R>D-(lg#zdQ}2x43`XBBAYvM68z~;(>5NW|K@H8MO(MqyGXU<WH8SD%
z^2YYw>&f$@s&l)ZKqI;Sv+n<E@5{fTZo~g)#*!@I$x@W1MasU7HHwh3W+#JW8B8cf
zDrT6XvW3QyrI9r=m|={v%|sEhWHK0uLiRnf`@VaY^L={$fbaM7!)MN%Iqx|$XXd`&
z*L_|0b-%9V#W#cM^$gisEs?Eq8Q(uiXXb9(J)e3~fE8z(|5-MGl>gPU+bmsU$$gvU
zPe<UFFQ9Ab_Iljzb|i-^(faLcDTTEj1*jX&cTO-6?z~K&<>q9&Ejf9Hit9@JG`*L2
zM5(gMtYx}9nU^HAWUJdQs-Kep@7u8-@d;U9okWR?H7y`-MEtyFM#--rTcDo_wc2VI
z#K3XeQT?)|1Rkx<00V0O1t;x^tG6FH!waxCrZL7)vkQOuC13#ufYW0^PW0rYcgzC{
zi+ew9WDxBp8>dwm605fO!`&wEdsET*@n28}#AHWJ<5TESQAW|Q-J4wTAwg-*-HKTS
zLZ5^xubZvKy0ciSCxYTrQ8gfbkU(K-QfBl&C%TX-RrQwgfp!?}azE8{ApgD#jcqcn
zcNv<(-4B3h(Jzx{33Uq;lHW*XgGF`m&E8w&&U+mt2`-B)I8U5ju@<@D9r?6Mljp(;
z2pSi?d2X({C5EZkc7)>R09re4+_~+%{7ScsS8PC){~v)%Sh+QSq3<nOT*zbB6M3ih
zU4%D<heKBo8^`7#ZbYZa@wn~W1KLhJ^B)RXRY$gpR;iVCz$^KxS)5$FW!eK`b^`cE
z>ZGTMpjji)faPm1wru{I!XW`Ra)R}%W@~EBAOqH<_Kw1cnPv!l*(v#`NV&TTq_BTg
zXd3IkS%y9WRXhUa8+_ofhAS?Lhnrz~>p1*jsw&OjD{!^kG%xIUH4DI9_$$fl#(-zq
z&Zwg9wx&0*Oy1a>^ONS`9NTZR>SZ5$XwW#Y%<#zu;N?9Fx2jZZ)^Hd*e4yp|%!d#$
zR?&-?P9zR~Q1(HJiV2q}i(k!s4>z7em0p`wqfZqO%^rgbiTJ9Ez7C;c-CkHh7@Z8o
z&ycFhv+Xd-kLYRU+D)aezCE7ceJx6x$^$&fCy*kkiJLQ^?8IZl_PZ0eMmTW1-KTG!
z@f0`&)L(la(B95d;E8H#(*(f)vAID<y57&Q<ijRQ+KI_}K`FyL8sy^uzp^JYu0e8=
z`Jp~ad)x$5$7e)u&UV_`c1(;-h_rnj1(#`0ZMD*jsP=WXd;eT>K;kn<-3%WXRUA>j
zKpDDGQo~CHs?Ae8MDS>cDyRO^R6L{y<rGj-Xm=Vni5DmRu;u68bh)`AV9ojoIEfLk
zh?W9C7Xxg@FV_aqDN{$3D(dj+>su`f)b0DjFJ)}0T9RZ@pI;kLH+#jghaxGym)qA{
zIQq9+v$n&9Is`utm^Q)zVj*fI9;cM`#01eMdQg;+tGt~NwTh};h^R%x+k=akSRqL}
zN2Iy?-AeKqWldY_g$|%bH1Oal^X+#ddf#HEx%YSe*u5zOl72W&XJPY?^Wk{8DL-j_
z-Oglh#tZ)Q;{&qC5Bq=%tLj4NpJJ^GX}QYb#9rO_-d<Py@maAf_OUsM`h6AFp5+1;
zUjV#d>m!n=8zp(?YtaXRQ>nBsi(}=c7uG{%f6<)9Ou|+2SxhoD+k7WD0jLyQ;B8e2
z#ly~qzO0tvRMaWca*UUIoT_orKruGwZr2KzJliw(PgjKLF~*o?LhF;+V<H5RLl!cD
z(QPwn0U?_pJcYAZ?)kD$rmF?;$wOhE1CIM_B9~;!mzhOCYU@L3+4h&fA(}?(M~9%|
z!FaNK%kJ$fhBh8;hkxiiW^DS6t&MJUzFz#Jy62M2kSeZg#a&nKj*wmGs`mby*aySY
zPI~z#_ivwQ*drl!HLlDBgjPDdWhfLK#8_&w_p!hG8j6=8>_Z>D;vpZ%v{oPTUlGo^
zGjEus3Ig_LcJ^lW#)9Aq^kwujwKrF4!*@6Wv&ouvUFOr1-$^3!Dq+ht)Jr+>GeWm@
zldCp3^Ec+dt2>vQY&0qjIji08zN5B@iY><FJV6qse`2mpyBwyp4lnGZ$v($^6&KBk
zg*Y(1Twa#`EF7Lui8mwY?o{oSw)hlhxFQertAu}wKL5<P_<hI%9Hw%W%Fq1nYC4Ro
zOl6WD;zLwYKNc7wSIq6koyj&RTO%>rndbrhApe}US@ECDzJ@iAt@-M`*r8xC>C7@5
zpfYH{->N5q>v6rY%(0-ZnsUs<%CF(ZI4_ul^X`mV?q^Y5sYFP-&35Zyy%*0=T|-I`
zmo^V^9n$7F)FhT9l$E?tw!JyeQcfA*GeEt^!Etr;y3u>-rY!yBk@Pn&*Bp5*@YbkR
ztE2FHNk}>Nu5Ti@jo`x7AKno~TVjUllqz$ND4P!Rh1>%?)S+x}Kf8$2!A$aWNlNF=
z=Lw6=E|`Y!r$^SYzaSF;-;fjS=5nepMtrMGgN6{$+dmYi)4tb=27B5bN=@mdlUy+4
zx4bvD;2^n&t1-Kd+3b%?+B@GReu|bUbP%If7k8?Uu~&8N<!5^cso%dfn_tSj5}lz1
z1#vn6@kLcqtc=0Ko%|tFQj1eVH@fFb@_WS{X<}q0RgS?IOG(_u6w%gMuT31?AbIS5
zk~<Z3Gsuzz{tKe102{)FYX%1+sGHCHBElBM2C_argt!Y>XYR~bJDxpk0B(Bi^|;eN
zYhN9F_Z4#_z(VFYKD3y3&T(XtCB&2!>Yvzk;!JyAPgHP20?3~?pq*TO3i*bWqzu|w
z9lqc|1xhpBhIe9*mRS@me9h$BBbS=@dhdLpA0v9LN2s$<v&f=GgB3M;KP~T++=zm-
zI!~hpgC^kAyFjpwMMbDg-uuy=zz=^8*C(1s_Uey|6*@i9R2TOLf(LvXE3wdEvq<tq
z+=4;7-kP<Y0r%pE&;VgGGZ~L=u$@+nQ*_D~2+>7lWjo6AhkN=}W5+a@ia*A7uCifO
zX!+;X<H2{7h$Ti;-D>i60ruAv4I=LwWZooC(sKn>sks&R-WnNV|E&f&ZbSm$K+V=N
zoXWT2z5L%E_KQ|&4jIw<Q@l?CSRU7OZhmV;IfwM*dnd=N+Zk+0i02%%z(|Qwoi4C#
zv}>8~lJs^}C~<+inTr}r2JeNxr{HzNwc=^tLnIGOjFN(0+fkX_CS7JAD8s4diNdVD
zWg+KzqTYdC^|lh4(t??VT`m2K4OY`Q;qW~+M(<4)QAAy9?AK#IHLNzw1w?ZB|5S=q
zCe6N6XRwsQ^i?p=(pZ`u<3Ag;C{E9Ee?cSjPcFafrjXr{yZt?iPp)^%JP~|&dSld4
z&Y`z#UtUM!j6wjs+c(hL(<v;%e#9K$#B;Ki$YfM8V|?fx3qz-QcFyHw$5gqr^c(Ap
zqWX|tlJiS)FS(Auo*px+@WID@syWgwajkGMp|nVr))TH_=f0c)u?EW6#_#@ObI^+z
zd!K=-4f+CkQ6XCu^|xwph+10Y?(k|%Dgb=Yjjn$L)~kjEmbQ=HEfyfY_nxedX>WMH
zw~D#^)l#=TVA1!SUrYZY4GHp7;Tl}G+}Mq%C72G1-;50LSUdg#9;sIKQI7#qx!TyG
zU~H5GoJ5)5CRSF~L+&H`f_AyU*ylp^N6&c7uC_8&d$Y;MuR@BZm5Pul{ewyAl<D}m
z;Z@D=hn8{Z(?pZyuAoPlMJ`Rw%z)KG;n3k*<$7YbW|wZnWFt554JqBf0M1{Kq$t#_
zOZ4n5By&T27pK*n=(<)uefp_R<^i*wX`QkdyGX)U)E^fjZkjH%kd?|kYu}c1B6q_$
zQnO*Nh}mHinbpI=m;KTb%(T^`rIB|8HN^nTXomB>ReEavPKv7EiF(BKOv?ZLyGx>r
z&(-P1IVuNhcgcBC5tg{gxHs?#fds26`3CsPH&wHg3Y^P$nBoP}CAHIB|2T4g`|mhG
z;(m+vocz*t_o2IVDVH<O$m&Et2<_4y@p4dgSLU+SUtj!x`x<Qqc7Ces6|U_nni+Jn
z|A)xa6}h`Z`^L95dH->D|8ln@9}76>o;F738h+o&U;ReD;ffW<E+pFoN3JV_{JQh0
zhI$Zxy1tgchR<33qnY;Q3<a{<#_aa&tBRT#4Vk>5%Mj<sFUrORf+IZ3?(z?{#{P|J
z{)KHyE3$HONU;e!nk-rg73*(IvpV1}qnf(Dwz3xx5*afqtKC1-6GwXW<hec-6rImr
z-trS+E`@=z7-HJq*d*i^WL&oEY}mW3yR|^NND=2voxh>QzW_$uxyxVxNr~RARz<Kz
zaT5iUW`9_pqLtJ`$YkV%VKC1kYZ7u-X=2{^O69SHD0_?zIN;D}K?l*rDoi(dExiGG
zPbi;-sAQj_^Y?iFL}Y>Mcx&3eeqzux%wN&QkX&YtMw|+krA=qeZL|HD(~UBWd>JBX
z4$yc9$K}*WDQz?Yzcu~r^MN{WfAdhZD#!1OM8YT%3Br#KhP>;IFyvzkh&on)9EvwU
z3kozJ5eD>yIBH|WJS7M5`{*gtm8h}hxsIMN_86RkPk4=b(?JZHvQ)*dcE*UM)v7%@
zOy@0#(AlKgSzE>sg3k{|8B$kj_y()mY73RtOvU~qU$C8okXuu0+&xRKmM*8zF-s`s
z%=w~_uGPfeU8GAyuN^9@Xjo94Aj8wco!`^EwK*~;?q_9vG_yC}X(CS<@!8idU$fk=
z9Ce_lk9k<zuhO+V#May|RE$>WA{smCRgdFnS#^q_UJhoayA5EczPXBLU!D!)U7Txu
znfoUS{I{q;oa>xq76+;fUZP{q;inV$p?E9#QC!c9xZOi$ZyvXGlXSQ9&0u3J32l}U
z0JJUTz<E3#{>1C!`B>T}zfnjU#o{&r?Bb+q-O?X{sntQ7vAkBrlUEK@bybWIVOwQ>
zf52*0JD#>AzRK+ME!R75+b<UW(^X2EN_n6l+PJcYc-JOCrc~w<Zh33}zKUpk(jx#{
zTd`YXV%!7J3CDXQT%O8{oX351Y0-+KO*e06Vbj>(LDy`;wk>L<^T7U$ah}B0yo|3(
z5%(Eu1z`VLVK&D(;z}oEV(}Fb=3*RsfAg6a+{3AGicrHX+my!5z6eKt!<3^s<QfUL
zOe;@n3um*4|1K%8fX`_+H!P#nF3`%Ww41<@kLWr>UyGr6(K6UN*zf2{*zPCxoR$&s
zU0rt};3568XDdwAOJSJH;#!qt(r6_Rj_aPPmYjL;VBDlu7uu}ump!EF^4jx11}OR}
zSWnr<#aB>GW%4~F&Jr5?Wja8N7X8s)rX430w>WNSTB?g0NG}0H%MrWl{Usm@fKvyr
zdh6yuj|Hbf;kd)F2}KLj>zbuk=@<K$vz>c>BiVvHV#|Z6{{$EQwk=<6B)HD8Y71f2
z7WWHYIbn--NB?0IWMJ6=ahB<$ow=Xt05DTm+p_pGubVTfG+5`!D?d(own5f)96nTb
z%Z4{86#!h5Ko=ex9wIymg>q)5PwE^6$Yg#~Rz(~qITq&`ANEv${XFDZ;IX0#{(dPI
zLZ{|zkEr>V>r%-fyX>gBRFMkh?U`h?tstLd$JNc54dx#g0Or+!*eK+xEe|nwZarz+
zp<BG$IfbtO4;1k$Py!a<5cJtc+)Z!c^Q~yUzlpO~g=DG?2EbUMrLn%f{0`Y^dKuQ*
zLlx(g5jwu9hN&5ks$K36qBNiMJ-F?ZIe6m!XF?Duf*;;@D!|Ko-sZnjchHZlQ;K6Z
z{OZt;w9F8W?0D9z!S#61P@c^hN-sm*90ECD0}%W3ND)Jh69FK?8YQ-osX0E*rQih<
zMhrghT|-vx$Cn}bmkE^3iCJp*`^=?uXTjes5QvSF#h;<9#(s16t;rc3zX5?cmB2q{
zrJw8J18X1V=`}ONCrXNmSjX$7bOI$)V{W8RPY;{I7@{1#D00H9w5g<~G~BQS^&Kb~
zPl2!cnO4T@@s#7&9BUgL^UV&<Szv5rRN~${hrtz8^YP5?8?U8q0EofA?_;E-wS)ph
zMziM_jy){uU}Q?Nq358X8@46pns(=lV)~UIeM)T;m@Buha%hqGe8=B*y3JZNKV?e~
zlbA9fz`amrF~~dDGkjq6TAipzBUEmpvcb8ZAwaR0SHW6KKeK9CQU~v%D=-+;AosE%
z&}>Aq_N=DM?_&VFg27R^To<xM_X{1#Md=q47<`*$Sk!q0?^lDs>#OT3hqz#~{bYPz
zxKKeQM*-ONP;1p_DUbV!kNecbU+rA<{Xo*9!VeebLkqI0&s~^Pb^7RDQcp+BRYYvY
z`_qLm8Rxlnr$qa~Cd$-Z#>R9VE2(6-?-N;l%LHSUorcQVt9aoOez>Rd@PFlFi4*2r
zA9}=wbfgW$Qmjt>ZlV4(q;XcXM9adE4MX|=%<6yN{{OfGkr9?|H+tU3-}%%%o^nSo
z`^3)Cu`Y7b$_K5Mrj(<X?$zYcUTSWJ7TH}g{I?zesJBfdOG=Metn5-2B<y(Xk?N4-
zk0(t~wM&j3`5pDq2Iuc+X9t+A$t+DJK<G7YwL|dJ1uuTzO0S;*@Ftq-_v0LV4{bN5
zptO=w-%4iAPyVsy#(OZwue(w}X>(V3u~?fzY3<TAN&HnrAD5`^Z*~(62`@osZ610x
z!<gy?6G@0J%!mG)J<H=*7h_gvIZt+$YlesCU0W)jlA^hcy@KzL#%SK(m*qL}GZKMj
zu^MfyeaMr;UwMz;-YnZ;@C+>D2g~+IWi57vt~Y)~z|iugJh>knEnj#5@X`^ZF>Yq*
zfvVw7$Dxc;n5Zye!CiQQXo@k=hQ|3$yvYL-nti>nx%7{k518wtX{%JK>-ZFXep}zn
z)+m+dEm^Wl-ln1RV;{3xWjN<)SLgYVLEXKq4)*0XgcGaQr|gCQOcNn+5p(9&GUCcf
zYP)Cpa06F*VLZ*2qdtmju6mjE%x=DwB#oJFixCR%TXIZNVG$93))Z9lp5FzsnzOHE
z)4jx==$pbz06KgaZv^Kc<JvwzJ`>t=ZwYieYStXsoDU@l)@=@Q+wG7lBhmul*Z79#
zw;Q2{O*7?pU%w+uHp}N@-@M$do+(=1N#iXnD6b0Or3|B?_^a7@15V{qvh6i%{(nd1
z|5+#xEzeo<nIE}M%Rt^1qHU^h#Dv*2@QQ!k<#VIsm=Y&vp6WYrx2zU|{h6<Z3DR(G
zTH$#d?+}UKfttnlnSKtYC{>I#+Pu$ynOau|l`e-LHTqbZl@4_{J2%_NoF0s(yxd-7
zPQHr@C=!ATevVng+Llp@47ZNoIQWZU<=;<$eJPf_fl$)uZU~IZmPI4>nMj&OqmSr6
z2tid*28NL;f-#<)-&n7$nXvTpWj(F7M%#|rd#>|e^fM6CDRhYqbiOSHpYZ<ZJ;NND
zXXX#M!L&V?Pwb4C6mkXGtd+V;=?Ewv?$y#sBtU_5$o1Y_p5Fv$c_mV@0?V!)1&(dT
zf*r)abDQtXzlMYG_n2aZKvG@mEZ+!c13i_kgvHG^21n`x$;1cO`+p{hzy5#$9NDy@
z18A&Ebf50*8c+mXH>Jt_o9*4Sjnr|l61D`#8eVG$5eyA@F6x)+qtz5om%N<*NP@RR
z01~hWRc0_r`UZ3Cocj+|i<y27|NeSL4d0dmo2j;Fx$k0HAN$cXXkkB9s7D#loC|LB
z8on5cA`k@=7J|YU&&N!{R*n&Y))sd{lYkV4e;o!zaOiXAIve)*?>W4+wanjvCRraw
zR~6%NEiY0^`gDOHcGfy=(!%KJ$xQJiF7QbqH#6R<R&f^Jz|(<MCI#EdJZ?P4cnFU#
z=y`w`KdNWk5&LJ9;t4KDdB+K1UlIKhGLP%Eu`0=qvPOh1A=)Zp*eLky&cbexZ;T$h
z!$h)O8AXLFh%wZJ{LO|=0x)s2tN4L?eB|Q7>`TCqmR_=#1B?VJSidK;#(Z*|#hY>u
ztSFW+)a(tBCyr#Bt%_s8?0R<I8kMC8`z=B(u~$%DJ8wl+`B6$o=WO*^g!Aq2#(|6-
z<hp`5;p*L7T)1P>MV3HqSL_r^I85}~apG>sTGw$|S0Ih!X{kRdO8V%G!9Bazb5hbX
zm_e-6e=T6hfay%KlZ_mvEzrohH={~6!8Imf#xS&taQOBL^TlXIf?SCUY`1QPURFv%
ze9#`QgN|im<^qaB{hjI4oQZ-QF$YuLQIhWcw%E`R9!m*CPhQD0&ry|dpY&9L9HGO6
z67#n6k*aJT<}LUACOk`Am!PGp&4CDYUB)<l;lOO@#GFy~(?^h8$aHE}AJ5U=e~bEm
e;<d!($UX5f!%{?!{W1mwJWLGDFO=!KMg1R9ssx(=

literal 0
HcmV?d00001

diff --git a/doc/source/images/rpc/rabt.svg b/doc/source/images/rpc/rabt.svg
new file mode 100644
index 000000000..142a33ce0
--- /dev/null
+++ b/doc/source/images/rpc/rabt.svg
@@ -0,0 +1,581 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
+<!-- Generated by Microsoft Visio 11.0, SVG Export, v1.0 rabt.svg Page-1 -->
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
+		xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="9.54096in" height="3.88601in"
+		viewBox="0 0 686.949 279.793" xml:space="preserve" color-interpolation-filters="sRGB" class="st21">
+	<v:documentProperties v:langID="2057" v:metric="true" v:viewMarkup="false"/>
+
+	<style type="text/css">
+	<![CDATA[
+		.st1 {fill:#e8eef7;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st2 {fill:#ff00ff;fill-opacity:0;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0;stroke-width:0.72}
+		.st3 {fill:url(#grad31-9);stroke:#ffffff;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72}
+		.st4 {fill:url(#grad30-15);stroke:#ffffff;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72}
+		.st5 {fill:url(#grad32-19);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72}
+		.st6 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+		.st7 {fill:#ff0000;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st8 {fill:#000000;font-family:Calibri;font-size:1.00001em}
+		.st9 {font-size:1em}
+		.st10 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st11 {marker-start:url(#mrkr13-65);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st12 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.22935779816514}
+		.st13 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st14 {marker-end:url(#mrkr13-77);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st15 {marker-end:url(#mrkr1-91);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st16 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st17 {fill:none;stroke:#000000;stroke-dasharray:3.6,2.16;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st18 {fill:#d8d8d8;stroke:#c00000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+		.st19 {fill:#000000;font-family:Calibri;font-size:1.5em}
+		.st20 {font-size:0.666672em}
+		.st21 {fill:none;fill-rule:evenodd;font-size:12;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+	]]>
+	</style>
+
+	<defs id="Patterns_And_Gradients">
+		<pattern id="grad31-9" v:fillPattern="31" v:foreground="#ffffff" v:background="#a7a7a7" x="0" y="0" width="1" height="1"
+				patternContentUnits="objectBoundingBox">
+			<path d="M 0 0 L 0 1 L 1 1 z" style="fill:url(#grad28-10)"/>
+			<path d="M 0 0 L 1 0 L 1 1 z" style="fill:url(#grad25-11)"/>
+		</pattern>
+		<linearGradient id="grad28-10" v:fillPattern="31" v:foreground="#ffffff" v:background="#a7a7a7" x1="0" y1="0" x2="0" y2="1">
+			<stop offset="0" style="stop-color:#ffffff;stop-opacity:1"/>
+			<stop offset="1" style="stop-color:#a7a7a7;stop-opacity:1"/>
+		</linearGradient>
+		<linearGradient id="grad25-11" v:fillPattern="31" v:foreground="#ffffff" v:background="#a7a7a7" x1="0" y1="0" x2="1" y2="0">
+			<stop offset="0" style="stop-color:#ffffff;stop-opacity:1"/>
+			<stop offset="1" style="stop-color:#a7a7a7;stop-opacity:1"/>
+		</linearGradient>
+		<linearGradient id="grad30-15" v:fillPattern="30" v:foreground="#ffffff" v:background="#dfdfdf" x1="0" y1="1" x2="0" y2="0">
+			<stop offset="0" style="stop-color:#ffffff;stop-opacity:1"/>
+			<stop offset="1" style="stop-color:#dfdfdf;stop-opacity:1"/>
+		</linearGradient>
+		<pattern id="grad32-19" v:fillPattern="32" v:foreground="#ffffff" v:background="#c0c0c0" x="0" y="0" width="1" height="1"
+				patternContentUnits="objectBoundingBox">
+			<path d="M 0 1 L 0 0 L 1 0 z" style="fill:url(#grad27-20)"/>
+			<path d="M 0 1 L 1 1 L 1 0 z" style="fill:url(#grad28-21)"/>
+		</pattern>
+		<linearGradient id="grad27-20" v:fillPattern="32" v:foreground="#ffffff" v:background="#c0c0c0" x1="1" y1="0" x2="0" y2="0">
+			<stop offset="0" style="stop-color:#ffffff;stop-opacity:1"/>
+			<stop offset="1" style="stop-color:#c0c0c0;stop-opacity:1"/>
+		</linearGradient>
+		<linearGradient id="grad28-21" v:fillPattern="32" v:foreground="#ffffff" v:background="#c0c0c0" x1="0" y1="0" x2="0" y2="1">
+			<stop offset="0" style="stop-color:#ffffff;stop-opacity:1"/>
+			<stop offset="1" style="stop-color:#c0c0c0;stop-opacity:1"/>
+		</linearGradient>
+	</defs>
+	<defs id="Markers">
+		<g id="lend13">
+			<path d="M 3 1 L 0 0 L 3 -1 L 3 1 " style="stroke:none"/>
+		</g>
+		<marker id="mrkr13-65" class="st12" v:arrowType="13" v:arrowSize="2" v:setback="12.6" refX="12.6" orient="auto"
+				markerUnits="strokeWidth">
+			<use xlink:href="#lend13" transform="scale(4.36) "/>
+		</marker>
+		<marker id="mrkr13-77" class="st12" v:arrowType="13" v:arrowSize="2" v:setback="13.08" refX="-13.08" orient="auto"
+				markerUnits="strokeWidth">
+			<use xlink:href="#lend13" transform="scale(-4.36,-4.36) "/>
+		</marker>
+		<g id="lend1">
+			<path d="M 1 -1 L 0 0 L 1 1 " style="stroke-linecap:round;stroke-linejoin:round;fill:none"/>
+		</g>
+		<marker id="mrkr1-91" class="st12" v:arrowType="1" v:arrowSize="2" orient="auto" markerUnits="strokeWidth">
+			<use xlink:href="#lend1" transform="scale(-4.36,-4.36) "/>
+		</marker>
+	</defs>
+	<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
+		<title>Page-1</title>
+		<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
+				v:shadowOffsetY="-8.50394"/>
+		<g id="shape1-1" v:mID="1" v:groupContext="shape" transform="translate(185.002,-44.2771)">
+			<title>Rounded rectangle</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<path d="M297.64 279.79 A14.1733 14.1733 -180 0 0 311.81 265.62 L311.81 58.69 A14.1733 14.1733 -180 0 0 297.64 44.52
+						 L14.17 44.52 A14.1733 14.1733 -180 0 0 -0 58.69 L0 265.62 A14.1733 14.1733 -180 0 0 14.17 279.79 L297.64
+						 279.79 Z" class="st1"/>
+		</g>
+		<g id="group2-3" transform="translate(241.695,-183.175)" v:mID="2" v:groupContext="group">
+			<v:custProps>
+				<v:cp v:nameU="ShapeClass" v:lbl="ShapeClass" v:type="0" v:invis="true" v:ask="false" v:langID="1033"
+						v:val="VT4(Equipment)"/>
+				<v:cp v:nameU="ShapeType" v:lbl="ShapeType" v:type="0" v:invis="true" v:ask="false" v:langID="1033"
+						v:val="VT4(Device)"/>
+				<v:cp v:nameU="SubShapeType" v:lbl="SubShapeType" v:type="0" v:invis="true" v:ask="false" v:langID="1033"
+						v:val="VT4(Switch)"/>
+				<v:cp v:nameU="Manufacturer" v:lbl="Manufacturer" v:type="0" v:sortKey="Equipment" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="ProductNumber" v:lbl="Product Number" v:type="0" v:sortKey="Equipment" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="PartNumber" v:lbl="Part Number" v:type="0" v:sortKey="Equipment" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="ProductDescription" v:lbl="Product Description" v:type="0" v:sortKey="Equipment" v:invis="false"
+						v:ask="false" v:langID="1033"/>
+				<v:cp v:nameU="AssetNumber" v:lbl="Asset Number" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="SerialNumber" v:lbl="Serial Number" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="Location" v:lbl="Location" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="Building" v:lbl="Building" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="Room" v:lbl="Room" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false" v:langID="1033"/>
+				<v:cp v:nameU="NetworkName" v:lbl="Network Name" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="IPAddress" v:lbl="IP Address" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="SubnetMask" v:lbl="Subnet Mask" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="AdminInterface" v:lbl="Administrative Interface" v:type="0" v:sortKey="Network" v:invis="false"
+						v:ask="false" v:langID="1033"/>
+				<v:cp v:nameU="NumberOfPorts" v:lbl="Number of Ports" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="MACAddress" v:lbl="MAC Address" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="CommunityString" v:lbl="Community String" v:type="0" v:sortKey="Network" v:invis="false"
+						v:ask="false" v:langID="1033"/>
+				<v:cp v:nameU="NetworkDescription" v:lbl="Network Description" v:type="0" v:sortKey="Network" v:invis="false"
+						v:ask="false" v:langID="1033"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="HasText" v:val="VT0(1):5"/>
+				<v:ud v:nameU="ShapeClass" v:val="VT0(5):26"/>
+				<v:ud v:nameU="ShapeType" v:val="VT0(8):26"/>
+				<v:ud v:nameU="SubShapeType" v:val="VT0(66):26"/>
+				<v:ud v:nameU="visLegendShape" v:val="VT0(2):26"/>
+				<v:ud v:nameU="SolSH" v:val="VT14({BF0433D9-CD73-4EB5-8390-8653BE590246}):41"/>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<title>ATM switch</title>
+			<desc>name: control_exchange (type: topic)</desc>
+			<g id="shape3-4" v:mID="3" v:groupContext="shape" transform="translate(-0.359055,0)">
+				<title>Sheet.3</title>
+				<path d="M28.35 279.79 L42.52 271.61 L42.52 239.47 L14.17 223.1 L0 231.28 L0 263.43 L28.35 279.79 Z" class="st2"/>
+			</g>
+			<g id="shape4-6" v:mID="4" v:groupContext="shape" transform="translate(28.1575,-0.0944882)">
+				<title>Sheet.4</title>
+				<path d="M0 247.65 L0 279.79 L14.17 271.61 L14.17 239.47 L0 247.65 Z" class="st3"/>
+			</g>
+			<g id="shape5-12" v:mID="5" v:groupContext="shape" transform="translate(-0.188976,-32.2386)">
+				<title>Sheet.5</title>
+				<path d="M0 263.43 L28.35 279.79 L42.52 271.61 L14.17 255.24 L0 263.43 Z" class="st4"/>
+			</g>
+			<g id="shape6-16" v:mID="6" v:groupContext="shape" transform="translate(-0.188976,-0.0944882)">
+				<title>Sheet.6</title>
+				<path d="M0 263.43 L28.35 279.79 L28.35 247.65 L0 231.28 L0 263.43 Z" class="st5"/>
+			</g>
+			<g id="shape7-22" v:mID="7" v:groupContext="shape" transform="translate(-0.188976,-0.0944882)">
+				<title>Sheet.7</title>
+				<path d="M0 231.28 L0 263.43 L28.35 279.79 L42.52 271.61 L42.52 239.47 L14.17 223.1 L0 231.28" class="st6"/>
+			</g>
+			<g id="shape8-25" v:mID="8" v:groupContext="shape" transform="translate(1.88976,-6.80315)">
+				<title>Sheet.8</title>
+				<path d="M4.05 244.46 L0 246.76 L4.05 253.74 L4.05 250.02 L7.09 251.78 L11.14 261.54 L7.09 266.63 L4.05 264.87 L4.05
+							 261.16 L0 263.46 L4.05 270.44 L4.05 266.73 A59.6713 55.5985 -178.23 0 0 8.1 269.07 L12.15 263.98 L16.2
+							 273.74 L20.25 276.08 L20.25 279.79 L24.3 277.49 L20.25 270.51 L20.25 274.22 L17.21 272.47 L13.16 262.71
+							 L17.21 257.62 L20.25 259.38 L20.25 263.09 L24.3 260.79 L20.25 253.81 L20.25 257.52 L16.2 255.18 A89.6201
+							 83.5031 -177.36 0 0 12.15 260.27 L8.1 250.51 L4.05 248.17 L4.05 244.46 Z" class="st7"/>
+			</g>
+			<g id="shape2-27" v:mID="2" v:groupContext="groupContent">
+				<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+				<v:textRect cx="21.2598" cy="298.195" width="131.44" height="36.8038"/>
+				<text x="-39.1" y="294.59" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>name: control_exchange<v:newlineChar/><tspan
+							x="-8.44" dy="1.2em" class="st9">(</tspan>type: topic)</text>			</g>
+		</g>
+		<g id="group17-30" transform="translate(403.27,-225.694)" v:mID="17" v:groupContext="group">
+			<title>Sheet.17</title>
+			<g id="shape18-31" v:mID="18" v:groupContext="shape">
+				<title>Rectangle</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape19-33" v:mID="19" v:groupContext="shape" transform="translate(8.50394,-5.68434E-014)">
+				<title>Rectangle.10</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape20-35" v:mID="20" v:groupContext="shape" transform="translate(17.0079,-5.68434E-014)">
+				<title>Rectangle.11</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape21-37" v:mID="21" v:groupContext="shape" transform="translate(25.5118,-5.68434E-014)">
+				<title>Rectangle.12</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape22-39" v:mID="22" v:groupContext="shape" transform="translate(34.0157,-5.68434E-014)">
+				<title>Rectangle.13</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape23-41" v:mID="23" v:groupContext="shape" transform="translate(42.5197,-5.68434E-014)">
+				<title>Rectangle.14</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape24-43" v:mID="24" v:groupContext="shape" transform="translate(51.0236,-5.68434E-014)">
+				<title>Rectangle.15</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+		</g>
+		<g id="group9-45" transform="translate(403.27,-160.498)" v:mID="9" v:groupContext="group">
+			<title>Sheet.9</title>
+			<g id="shape10-46" v:mID="10" v:groupContext="shape">
+				<title>Rectangle</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape11-48" v:mID="11" v:groupContext="shape" transform="translate(8.50394,-5.68434E-014)">
+				<title>Rectangle.10</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape12-50" v:mID="12" v:groupContext="shape" transform="translate(17.0079,-5.68434E-014)">
+				<title>Rectangle.11</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape13-52" v:mID="13" v:groupContext="shape" transform="translate(25.5118,-5.68434E-014)">
+				<title>Rectangle.12</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape14-54" v:mID="14" v:groupContext="shape" transform="translate(34.0157,-5.68434E-014)">
+				<title>Rectangle.13</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape15-56" v:mID="15" v:groupContext="shape" transform="translate(42.5197,-5.68434E-014)">
+				<title>Rectangle.14</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape16-58" v:mID="16" v:groupContext="shape" transform="translate(51.0236,-5.68434E-014)">
+				<title>Rectangle.15</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+		</g>
+		<g id="shape25-60" v:mID="25" v:groupContext="shape" transform="translate(298.388,-214.356)">
+			<title>Sheet.25</title>
+			<path d="M9.45 279.79 L9.81 279.79 L56.69 279.79 L56.69 251.45 L96.38 251.45 L104.88 251.45" class="st11"/>
+		</g>
+		<g id="shape27-66" v:mID="27" v:groupContext="shape" transform="translate(383.427,-210.104)">
+			<title>Sheet.27</title>
+			<desc>key: topic</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="49.6063" cy="272.706" width="99.22" height="14.1732"/>
+			<rect x="0" y="265.62" width="99.2126" height="14.1732" class="st13"/>
+			<text x="25.98" y="276.31" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>key: topic</text>		</g>
+		<g id="shape28-69" v:mID="28" v:groupContext="shape" transform="translate(391.931,-140.498)">
+			<title>Sheet.28</title>
+			<desc>key: topic.host</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="41.1024" cy="269.793" width="82.21" height="20"/>
+			<rect x="0" y="259.793" width="82.2047" height="20" class="st13"/>
+			<text x="5.28" y="273.39" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>key: topic.host</text>		</g>
+		<g id="shape26-72" v:mID="26" v:groupContext="shape" transform="translate(298.388,-177.505)">
+			<title>Sheet.26</title>
+			<path d="M96.38 279.79 L56.69 279.79 L56.69 251.45 L9.81 251.45" class="st14"/>
+		</g>
+		<g id="shape29-78" v:mID="29" v:groupContext="shape" transform="translate(567.679,-221.442)">
+			<title>Rectangle</title>
+			<desc>Topic Consumer</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="258.533" width="85.04" height="42.5197"/>
+			<rect x="0" y="237.273" width="85.0394" height="42.5197" class="st1"/>
+			<text x="29.37" y="254.93" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Topic <tspan
+						x="17.63" dy="1.2em" class="st9">Consumer</tspan></text>		</g>
+		<g id="shape30-82" v:mID="30" v:groupContext="shape" transform="translate(567.679,-156.246)">
+			<title>Rectangle.30</title>
+			<desc>Topic Consumer</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="258.533" width="85.04" height="42.5197"/>
+			<rect x="0" y="237.273" width="85.0394" height="42.5197" class="st1"/>
+			<text x="29.37" y="254.93" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Topic <tspan
+						x="17.63" dy="1.2em" class="st9">Consumer</tspan></text>		</g>
+		<g id="shape31-86" v:mID="31" v:groupContext="shape" transform="translate(462.797,-242.702)">
+			<title>Sheet.31</title>
+			<path d="M0 279.79 L104.88 279.79" class="st15"/>
+		</g>
+		<g id="shape32-92" v:mID="32" v:groupContext="shape" transform="translate(462.797,-177.505)">
+			<title>Sheet.32</title>
+			<path d="M0 279.79 L104.88 279.79" class="st15"/>
+		</g>
+		<g id="shape33-97" v:mID="33" v:groupContext="shape" transform="translate(394.766,-177.505)">
+			<title>Sheet.33</title>
+			<path d="M0 279.79 L8.5 279.79" class="st16"/>
+		</g>
+		<g id="shape34-100" v:mID="34" v:groupContext="shape" transform="translate(553.506,-72.6236)">
+			<title>Rectangle.34</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<path d="M0 279.79 L113.39 279.79 L113.39 78.53 L0 78.53 L0 279.79 Z" class="st17"/>
+		</g>
+		<g id="shape35-102" v:mID="35" v:groupContext="shape" transform="translate(567.679,-83.9622)">
+			<title>Rectangle.35</title>
+			<desc>Direct Publisher</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="258.533" width="85.04" height="42.5197"/>
+			<rect x="0" y="237.273" width="85.0394" height="42.5197" class="st18"/>
+			<text x="27.83" y="254.93" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Direct<v:newlineChar/><tspan
+						x="19.79" dy="1.2em" class="st9">Publisher</tspan></text>		</g>
+		<g id="shape36-106" v:mID="36" v:groupContext="shape" transform="translate(534.199,-45.6157)">
+			<title>Sheet.36</title>
+			<desc>Worker (e.g. compute)</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="76" cy="269.793" width="152" height="20"/>
+			<rect x="0" y="259.793" width="152" height="20" class="st13"/>
+			<text x="57.6" y="266.19" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Worker<v:newlineChar/><tspan
+						x="40.37" dy="1.2em" class="st9">(</tspan>e.g. compute)</text>		</g>
+		<g id="group37-110" transform="translate(410.356,-81.1275)" v:mID="37" v:groupContext="group">
+			<v:custProps>
+				<v:cp v:nameU="ShapeClass" v:lbl="ShapeClass" v:type="0" v:invis="true" v:ask="false" v:langID="1033"
+						v:val="VT4(Equipment)"/>
+				<v:cp v:nameU="ShapeType" v:lbl="ShapeType" v:type="0" v:invis="true" v:ask="false" v:langID="1033"
+						v:val="VT4(Device)"/>
+				<v:cp v:nameU="SubShapeType" v:lbl="SubShapeType" v:type="0" v:invis="true" v:ask="false" v:langID="1033"
+						v:val="VT4(Switch)"/>
+				<v:cp v:nameU="Manufacturer" v:lbl="Manufacturer" v:type="0" v:sortKey="Equipment" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="ProductNumber" v:lbl="Product Number" v:type="0" v:sortKey="Equipment" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="PartNumber" v:lbl="Part Number" v:type="0" v:sortKey="Equipment" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="ProductDescription" v:lbl="Product Description" v:type="0" v:sortKey="Equipment" v:invis="false"
+						v:ask="false" v:langID="1033"/>
+				<v:cp v:nameU="AssetNumber" v:lbl="Asset Number" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="SerialNumber" v:lbl="Serial Number" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="Location" v:lbl="Location" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="Building" v:lbl="Building" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="Room" v:lbl="Room" v:type="0" v:sortKey="Asset" v:invis="false" v:ask="false" v:langID="1033"/>
+				<v:cp v:nameU="NetworkName" v:lbl="Network Name" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="IPAddress" v:lbl="IP Address" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="SubnetMask" v:lbl="Subnet Mask" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="AdminInterface" v:lbl="Administrative Interface" v:type="0" v:sortKey="Network" v:invis="false"
+						v:ask="false" v:langID="1033"/>
+				<v:cp v:nameU="NumberOfPorts" v:lbl="Number of Ports" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="MACAddress" v:lbl="MAC Address" v:type="0" v:sortKey="Network" v:invis="false" v:ask="false"
+						v:langID="1033"/>
+				<v:cp v:nameU="CommunityString" v:lbl="Community String" v:type="0" v:sortKey="Network" v:invis="false"
+						v:ask="false" v:langID="1033"/>
+				<v:cp v:nameU="NetworkDescription" v:lbl="Network Description" v:type="0" v:sortKey="Network" v:invis="false"
+						v:ask="false" v:langID="1033"/>
+			</v:custProps>
+			<v:userDefs>
+				<v:ud v:nameU="HasText" v:val="VT0(1):5"/>
+				<v:ud v:nameU="ShapeClass" v:val="VT0(5):26"/>
+				<v:ud v:nameU="ShapeType" v:val="VT0(8):26"/>
+				<v:ud v:nameU="SubShapeType" v:val="VT0(66):26"/>
+				<v:ud v:nameU="visLegendShape" v:val="VT0(2):26"/>
+				<v:ud v:nameU="SolSH" v:val="VT14({BF0433D9-CD73-4EB5-8390-8653BE590246}):41"/>
+				<v:ud v:nameU="visVersion" v:prompt="" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<title>ATM switch.37</title>
+			<desc>name: msg_id (type: direct)</desc>
+			<g id="shape38-111" v:mID="38" v:groupContext="shape" transform="translate(-0.359055,0)">
+				<title>Sheet.38</title>
+				<path d="M28.35 279.79 L42.52 271.61 L42.52 239.47 L14.17 223.1 L0 231.28 L0 263.43 L28.35 279.79 Z" class="st2"/>
+			</g>
+			<g id="shape39-113" v:mID="39" v:groupContext="shape" transform="translate(28.1575,-0.0944882)">
+				<title>Sheet.39</title>
+				<path d="M0 247.65 L0 279.79 L14.17 271.61 L14.17 239.47 L0 247.65 Z" class="st3"/>
+			</g>
+			<g id="shape40-116" v:mID="40" v:groupContext="shape" transform="translate(-0.188976,-32.2386)">
+				<title>Sheet.40</title>
+				<path d="M0 263.43 L28.35 279.79 L42.52 271.61 L14.17 255.24 L0 263.43 Z" class="st4"/>
+			</g>
+			<g id="shape41-119" v:mID="41" v:groupContext="shape" transform="translate(-0.188976,-0.0944882)">
+				<title>Sheet.41</title>
+				<path d="M0 263.43 L28.35 279.79 L28.35 247.65 L0 231.28 L0 263.43 Z" class="st5"/>
+			</g>
+			<g id="shape42-122" v:mID="42" v:groupContext="shape" transform="translate(-0.188976,-0.0944882)">
+				<title>Sheet.42</title>
+				<path d="M0 231.28 L0 263.43 L28.35 279.79 L42.52 271.61 L42.52 239.47 L14.17 223.1 L0 231.28" class="st6"/>
+			</g>
+			<g id="shape43-125" v:mID="43" v:groupContext="shape" transform="translate(1.88976,-6.80315)">
+				<title>Sheet.43</title>
+				<path d="M4.05 244.46 L0 246.76 L4.05 253.74 L4.05 250.02 L7.09 251.78 L11.14 261.54 L7.09 266.63 L4.05 264.87 L4.05
+							 261.16 L0 263.46 L4.05 270.44 L4.05 266.73 A59.6713 55.5985 -178.23 0 0 8.1 269.07 L12.15 263.98 L16.2
+							 273.74 L20.25 276.08 L20.25 279.79 L24.3 277.49 L20.25 270.51 L20.25 274.22 L17.21 272.47 L13.16 262.71
+							 L17.21 257.62 L20.25 259.38 L20.25 263.09 L24.3 260.79 L20.25 253.81 L20.25 257.52 L16.2 255.18 A89.6201
+							 83.5031 -177.36 0 0 12.15 260.27 L8.1 250.51 L4.05 248.17 L4.05 244.46 Z" class="st7"/>
+			</g>
+			<g id="shape37-127" v:mID="37" v:groupContext="groupContent">
+				<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+				<v:textRect cx="21.2598" cy="298.195" width="79.22" height="36.8038"/>
+				<text x="-12.99" y="294.59" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>name: msg_id<v:newlineChar/><tspan
+							x="-10.36" dy="1.2em" class="st9">(</tspan>type: direct)</text>			</g>
+		</g>
+		<g id="group44-130" transform="translate(236.026,-89.6315)" v:mID="44" v:groupContext="group">
+			<title>Sheet.44</title>
+			<g id="shape45-131" v:mID="45" v:groupContext="shape">
+				<title>Rectangle</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape46-133" v:mID="46" v:groupContext="shape" transform="translate(8.50394,-5.68434E-014)">
+				<title>Rectangle.10</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape47-135" v:mID="47" v:groupContext="shape" transform="translate(17.0079,-5.68434E-014)">
+				<title>Rectangle.11</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape48-137" v:mID="48" v:groupContext="shape" transform="translate(25.5118,-5.68434E-014)">
+				<title>Rectangle.12</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape49-139" v:mID="49" v:groupContext="shape" transform="translate(34.0157,-5.68434E-014)">
+				<title>Rectangle.13</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape50-141" v:mID="50" v:groupContext="shape" transform="translate(42.5197,-5.68434E-014)">
+				<title>Rectangle.14</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+			<g id="shape51-143" v:mID="51" v:groupContext="shape" transform="translate(51.0236,-5.68434E-014)">
+				<title>Rectangle.15</title>
+				<v:userDefs>
+					<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+				</v:userDefs>
+				<rect x="0" y="245.777" width="8.50394" height="34.0157" class="st10"/>
+			</g>
+		</g>
+		<g id="shape52-145" v:mID="52" v:groupContext="shape" transform="translate(216.183,-75.4582)">
+			<title>Sheet.52</title>
+			<desc>key: msg_id</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="49.6063" cy="272.706" width="99.22" height="14.1732"/>
+			<rect x="0" y="265.62" width="99.2126" height="14.1732" class="st13"/>
+			<text x="20.73" y="276.31" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>key: msg_id</text>		</g>
+		<g id="shape53-148" v:mID="53" v:groupContext="shape" transform="translate(295.553,-106.639)">
+			<title>Sheet.53</title>
+			<path d="M0 279.79 L97.91 279.79" class="st14"/>
+		</g>
+		<g id="shape54-153" v:mID="54" v:groupContext="shape" transform="translate(567.679,454.363) rotate(180)">
+			<title>Sheet.54</title>
+			<path d="M0 279.79 L104.88 279.79" class="st15"/>
+		</g>
+		<g id="shape57-158" v:mID="57" v:groupContext="shape" transform="translate(20.0571,-72.6236)">
+			<title>Rectangle.57</title>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<path d="M0 279.79 L113.39 279.79 L113.39 101.21 L0 101.21 L0 279.79 Z" class="st17"/>
+		</g>
+		<g id="shape58-160" v:mID="58" v:groupContext="shape" transform="translate(34.2303,-85.3795)">
+			<title>Rectangle.58</title>
+			<desc>Direct Consumer</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="258.533" width="85.04" height="42.5197"/>
+			<rect x="0" y="237.273" width="85.0394" height="42.5197" class="st18"/>
+			<text x="27.83" y="254.93" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Direct<v:newlineChar/><tspan
+						x="17.63" dy="1.2em" class="st9">Consumer</tspan></text>		</g>
+		<g id="shape59-164" v:mID="59" v:groupContext="shape" transform="translate(0.75,-47.1118)">
+			<title>Sheet.59</title>
+			<desc>Invoker (e.g. api)</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="76" cy="269.793" width="152" height="20"/>
+			<rect x="0" y="259.793" width="152" height="20" class="st13"/>
+			<text x="57.66" y="266.19" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Invoker<v:newlineChar/><tspan
+						x="54.76" dy="1.2em" class="st9">(</tspan>e.g. api)</text>		</g>
+		<g id="shape55-168" v:mID="55" v:groupContext="shape" transform="translate(34.2303,-195.931)">
+			<title>Rectangle.55</title>
+			<desc>Topic Publisher</desc>
+			<v:userDefs>
+				<v:ud v:nameU="visVersion" v:val="VT0(14):26"/>
+			</v:userDefs>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="42.5197" cy="258.533" width="85.04" height="42.5197"/>
+			<rect x="0" y="237.273" width="85.0394" height="42.5197" class="st18"/>
+			<text x="29.37" y="254.93" class="st8" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>Topic <v:newlineChar/><tspan
+						x="19.79" dy="1.2em" class="st9">Publisher</tspan></text>		</g>
+		<g id="shape56-172" v:mID="56" v:groupContext="shape" transform="translate(119.27,-217.191)">
+			<title>Sheet.56</title>
+			<path d="M0 279.79 L113.92 279.79" class="st15"/>
+		</g>
+		<g id="shape60-177" v:mID="60" v:groupContext="shape" transform="translate(236.026,452.946) rotate(180)">
+			<title>Sheet.60</title>
+			<path d="M0 279.79 L116.76 279.79" class="st15"/>
+		</g>
+		<g id="shape62-182" v:mID="62" v:groupContext="shape" transform="translate(273.947,-11.6)">
+			<title>Sheet.62</title>
+			<desc>RabbitMQ Node (single virtual host context)</desc>
+			<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
+			<v:textRect cx="76" cy="269.793" width="152" height="20"/>
+			<rect x="0" y="259.793" width="152" height="20" class="st13"/>
+			<text x="16.72" y="264.39" class="st19" v:langID="2057"><v:paragraph v:horizAlign="1"/><v:tabList/>RabbitMQ Node<v:newlineChar/><tspan
+						x="9.51" dy="1.8em" class="st20">(</tspan><tspan class="st20">single virtual host context</tspan><tspan
+						class="st20">)</tspan></text>		</g>
+	</g>
+</svg>
diff --git a/doc/source/images/rpc/state.png b/doc/source/images/rpc/state.png
new file mode 100644
index 0000000000000000000000000000000000000000..76ce675a9f70f47a3fb14731fb41db342f6dd20b
GIT binary patch
literal 38543
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

literal 0
HcmV?d00001

diff --git a/doc/source/images/vmwareapi_blockdiagram.jpg b/doc/source/images/vmwareapi_blockdiagram.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..1ae1fc8e0e6bc27ae234ce5d46df78cc0dc791b8
GIT binary patch
literal 75363
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
G$bSPMS4eCC

literal 0
HcmV?d00001

diff --git a/doc/source/images/zone_aware_overview.png b/doc/source/images/zone_aware_overview.png
new file mode 100755
index 0000000000000000000000000000000000000000..470e78138971caa8a404585e21cdda46693eb6db
GIT binary patch
literal 56142
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
JQqd~({{S&lN+SRO

literal 0
HcmV?d00001

diff --git a/doc/source/images/zone_aware_scheduler.png b/doc/source/images/zone_aware_scheduler.png
new file mode 100644
index 0000000000000000000000000000000000000000..a144e1212780be081f2bedaaec8d3deddfd19d45
GIT binary patch
literal 20902
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
O5nyTrGpx~fj{YAtW)b)R

literal 0
HcmV?d00001

diff --git a/doc/source/images/zone_overview.png b/doc/source/images/zone_overview.png
new file mode 100755
index 0000000000000000000000000000000000000000..cc891df0a4c7b2c1d2a16e61de04570c790a7617
GIT binary patch
literal 51587
zcmce7b8u!)&~CV~H@35}lg%63ww;Y_ZEV}v*tTsuZ*0BU*vYrQ`_=vP{(GltYNltZ
zrn>s{>FMX`b0QSwC6M6p;K9JakfbC<mBGNk@BejoScrcsz<9>We*?I)vV<^L%?!cW
zKLO4`Qp*_(40+(c4vtA9{rle{sf(DVi;BIui@TAN8JL8Vk;5-b6A^nmH!~*}Gba)n
zDLWT4n;-6Buee}fV{cNTLaH9wmpKT!a$0YrPd`h&OA%7M(J<i1TTcno9J5%M$i+ih
zYS_94qbH}*S51Xwf6|Z@Q7B7GpY3BsqEcc?CooEjxiaR=eDr+H^1Lk>T9rh<MEhUA
z`uX^*Xq{+T^Id3pe?4kjGr<TMGvgqZ3<|w3A{+jj9bW|v69)Ag@{ni(S^jN62L8Xq
zF9J7LM_irvrzHk%-&4cBPn8&dg)4^qWOD(ZcdW`ue&UO3|F*i4017dwg8t7>Y7eXF
ztfitvixcb~zR~UY*Tl;pi9c&(M<4fWqZrDV=l&a{h{tmM`=4QDm`YVg-}H6>Z~35W
z%X}+scRIF7ILv>?*OFFG;2$iRoTBHoY80EEyu(4wGrXI_N%7|`m(mF#GN`xcps78G
z9c;H=2|T5>o~&i%qb@V#846f|)FVQDTyFAH99Ivt6uz|5nA5pRuJ&uN{<b}2e@hXc
zK3Rc`Av>Eipra7xoG_1~fTxupv-v#>5t02`HeZIv{XoEo0`hHEo;g}l8B?p~TpwH1
zc4)iRxECHaQCW|fZdZ0BKO9TOOK3qfpb3y|7lpNCG{~Qqr{u7r#P<FE;}G2zS~o;m
zBR~~)cpW_>@!XQ!DYkU!7u01%vC1n(YD>bIm>l6e`)&LMK~J4oDF+_E!YW6C>O29#
z`JXnl;owygn@nKE3jt@=)|@e-suPPEibB2)7flh_UtO96hxG>=WRLKTBv`zrZc9aL
zzbsbkrHXGgGe{AfLslV8htkYKsE{XKb@MbNCdIn4F`0)bp#^YOf(ZgK)4uktZFEJ#
z73j!u3UW6b(pnGIuntwT(XMkpLeAr;KBaMwn05Ucj(Z}XksfSl%Fx;K3oKE)8m6q=
zbc*l|pgJI$F*ywK1p9yboA5Y$%VNEf(BiIcPPpA#g&fCVk>N}U$ZZaH+ug+T2R}H}
zR#$qnSUS)>60&_9n^^HzPVo5;OuI4@I>Eih-#G8rVh5<|BI=sRQkVF3#x2CW!bIpr
zM{Eyn<*lsNsZX2Xp?_yne_4@Au5B$z7KO5@zpiR#W`DaBz@PkiN|nsX|De@978*;y
z%+hMmN*7Ho{(`2DKyvaH0|?#F5h^?hk2^?2?@8yzS-|3Z3oGLNjjuY^b0CS@Le8(p
zW6{K4vFZczQtt+ftc<PBkU~xMv$$=tU7c~i6hjRnhNYmRdZNhG>;WXGjvEJZJ~a#1
z;6J!*VC2$!>!D-9y>(ymoJDpCm>HSF!7H8jG<&hXR@G|6og&;yxSSt1aq;U_8qZR>
zbF#6&tS;_^WErG3JG}m?$d$iFLiy>8QN(-o_ZxX&`YGpTpwKnYS~^75_2fNa9<syI
zd-0>Q8k`pnUA<Y@!DchF#+-+1WJ>?7OucUg-Wn8@@e%I5jBcm(xR6of#cad=y0$*)
zlnbv-?CW|{T_hFMdGUV6N5lM5!`bV*Kf^Hj>T@Yrfv$3)pWA<8N-HO#-xNTkm$tt6
zqq4A>kon<2XB?rV4d)lb8&a0jrEbk*2bzbxJL%Mp&h<;T375)q#pG`#DR;VN%H)ib
z0dbT|VKsi2g-e~{vN&}4VJ13@3~RdcYo03~`QmSUCPM=4NF0s6U-Bt-EBn1x5HY7d
z#mXCz0yt9uIlyoZNk>OpPUO#ryTBjuxn0L#z)_BulW*(knrqxIq2gkpmju6T?Tk5S
zNNWQP{1)3`7RT%^F&KeF=QOkJP+Px-bBnSYVO}*e<+PgiRBfs@%W9wo=cxI=nnzd%
zxh~jFXV_9lN5p+kI9HO_x7h9*q)8vO-<iG{@j8cCT$Y!mG>+n;hUQfZkf@&xZ51tg
zgQKzNr20cx^8JzDvE3q`dhJPK88lw<saKYZ00^zR=QQ7%+AJl;g|hw{BD?06v)*S+
zJ}w%TBV36x+<3oqKeTgn?O*@MiMb!0{U9Q%oAJ%=sb3CohGyzy@Xh6zSQ&8}n!>2B
z7huX6A_-UM5va-^$|1oi(OY?iA`-X+G+{6Hbs5}tpRWw*QC5Er6cgWD$Owu)C+Nju
znSbbQU9ZB@IIdbeZu_#oI+=ra9&VuGoBO9_jLMIIUL6bSiF}7^Oy|l^UdDquUGZ4W
z993;Dx!7`qxYJ&9lALmhHtVq<47vQaGw#yb-?6O)aP3U(TKQ<mUQa<iSR?WWy<Vi&
zT4`$NGqZQpnl6rOel+w;_P!S6q53;#8&6PI=<afVzquo@Rk~K?ha2vI>mkBr?X@ra
zKwoR!_aL1v;PKIY+Q3TyZ}9@(*sXO1WK<@5vK~W6#0hZBEdE$5-HkPq<+KfwTg(N=
zA1HOM_#nr9el~t0G^?Ia{&ZmlaUKrF|NYgQhn2M;XHoT-R#6=0|Bk3fr2l3@9yI!J
zZ8U!uBurEVOT?Xp@i>UR!rAOkZ54$Uq}j~WyzC7T<QZmJ+lEijtp-WF79zC*wa5La
zLsX8e$p;5@vYNEML<V3pMwp5!twB&ta@sLFI13K27v?V;jP5t5T7g`Y#uGf10hwvs
zQ8a{R5*qj;n)!1(JS?|BO^)0bvU%xMi+9o)+qtT%qe+_j>if7O@NKflKy9RS2CKZ+
z|A{HMs=I^-rvx=}28(<~0dWul9i9y>36uA*W9l2pyktEXHI(<a%UfmSkt)<xy_#!N
zB8<LpeVQ9E9n%uvZzlW!XgP1co`A#n7D(i<m0R;C3yX`hIrl*v1L?JHJtd~ViNf~<
z?G)W?f?Kw!U4iri1}pTZn@Kk-i_G&VnAHH#>>W?Jl^8Hj7rBAGsFQx9IHs(D``S*7
zFw;qSAJpN{=_VqMdEJ;!60Ko_1mVBHB-UeZYj?=25!-^s&Y?iWTYmgwsOw;RQV!Pm
zIMakgt1CMRwU{)jtKe_rrKS$sNc;~2gPzP>KZdK$v%xbgzI`WyCeC+OQUF)0U=7tI
zF$IrKChNUK%Ad=}Y2Y%g6sVd$A+d^KGW}-}7yTDw%F3UKDD-(#pP7*rCILBu3mFg7
z+Kn7hOM5YGRQmjHvk$6gLwd7xugI@~X(pw!r>0y7(B<5(i}aes&)F--bkJP2rUQk7
zs$UMW?m?gr>JdF5qs``HHk?db3nHgGV?$a2r}4*Q3z_L^6Law<l+>$VTXcxWTgBb`
zcHURG8}>&6v!^IB8%lKC6xW^g`5C^o>bEoi`E^Y1K%DzMZN;0!Ch`?3m(h$1nMLIO
zoP$dcoEP0uZ#baK_uON3FX+|kNyCo`q_)`MYJ3_)@6W--WS90c$Kj1%mYN8!VAVz=
zaGs8;GZ6jhOT3^vu;ZPLv#eT9av(&3|I+rOq3y|4Ut0lFgYT_12g!)JP`CJ3R@*9*
zD@dj*axneN!Qe(I!IA&=uDs@t1W%UbQ;t5m`>S-XOtR8V^Bf}-i{%ZGCEb25F31f2
zyqD#%nI(V7_Yq}p19l9BG4C-`Ah>_bsac#7TQ?TTDeI7DVtrh)6Y{~^k*UpL?!39d
zWpWGdNe9>0)$>y>4ii*UQ`2452faT%)ZO#mlQ-&AHdKJ!?7Hmch;5(8l}gefVV-(M
zkci3CZ@SaptxgT%+{0bcIAVPDO4SpnAsglgDHchns-VH^FS~}V{t>6Yk@E980;4FY
zMX_o*JfYT1KYeh2t9PwsPIpgxjC||s<ZYsSO>C3l>I4i1bJKQ4HdM9|+DW03AKNGO
z6VlY?2vh-#mh2<mJUU37cV2|!d&d}}9?rhi5VzM0?+5ui*h>Mew_e>!*g7og4aOOy
z0Eh$o4SiW&M<uBZX$k~_nvcD@nlce@BkA6Uc@f_3qvd8x7lM9!V??RJTdKKs$94@r
zF27A+r};0{TFdOu=)5q+hvbeff_QEAr7RyNvtZ52!!ll*dPGKRx0{|WrFIx=!vR-~
zNJhz8AY6kvPzL@$a&@@3{FED2PI{a1wY7<0#M^$(_y!n_@Twm?+u|2U;Nvfs^ik2V
z+mN~m-^ebDivKpQm(`AfIYY$T!BRY<S8&v(f+zH}S=3rgBG#zB=9|L=n6-13AIRXt
z<K^)MrD|$N6v$CW(#Xc#^69e2RjSNLk9Rgl<fs8v8ze@w$d%v)mXtW5stI_+`y#HF
z2ihK7t7sTDw#mF>`Aedfc+c{Cw3GSCl_a4Vajjjw2JIB8tF3B!J}5@*^PAR4T<9Ay
zUo-ma0mqw6h(^4I#^N+I;8G$-ChSX*sS&5U{@5!Gqq{M!mSP}&8#L})vJh^&!sp{B
z0!InTUm{bUc`-kar*hOVH3&yRL}U_rLpkr`SUhEa-QSW@92{(#tFNgEm|qorh#TQ?
zF~`}E0Mbx!OjIfXI?fhhWZydEi|jhv7GnVRJely)?ms*T7k_iQfUugyo#(%-1M_`5
zta_6v*a}<M(^>V=+z~e0vaL`{F?4ziQKM^p6e>APuMVQezF*bDD|_*Mni?9a#wfZu
zj>4xe&1`;$!<ZbiHDJ--O07TTVr<N=L|v)Q`ibLWrC~fX=?zK@oxlhPV3ET8tN2}Q
z2hYaL%20r(wLyu}`d*)Z-1aQg`^ZKbn0CdlK)5@mux%?kM@4^g7_M5_K|Q)ZGag@8
z5nE`HGLI6bELl8fe}wp2xeq!7l|z+UJL!4pxH;kEsEsU^sbL=oN9i{?eZrV_p4t%K
z!+%WT)mQ9`2ggM8<A-;Ot3Wh@McFZ;w84W8tY?1Renz%!e!annU91{>hJ2)c3qDAP
zMzIbl%D&?8N2e!N2gy+BV7kkhM{{8u<05d~48aS@%`~BXa6ac&SsOCpZH^9g%tqWB
z*Ud;rOn5|d{_%J^klk%~F}A*&{AgH$l!Y|DmHui065&jBj_9DeHz&3_k5j)wO)pIW
zfm6vN%uWW*zjs{n<!;{}1!YVE#SNNrHcaPq5w&6N)J05G5S&XE`<{gC1)dOLaJP9T
zF^`8!L4|BP6R#3Uq3a9xi1hUIveEZ&Di?e=?(9V++~f^;^#QpB^&uhc1^j~}MhnYi
z_sIEI`*xPgv-JiF&IkzPzM+;1r8<<S-6W+n)e07YGt7c7oNlph<~)w8G!PmJ<iFTW
zR2qNkkPkBvwYP69KE&fLuFdrU&E4M#6Ax>g2qjUG&t^R?3)%E6p$7ZL27q1OX-^$4
zM#$Os91;~-?Eoa_dRC*%EEZfB<9A^cMxOQCe~}i;ph<$7$InJkNqL96XIL=Kt|+FQ
zD5oy(*^E--F|&<s7&t9MJ$H&&g1clTY;wx5PK0EDSxj_^I4c{T*setkkYHmIN%PD)
zvQoZ(p8-<|tg-k7+I6Z-_U5o@Y_BI`2j4zt`xV5mt=gZI#6W6Yl`YUfy&NB*)EW@W
zcjm>}YBla=H(ACx;}UF`$vT}ur4C8>*5AZKF9HA}LCecRK(B1SNTZbw58ySQmW>)?
z1ey;(g=M(l*$$lOtd~`<4CSas{me?0qbz$)$6JIoo;h|%5m(73S|1%5>l=frVHEN8
zIsvcwi3x$*>(oU!|MuZIo0ZGVCCr7h02i0kZrdaAFB*rpM0Ij|<}q2z^f{M992+*A
zg!FH=K!@qY)1(v$3RWy*y4POb-x}KjlT$1CLZ}krjkhvdWJtFGEg#y?!tmx}n&ngS
za2B?kSm=0_sLKSvet1}Z2J9QVk&s4Bm`G`B$sasE-xkL`{83g`s_A<_pfL#=>d`P^
zOkIs~bLp|H{pWBCG*_kjV?<Y&dUZR)GO<?qH%|5(**THq`iEQ-0DflB*{Bsug_+TN
z8+=a<8~Y-?cE+}kwY%2tq<xg_*#>%btD9Lz_1%AQpS<>sR#y6WkiDYvlmC)`a5Zw;
z^0>-%c3?Z9L%IuIROxkIW2+~@D?&(3%nPQ5*;5jGDtj|Q^WF$}w52l1B5y$QRahnm
zwz-p?T7S%7Z^;^ZdWS)cNU3gI5kQ|Da@Okg?D?cuuk!L9p5fx9M9$bpiK0U3pE0aF
zUeTk(<%i!%x};1*UPScp^Pe<GbFkw6D5Bb!s9Gf5CGv1#sfBnD3#FwQmkkVrL6%^L
z^-u!$qt6q8fVQgNcY{DE#74c1rVCL&C)T~&91m1~3>iwe6-ehwS_nO#`zYISpKKH3
zN_4ApE5aTK*6;+dBo4!m)dp(99Y8>8Rw>$Dd<m;n$BzW(ODi|zEqynCuGfU)iln(X
ze^<R9-WKtHj|(v1odE`2YDS#JW!@gHnha`I1;t&I{mDi$0=U1zWLxpCdY<e%+QO|2
zXO~Vtz+T7%l|=^r5nBpSPjT5yGl}u$-d?iZw0!gdWQ?48hJBoTL4XB$!dN!8og5{+
zJtcWRC7PKXwmTp82boI3YN?6katADwD*SN~1oPYl%SaW+`X2xGSRnB7a@cH5gRx+U
zN*otGIH>eGhL+6lo$B+NeE%eoveP4HZt+JtKP3_Ub^zKGl^{C$PoW|Y)wg0&aQ_-z
z(x^zqW<&pLBF}?wR?z3*LBUX_s92#35^;qt%II2JKkoD|L{JgF`Ob__FE`&lvv{7N
zv%(^Zj?B-~Ao+{D&XFd|O9^or!aXX|l0&}0RjaBO^7Mn9!<hU+SeRoh+SB=a`09Fy
znGAsv6)D~7+Z>udJoSo<E6CJ`;{|1TN?24-I%iOU84flSU<FMEc>@j^j)@}zBq78O
zTTo<Zf~XIHRVfHf7da%wpaqA-L1PY`4`7e}USzanc$tq`#!DB~<t)LKUtE0nayPd7
z*GNol(gA<-<^lmPq-a?Byv_fU905LJw-)esBw0_u+|sn2j;K3zHJq*lsg9_7>}1+c
z7Ch)>^q<wS*$Gd-*-oqy$%K`=h(f)*|CA2064Wl=s)5>*lwZLO$~QGHgpyV52ctkN
zs}?)^cJ(+o7$zzEL$E@y;fG)rsDKZPT>$#v+$#B7eNdB|x%76o3>DRRv=D)i+mF88
z`o~t4^9!ZSO1>$GxPUQ9D;@LLE$)8Gt#Zu!y76Vk4x=3Kk(3RN(MAgzhI#q(J)OFO
z-^yHerwa)QW%B<_df;^hp1p6JTmt6bM;AFXv=l;Iu*k}9kpO-V@ta5}Gt+mcH||vi
z9PKx^qM&J6ok&$*8`f1&K8|o^=Cg<m>A-i?JNhdC7!EWu*!VX?7m}?qH8q@Ol~R`x
zjoLzLp}XJwbBxkZfxu-@FF-O-b9Z^EmXl;A&b~fz@9y(`75a8xlOZ*ym$K^$xr>Ds
z*FGrgZVvYXU(K|C9n4xL>~KJRHq@B;n)^$nm*G$H-2ysBt?s0?r@_m0Q4hVqPnI*G
z@tu1}4tpd&IY(oeLtej?M`_iVS)D414?87%0*{3T$heKYK7#<g8|I^PxrD$f+8Md_
zgg--fZc|@6pJ7A)5vrf=efzQfhRlSh^dKC>Z;Rml|Gz}b(l)w~*4hz<bY4p`X4ejb
zU&5Fg_o;k|2+|d6cvt@MR}a(F)NB)^wFNaD`Xt^#6S@4ddJpTRyO)PQ45$v@U%sG%
z|I<9^3la?M>+3SdT^D10<M)$ar~7J)yDgoYm>w1arxir-Hspdg8mbsHnwY4NAT*|`
zU_A*u4XqfDauHmhOHnYE_NksWtd!&j6<po#F$i%bzq|Jo&(iL&Thrql=b0&Ckf=*o
zPQ?9w-dCKAsJ@z-8X9A>)frPKv}vQ2S9<y!8w}>vq!2|1&|ceG;*bN`Rh>>o_)nyc
zg?HIZ!*}@=fff)pSOezq`^Bo7&Y-hSdO9sEEbN&3B>f@LvGM)pgq*v`;x~t;R<<Om
zK{GAV_=n0i%xbS2Q*+8guV9&B5VWN()Ryu<xA!K&A(4Za34X1%84TVt?^0CaX5)E$
zGgsp+6gW8eOKwIzus-H5AHEA=U<AfCj_f#m$K&V(Asl9os#W8_V|BssM>M8XTs0+o
z&fNX1{h%&#mBHx1K!eeR0dg*jrgqgERP^HchKSjk9Z8RYEL~?IQn>gQi%!dPZ!g0~
zkjOj%mn?JY+W8}`oWy<Y*XQlsty(3af%yoqSru>>f3vdxnJTPhq$$M4xqU$}DY}LX
zpX#bof4aTxHznEgJ@F5x=;Y^1+Si!izt-b#PW#kTkxXd)>5;k4`-6Wez1RKjdZs{3
z)hcNBS|<18iFKdFUG`_O?YFX}b1oDOoAo=Q^^jp?D&F=cCunO`wA~x|tu37u(BWkD
z#b7?53i;}2#f_juSxPjpaZgALUjQ*zkQ76WJ54u^=0!7YwmFJ}qBT~K>?tL<8pt>=
zl)puD*wZye>W&=mZl>P!AzHKbXp{F$pHKW?cT!?oKi0$a5fJcuDzv4A^BP)6Uw_-D
zw2#2Y*SE2;@dSWy9G{fLHodbgd$g^FH`!tJP>Eujv>*JK7__ObkHYks4MaOr>bHmg
zg(CT*D0Lz_=t6zRUu7h|b3BJDdh$F_a8vG5oA7?t#4H1?U4o1%)ogC#O=CyFwg8po
zB>CC)W8wE4vs;}v8DF>WkYh+;!7&+Jk6ul|3!4o+ENmkU4b84Ds)v`?j63`kIDE)<
zkFR%6qaiW~1X_H*npOo3#qLAusOusz5>!vbkGpucV2Rh)tP{ojddmieg}nxKXUoaT
zMk8BaZPr`P`+p^Ls%XNQ94w4ou%!YxmZS`(mQ3opQ5&o^%pt2sFg!Q!OCze*x+>d}
z>VK9~(P^X8-tu<)jC{qBkjO$Nzde1Uc~a;%SUJ?1t<+!q2}^&!YH?bD&mR*hPz%3F
z>Dq-MVmh|PRhreqa#Z|>Ru6PYjh);of(Z!`Bs@TNu5{#s->VA3F<m;3sdFIK5&DBK
z>Qw}-h031rclE}X+YpI`=^PwIl^>I(JrfGz))wsOvm1QE7hW6T;IXmBbPMJIF<K$o
z$I?^Se|kU9@71^4UmMfcH*caQWu#Rfa^T9IHuc1;c#_bXbehWgN~A<lDmXxqYm!o+
zx(h>vH3qm9dp9`COQrak04QmWw&${Tup9hErfFNV41{^M6C*8AXrluBI*IMA^@8rk
zFK+9wJidYke{nLWakmshGSjNh_*A%qttcOJcAnOQcQ$NsI@v!~TI7sJ!!)FakC?>I
z!il)KW5yajOm<b>%>z;XV~s0In2+|pFEt$whfqOzhOnz1nx|k=-yJfN6?+VsLYas_
zqJfJqlAL>ap$B%UT!Nu3tS(~h9(~@b#PzecL$aq8<5Wm~+~j@DSrH3-wV;p<v^!te
z869!0bC}X{+$~SrW^w%$E?9`ne61LWZjhBvKZ#|yAW<y){ktqRp?&CcT4JlPB;gI<
zAJ&Yo`LZ;Nxce8eU4>cCoK|rq=Z)!=f+bRTPrjqqez)?J+?P=S&oufEr;BpC_}{Y0
zstp8)+mI<m5LckH32&A8GgGzCR5>qsygzM#51%=MyM93aROX3>EN&EbHwMd^&}x!P
zfwK@u{BVS??!|>^*d$GV%RPJFffr(SJC(Pdg@|~O|0$n-@3X35-!vCEogD<os$4uf
z^rM-Txlaof;{JKGz09?CCMjDF32bXG7u6HpomAla#&#rc(bkeIuO-H0-qu_BxqY<Q
zZ>ffO)sjyez%iZUdm2~W{6H8TmRbFPDOlH4m@7!>&aqsu;Z>$;?99<%4K~V6W|xnk
zwKY^$uNbjbF>$*f{XIa|vg(J44cpQxI6*-{cba4Bt)vC`;KkQMbFQ#WO*L(fq@K*v
z<t73ItGhX!dwS6=9EPo#EryQHriw(9$7$M$0}{F6{KUZb5d__8>FxWdtFoDT&SeO7
zA+e*`%?0L#eD5TM`=%pDM_f!2r_ZW(X5x?2uDXNNli%Tm+$I?qWF(Fo-(a%=6!2LE
z66OY}dpuWY`Z#Cu3WB^mwG@nu<aA@0zff!QHLbMnj{ZdUNo<*52@;ifO+>$;DtXEw
zVAzg)W{w>9(GpTh9jKg`iJdw1n)+RSpF_nrlfn^21YxGmhf4Ao<?~iHrPDmI`%{Z=
z_>hGqqK#dQE{#s=sXs8se`z6L_>CaDwBuWz>o+ww^V<$Q9pU;wx6cARyj{1wBg$Un
zA)yX;GOB?o3cyQ{E!~(j0$fCe_4T7GFIlyJL46My1qH>2$kApRmuQiya8lGOz{*#5
zM$oL8U$wP(BusROs=1kS4ey6T<oU9Di+U<nNO16x+R};m4#sYXXQ-L__ad?0X-fuw
z@|kI9G-YYpiW$j>m}rF>+Hv;yyo8+-Md!5T=Gt=Ul%s?1N_^_-@fD81mPS_Gk!eaY
zd-X-#BC0X}aX<%N0wjBNTgOX64u4%#?nhF`Qt9ve>aCy)YiV*3VSd$AH<!IxD+nhh
z7{*m};{lBABd%nMa%+6bWAz7)l=gMP95r<V5fHQ1$K}F8V@HFDlSb?9sg;CSSg>h|
zYH3#&oDbdN;r5EYP6R9h!ZdBoOl%L+^YBl4n)W|*#;sKblx6Oo@s=XSLV`VH&hg$B
z&h@eM4tFzVzFZ~G&85v2vaag+%+#gf(V>+Wm@IzsIc!86TK(@`*$q6@TLknTZ9m)F
zj6N;L6uH<kfiT~)W5>Y40xvfH;N3>w%h63BupdITdjx0m5|_(35O+TE3hXm7p>Sby
z#SJD6Y1(gQBnO<3xQCYk-x4bh&W$B5Kej_Ugghu3GCQg`f)NRPqz{P0e-L~sW|tzs
zXpj6TH2bLM5As(9y*FfrNEQ{B(C5q3yqjVpOQZo<AI{XYS0E;SBE_V+6w7Aolbkfu
z2jPztoEe5Xm`N!-TgD0DIHf7n2<-q$;pqnt*(2jQjx!h7+n-zv*pwh1kFZrHL^*Z2
z>EA;BGteT>eEj(LiC%jch+95pn0E50LR?B6w$l8<bZ=DL>Zjru5pEx6&yvYv6;#F=
zmUicx+dSuvgM&MEga9(saU)RasZ;H8*n-_FCFTqX{%tkAT{8BFr0}Tx@Bv=B2*HSv
zIL-uICu9y!IowonD`IQkpSJ8#>{w6n6W)$|1$*;tI*q7Kw4dA9NSLmK-eW@r^}NiI
z%}VW)mU&{|i~A+6X%Z`#UE1T8fo3}^g#`D-Cwidk_Z-hQOTiEd^2P)dM!e{Wts?YA
z)4n#=6HJ8ZA8ss4rQ_YaD!Q=32)D4jG7O%)H)sO{nubm=;4cZ!PVIxi!@<xb17R-q
zJN^s6ZPQ{T;-t==AY$6Dn99n=+`vMA?V~cF_5H~B)_##5C7GIhxViu;dJ1Z=FoAE9
zO5RV_b2vpIG^GMuzWpp64M|9to#-~~3{R~Nr>0oO$kHvvvw$CFWq%yPvrE*(%vu^~
zK3W1`$S8k|@X@-%Et?!+hTth9qC_6Eqxj}I5z|eAwQ5=L{&5zui<!_n5z**Pp}lJD
zV}Mc+Q`P6G5>4`U4yl2Xd(lPRtFtM3v%F%O+8a#;MEowVE>hZA;^;vSy1E7n9LwaP
z-^=^EJIYD223!YVk?zlxm0+Q34uWS;_vnHww#X}32b<JX@8fcqDt~aOr7kse#n48t
zDkgWFrf4Rd))p2Tdp`K-dHWycEapw<UBo+mE1bF5z{Mn7+z*XK_*NJ>TGP}-LMTtD
zG|v_>EB3m>{WD2E#W|_7Z9iclm2+rQk!1u@)F|he$VJ4H-a!c&EkS{%BIeOiNkggL
z`}@`{DFlzYb67ZZ5hnGE_pgewH39fh!?4oi&YL5PvL|qO*8N85hzO_In0sZlf&%9?
z-pY#4{+B@$jwhW0XtfMd9>GPRe&NLS4;evAr)wggrwKVZwdL(AGX_=}xkH(}iqAeL
z;`17=)qR5r9G8g!w|}HjfN15Ii(1J95fB;5U+Z0fQsga^e?#^9nQ^E9lHjea{qZlX
z`0+AZZ2Y;k^VmIAEYyml;Bgr4#MTD+GulT#iS7;+=X(JxpT~2RcUu}{?eC(|I~r|^
zT9kE-SzJhdR8*Bn$w{WjC(L*yB&n%yE26LM8y$S!d*;*RMVaXswG$E-R6l5aDLBtk
zvcafzSIK_T5wBg&ADQU>9&7iEVW>67nn%X<cq$}u5%;A%p>nqqlKM)2>RFu{B_kp|
z18<#W<&Pp<K=4ZfFG|S4Dg40%FRH4b=Y2O7lG>G>`E}vmSFszW!FCZkV<o7UE6z>4
zT6j%;!_MC?EQd%{ouaImiFe9bnVe4fG^kEAZ1V9}nxEH&U!k^5l3ziVRRwGBd*Tgz
zILwMEWf(rK%z|6|f~-`mWB1$l0Gerk{F+MokE5SHrB3#hl^4TkC7Xf5j}6H>Gaa*c
zVye>81JIBWW|Qs|8val<8*#Vx?-%)2rqa^kvoXCI)tt^zR7&NwTe3eX6pY424e+7u
zAgM_Lt(k&kB1*|Rd(^T71*sro6>}iFjN$wD=0}@;&EgkxRBLxus%ESL2nY&zI6kV!
z!t3V#hI9FnYg3UdBt=;PCY&*ZMMRRECvlW61$B&loQT~_<CQ$^ob-ne*VhbmIX}Ix
z{TeHuFd9mTen}U^Z&kSxiyyLJ-PjVhwN$k|bOb8qwHeP(>_UV#NENKcU81v|4<ue|
z4N%HngBP%0V*viCTUIo-IofQS$82BWi5jm3IpNFrw=dh*fQvJqmX_A4a)OvU*KogH
zs9ixw>irL2=g%dVhm@hVr!icPMW`KnO26Iw__pw-?1BQ)QRGx|E|CBR9hpCmbwu=5
z{j6?HiyO5kI6u#RoyNt0+>R>}b$c0g`s)o&OID*6M$WcR*~2H+KAyIVB0-_1Pn7-x
znGz{_3HRY<_)QIj7$=T_NLK8ER6v%r?`%((LS{0N{Q~SrQ(Xc75CKf`8^K<{*f_DW
zvT|Y?ngxg#As;9JzFAi1-nhQSB?@nbvsG1Re;}6U5(-=;R25pVz^I&k(D@pDJmk5T
zJ)HR+JlfREzUADYn6__p^u6{h$BAyYqx(8BAw6?>kd&;LdCu-f*85u5rQ8c?*4IA0
z4T$>j&(!XFrPhiAEFrDkxu;wIZnz9h$Dh|5NR+sf+6dFSOJr7*-%elKU`PD88<RXO
zAnzS^V}k+aSV0Pw!<uXK8CYc+isg?eM!wms0-%(rF*fT*L-*G9v`i|aR)Np0^wZq;
zQYu6@K%U|}uXiJiOs6hWTpN!*$TfqBv+gFPb-qV$i~<5HY8WG&@JOnVIpjRmOK#1e
zp~Jj_4CeXX{<j;<%Og8GJFhP4(D3l|KjhZGxe1`8H2V*^m6w<QFLKKXPp|eTe4gV}
zKEfG6ek=&XaS}L5;%q<*sY1|louTth1ln>u`q4h2L?}E}8FYB86WgG!ccSR~5ahmg
zbyvfhXsxYh8MVzzN*o^y%lwp<Fv!#Re$|tp*VN)|!<QmF)R94_hwNdHbKGg0r|FAA
zWbop3rX1^ZiMR<5F~DA<*U7o_gE<U(5tRU$>jU~4WvE)G6*hR*O(vrpSU=tF&1Ls@
zI)C<5m};Akk<s@UTm%%kvOVash|cW#evu|HYiCX8J>B9s`=<SR#Nj9yWPMcX6xZcF
z{J4?>+&DA8#XF@@5BaMPCz*#TmRA4OGj^;*8z4(**m=casEFx(-&R^8*DmCfxN)UP
z%ldM&^H!Yc6*le)CzJN62bH=b)bkTzBm$v?^q)^bf30bI1A4`+?1a1y4{SGE#SWWU
z4|}W@4QdojqN1D`Qn)>nXCKkZ)@o=of^?dz`1rqL3v@Uonk^^JE(1#ggh|&bu5>yA
z^h^i})|>3H1@MQ5d#mG>=HoGsUw2s5dz&KbyT^h95O|cI_GK(_Thjzl8a$z>_&S|T
z$(La7)>Q(2`!HZdV_?gQ2(~MLqb(A;><Fn!Dr(*<3Vs_bWpB6M1oBjtlF-n2Tz2VL
z3mnKEW@h6cK|7LoJV*fv0g%)?(d)-@Bl-6fP}F-*sgK5}tTm%MM~HPaRHg5<Xe>RB
z-5mC=aR!708T{$Nl3vJZ=xC}ejF!*bn^6Cllx*mOp?{A`5tKK#E(PsJ7DuEMV4|j~
zSZh!k8V2cvf+c`jY$$2g6}-8VcfK!d`zyb2e#!f(EH`&40Nl!ie0e$L{A4t^<oECQ
zUp|o3E5|)N?rhK2c}Ldl!NC_Oo*r7!#DWvl_3_f)hM@}ZT}Yxs-`NdH$xD3+X9-?Z
zL1mZBKUi>jU+4csz8@&c3bl-S7&sx15$s?G1>?hZS<_9;GL_pUa=d=Z+ZZe&A@CUz
zyNck8vQ@9b71XZZ6d|L|1ALK|S@guXsRsrr4Odos5Ys81f}wUxg|E)QV<lq3^TpyN
z&t1bN0V`Qs{vvWx1!q0QA<|?@kPyGjVVaO>K0kfWqp(%U5;j)EyPYlUkifuS9A74!
zN=exC2i+J>0H8;XS>Xd~c8ZUeVm&gvaxLg<ldg5nD@k#rm2Q7{v_zR1p)RD(Ui(@b
ztx=Lih1YW6mI6G!zIQ;GPysEPOJw)uJ=88%br6(+PV*p_L0p=*`Yt9~F?j}b_!_lF
z%hl>7wMyCd0X7{zIF2k`sDVLgxDr=zKG_={hGNH0A_%2ZqXGt#{l|<?vfxW*``Bq2
z7d!FkY6e-lNm*#lsllH#)$fzY5D*Q9FBMJ_X~TlW&A?jC_jD&}O1@sqTrIgTS$-r7
zXIQ2|q(_&>LQ8NP$ZQqf>fD#*B`GHbALCA+Gyk-&cF<7FYBX#|wPt1<bxZK$wt^tY
zspRqYeY3R=#9V)OidTsI==z8_2iQhR25B)Z2$HG51z|<jWuY|z;vNTJ-TFlcAqR;8
znaqPtc0_%vDfvUVy9+sUJNt$e107}vP&FEha#_fg^q_*alJz4MtDRDykf316LFGh_
zFd5<=?9qIypKSXVWKUzT_2SB5NrEHe5w20mdBeuZHR5iD0FPNB5bl{2pW{(xcE_YH
zdeVAd2H?7$1d3*ZbovT%HBeSE(eS>4JA*9cJ;3oc8-BHtg3t60o`aE4jx;8AApY*)
z;;4jv*wpisDY%m+I~2y>LC@It#f=6IMP^SNMA%|~eeTGWG}kFh_a_0?1IWy>aR5c*
zjv7xKXRqk|HGjmvrd+|;vO2@$%q}<)<-d1m$S^jVr#bPi^~KLH$$ft5giM^V2fwO9
zH{1>AC`zh_9oyO!XFtF%Ir~`jg%~~i=!BCJLdjv&a&SUOb44vTeWzPZ>LhWXrl$7w
zEL*^h6M79+FWURGAd*)fT{3g6=3(ik4nck{;!?Ey0Q+&U!*#zk-rddqvY;lg`v|wF
z<hp#uQ(;k2P^`Ma+eP%qX+H@#aZ6>fYWOoXnh;aC)21}0M-#j#rcFUo04DKXS_{Zv
z2de8hZEgRHO#Z@tUvm}}`XnR<7>b}pVM}_c)Z-1;D>EJwKUAQhJ(HJdlTq6R8fDbz
z;tT-*yClt9?)KwDIn{&*^3d+l!!%pY+7ETLe-P<|c%FRqd8w0{LUt>0E(dz<3Z^0J
z41lyO(@-Cl+Vteoa&Q(GBo$<v$^4n7<vF4YWOB|Dm_F%D^7d?+9O>oYDO>94u(8Aq
zDO~w1Z^f?)wbl0p)L7YB;D+1|2$`){xL*DV#+om|xu}v4v3YjBqEdHjv6b=Ha|3b&
zve*LPHl1fj9A4~utG2pg>OUfj1+KA}g^kib-60@unSMLvg|6J1!ohwer3cRIvm`H#
zVnKuvT54155o=ZwyT%y57S$|H<a{@*wDn*xwZSBDpAjj2bNJ3`N%LG$pPbPdSDje$
zp|X)eVRRZu^>w5%EJ8dPyyhNu$OXQM!io9U`7)Z;k`G?zB2^JVG?a(-Fjx#@LR&AI
zgqrsNT%y@0{O1K4w_D`32Iy;`cbxA%;3Nz99t-~N0z-<FEih!gm%>ddiTlX=qx<T&
zmnU_m^bizJo@RS!Z3D4FaeU!*_Pg)RH#&{pP*8%z6=eoE1pe1j4<74q|36BA>fcp{
zVA&_HXL!Wp=2?vPzG(HA&$YyAf1yEI8s5S3;g6c$R34itPkYi|_4B%{gfCfP<S}3B
zI1*hYB_hU=!9VG0tDA8XDrp!YgDJ_otPQU##5dn*GycBL5A(r1|EB7DM*gMy7mq9+
zf5G5Z2r3{vJNel%Elm@B`iz<1t}U>Tgt%45w14f#$YeMFUC6u|@h)UZ<Hjv8BU653
zt1pQzl&KM~#0FvUkbi0M^2+oFBQ0&QJ+9+UDCtwch;Y!L#021%E4r#y$2_SL81yo^
zV@67obL@DI@Q+AudPpwGN*iMTDUw!|O02IbH&iPdUk36{D6ZvI_MT4h^q?&O<D0Mc
zzjSd0EZ~tt0q<OCZ{75TB%mIt9J_z`wsf^qoUBD9_QT)GqMKUH2(=!?rh9v;tNvfI
zxraYSxVV)bXY;yYVdN(g-ZlVy`f*TZS^5AoYSO_L5aPbxZBUxbBPQ_Fkp0T|8bT5h
zE&83^_uYcoTSw2*)5P7=&uU_`DYYj7uIifrXD=k{6wSYX2jHoe$>D!%n){9aJ++mT
zu>FBLPFq2AQN6RJ`NBy_*-OCjdATJw)-aNwrTGnD%@%376&BtW0DK366WFqwt0{@=
zoh<1IXHdAKA4dlC>9<LFsmoV=P4jJP;y8V2X1sF&B-BNi3L5|JimOZXp1!}oYdl@8
zG!l8}EOSsjZ9EBG(gSJ)6y7M%l+~pCo-r(-wIW<AH7@yR_KDJeQ_HUvR=!@zr|$e*
zTlafAD$VoL9&#Q-eL#!5utzsC_+W<n*`Zc?8!NyBg^jdAS*6wS>UsRVnE^H4el`$y
zt=$k0;vejhg&{K^RgZOdy|>4KKYM{bl5!%h2-k1%*lO-;9lYlkjB#!LSThO*&g#3a
zH=B3L2!6Y{8zmNZ=X0r7`o1wZQ43^o#7eI@m%SS_FBt!+2KF*u*PYcw7#QkB>)HDL
z!rg4{LU(Vp-JI&T4jCfU%V_Xcf<7J2c?fmqSjVz9Tdg?#PKriCvRH4J-S$tX318OY
z`doZ>8TO~x@1v7swF-%V6!y!5qNg{eD9x3ckco>o=%EEFkAg|x!5T;%4f?z2+T8QL
zXV^S|y0{a)wR)}bx}D3wqn_5_{q?fs4Z8v3uVCU|7(2}iY<4#9s#yca%Y7+tiq@~k
zl$Ab<64I)A%Uam8xe&}s7zQ2220yr2D8^dN`netZ*`bo(OyhrS(*r^-1Y&u2o>5J?
zq(I-{GbAYt!<a*)0<f#6T5CT(>QtB`7~MN}1J`s$D!GU7->9wM9;M0+uo)7U1&%OY
zkfXA^h9Fq!-U|$XYe6Y4Op_1$C8oN0$TpqzGC1Vn_T%OT)99LOVk3W=3#^0L3Fk3-
z$#}K}z8xXoUOBqCQ8B`1XJ;P+ppTikxna2-|HBLaK97`*2NZPbhR0lai85vglkUM>
zxq4EMcmFsT|Khw+o4-;ZJ-E*Oj=9v%&#vuEjnT>eXrEH=Bbj-64Gd21@y8ER&%JlJ
z%Z%Z-kM#EP+KB%tOmGp~KCDt+q><*TUhmN3Ww5cRZ(T`VZysiYfc1+SI^o&yqc)0!
z^_!#C5ueL8)b?uXzHU2_azL(;vyfmqScotS2S;~1Nqj;=#`X7fNC$+%{CwseEoK;Q
z0{$4_7xDjAYvH)n&c6EI1n#m*ENjc_i^Ah2ISS{RG+C8{3!CN&6VDBBlT^<olv_9*
zaizpss#xIRNR#>AKpp!V?Qc$?Yl5(<akmrc>yw`fvp-MtPr9z#Ux2G`emmEIz+V~3
zg5IR03Eg3_mpjE&z48_Qt%#Keub;Ms)`zi#05^xc)I+?px~JuC5z;8*t!FIw*J321
zMK&lzr>s9`p!LNP`3%;husrkk8oy%<xEEm(jx-z_T|P`)vm927fHoad^VK<yq({y<
zIX}vsrg8z<Gt*-q#`Y_iZSx={^}gQeqO<9Ac1-Xs)}SD!@%y_QxNv#P%5fAV1+qrX
z<d%-V;bY$*@S32CheMzHphEZN>PWr3Wq&CeF)SFGFZ{44^Vw&Ukx)ah@|qI(8xr&<
z=~p-27rXG{q~c-dIwqvLOQBm=>?M74oPspCohlbJ*vLeY<9<;&Y&-xA3<riP27_8o
z>^Be`tdF}7<O5P`x7^#?tA{%?b)&bLN8nTq*2+vF*pA9prjWylS^NG4&mUQCYc`qq
z_$MB)r1V5fYGO#ig=T<-hW5#NZu_)gU)9pVT6DQLA5&B_8?+W2GTRj?BhCiax)-@i
z{383_*;P*=2JQp{#{Es_=yQ8VT~yiYdb>NTNCQWkAJ--D$)i6sa&CZm^|A0$Ip-r!
zs}-W*bjWK_Pv@|u%*s|pzcN1~>WvHQ;@L|GVenY`{1Ksf&_7yvtI2bAyBqM`)E#HN
zX;JHe*o13by8IegT~ntoeI<&KvK%nIU2mDvwSYWLH~~P`ts$SMP5gMea8=iGPoudO
zZYGa4(b~ivBLv&Uxl9I_#oaS8+SBgx>AD3E;k7SKV6|*Tb?+!Apvc>E)&*y^<Sl$q
z7T;GysD7*7(v=vww7hNGu|{oQ)DFz`Fl0_YxAW)HI3XLwk=2GvoX1M>*4O9tp<@0f
z=Pce?LVcGussr0&h%hsMY-NeDzAWmx<4TMNS(tRgv(VN0`2(?)uR(sbD?_+cMVs+_
zVgt&;w}+aOT-EQO<+9$_+qcsxj9(PS%;?R>pv9yS#J#q$4*0%=l3{J5=>lbx&97Q_
z^8^lNSc*{)yMo2uDJA3C5dA)KiN`t9XKupp4g^?|)^nLju8GNL6-J+Cp8D{X7ih|e
zPf@n~trXx_ex1x&xm~q;VbBhfCsx#H=|^3WvsEujE}ENPEU`d(a=4KhN@*Ez`f~g<
z_8hJ*DLF}5jU;G)jFzr`HwiJusv$73a6kDx7@7Hv&RUQoDhBvPBf)jE<*%}5Rb=-I
zKY073K4fM_fVhB(t&Gs$N?Ok$4);KtB0B+4UVaW_30m7%I@t)5PV`A*%#Mk;9uHSd
zIcMT^Kb~DIolWPzI>~t7j=(gbBbN{QTJ2OaGwFl{WB&d%z)caf=JHUsfrfBh-|8Ov
z+ZXeul~WPmnzi!606iZOOP%bW%VPalg<IK@+m|%rPf?HuykHgaQ`vYZ&zT97oF!UQ
zYpIu37KSut+e<4meV^Y+TMNPNbNcek71bt02VYaqrKc;6&&47qp`oJc++J9ixNM6J
zZqS$WPAem&B7e1SRLhd*6j7{5gMQ+9sB+@1;r865wM!wF|D|ap7h2m^Bz=_L8}*a?
z>3E?i#n`wu>UAP#1MLz+S39hfHT0aYNCg($&K$z|SU!ipQUWy9k_1my*^*sBxrhT*
zb)#O62|og9-W3Z=;tsZH)CvUPRmeVYo@MZ`C#`!CyQx8uE&r-b@ygW-BBJE$Zt$7>
zy!}Q7<Ynhl<Z(E{_3gsmxS)QjQj{=@K_KiFmpQv~eX`f*cRo%|oVq<z@vrj^82i8$
z`%{x9#jRI9-Crvl-1hv=noxCu+I)2wyQB9fVVxI|_9kO`{(;sj#AB%4#i{e+$d{Lw
zm(`!3rPJeA+?mNCKkDMu`wV$&;D~<OO`><_=8=H!pPkMv_T|-8u14>*Ilk1b4MoT6
zbFJs1{xj>J%aY;-UNGCY_aIN_<Fa4p-%3^Qb%T~%tXhFf8Fwv~*RF8kH5Il5_d%0U
zE~&sWtlao~k~MO7C$$Oq9x;?1w|1PT{;)V5-uBET)tCOmL^U_7sUPGbZLo0$=B*qW
zCRNkBx4LdV8{wu%whaK=dj;uFq@vwd<Xol=$<qVDL%%_;^_9!`p3gmReI}iVoRhQU
zCYo!Lumt#Z!@$1`2AZbuU^w3{^+-B<{?4i6n#jyPk~-bSVAxbh`kJ3w6>mKdp4L))
z?BQPhX(2t8ITLDW0K~dSyKnFKIWfh$rfKj2WyMuh!x-#I69;YLDhb$c?(b{+RteVY
zpi<tl%{I?@h*`Vq6+J&v*ShFk(GpI6j@{#hZ{MuinaQe><^X-3X8CBfEhamYATe~#
z>mH`Zh?2~0N&Xcpq1THsTufhroHIxNkFh`cQy|_4_SNNQbKksaBOS}L40n&+t<6F=
zzQJ83t>(f&w{L!o)6t`)D~}hUlXYLF{k{2EJyYUuQ7Gjsh9v$VJKev@snmdVx~ZL;
z<4sWA_77F^Rw0iVF=YMQeWag;N!8cOTKr~p^-xadx96Mt3717QHp^k~ic&o~`%b)(
zllyQ0p@k_XQ#$&opldelanJDai~e%O-~>Lrmc{w+-@Dtj2CsR2gxQ&1aI|(NeJVTS
z3()nQ>1Ic9CN{Gw6&>GPu7L~W$RrmHvqN6s>FdXeAvkqknNcZl9GhL;9_Y;SvpVTM
zo0Ap)tFob-3@%q=>HcbLOAim4DJQLJdzbK&iUCCYFs(e|K7eCm*RFzht7fLL?h#x}
z8C-*j;j6N-Z&g)oY>FhH#HFL6wC%al-(Cm&Vlx3*TDLYewWfx4s@_j!l~3jCgsq-s
z%Sg%j67F`{-Oa>#2(RU^4OA`<?4!@4Ky6CWcwW(xmcp)59Tq%DpIxnUjI}{j^Gii*
z6jZD}vBb=!Cuj^A3J+1)m@8o-XmJGpWw|B~xJ}V7ze#?Zi6S~RkcuEW!IA;l8?r#!
zAg)+tHoH)kg}qljRxLCe`jqRGVB0Qdtkz~$W9$8WL%R^#nNt8^j_Y^5_ZF|Z#nh7h
z@P}^iPOL<2pVc|cQV+=8X1ot-dBM2n>sfs$YRPJuM{BRl;uBNA8WBLpN|i6S5j(1}
zdo8nm*o-z*>Q}odo>riD8REJqO(UnYuceccoHDo8pfYqC6mRD`0jXYwj1(YVwqi3R
z;W)ficrRIm2_ae;4~bOIz-x7cwkVB!DI^BWvo5#K!*DF^0{ElH!%%c88={fP#Oj8E
zJ$Bff5kCcM<+mN53r`3!{=MtaZ?rBETuxCtL6y?dk((T`lxfQiG%=~ADEB@D($fAC
z*esTZs8f{BlFoTXK6XeIc-m@-$Bq}<gb*>%EE^-ogx|%r-bM7BEuIngRQg#C4nkZF
zB9aIc+6`_z<A_|C8dvRF<gB*INYCtsLOlHRO4Odr+6Nh)%CG~vbwJ~g+8`S8U+q!j
zhr1ohfoD~@UZ4H=E?+5k>&yPxwgse4Ux0dRIY9_U_bpcNYxjRe)oU@0{1d6?#F)Y;
z;+`J^=H1E(Sh{1>^bF)CFMZVAs6~um(YaD=_09{bP*aM8uw?F)zh&?9bwGq^%d2*r
zT?qzjB2rpNA2LqYXU?mGP(wcDvxLQYz|L17#_Ll%xl@{Ep1~%^-*?J(0on6JZ*RGl
zDOSIoC3sbkJd0k$RQQ7!z9_cm2zjMHYUV{0d}H-2@$z<u-QI#)ZB$R)I~Ukrj{lp(
z!LXJA3rKW=ij_M%VNgk!CLwj=wu+F^7!L4t)pwX(nh>Q0+8fhtM<kn~jXdd^-J7PE
zk7_KAqH<+X8g&?JH0K2W`G@N`#z)|IjFUDaS)R)3o=u_W?zsv(bJUV<kB~#GujFH0
z9y-`unAE|LlnNTjQvf2ZJ63V~>*?c8@CuFA`|1Qx(*1FtBcWYV;2V+wNw0Cl@m?d-
zb{y+UT`w?!`w1+eovrkP*Z1|_lFdAd&))z%kDvtj@{)F*)8X<GSpOGYKkTGDM_A&J
zk+wnisi-~V<qP44v27n0ft0kYfX+Xs_w5;)j;?YLa3scMrPkcwtj%Sp{692(Wmucd
z^EK`c#a&BrcW7~!;_hxigS%^ScZx%i7I!Ib#UZ%66P$mZ-+R4$4cU9MJ3Djc%-OlQ
zY;*Z-zra9ZkJ%v2(q6I8U10<F!jMQ!M@s?z?xB^vy}fnh(>&91v+ypDA18N%iTl7h
zmgJpBM@sm4Q#S&q#KP?2)J8+SZ-kw%A@<*a>ZBRX0acYqKB9H=`mBb0=wFPAk{5L@
zblp<`my1rO$9aDaiwHX(sqt6_&*tWq&4Y)#T6L1~+zY|p%kIM$I}J-jC@e}OP7aQS
zEIb<<8$dhKE-c7qZgKIzo$)WCq2anS_gk-5@W?t#QTp5vq{~83ASNWNLqTPR`C+;;
zluP$i*}=@7KtXK@?fCu&*P;A?P;C$mYcH*Z__&DBUPQ0S<4-=<b{oh?>_u5KuESPg
zIi6;vzXX8LE$`7>N2aUGxK#grq14L4)q18vl8`fPv@l5)4=Kw|k|Bxls%KDHv>Xtc
z>5daUaVA>&T~<SH6U`bcMUwg<RGvZ@m6%mXQPrSbdqPN(D(NVXk1lESN;H0hXBsJF
zd``DMf1r*jG+Oq*8JfYl{u=Z9qp;2A#Ojp)>6EQNG-yhdCCUXCJB5eupJ8K^@Am78
zU>WOV9uc)dN`6eVBXd7+s3KPlm)A4y!cD+nY$u$n{BCIe{JyZ|f&nN9UrsIj5)|BL
z#_DujyQ*iOo+F|xZd?`D))VB6C`eIBmf`GbBSe8oz{dyn(Oj>;t4b1vw4Z=_j3BB5
zWeuwMG>+dfQ>Y(Jl-+31$z4plet3)}2Ilt2lya_CH8n?lnE6p;Ej)R&;a<Oss!-hT
z`_FF89>MN+M<0IRVH(+&a1j&BtJIK4USRzkl~h;myYhjB9(|yQ78s{%Zz~OdizS9U
zjaPy`B{nt|Rp6VN8g}qinqntz*!CD%&Owj+)8*5>O>N=Pi*&*M)Ibw&i7(M9e};Oe
zs|@l$l2H7Qw5<Ha3_HJq{dzI3C{V^kBkJg}upOz!#bZe3K1@IBbjb`;d3S6ILAEJD
zI^P)sWFzT6Z)|i=O-+N=VL#r`L$5vDd<RY9K6dJMrvUr;xB<Z9FPaASOWE25xRHIX
z8L8g~nmsjn*!G_L=}!0`fa4B0*@sDC=fcDW7nYZuUV+(kG(D9|t_W3uGJ9y?K8Oh-
z%elBjM-ID@Cg|#q?~ELrzo}SR;g?ekED?E*i!2nV=&=66KvxeoyC`^N27cR)55G4&
zt^C`Oi?iww)(px(9^VfXpPqY=n<gsV&%dVn!v=A<;Ix;Op3Oowe=n<uvA4Nl+3lf_
z?G?l0UdpJO2TL87^Q|RBD5y<1cfs|Qm9E0VEOo2MmK)c9>m7tR(Syg4*Po<k4xQ?y
zTniR(zx+GQF9UT<zeN@(ufC`qVRh3gshI_5`I5fANAxe5!N6el&t)-dNiUxZ%mtjW
zfs@!vL5zGDW4{)<<|WJ2iRC?bql;awe-KaEj*QsmF*$z4|1JN}WK^%SBZ5Io1qIb@
znw*>*8nVN0<LMroFclXSwRbo0h(Z&UUdiNFU2;c)$%l!<;#Q^oJ8oudVAW0m|C%|s
zWqxoaQc(g1n+oBnZC97P4jzJu_5SkuHY3$5T`(IM<yQTk5odKm*8Q1-U+z<EX?HVq
zT73g>>$Ai%F5e;G8`~Rzf-<3=fk>dib^4ZcX}hk&+myb(8R_`Eta?J85llccf8^13
zK^EFfsJT_6HU%U5HGwa&;fbCeTSki-2~tx%F%hI>x~k>kZ*RKOopM*B2^j6Wj&}13
zD2{g$SXe3FXp=HkRbB<NWDCK11bNbQ11;2Q6<DFtw8>&UL2z3%bTmIIDU}hR9-EO-
zP~v09cUxCxS@;MpPfn(eWjOH$oZ5W(8JV+tfNRk{DLp5Nw$4V3u7Mv!>G4XzMT<9S
zV`(kqy)QLkaQNZ<?cTU6Y%G>(88kvyR7oT9ijoga-N9-|5LX4=w+&EMP87Jf+sMhu
z31nn$j~+v6x0L^9?vY0K1PKKwEFGR=Fz7MNN<L+UjXh=evDLwlv(`&!%1+42dg1LI
zPfFl(i5_bSYBd!z9iV1#clz(-2aS%6J=~xiwoW2CB_&;!6ibU`k7)gm+z5-1E?HUK
zsIA(0<v;1IEsHqb+WNQ1i)~&L{2%ubM$gPF%*z|OOaAdMJ>Tg3_$hS`(-tcT)FVWR
zbaUn9w?BrCib_(C9@ydkBAO<@e^(A(pIu$GvwsQNMW8Sn*e;Ywgo%xb5qPV3z7>Pa
z1#-{8&|f2EiRh378v74*jHjTO)mrVTXU+M%`Lqf7tZhp`n^WHK)JjZ~o?hOc)nh>-
zaTqup9C3EZWF)v~+OHZ&1;J3?aHy!nVW{?S@vx{VZaxicL=8pN$shqnbHKoWK-#60
zj8lII&M$cBp7v*@zVJlMQdBN7fET56NFY_VG&RMxIb9)(8kDU34cmGjn9HdPG%)Bl
z@NJ5T>hL%9@*<3-`-11+dl)*YRzegVuXJ|78`NAxR@B{{FK-FU_ZG{}R9*A?H`-m0
z2)rcd9Cd#`P0@<uD$AsVnJLB6!Xl)(s0#`utfUwqzYn|R8HioApt_vOU%pX8z2hWv
zbb2aN1n}uXepIYC{5w3iV25s_unK>3)9UTL(980^6L#^YXjL}KtzDH%3Hkq#kyex^
ziYoz=xm0-}T%6>C)j7?_?Ts#9euHFbE*Q{G3U!i~_XX$$+ogrT-P2QAh5-f~K=?!X
zFluO|4~h%v^P`fI5&=?bucL_WMz>=(I5BP_T3#!vbqy8J>XlVP(h433`m&&ELF?p2
z$k@iAZewRBFFyw5bX3W~!lL~dFPL1M3(KViRhHJn-3J5E6N!F!Q|6{WJTrrplnM91
zk6~Y-g;_G&+V|~BpBl?0QY=oI2G6$nHyRY!mv9yjAD@ez9cs0iT~aDMXp|Yo(YRX2
zz+l+QI+R=%vV2h9-XIWYWkQghqhA6-;Ij|~);bb@z&)J$kH5YyIU+m3@C6U;@N#Cs
ztTqEAoSoSaB<5`*zGZo|M~Pzxl}l0YV7T4g-AT&eTJxRuYK)mhg!v&}k8ENxUwgV4
z+^Jiw>}oa}eW;dm-A4W@lPOS2kGDE0uq7&&2Y38odtx;_IBWP^IRXWM*}dkj)k0kD
zuNRm8t0`)XF;g}-^!M)zKPmZ{$$w8NEoHB&>a`#{(v09LICFP3x>6BuyHHbbL3lea
zsC5Sbt{&C_#2LT-WmQ;*8m2o52VD7A%uc#(Gr|~e3a&Dz2R;l#X;+NeFX+Ca*S=Sd
z<Ezfx8s-i#Is_7AoJU6a0B~E|+Smk%`G7asj%2{gjre#v*rokr>a=XSv<(FQ{HWFe
zA{G`F+V8|z(~GCl-;0%5uK+K*YJN?BLB-v4dViK(o~A>^X`)`h4lY@jv2D~`u^piU
zf64j?#7hFUFE3i0d@Xmkzy%0xtj{aaZp$<jX8_Mzx_$k0e2)Bgucp(O^FL!n&Z2(y
z*Q<G&F^5v%CMo)+ipK9yt5X0d_ryUnWYu0&gVgfaFAG@2@$i}W(NRJUrrgAGwDN|A
zLQvC-V$8}4dMCTr&lk96L%WCNZ7$`xpu=5$VBvK90$*T5zx|7;YqBngz_3kVzKY@%
zywN*U9bjlM+j;)!BYfQ07u=<?v5CEPbmT)gMAFkJ{pCIFqnOV#V3H;E#}v7z>#aZm
zS|g!@!uVH3wClc5#KKy~+ltCcCAl^XgQW6|rzf7Jx^*a?Qpj52ix+)nVIhc8*{rL2
zoveb4{>D;%BWERo=+?ioo|6j1d<OYdAH)|hBk^Z`<&Aw|dQzG}H~D;)LfO=s!PM-a
z)BP|hMn``*V}m8|^tyN*3t&`3EmYlvArV8FgUaibl1e^vz_77j<Bf=n9Oy6J(k7Is
zChOZ}BqJmHD*Xu?=mir)*Pw&*qgcV`+~jHs9m8oOP=p-#baT&<9@U=Bbb~+X=Chv%
zo55=Q@v!B4EA0QCV(@a*FmX!9LZdQh2m(*aTu$iMQ!$I;x;^ButZi6oy<RP92mxF#
z@%eg;8D?&|xV*EpQN>VK_x8cnHD7+%d)F??QmS5p+F(}?c+v2gVuw4>4PvcB78dNj
z@W7A65=nx#qdPlaN%)*Xu!TGVXP7W>0hH~(|9H@nkvyD?(amV96l8onkk!gL`X#h3
z#mkQ~0pAV|l@B&qK)$(!^P=62oyi}ooWJ<Q_&00(Nq0V}syZp>%alNuOG)5nN-Ow3
zUQyXJt<kQot+}+89$HJUh!*W5rH$Fy*kry1OAV4mK$?=x&PtjzNjc-hro!~8cdqj{
zhmX-#&q)}Ew_GIb_i~R5!olRNc9Qdr{&eIE7yL5?s!IiGWd&9=`Rx^}-D_$y(%pCM
zvgm1UDg}T4HzOn>(qaaq{#kq9RlsI^jTQ%&(d?S69zR!Y%p&5^>*kDNH#|xR1jPcC
zl5$L)gx{*N_NfS2k<vgCWl9krCz_Tn9Cm%Roc+Me=(uNEDzC{z`PltDjl?3k0$)49
z>b9o+t$yX_&!4Zl<ob~HL+CO}9H4_G5E9x;V}gh2Q<`~bq0{kZ)iHY2#l%eXzNMUU
zb9HwIxC=^U*X1p*M>fCzn;l(Q_jADnLXi1WHLGiRz+q7O?2Or}N#=q`HN;v`RF}z#
zi0qjnmwMx7;G|1-pI=_S`SyWAzEY}wNt>=67}!@H&!I}8WHKKzOZ0&5YuO7`jV=4h
zmiP7X_4Y@JvD6Kn$n)ZC6$nIQTpWwal;H2Oqk0t$vb%K??s6)nX8RbQmJk)g@9S82
zx^v=hYW>)&#iT>I)ef&1neH<M&&Dp^H5C^}_l;yu^8If{3k%{1G?=XuD=Z4~rOfz`
zF=}ooFAwLTJEuWGK~YgrtE;QmF-#C+_Yxj@?kBt<cIkblQ_ylYyCHY<oI}f90VkwX
zA6D_4X0Tmf8+C;bIZspNg5AMJ2Q3cwDofKqpuzj93{HG>hV;YzwO+Gpe9xr<>f2@~
z{ck@vb9~^3F~U9`_svth!0+WDR@CVq;aZ+NqWN{R6B}yekR?M54GrDi<^W6z)_;<g
zq62j-!LJfPncLV@l$V!RS1bHly4>su6t*3koOGNkQz}=^+qw3_Ls@v<<^Qd8j_BFF
z{qRq3;?uE?f}zv18QY<u3|pnXO!(7^JwXQ?x$;QF;Cde&oO<y>;=BFj+ATiwB+eb_
zde^A+{@NgS05Na>@WA~XYPx{7l}n2vSg-3EH+W(d-o@M;6JH_oPt6yIrG!o>@+N9y
z8myn?-rs|f!r*4Q*-3&VtGc?nii(1#58e24@9x}D!b664A@XEFK|xm51X)^o1_nd~
z1ih-##KdVx#SH?zuO7p)iMu>XL~uU6=BLCCTOSInQV_RA6LjX1)swp6{ZjvZxzT#_
zr#Hpc%EefkmHje8L9lz8`N9$i?)>w2{BXae1;NRG(EOvz%Ehv&m2JH~UUHw4&;SMD
z?VsPFk}q3D&24;oI^;4iGxY@$J)%ug>`*_i?sBtikwMz1MWKk<Gl#G+XnsDmpg^U3
zjtX0*NY#QfYsf4uJzbs_CtQ4XanbYR{S7%WO+s9pQV9qIZgzURd3m*Jd?8an2@83C
z^vX68^GKYO=kMuV7r6Q=ner@GLYvVrGUpA>(D>|1@CmTU;)#r;Ji;0Kq8HIy^O!hf
z2>6KI>}j*O7kc9HS4y_>;jG?Ew+x>x&u=^3Yma9WVmAD6$@56~MsLl{%R80b1py$)
zBYPIryOd#b5@~i=;W5EVe`M3-hb%ae;b0I#M@L2~>gpD4xJ5)n*d8fplVr<P3L*j)
zATrYJg5|Tb9kb)q;ioyrZj6M4Zl=Xr<Bt<U%m`!q1^2-FcP$3(Up%MAh7ImX;FC%1
z@rwgtrVDCy7rPxC=V?o}Uxt7Br{}=;XF2IFxsy8=C)-_CwNH(wS`cvH`ZnH^Dah1W
zTvnDQUNm{2%m*<JC>z_{+=&olTa2~+`%_JLc=*D%{x4rm`QxQy<Kh&Rl+woc5kgJv
z`r(FNJ}!A@mX;!ilFR(02|4cef?;J?h|;J-Ru{(dHAwNFpA*fuJBdRD^bh{VZ^3S6
z$WQ)KL_M09kWtp=&1|xa(XBDL#hf;(c32S8)P05);0E1{9h&K&q`8c}Lrp5#n67VZ
zIOQqPBT9lC$)!uMBNcv(Z>uwXLYTLarlz@W)?vZ<4oH#>lP+Pzi%~AmId;_D-~W`A
zMb~@IGq>mJY}k`8R6_H_41tQ?scF|MXWzFjVgWGlAqVsG?lT)4$Z>ITNa5n2HKxbM
zb0)v+@f&n1E{e<@K*_3l6hXkNBLu_^4$>;}yM3?pQ`OQc$W@dmnko=*d%d#_<LaN8
zx!l>^b#?VZM>m`n#SPVq8cbc8uy01ttHn<oc54HzumzTB*%t<fTuVqH&=BaMP2N-_
zKoIvFdzPYur?Q&bdMin#hJ*tzAGbS2R%cu3Ud#RcH=nosMXfL{@o+P3O-;&_HXdp-
zYjGImFL_?9F_MrQh(i`7vq-Dz0cZmQ18r?>?t)}n612qUjj9z0b^To5qW7H4cIYTS
zNkD#p>F?&|p&>(JOz+Zv37MJd4iCI}PJDpvCO$3AH&)(<f&TszWNaI|ll$y!y_x)*
zKo`hq`Td*wa~)jH+T7+Q1$J<_@m1ZNh@zrmcsl+6@Pj@)9x5%Jn!P;*0T)g*H$Uk8
z`Ps17a>}W4_N;6UXlX5`X<$@z6btG0!M9oC>EQus@0q8J*iK`WntIjP^tAZd7NLp%
z@$~kCpGXw<^|pNY>Tx{f{JVGC>)0py3M#3=buFrl@s#9Db5ZvfPX_WpouaQWp1t#@
zVAaZwm{@xjYyL=eT^${`RbzUX@1CEn5ItZ(O+o1xHtrLtbJT9GUwTkz%3~wz788|)
z7%hP<A5W;<+1!<^w%jyoYH&f}dk}k&`)VpgOt$uqlfU^cHXc1i7R#~#cis*d84*yZ
zA&SjdyGV#D!AXc#*mZzhm<E@pe0g>Tx1Lm9sPRRv^f%*Y-)}{a;~!YovMa}$5kSlU
zU$_(zT^H*HFTVhR-fPLhb$T@egX9!-jspokCy)jE20W`B(l8_b<)8^t`fX>Gd{%OQ
zCXKIF(Fjz`%7PuwQGy~Iw<sQpV<Sl|6Z{z4)Q*+xih5WV1*s@7SL2nZ0q}jNP7AY0
zm9U<H4PrvRgruZsr~`2w*eD*&MbMqaRHWrbJ%=xsp@qke0&5M+3XYDBh5o~FF)=a8
z$v87zUZU+C9VI2vZ0}Zonw!s?a0yto!KDjmib6%1Z@WLPe(j)6&4j0X0x#>J0NiLG
zPbi#a)z%i9B1w@KqNV{uXK;n#j+ntWtXQTubyZdpghs=XcS^)a6sh(;Y!CPC<99wH
zlQSsif6QHH674LCy}qdqev(~bfOw;%bormb|D{%r=z@6(Ukl?SdH45~qN4+$>MW5M
zR4JF0Y0H!|Z`}oDnDJrV$xCJl2_R&lI`A*F2WBJ<4<EQEDlXvm96lM~9zhsqMxHQ{
zThn^#{&z&y&)AsaD46sOB0>3I#{fhP+?BPz>zb(vlu_T|u#YtvQKJ4yVAn)Z%eHh>
z7ox_*L<I$X6-NvH3H+&pg<iu=5_PwsfMRd>*870icS)}%Sqc|Mdp6~kKOlDjQgn?F
z>hV6D>H>#viRN&#vj>TXFD>;D+sOehwf+uQ&*obGkZCQG7Nevz8??n_9VK9eQ+2cY
zK(e&5TAZJsIay=WwzRZ_=--&beXR}#USGxaD8!2?Tc_#M($dOHO(I%Kd)}*L6*Y<k
z#wio8DgcO6<JH~XTq*SNh>-(B!^3lX)eKC4NNge^KJG|!{JyR~_bf2M^lUmRZr=a}
zJkO8UG^7dSNnglAg#3M&TX(NvgM+s}UM0?j{kA-z<E6oOcdAdm<;<iQiP8*;nSKW(
zpxDi~0FHp$qT3wha++8~`r+&0uKZ)TJNI4@dis*??%+kl%UH-1iA~uB2o;Z`{&I_g
zI@;qJ8@b<K-FRS%zB17y#mLE3rKS0BBeIJ0lC^e{QjjT~mpf)<Wi2c$XuSU`(9qNS
z`}Pu#*T2rRbK;pO?0(!E-CLb6aM@4Zwd~9Kp2)O34$g0n_}Jgd*iX{22t2;nAEpp4
zzIE*SKJ{_WN;v1SJ(Ux5%3@v2nfg1?xO4L|Pv__;gMd@BH6z_@cPH6K=+&haGE0mu
zpL>+xsNQYqvKR`)i<TyCKg_x@QDplY&SB%<rD+Y_9r7Z)GNdy|H(G<+R(@q^g_O7g
z+6-c1DZ$Xr-fgU1eR*FA<6`7XtlIySm6gTCp*;s<g!@4J;7^4LY#RCDkPdy5RC9+V
z)fxYzkxH6T$2D*+P=$#bfadxTn!{f%DA4hdzu53?_*vt`AA+FrE4Y0v)?E^#225Mf
zYThM<k3hdM_wjL@KdFksw}$4R(Q-Z?&z1icb=ZXK^Y{GBcr34`ww9=5$J}adWdl_M
zjuiC6a4W_Y>#*>c)x}OMaA~cs0C;=LT`p7g_H$}0#-(j+VStt&1!-yH1b_R#JUB{9
z!ik`5WQNFA3g0jWzpVT?$_t>|3U_ublF_<U7MhOz`Sy~SFMzM#dTLMxbT4+49a`y)
zeZkRFBx5V2=;jb5^^1T55+p`#n!7524W;%))O75dj)TBO6=jUQZx`!h`Ynw%{=MC}
zaA4iSgal=7pS{+0m#z0!9ftRj2xOaB&$IBgPUQC~5u}d3tUccj@YEIMepW=spFdbn
z_p>ET-;j*I7b`gfF6pO~*b4hWckl1-rKPljy2K84C`d@;);fDwAc@N!kazE-&4+;F
zORoavOQ$%Edu^wQ^0p`+g`T&$-_Cb3)dljatx&nz>}&+-mjwNnG`J0~imv<mcis&1
z(S0BKX6vR+o%4@@iN4(yxPBWz&*>$F=;E}Eb07s?SaHf>g+$1f@+HjS;r{qGI(kWY
z)f4uGS7*aC@)KD01zDBE#))!_Ze&Ql8HxdQ7bL)xq0pTz*BZ(sGjB9G7DIFvNPz(~
zHr9m#GpM+aINRIbBZpl+hwJH?h&|v1+v(KIDh_lt-O|8di<YSH_vQ7SueDekYQG?P
z0D&}Ev$*|vW<9(frFS$E0AQ@I*)dLPI3vlfHJVXZwz{64{HX-bcP!Acp{3>i=xAmG
zF*p%$dBlFRS;DD%#!I?RIWl#2Y$G_A$F*SHGBiA~bwv&ZL`Cg8vFnP8S|~2A@$rfM
zX8Nt~IgLpd`UoB_v$L~wlxK1h9-sL!EhVLI!zj}Lrb<q(A=oZ1t|woFiKhhOa3*WV
zCOSnV+_a!qZf|ZN;lj%7Py?Sa4bd}u>%E6-^iN87$3C*;_mj+Mqtg?kV%2T#0^ipX
z%GS9*q5-c*mlXdN7WlLVp0O`#Ya;-tf8?NB_)KCKsp(PQJSgOxJEpV9bvw*Ta%W7<
zJ^Zk)F}AWIM+4B0CG{uCT*XP!Xi=xnsKFbZ*L*z|l<0P=PCA+gmQr#V7>m{fIF<Y*
zfP!01R07Vuy&BkX1{L|`Rh06dweX;i`y~NN-s!RLh@W<LHH%BqNJ-OyxZ37?dJQ2`
z3bBZxv#suOP8T5Ks;aVp$ZyCXxx_6qs~v38*0u4831(K-{0EUaNr<5B_7;`MLx=X$
z-!}cWqT-#)xO){^EQCI>hK?LoEp%ckqzm`jnwmAJ&0Q!njaC|Zcrex}>`iRxUa4^e
ze@Kgp2yY#Mg;2d*Q?K_f2OT-1zzTV)`Y<xfMjKj$Jzi5DpHH3fUlz(6l>KGImftBm
ztB&>f^Kl?%nofh(zRd*kt-9JtT!L~^oZ@=t0;H(P>AaMx>Ny5yIxaHFBOV?fG_)Q<
z5;o{U2IuwwLv#n2YtdG6C<XaOc({?t&!7&u*dPBP)XS8GrC-Lwkfuiq3rf49wsrme
zkPBU)k87wYZjcfgXrP2^Sa+nRqJoDmTzRfg0#I&z|M2kq91+(ezM(R(PBrSaFJ3qF
zv%9&pC4te3X(3e`9D&mkfYP99Sx|6f1;52QII6j)R5J(c^WwnO)~)xSgw{kxj$Zow
zFF^c!J=Hs4&5_geN*TTt^S%w1g1<f_F%dhFZ)$QOtS`Nyk_841@mC)`0OaL`e|5tO
zHHhdud!%WSl0~$c&hl#U@;nBaXYj}Ct(}6x>2L1LzP`TUL<$*cX;I$?2R%<&v6Iu&
z&;bdVi7guPuBf|ER#C3K^#_@xic}Z+@4;?!YeHBcqq*m+I98;KyXvc}k&_ea-I8sF
zZ6gnzyqtKRe=D!{(d*uHMhtGts_+cRTEMkQs0$ngd_II^6n`b}tQAzYRfYjcLL!2i
zEmMY^9NYZs2oHaE1n}F7)Yq{5>~^bd@dzOxcTDV`$Sn*sY9EoVArR=cL8qj@|K0=_
z>8X6*S``EQ@BoH}jw(<ojvv_W9~f|Rb30Dw5vwdKJ1CkrpXca(ek@u@V+u@5O`Un}
zjbnruS5-nnLPLa@G67_>IOett>VegL<<8*`1WT+9tHoj(!&Y=D<#UT_+xgvU8a`>S
zw+f3A0il^TQ5c$Ab(N!J<lWEz=-T{WBo8KEh6XJvo0^ty_9rL<RFt*g;Sh@iQGR-z
zq{5kWRaf(K-Gcr~!@~6GXr;qyz(T*olh|EcBo8OXszG1$5)p}|HI{dDkU+9#Q>&lH
z3%$Kx6&1yGi4wB?3XZDK$`30|A-+j%>wR@oEHl|JSv}%~(yS$vxur8%eA;q&d*6Ez
zg_CIr32Eo7oSed(N;=)o`9*De<Dk=t5pmj|f@Ei7=0UgFPPg3iA1r88MICzaXX!H3
zrjSrP3d$lX5_@z^<LW9(Xpf&?oSK@vxcEfj>dp|Vut-l_0VCTIJOP6AU*m6WnS}Q8
zF<(5kF#07_R6gF{<=`$0!|(3zMZB(hA*wY&!RPzaC3k*3^VNIEx8bNmzGj;A5uNbU
z(nfqeD!Zp5Qu*&!ln%?_S%wsFg4{gEIi|9DG!1Vm>dt<w^VJ?-{SmI{rDJ17+xT+L
zspqr^pC%Lj0yQQon`0aVyrweLWs-tEwhYlEu>JVz!5mtjC+tI3-(7t=&i?T1<F6`O
zOkXjxX!V$4%*WUYn~~~HPfM%3%nl*Wpoby#=WT!&q*Icq>2_f7@qovnvZwNt&hBL8
z;m%I;-X4>Cz!g>NTppy9LO@8kx+1WVOe}^8)&iy=o!-;rZk2uzAKwvK`VPyHbWRG{
zeyanWIwv(RZB1JKvzDmAId}h{N3VT~^YnVn5xs6oK=>v8S??rB3sBz3fC|32_{J}M
zb3B)XDGn{_<Ku$_CvIzNYhXYMC5RFZVWZ&V!|3Bv4xX>JVfQPAtw#7k<y$7tV_u?F
z5Lcha$yrB$zo@o6Rc88`)&srIpBVy#Q81+6-@u!blao;U0s;ca$jCtlvb3DMyu3m}
zB#Faw-W9TB5TI+=maOERzhDcFCjs|$@zi1t3__x?F|`P3Yz~0P9&!krpupzCQ}}rE
z>m5s9A4+6c!o$(GKEnG_%YN>cmmLfZSxQS8N>Jmzz70$lM0T`2ovk!oPGmJfuGa>g
z1zqYer$^Z49BIMA!ftP?$;lA{2rDnEwJ-a(i<-=2ao~W0I8o!p#XDo;*QtouG+PP7
zB;}<w!CT61+FB>aM}+5_myN(nj>hxz#50g>kAKIXwzl}6KSR6TObG}u+1TKMG}P2c
zyy5sBQ6uLR$SHjApZX-Q<L_Rd-1I1*V&MAn5;TlAv2fiSzXPKzTFo2&@;O%(@KdqU
z3{WwRbF6I}d8*LRN<#C~=v(L7fjO5-t?iZYI~*7Ew$<$Q>Pws*>;A<=YdT)M>b52>
zu*@yo_Z%GLLtL0jzWaL5rq|(A%F)rOsAz^t!9x!K8aZ;<%e$|s(P^%oPW+h<DMY9X
zY0w@?Qb$37ZQla1^eg3#y9YsROd}`PbRL)W6sWDI^k*$y-#V+TgicV3$m7<cse{J^
zX9oV(UYxL<sKnX3ZtE@@q&^fa$JY28ySV{dE8U7igmzOv+H%?uR1cd1QPrkX4bx1h
z&kH^;M%ubE4YiT;OyGfrIq}yp3ysyjLGit7X<?9)lbf2Fe){xDl|iVK5fw7AqwN8i
zV@Q>D7b@}vf>p^85F!Ky+#l<06j0;Pz-}>}pfknQsxfDYo}hc&f2(E!sJDLjk427m
z$lz5(drPU6y1i3uS!bay++hThs3U|T0UvyQ{;d?kHuAEvKKCaJ5QOFL?~jcnsjp8`
zo5N7L!T_<SqKyqBu^!~~q^H@Hm3>qKSBxY>@sQd-3s<MGn$#e^Dmg|Jmf9PdUnIMd
zfCZd=f`58{zl8~{ULQXx9V+1&n4*-&%_EoIZyI|!qHr5)`}8lvmTlRUZJ>W}I=w0N
zPW_l1%&uck`(kW=1H<W0#oK@{U&sFQHDwKldA`7)9w8jI=z$LL&sU}CN#bP_U$e<^
zU+U&MCQlxBK8>hlXF*XA6RO5fspYwgW8Cg^+VC->KCJBx)$WbOsFZLI@^VUjlVbYd
zuVEcA-9bgfLL{fc-?Hd3zr(7=2XTe?A|cmLn44Rw^5C_r*Qk8qzH-^Kwzl5dvsk~R
zm5uP#st79``**^-)8f9aZgpTXZU2k_gxTPymvx6{fF&UbJrjJN7dC4bRctLS?*Fc2
zNso_z5Z8G9xBmkT6g+!0I5oxUy5<E*EFeYKp;!V)6ch7%{JIu_VvCO)B4qfP$79E!
zx8!*wDaE3ZP3OwqmD5FfAJBTqF(*trbl&8Qnl+o`)1N@X!<W3Z@f4ZxnJ?od{Z9ta
z&Vk?%4;MQy+|y3DJt0suG-hwCFppS>mLHz3^kpE|=e5~}*$NoO7@8fa@z_SdQj7VU
z0`1R>M3TCM+D_w8_M{o8Gp;6S3cp|$V;iA=hbbd8`_N+u4i0|Y&ry_y+1;DJbnr2h
zW&Ri08m}nG<s5-E9i))aps$0BI9QdIeqt)O4_8xki_dy4f-{*%58N%yKw|k~#{mO4
z+}c+RtcbK<0CJlxHKv`P@XFodVyhqeYS_=m^PmZKD=wON`$xLO6pX}Z3WKZS>y-r8
zG<6w+eLcfU2kpoek!x~Hasg@@veCaf7YKXv;?t1*6*}685b9XD5W(&38K$O51Ce8B
zXlQr@1c-=;)|QsRszDKspZ+;u!vR-MpKcGoeG62EhGt>uvR|}`iEVnj87CznF=bx#
zq6P7tntG0&)TsFooNz}qZhY=d_Z|yD11E5mtqix|YNsLpVOy&n``d4b%Fve=dKygN
zA{E?1{_KDjn=PJa^x`zlZ}UtQ$8TAA-dab=q<_#RGOc0<!TY8XQA=@7z-1JCX(;fA
zkacTZPB~*HcMs#d=vM_mdF2!(_J!hwXAUBxUttVaC;qR!03BKB-1x}Q*=3{7-=h_^
zcA+t7_U^olYdrYrSluUbu-F%R7@T`5bOt(gCX}mjT%d+*mtTqU0q;I0irLAjaK5g=
z2`TvF<eNNu9l^d0$#}i%M^V_ryw>nH0T&xu`b-0)?n)%Rh8n>wo!&d#n_|eot--;X
zv9T&_B})LHzOfM}UOFQ^{ry$X{Kxw`B$W6<`b#CGNjdv5(1NtSe}}Dccf}!+r{{yY
z_$3l=3HN9RdzRm38yzcm-wRCH-XJhbY0&p>>ikiO)`LSaj0O7n__P`#`?f1ee|Ebf
z50i%=PDV~P&yC1q3BQo;!ZBrz02p>i!&3k8@h>G|*^<5$skduH+J%bbR9b*a-Me_{
zrl~er^N6ZXq<<(mSrpvvTKhV@`Q1Xevl=7C*u+P%s9VxdIpo|2+revp+y4UUf>V%M
zNhi-E_cn|czs_j#X`yrUDLZE<6GXj~Vy|VY6|IN{d~-~m@S{E(co+y(T!H~)sOo(e
zkPdvi>xX2RyFV31)P~i;_xG08)*nn658>SLkcBW`n4kYUw4U2Px;cA2J23$hE-$aB
zL9`*o4s%f;;fNvc`gFF5U&*%T)bjHK71UDZoMymEo9Q?6d2<ErvWyD@RE=4Qe8noh
zd~zt1V>X=`<ysHhy17D4RriQ~ks}KT{4JA|V@wIol<U5gZY;=cJ}N*1;R<I&|01ZP
z;8o_hC@rjrwz1zwptD_E?im3^3gp~UJD<cM05h{_2RMEofIE0V)st3-J?W%vV)9Ab
zFVGiCD>0h`>oan(9$*2@ey~_#HUROjiF{L&+h02YHskKN`1sn2ib5;5aPC-0s7;3f
zE(Qej;jz+i^#d<bmzPOLMj0v0BTlqiBLz%7$Lh3`7k3XU(cE8AfLz)FPKa(2oB*yC
zxj1y-Fs%gkr+YRzT_(&r!;xONt&QWFzVY!y29NPq|5er0H00j5V@5Kg^l-4h<H!K3
z{yHCiZu6rsQLFZ+s<CShA+H)cI|fgGjdgwN;)$K3u80|AA&Y+7M&q*D@x6fd&O%CU
zqr7b!0ADm<-?*lpw%`%4K#0qL$)&HQVV&wJ=N^vZY#L5gr#Y>h6AEIvWmn2Kj$--q
z^;gGu?|O)}WPz_;FN)E%)DlV***8q5FC@ooL#ZU+i7w#!3llN@axE>sA|>{jaB^`K
zu@cLQp@ayrq$z0}<0<<J2be6ezUa5a3>yV(k$`-=;-pp%#u-1Og$bZbU1;;gBC{Ie
z{B|=8N-FJyA|SwZ3vL;xNb=pMTKIW(X5C^-+5EW*)rB>C8tbCb9?SBOdAjl^Em?#9
zq(NMcr6|`^u-(@4&rZKrStg}NEqGnlhp5d-26(Vjh>Ovx9S!=FWynN-KXX40DrW2W
zAJ62kA7A}D9>jw!naAn)h5P5P!_+z~73&=ltRJpf_f2u|t?-lfQQ|a*u@wPi&jb(G
z*Ed|T%!l=jI`R=hP;VTuL!AnQ;rp#quk@TS7p)jNh1G>nY%XFjJE+s)6=ulu37}x6
zFYPomCBwGjkcul04-W*)Lfy^VHUF@RgaB4WNHG%{`ZMXp9NyH^jcaFdF-kD|6%A-@
z6)lu`2|}=qY?P$Cr*elPI})@wE@)<u4Hm`7u0@@H0SkMAjhj2#WcDE$0nsfw8!V7U
z@smQQV}2fAN2}&8T{0Y)5|t0u(jjV&a&`N<=)SNlXJs`#R%=u!)hQQrpSV=kn@93v
zO^a+nbK)Jn*^^P_*_OIntmv%qd_Ec#X+TTluKqR5^Vx4j(0#6I2XzmyQF$LCrE_$0
zJsNe+UQ;`Z=vQO^T9?vQy^e*q$QM9V`ESEvX5Q}61GlDV_6I0dyq9DlNpxdI*x@(z
zMn$t$PxB(wnx%%ea}dor^pX^FO=ToDU<<whD|J3_9i@)@{?FzcnnSs%KP;Nq1%K9Y
zxG$f}`jw7wK6`+^oxQz+oLulCOAxmK7Ra{j@v$^Hd8#t+ij|eTu8yExMxP%omghmR
zg58vLuE2d-05<=L*@aa|)Tp_`v67OJ8br?RLQHQ)Fms9EEkHsaw(9`q?(gb)>*@)-
z3RBl?&~b2e<@`NESW5K`P#zB{C-?U!mwPswH~8P&$U}rNB%dyNTk350DEP8g+RAK(
z^_#2dmI=L=3AIO~M6c>g_tbxdI)*5Jju#Vu-Q2bf69V}77^$hvhQ(L4w+k{c#pdJo
zd@C-4Z2H#%QGf9g8VF0Je6FD)+ge*#2oZ8|;e)REcfIzqU+PF+)bQwL3KI$tbr3Jr
zZL30+gyfEA=1{>?Qy=hf24xmLcHh4BmB=Jk%tTPl_WU=bN`9(QTQb+a`ueKR=JtTo
z-cm_F8DS(>cYY0ayYcxu^4yKOzRhW)y8b`R(}-LRr>YN?AO5S`7zV1UzHiS;@_O2e
zifF;?-zY>%KSC&5)%78ylLTe|>e{BtIV~b|2PDbh<GZ}xR`xU}JM)R~`JVj6F)z3D
znbP>BXNH8!4KTbdTBO>bQXu-XG?*$$w&IoylF`_qhK}}`<SRbWCMI;dJpUGh!InV=
zQO%9bVF0)OeRnW0pr$iCxxc@M&_d<n<`I(9kno`Sb~`Qh?b~*$_3X>6vhuLFL<$!d
z1!PyOr{O@zVSSmI_UP#GxV%je`UN7TSV?9_`iBNVeD`q50$AR`kM?8bK;IW%p^kx#
zjgi$=g1zLBkoHVM$LuDw8zgPbV|aKeB{onn35juuDt79Gw$JsBl$RI(Cp{k8_J#l7
z)Y)5=WC{B3$BE*aT&_81d`?+bnXMZSZpR$yB!@@#>Y&Fd?-YN0%CejR!!Aw!V+<L|
zgsD^5SDbcuSxRV5B<Mycnoua3IOx%XA5b({l!K-drf!2lNdStP64ePR+dnV(FaEc0
z4SFJS6T54h-4K3U1P*vJzhb-VYU!2W__L9lGKic|wndL2FXM!CN@hkkLU>y5+^16G
z+@lqi32$|5?2GnInd)afJ-sMp9vsW?E#+iV48**tn@7<vR>qsMwartT1y)T;roO9d
z!xG}%zgM<)(Y)&fa?yRd(vVt#9>J6@fB*hXj|XjS6{>!gM7>{c5eG2HAq>#98H65I
zG_RcLH~SfAFP$C|@U$$6a&TytufdU7k0|Tcejp(&OTevgWTa;|HW?D*S89BLNN=O3
zcyV|j^N4_mFa`$9*A1nd^Q)^?foIF;tM7$xqTp&`Vg$mtX+a@mYy8I8^l`o|BCP!w
zb91S;H`sB6U*+WtjEvD?VKi#0NEa5el@qK?_Wj<%<z@NnT`vIpQ^>6cP-lxqRr1-{
zBzWPg>)7*+WkD-HagoLF)RA!hOxl?oZ89XMD#lHa{6^J^TlfARfX`Iav39$in3+h1
zdT^_9dauRG=dqz*NL7$b&Gy*~^O~&g^mNmlJ)yZJ5f>etpLNlysNHT5CtadfOHXwu
ztAQILv>lU3u(V(}<W0Ng@Sv0<I%C6{mYSKItbvLztDulE?vJ%;s#~r<y^p}nw@Dd%
zCem~}EG0RU(Piv&y2yeN>2`ad<oYi`k_<AZYRHoB?UCkoo%i0~`|Gy^AY`8hUE12h
zqozam6whjeML5mbY<!DinDg)uWnPRJ9E8g)DFWTEG%bXOON~dU{`{V$NRI;<jS({1
z=Z^I$v+KzN)7QubE&U#kQ;d{KF@|zx2ALK~xmZhP7M7R2Q8rlE4^q54YR*2R)5{Oh
z(7u|=<NiPt;1chehC8=)w8tYmgk^;&QNB|rN>V{at!U)TlmCMkW!Pd+2Ms_(ABaP9
zG%{Lf-0x^7)jGBCec|UUx;V-_I?JWbI(9SETu9IUV$2(3zzY5wPeN-!9xVv5Bl)IS
z<EGxe%QSO-US1dQ#ej(f{W#N?s!&;63wfg4AzSXLqobpLw#=-awr!ZDzH&$xaPqZN
zb9P-&J9VrtMH26(rn&hmX@V%I_Jv&VS=4pEdcNS$v62j3U%Sw!cuzC`<L2OiNM{yN
zB=BP`R|42$kRU~}V61wbe3kVJck|t?zEFmhvn<<yrbhYc+%~8@#t{v6o93pK<ZA5~
z138++;f{be!PzVZ8C%=qEdUnE+$djU3JwJu^wNI)sfqW0yA=}?tE)@LpSV3X);tgi
zJGA3apO@!v^z#e&%$JxXGIi{qZ!ZB8%S@j<ym70^)QD;;p;TyJ;j9gkl8^w*q;-Q%
z@JAnZVqSK(wz@iM2XQ(<h)@HJwHL2`klUG?np$m7AUAKP2!l){OZ<7=<iWN?_nm4M
zt8lH^zMzKILDTuEh;QOIM5a%q<m9Jg{Z&(+|JnRb6HQ#6pT{dGfE1>ww1ismtsCIx
z1Kpwe@&LNb>5q@@!n=E%oH2xG$Oz#6{?*h}KVVOv1G&JS3_%8%k;M6z0aM(=uYnZc
zV|2FwDI8hNOsz(G(5ZM!@yIqnT3Q-uOhBL=Pz3YwlRcn72*@bb1LbMSOalkxq{X3|
zUjlpQ(vq_&(T@*o8EGy|9geR*d)c27Qg)QS61xlTQg<N#Fl=8}aTl)=1JDvaZ=)}f
zk>RSTp#gKYt(pY5xKav#q)-B^%o-#&h=U`B3u~pzZy80~@%r-6;^X6`Bqs{a$30}E
zZ#1i1(Jr<^xWCA6JzGPs^q`y6_%#YW$jFM_e}Za!8AC(5fC=ubt({ya4N3V1sV-t8
zGsx)bR{i^jaFmv~V$(^FN8ekQ{4)&V8Rt(7YMVEj2;t!*Aq1frpk?KZL8V>r*u?Gj
zs-cj7H2jmYXNiBr8N(ygY38L{>(b&w)X-@DeSYlF&L=@R3l$a2oIJR$n?pU?F&jt6
za6^t*l)gM#0n&tecEPVr9nk$YMtaY?ex?BdNp*Kyu#GR_$T;IZMRP=nTyg3zG?oRV
zhXSJk1p{3jYkg*PcVMt@`hfjX9UZM|dskcGnP<n>A2T!TP+jkb#H2af+wNncB0*cq
z`F3`8>gu;3bXDJ%$4d2v{r$=7>#XJcw(&ETgY@*-!U{MwIReO{+co8!y@=Dft(_rV
zNJ&A6!6))atRJ6wc^A{@ni+q#xBFx<6Zq_Jo`=A6Nvk7u_~7G*2zkTQVv?)O&vWl-
z`RM5ni;L?tp_-PP_`<-N3kuR_yvwp1Qhz=PQnog*;G6pKb{jP4ZP8P(y)nztXBM5F
z=U`%c?B3qk$m#qu8!lK~O#`o~=@$R)xo6GLFd>r=n&+~Hx;5oX^}^U;d21T^3<4&4
zJQwk=+2iYF@_JLwdp51^+H)(wZ^?>3;^kcA)`aB`5iw$zc$-QOFGLsemJJ;P6qk!v
zSL~4k*Yf$JYEDk%twzB{Pq9SYoe<56iS|Djh@a7%o11g>{yP*~TPIWA_9X4aPr$tr
z5@P1-Q)Zob_5Dw~S;LJfws66Dr06TXnUwFF%uDkNvcL84U&>Z<ge5<}0GN03PgvrW
z8msH;=V`LIEHj_WX1!*Z0+E406$M)PrWLe~ssq%%JO^|%w0fQEExW0qBNG53Nnf90
z?7r_AWn$bOo7VgCHK1twK^|N;llnFRf*%do>?gw-O!K%mfQXRneSF%ryJKvS;S>zZ
zzYl8H85{z_G;#n4ePkh1c}&8-T9;-{xd3Z++CN*X?w*IyxZAO5GJqZi|0mZBN$UH>
zJ!p(biO+c71IZgABC^6K3bnhLrbZd(j>k;3mp_mp!_d>yXDW8bHc1I?=cl@tl@5lT
z-`&RQ)tp~qgUY?r)ZL74n4FRC>H-W3TW+h%3A_|8x3mSYK-VO%zlhLgx3+!|NXWj0
zH}w%kDJKrpX;nH`-{Yq+l9HFroM9kc04&%E|IJOe;bf<$C)KliPEWYwXXI6v(=$}Z
z#>S(jgP|@!A&m=(&yw%0<(Gdp-)*OlMVCZH|M-5?O@3?dhz{)i7|A||fdjsZ26j_1
z$n3Af!MMjr78g-D=d*WKhrq;3n+F*^)#;aaBxhwQ<yEd=fwqxogQgRK`$cFDpJ|ub
zvz|*zF3~cx$ixSX>N_*G>k4AN>-TG%Puz@BY<SGv3iWH?`&@ta8Wq^=7(KiPVw7@u
zOu@7~eOdyNT^YVTRvlu4TsoR=wJd1O?d--*sXATv<+Zf%JxsW@A*8%RGvNhJ1bOCg
ziif9Xe_f}LI3SX~df^LR8Ouw}G3Ks?mD3m^B3Hu{X+0U%S7Y|)jWFK@@S3OpeRX+(
z?@d;Q@#9*ZIy_%rhYXF4irCA)Uj>FQ^TY)-S)twT&jXku^>+7{Vg#9a#)K(l0jH>c
zH*f=xE*|re)N~AM8K{GyPC2tCteUW|_r2iW>wo{g8~em>FJ=>r9BxKEHAs%sM^;w)
z53g&Z-Q56c`0cg0-VG`vN6&EmdVs??wV<b0ekH%}ZMH!80hB}X0T{j%y}K=k0@3Vx
zC%#@>24`aj3>^hFJNj7yt9sdAAI8}nqU*2;%fSBN^_TLP@Q7&4mYOwp?H06pXD<j@
zudL6!Id`nMgM&moV%Csphgp+7$r2rna+G$NwSN<$kij}o*H1*%Ixv59^f~^oQS&u9
zPJh1>(<eMa<$~@x_04~rIM{t%FU?iffRCZ7r3ZQ=e$U}HHqmRGpqD-g-}gsdPA&Q$
zliu%+#_4_C;5FF9x0@&H#qPJ@K&=WZ2!*2Bv@&XFIEW$J<8^H&Cx=`lww>Oa6)~;i
z4*uqJ(hBi4@%Vg@dQJy5HpsNPzW(TJ<>cpXzXkomygPWpa~2MfE3YY$5pSriE$tS?
zw?Y5ls>S%%6F2!9QLl+`%aj;~gSJYT6|Z0W$8xr|vHwjTE-4(a-+|pd#9pWv_Xxlb
z=?PXbC!nt8qE^WqVf5r>@ZD@|Q~>sW4;*(Y$kM5+wy#{FR{ws3ih3y=pj6I47{641
zzPQLiti<ko4#U=;$Esj-KS(mH0o!@=j(*vFbHJw?GS=PGdA%_;Xr+3Fm-F-(E0om)
z0AJ4qd~$hC+3jrGc)XlU?0FdN%wv6?3_LdgZ+FKVlN!$i8h%WV$dY5@M}M9t!6KU^
zBPXY)3M<SSwQ8!IS%zC`<lyN11f=jN`XIx64&y?)xPtI(wD{I6*m&^=$!=H{wzi>?
zH@oI!htqtfsMfg9z@m-r;mb!FG5;%T%-VqaU6WPsjv02cUKQ_?=;45etpUu}gIfP+
zE<QC(_&hJu^V0?akAGFCOiQC_621~ROHY1Kd8nDUx7E{mOw=r45)u-Aq6NPT^c7LU
z8#_CReD-%+R)qV_zUB8K_K|gyCfJG^{~pZlxlM-@Qls*PB#e}my?uO&nr_#d7&PFY
zkB5v<?h-mSJuddN6wgp_hWB~D71*OCa*>eA5M~Lf&^f<dsvQ{|Wt|7c#_zXxKmO6S
z_@f88w=igZ^vkGg%z|G0m!Grl7tN(55>w3sM>t?iMN3P@WID5_^`9bBN<qCnKktJH
z_@9mLPSAhaLzEML)m_-wcX+1`9wYL9+BFWRZJI})IgT4fNrAKz6{PI=HSrZ2(h>Gx
zX?{MrU;y$q7D$sR4vuf{Dv-Y>9nisnDdae?0NoY;*)T^9K<to_>c`o{ghSrNSO{ao
z${FO9ic>EYTclf;Dmi@02;8r2pn3K3%*(n>MU0g;E{hD#>CD18B7&9p2iVyg!=lRN
zTD>p5>lP;j(S!ARGx)Jm^eN~V7|E|4O$sY}62JT|^{Q(jg-n_@`aE$!d5jaN6%vZ^
z^^+)Bm3@wrC!aXketn^l=rECUrN@AEe8>w%p7^w3HO;O}7AN{<*$NWCKokUZbdVt<
zACof&oJ&DcZ@Hh}n^qK82dYz2QXp3X>X^yf8XcOHT=;Pkmm~)(KcN4gW)bq1Be{>^
zE}7|$+l#~9<KyEM)DuRakLPqkm)T`;6s6C1Njz*RA9ThXWrp8S-}H`n+{LkNsinj}
zePgDK;ts?u9tlr}8=)6|>J$wOqv~L8+VsDixR?Oa0tl#v2H9WVc75Y<h*{cwF@Q4;
zd>nnB@OhEoz`Qitf9qfw2x^mce;>c{bTD)tBE9^xa_;sj2*bWTJacHIsfbx0VMPI`
z$bWGKg2RMx#2_@Ax3BNZ^K%HM_@kSsXg8WP>lrgShFkhg5Z!Pn+y!;%!GRU&R9RtR
zw{;XPEuL%qKXXo9uTJ}EXAC$nhGFqK=!ry`1Q8~^l6co@vLF!Jcm#1JC7bP7kH){r
zr2KYk?JR~~qYnG-s-Ns`tzKuXX!8AYJyhb&&CQ5~tMuQisTMdgc;>}m@F$GH@j@Z-
zqQ{VI(nY~DO`O))^v1?ULjxF}2&C8r2b-v4(RTv4_#Ay%9UTN?0K?yf8vT|V=2WHU
z?>9eW1-zyS{CeRmo!6Rt$CxX_N%lOBoWCMxp9q<kpR_5If7^bJ9qG`qW<0j6Zl-9s
z@rDt~Lo}aqd&swlB)iz&ChF^>0t|2U!0BB;*b;tHRwgF<%y+mfhm5p)98VO?f&vlW
z*x@y#K;mGyi(<MNgT@Azk+G@^BI?4tskA5rtj)18R<RHCOMnbwIkR4?GFyz$n;^$^
z-o(LvH7oXHf7PdjG;2pKY5L#ApHpWyRmALvxUXZ3If1LMWFKehoYG#_UWXpN7&d*Q
z`EzA<+hh0K(s)}KQ}i&<(R$eg2@u81u{)%+FR!djzRK6NmA}0sepo{>`m4!o7aeWp
z`PrC^aA`c83yDwg|A_j^s5YCZTdYWd;_k)WTil)E?gffF6oR|Emg4U2!QI_0xLfez
zaPxlOy7&IbO4iEc$>^CgXZG2<z^=z074@P)4!(&|xSI!Fd?hMTew)R)yu7?`FN=Y(
z)vK(xw@lrdN6XmF4HZsByE0CokAwi7n%gVRi5S3(ozQAI^?4&)@mTs`GOJsGf1la^
z<soW%d&S6-r`GJU-lepP79yx??7SaZ_UKvD@ejHv%!m4$KL$h(I3O)eX*;&-{cfi}
zthAI485tQfLfz1Cit>P;Z}F@~#1uD%1{bFjuX0H2iqEwBV&Sht_mlZTsmd0J;<~M8
z)qhIvm+fC}yNSP38*!v>^Ke${=zn^=DoQP-zeb2<H!uXW(~b4_GqTskGYVx3J8*CW
zw!urd@lqEJtgSViMJPaabSZ(Pcb78Fp0H|6Rrk$JM!1Hn{SZ#K3@SHVnm_Nn78T|*
zHs3&6`V@Yl?dRq4+Wy^ngbuK&lYwJs^hDu=Amq=dvzAOCr{N02Zr_XZb6b1+FKag_
z@CD7yxQ^Ydf$J+PkbFS)w2ACXb8+#0F){eKy)QHyUPFashjuDI{Du?<Ri>;96Ciof
zEerN}m@b=Inm#6>p=FlZgF}U-71jpr)i~Lkt!-+Odd?Ebp*PG28R3r;%PAZGbVfZ3
zIxJR|x@D8zR&7=-Bxbbasu~?HsgW2j6%|?B01w!Q85&3+NtJEYy4s#UsV){P+l1(=
z2jStgQ&R!NU1(Qg+(joV5#o$fx#)GaU0AzYhRQt5u5b|+>aVT8{z*Dx&|f4)be`=~
zzeE?LLySs#f=os_p*#Epsua007A9t8RaJrv6-<Dmiwh)@OwY_*RZ-#f@h)ibKDE&f
z5H0Y$JDxpTs)GFv3t>_BxKr1A`5buuJY7C8?{h8NJkd9rWL|R@eKOIi{=U-%TADTW
z{mX6xPL9|cp58dl&?fT#j{mUnSk|qW#%lwPGwn`mzWe3oAzc~vmW(8<nElP>v@pjn
zyNi$R?QEriN$T+xsi2urHx>0n2lqym6k-=j^9xLm?<A_X!{b<M>+<dizpJR|#K!s-
z6_Ftje?|&9v|j^SO+{{0xMk_KS-;(J)1vfejFj1>htjAWRq589B`4qIgpo>NstTh*
zgOUtMQs?K9d~b^iFAiZV<X30~>|;@7g?*<>ypZV2L^tqT+?LB0+f(dk%cbB!{Oi9V
zxIz0`7&=x+3@$qQx2r34f($yG4kW&)qjRxRXR7{P;V;|H{%8^e6x-Y!n>)`tQqIU)
z-dTTHQ-^i*wKPX7YvRlO-^ab<jpYlu3ZbIVr>Pf@=n3w6VgHv>c82idn=vK6;bm`O
z-$*05&arpykF2_>HO^5i3-+Bb2i9~cKS9dh%SO^MeD^bcmP)^kDUNe?*4NiVT%;hw
zsS*IrNK4bOI_W;-ay5!BE7{x2Nsw6}vVK4?*LU7CSeL<}lL`47t^n5UZ<`$9M#8rC
zs^>AaLS)A|ja|(&B4{fdPZQWB0$-c?$=bDwdR-S4-oIWKtUH9=0G|ZKndx=*z|`r_
z4<$@V8e(wzT~+tvnW$)e8G|HX9Gr{XRQR=4M`=)PX=|&FqGEN_x#@5$B!Np)S^4Vb
zCXgJ4HsPKe6xrc+E^O)xtUNM$FJhZm+aI1SV7t?G+rV8sH{vyon6LwU1Nk+@l){9#
z5gx5N#(8=Coa}JgE2+_K@h~W<A@U|E`a^)jbyT9VjxAFp?pZA_C#0=wLgknmE{Ku&
zqu6;c46;*LT6!AICS@CT0Y03tK8|3xtPmOrS!@w^Vi89`P9kpa^{9S1+)d$TTR$Dy
z52UBZ0us%<?2q9VM7yFrkj;IBo&G5*tffxsVXLcGui(}Rmq3JE*^j8I{k!)t1c5Iv
z!^nQbA#ASy&Q~L_XvaoI@bU2nhKB*nqXs%UvgFF}oE?HaYmePqahnVl`aRFOe{s&=
zZ-KK2iw01soL_?qX?)r>B94bcU%aiIFSLNP-R)g~MOK#<sbAl4%~OHA2m?aC>rF{F
z-b<S}oPG&wrz9^huYZRp+8iGdXD?64r<<y(v_wS%W~>ci013EhuiRez!@0~gC1K}B
zvPFj^l+>I`-1>CvMH*b&UCyb5hP@+A^U0_-OE5sJeEFqH!&ceVLul@^-18yolI#7(
ze?;F?@W{T+6q#prGj!kOV$guI5+nO6?HFh%YCORNc-ex0;su2d__|R3<KVnmI2D;f
zA#XV)B?O5x?*5`~VL=84`R%oKpw&&OL)Vk*QvP7n$F}yY0I>W#Ci49GBl^v1XII!<
zA?tDeyvZ>7)IZx%=`!4zLgBgFse96p%i+*r&o|+pg2%eu5eW)e>LAwpWq0=!bbFTI
zMJl^#$r&$7ZK>kN)JUo0@87t(4R1*hFQxi_E{-s@lJEEcW#a&FI(nKN-;|X_<CRpG
z_YXmmZ$NqZ%fxl>AFcCps<(wuph<n7qCey5^;iRbU*{-?mDYn~Y_z%y_?*D8SZf0r
z$@=40x~kT!ab`S2(%4lWFEs|bDiZG>$O(b`A-kzbNyvcY-r~^E2lQVCsyCvwYyBry
zkXvg&ODm_>xq{WT-siE;uchvjbPQR7C^WouSCOEg72<!4^NzG$pNiHal!P@j8zp8s
zuvdtzUucuHG@UQH1;2AkzmWaQ0lLdF((RbFiXe<SnVBKLo9d~lQBItu^cXB09O0pp
zWNip4izsPI4|ga5Z3xIT*bz2sO4}U=|70CGIQbHHd?)SVP>(Z<K8J9!X^IyA#--Vx
ze03^de=$30uXw1`{OGiw00>X6R>jC!Uf_T=yUOOGjxM~=rG9>Pj>04XT9|39ukau?
z(9;IW$zi@o-n%<NR*|D)Y5bWc3_wN8)RYn?V2^N<6hagMCS9|^5BLU?>zCTlVDm!(
zsV9z1D<!4L?E|M9UNAH-usy_L;CyS@@~I=(gedyz@e-G~&ZI+yy;h?HTdeM0vkR%A
zq*^^M#cFf;Z?_SicgeW9;jAihDlunt-*3kKarn)r7i_T2+Q7fle&<sNim;=-hAA7C
zFtd27%(}n*u}K>-5K+IOQu=R>utVQZ88Ji81IUCh$xFsAF0p{aBV=M4>8L@^N!1FI
zSUWkP@bNaez1{l!M{jY%$I`IWzGKHn3X9nfuP7HbqK4JRv~YRMzkz(^6B*IV!umP_
zcmxv(0(iuTV4-B)a!4&(h~H7{TB?8;S=gq=Ms&n)`c)Z~m8t&A-UgUOMa*4YPPsS^
z_KGmcN=mG(%x@zvhk-qU2c7U715Cvy^0Mt;D1M%`z5usjR+1)Ah8i>7T!Z<Kq5q~~
zzya4pn@ri3`gC4(nf6alg&x^2^Q|1SboKgguM}Va*UG-WT?KmuU^;{xL4m%YpigO?
zs9-E#-)nRUXgd!?X9&_iI&utNW#yy%Hn8VyYlxa_bb~USf3?$jZGj0CTc%?fU+^i2
zKPwxbgaj7wBO;!Vh-h+xjk4z2P-Rx}Yin|9YQJg)WOEIJ-00F_f3L2L&!tu*2b%pt
z6v8U3uNR~&_{zq%I!X_92TLj>flsujOy^}|!-|(mJ~M%aBnxZKc9WPG$&O#r+e4Cb
zcikrlBUFg)#)nounZ52bAL+SEBbJfKfDej_B%HB?iI%sCEXI!((kjO=qNT!i_ng}<
zS49F1N<lJ?-~zFhGZssfwsL1<2M0T+bq<zu^Hh|TbJCu^ve&T*2w?SO$)Uo!IbKmG
zlv-Q!tzj4c{6$OEk~!ap*_Yj~cqE!=0DI!03R`wD0QbP#yRDe_cyRcB`Ni*CKKIGQ
zYW3*cMun}LB&xn1myuE6IJrlo2-5H*Z=W|46K9|a9edr#(o(xc^9V&tPn;Rls%VA}
zRXoYTq9jDFCOcJ2nmm3dmJ&n5$*Hc1`yttO^I{*jIM>+w;Li!$%CGTi%0GX;d6UGo
z0Dha8e2u=R4`}B(=?_E8Wu6g)80VdxxDAk4s8=3`;kNxLajS-u`D<a>UdhCIVR%!t
z9W}@Ll+B(r)T%?C6|KFlYk~nAkP^MH`so4F35jcygv7ve(u*&i|D0a**=?sW^WP57
zOXyUcwEf>3ZjSQCyMmBUn47XFkoKgB=xxsy9B21p<Ny6pAc=a$SO&dgFN>Tmr14D5
zfkd<wj=~J8Gwr;?s6a-$s1==t9M{N4t0S(3ip}#BWG{sFB8-4>(dTjf430-<ywvS}
zL4R9Z@`+UNx4BS<SHHU|33(v9CgJzufo3gV@L0=ts(wI5Pze#P4G65W5D@enxVnxY
z5$ZyNoD^4KD*#(@mkgpIxV9@Eh@U6IvZjJ4z4*yrRB&#y=XIU}`H!^-2zB4%rlk)g
zAp|<2q8;W=&`s7C+YY;bcz#%Ht#I!E+YSWfP8Ce3E*%lF&}eBbfQ+gz0Csg99Rkuz
zkd3;B*Dw$W_fP*ooX)YvK+s{<b-KlXnwDF6J(fOO<vWheID_TAoSW~?muC%G*-^*g
zSbT^Zj}%zxW!H7bm9SsudwF8acRyUcDO_$c<bgiS58`*>*^{6MYk=4kdM~fx;kXLV
zn5vNx+Hc>u0+QHKVZe)w<}95%Z#ZCSdz4z+aBb~>Z7N0)mhNF*Dzjc(gscSbBLy6s
zIl$IWH>!28EDD_XM%*RzdP2LIHk&)(%N%s9e*gB*tBE}ZOd3W;4ptGDXGlMso!N2E
zUiU|lcltVA<0cX*|L|f09~!HwEFe7tQlb0?0eL|1RJ+vvlBnQqmM@}I7^6E(0qsBr
zDk_L{QB@83_-NTDZ-kg|3Su$NZDb7t6!XXhQdg~iFoeOu-(Oft`(n*i{JnH_2|{)m
zJl3XCAyQQ`RH@JfS_|9Y<Huu2LYt%3riJV_OZ6!+Zp0Za?++cFiWUHhh_`4j|4vWV
z#H*vixFtA$tAzE@bgiQZ`F*YT^5EC5gr46F%577jcU5DhC{tWUi(!|WM#yuqR~`Yk
z_d$BhwtF)@Z*JmxFdAT{y>ExOyuz52haxtAmUM6swf0d30Hi!=l^e3x-Ar-p?Yw0H
z)9?YDAhSxFfPerD?tMc5?G2|K9#WyjUG>K0?>J#%G31X?`J0KcuGd)hKx!b;Xjm(T
zdf!y&z6snS8@K{`^cNp+vhw>FG$WBs>bCga)8A?*`JXdaET1pM9G(3Pg##xfC>`I4
z04XJz7FSlnB`}|-?Up|Qe*9ch(U9)<52VxrpM-QBT`~>hWOb3Oxa{C{ZGYh-$alj_
z?J<a6Tw9YPUqSi%*wWF#&GXmeqw7;p0xcX6pyO`=_URLRdOOh5O`?4huzv*!t{J-j
zV;~~|Bov;giHs)Wltg3HRXJ-Z#uB{cT>56_-js$k@J6hLMpV%jyZKMcEwjA)Y#5C=
zTGXXego9>gpa6y870>C5vsmB<^ybt`{u~4vUvf77Xc;$tR{V=jYtz%5+Ka~+gCh+z
zx-^I6&O9>BCX1Ik5-sky6DdO77bEIJ8v-@#XhgqC4X)U-)OKIMR;yRbt05B9LwNWP
zmG&q|pkULaPWx9q5vwIUGqRT#86_nheVKNx{-?fxmm0O@bM=|kht-cC&&KTj?agJI
z`&($jh@LS>QwA)84^;o?BXrt-4Mm@kHa)JSa_D`}krJjT>RJbShj#SK&vic_h3u2G
z(|xSZW$}rU1)~7Sa{dOx@zCbRK~bQ;QD>e6wl^15b)b5w$eN5ve{I;CFoV5qT(UWB
zBUFs$e1@j^QhhUHYQX4Xmf9yCIaCOl%^EXpaOp5C56#(CZKnGaW=bZ%PjBv1zl>Cn
zb`ednf_gFXm4hL1ETGMq5oDd69~??4D6$-4%t%UJ%2J`h!g6J0PdFsfFmV6CAu_>G
z9V|ejJN*pxV8z)&+=-g?Y`ZaP3-l8Jh`E)x;UDos;3S&k?O19=EpN<%UW;`kH=b*a
zpNU^Q_#R9NVrP3joB?^v9D3jM0kqd10zm;@zVAfDv7n_Tcz}O+3j-r#o%S&FPV9|5
zs3!ay%C9U{pvUmTBq|OGcU&SC9_r;hz6G!2u#j)~uYR9#Xi1;T;2`T*n%FK{*W=G0
z_~m?q=dDo2_|)}daHeq!?F(|gJKz(7?DX`{01YR37(m@}g;q_icKf?polDx_^YH<W
znI$4G?-OSl6KTujgm*wMPu^^-!1Iii8T9t%x@p>>T7B5V*|5`R4Q>ssESIl=U)*hr
zc42po&X(Q;%!ZoRp$kbJX=%9A=f-*Dt1tuiXcSj$X_$aonr=Ki?s(YPJtQQQqS%qh
zTJ>kyjtI?Hik*c=?&}pW-Za!pbSJzUd4G0IEAD;9^RAAhdR<F<Z0ASt5EL25iCQxx
zThOsK%g90Mj!5ChfEIRAngnJV7WU7@zklD9WIKK!;6NE0cnXGsKw9n{bTmOpJw8;W
zAI1qjt@-&7CKH4>z~ZvB3f=D+2m$g!;xc#GX_{BqX_n0`z>;ED2y?fh#a_E>oh<@;
zdd*2hT(~VFb1AR5s?M=ps2Kso9&i%%uI~{w#KP|C_+&Q9E2Hh`_X?cb+{6F_@hLn%
zx@P-e*3W8X-owO}#!q;z9uHW66<A-ZH|s|Hmc~mtr*whmPr>=LNFeFJ^o)#I%lw|!
z+VL^nuapfkROJa65??)LPDXion}Wy;IDb2S1V_<<AW0MFMMStvFJ7yns4h~-y!U&p
z@<$fTI_>WF&AfB#2cxa~jm@Ug-xQ77p3?Ouk0#T|G+giTUR%wsPcM+QM(MQiuDt{T
zdr8zuK1)_tR0Q#}NX43%;J?2ki9-W~CIZ^w>E%@B&#m6q4TA*e%fjXEgWEklQ{ljr
z5)k+XDQRBNfRpTKSYe?FYYm;eJdwCK%9kUt0?8l<1&sMl56N)pY)Oh6QSwsdQDTf)
zT+CB&T!oj2v32{Qh-^++Mbh8NXZs&^pVe{<-#l)Q@%W~G+#Z8j74;N4>U#mv;)cj>
zA;?e<$H%t9!hS$X6N$2-qE9h2cRzSIL5``*CHk{m)01aDB80%GjP!ho3qk8tDn~Mk
z)8k`*@;>EBt@2Z1sQ5pcxajeSx_8gdrD14Qkb?!f#PwY?BHHxCL?r{W9f312D)%Xb
zAGjS8gOSL^AzuCZYVq&irhb!;-uUCLc$o3cQql);cVTvl!Ms**kPQWO2ohlMjvg{n
zv5+Vz`G|4p_LLcJ1+Vajos^WMvT|gUJUZb;Zbj70EW6iL4~+NBytuRNPk(p?-`EFI
zEq{{9zA%VwBnRI2k|0wmUtC-$DuU!auyMcrGVj8t86G@1I$XMUmGrk~feC<*VE{4~
zE6HvP<^OWHgj!qZA9%=yuUfddS(=-RBcI`gzwns>96p{Zh_B2t{Q?Gk5Jm(`Sin3Z
zswpU-!mXm7MRIizg}IcMmio8LJ<tDNsGWsA*6OCea0l6@-b0t?!)CjIiV9ODIB`av
zE>HZJ1P((~?s#KH?>G-mEa__}k}AxcmzD^+X!`G>2s0dvtu(j<4Q*IB*w)+EcQW&-
ziA-KjtZZK1%uLwPtZHpTLx{lX3T=+>Si0HfF2fNl<6&TV_C+q%^S69g>cW2qhT~ax
z2*RRgO3;F8>gxKsYofQ)ZZ5aV&dzJT)y>^O*5Es74-XGxW2{Nxx8xDQ4mbUi{2e9X
z?8hU3G}^~+(K&X`%99Jy(G6Om>&C|>!4xl-TSsT-Q=yL_;p6z?8**iylws1rl@&Qh
zHb~l0z|!|UP7&vl@0%SSdq;R29Q8@>%tq?qN%{JE)gv?gy2Y9R4O`De-ou7SXu#;A
zhpizQP1Af7@Y{f?<w3I7?4HOjc|5-ITjb2+1bx*wuLBBbt^Pdifvwbfmbrl_i5-0t
zrh`=T4LR(UVWdF1>Zc0=41;-%Zo2n$*_jHDIFujg4#Zr5m9$2r|B<fiOh)Dx)h{_Y
zDVk(-$qS+5ARs78O5%F)OwTcDQ7YbhG$n7Hr+{$&AR&E!Xaxn;kK<1vx2IGA^z`p1
zPaH=GsT(`KIsX=PK262K1N!|6B-nsz=Ur>#B^F|xq^9!Thufn!Hnl=k7&3DI^5!l@
zyDOAuo|zW%7RVNPjR($Ae1p;I4dr4Tmyd|7ih<@G9-k;XOmKUih!7@uPS~QN&$rk8
zAr-qrynfwqK7na&h*RUn1n{vnmyjTQGKm;iN=#gD^u77O>F{~^BNDEl)a`R?evuk?
ze$GJ5VzTAt2STI*@cl9~qo$$hs<1H^9^b%G`nk)6V*M)d?BP0`rj3FXM!CMp>&{1P
z!abC<?|Te4)^u*By=pM@;mvrWg16e{IjDT!VNON&&@lX$yI+h@OKhC1K2xv^hyOJJ
z)MOgQ-US|(I1kVo;r2U6!g%RfI~WP2_MlGA6@MaYxp$y`sCaK}{@asB;mFtD+l!Z%
zr^0I3k$a!?;Q+x4byZh){gIlOn3#EnSB9ekJpZz_MTt`aO*;dk!i5IQJ|KdCrkGQ;
zMDU5j52fJ8L$X&Ps#Y>dV_DqnP?DVnCYTHxVu8xIf)3Hveqaq%Y$Dq7lIAwY#JVon
zfu(%x^}+~6nC%^9p!@x;#>M&Z>SBDOhjkbp3;4cXeRr1#xz*Gac0ml^f*#Eh(lIcY
z9BtK6yG@I*wWI@pCQl2F;Iia}Cn~nFvE6n1`gvK>A~e>!1Crg_cdnLYjOsxLuShn|
zc(pVv?~34VC}%PXi~O>HU3TU*T`*&6BlgZ(f?-SO=#JLE-|dqe{;PIbfg`T}Waoe?
z7#Qrz57Oap@Kk^{2)QT)6%|Ctar!kjS<{)e@x8c`$u;^VU+o(C=OU-j<$hYjn5aSC
z06#5(65~?~)ctQelF`dxwuBrA8E`>~@|376BXlb_%J9_RqbVz^vFwDN(8f-e-eHpW
z;RmAqFCAjFMx2rSFs>iZI_$|jb9uIUlN|6rZGOxQ8GGmFtA>SzS-mw<kPE>l@(Zfz
z=;$cV)G8f(i5=&w@L4>s_~3sn>Gr*UAk)V2UJ^LN%^AJgKoi+T3a-}UUE!UZnom<9
zkmj=veJcdoA!%>8-MRfzy+b(oVqu1-#qa%CQ4?El{mc!O7L46&^q594vXfcK9f()v
z<wNzTNz(ri){Rk1!`0bgYx;4YSJP7^Clt_>bHdi30)7@Ea8nE*l3ug2BWZP_Ok0{J
zfHA>>EJ@Ds@$tO8;P>~UH+sM+L}xJAc<hn%pqmA<HbM(*j)#PbO-&i0q1`QU1;gKv
zAZwtcp@EaSD4wQUr--&S$Q*$D2B9LFoBQ%L;c-<O!jN?&h9@B<MMF(J+lH;)Gd<19
z${M#+l>0?PLqpH!3i6l2aAH3mmMGUr+*`kQH%63QSFMfCz+jKPb*}oYySv7bGMm-~
zBv0gPK_-zHUTH-I5fRZm<XKP=5^b%mkf$zC{3jiZMhcna7S`4b0s`;jTAQvh#FN)%
z2!g;uS7HO<>IT?^<lhzT?HP$LXrn&e(4!=QzB2OTmbTuHAqSf)Jlg6D&ND$WwjaNl
z!n(Q!<Ix2|zLO=s_`)Xg!@XUdE;1@j`?GFwh}Q)44=N}rskz_MC-MK#fpEBI(iQp5
z6N^cCmbW|hDXvt5cFy%f50^Oly!SO!TB8)FzU1q(-IPZU;h2&PD#c+YbcZi#ta9<&
ziK|hw2gF!a3hcu3eNM)UKxx`%$tyg2C5_H1LT4qSPa9rYlFCeVO@eioys(=AIj(?}
zI=@f>!U3+XuC1+$T+3fcB*gngJUwX+3WQau0Qdrp+lp<pMW+k3NS8H{>nS+R)6F(u
zVwhEhHz$09n{)@wv$;97X~w?o&zY=c^^BtzV<iZqhRt7k@a+<b+C?-?zfVc{n5HKv
zdFsVpev6a{)OBw8%z}SmEkmuMzPhyRu14HD+81c;C14!8ySWdg)BjY~j(MKp;a4K!
z90nDp*JlDN#Q&WX+m9Fv%K;Xq50a@y*L}O5(jMLc<{lq!D^_$D*qprKD9au$H?~Bm
zd~RF)x?-H!=R7*d?9zW>|0mVoE^tnl!W~_WM90yH#mUGhx^dTxoO*_cas;Wk7bqd{
z8Wey{oxt62g*5&Y81{+o^R>!x0twf+cF4i^V$)t~#nDg%!7>6Ig|f|`1PP@}UB;Z;
zD)`a!pijuj{hJ~&`gtjHTyAwxTL^6Upp{vKmBJbt<0A|@W|%R-fu(^#TEw{FvdC*^
z`Es0v2gSREHG_@H;%;vBWG|%6><*Np1g7@ovvTSeQ7{{@JOEYMmkbY?6#ryb#(8-b
z_?hatRmZ8fR5>JU{|ht+7uOH+!Z}bJ0-yb6B_v;aW65r-8pK_BjXZrwB-h{w9C@c@
zO%%Las1z$9ZQgYR20mwpR*Lu<rv(QVul8!vHbnIin#a);Cz?7wo>|2mS!A)u)*_w=
z`F<0gS@iD@`O|{t_DAa08R@7AWeKkceJ;X<()Ft&u5a16U_l&5V*Xc54rv5_R~76h
z9|UJ<tM<)qfL<mnO|jkjay)J21>3UG5VC2)!fy}9ZvDWdI1$@!y(Bb!U6+p}BGT>l
zF{q3s9rQ09v5vekX#5QQ{tB@DF7wDza{eGP0a5}W22pmh-u16iLqk!@n!`<ZK*~K%
zkzGn;q;pNU%N{L7iRt>re0dP2c2YY^3qAO-@39k+xVrGf*ToS3N)!G-Ncj64vcOpU
zZs=z94bMPzh9!BcxPN7J_0WL+<#}dt>sK^O6chnuRBBrQaG7Mpr?N#XaKX}sOl2)`
z$AU};q?J?jl|CX-t*M#o(A;9S75A-{(DqM)@=_BJW<k#wks>XS-!uZ83e`H@kttrl
z6Hvv$2Y!2CysuspKCeXIF@-&yKE&6Og{u%(H}>(2r$W-#RPzNgQ^&3bfOzBU6#(t`
z`=6Mdo<dY&du)o{XDgdN_rav9rED`4oBMtk?os3D<l=u0HM}k0_P#urs>$8j@{=|Q
z#v2J%c)ZzHs|O))_{<i1A6!oT&>p=_|8&?q->7qVF!xFoags(`6#^$zI~u|SxNa^x
zQsk5Q`CXAcrTSgS$HQ0|tVA1A*rP=s=5Ooc&>iz<fMpzNl*9yejwzY_<rireEFOg8
z<n%PZ^kq-Vjr;-JrtYg+Z+2Dn2ZbrDRMp<&w&3LHq__I<C$0Ur$2QRFBXu8ELxhBh
z%S-1VUd^a;j_0h>yHZgjL-B)eQH+lzz=to;=j~VKP75Ed`4GZp64t4VEa#P?=Xj5Y
ziClVrWp&|_o9AhPKitRpl6s}t?uA=rLSkgs*7<meINEZgQ%!@!X(!0cHLEQHIbOd|
zKzp@<EdHQt^N?jjfV+!qziX4Je=2CA{H%A~rfSqc(_;H6mjTZs!_rABH7T8o?g3$u
z*w#_?t2=M+(5c>`B0)TeLMT4RNLgi8(nW<72=oGQu&_8G6bOTL!Cjcn40AGYIlzvT
zq|1>7bY0E;PS6f6MQhb3r{ZEMRhhDmSm}(hje!ZDZAGL+gx`_T^?&Gua{$iw7d$AV
z>`XHBlDtS1asu@Y)$yKS*_45asb;xkD1=%D2OPe+zedX&MKmKc1s9LGCAfo1r@#7`
zOAE?I{uzS%%4yy@CvU{IAJ8;|e@yTDrt)7gffCEdb~87ZL1thfokmsoZV$)sQqW0v
zoF?|C1ECk?l;53|-k1kjK8mTo+;re&!02S!y1F<2zWk752sY6R7z~Y#iMiMgz0?K!
z9zv(V+DR~St<7S6)Yi!A{MDNOBD|?lUQ={V?A2aFgAgONhv_VBkzM?F?8gA$MOr<r
z&cp7YU0bsGWumV1M_y{$!`+sAVUKWav-1q1iWZn}n8KgbUYoe{HoE#p0OosZA44g7
z+hchN4K$k|zgT(hy{M#lG65lp+QO1fuu&?%a-BjsP|uHZlQ^c!P?=M>r4<z8%}M(0
z*GZ|2Lxl{)7J3;Aqz894e7wz4SQw<;e*@GcKj+0_+HmplwLcrWrn8|j(mf0o4fUN_
zHhSnQx@s9T;~&|3O+mJaM-m7m3_#I58asSnRGZTt^1U}?;Y?h2oPlN_4V0ufKS6Y9
zJuo&JhZN2NJtE(o9}7b@+RI3qp%IUDF&L6OM0)_G7ibWzpfC1%alhT+eDZW{QrI6t
z#X3Cr3CXz@aqPHoe-p;7VKD{fd(UbzYnlaKppK`WRb8FxokM5VD9IEv=AXY8#?4Fb
zP(ckIm>fP;O`{dwGOM)%Ou6_3?7m{&KLrg&M|jtUF}1gGu#uxD;l4fb<!6N9Mq|5!
z`b;L&We+Swcjwi(C3!s(Zbn<=Fkvpf^WXkamIv#a3k@VbU>~dzSUUPwOG%j*mm$0K
zw1$A3u6zD0{1u@Wox8=>oKlRdbL@eMNOKA>3G8TRg{1-@BBn#XiMb-wMpbZgeb2D;
z|8P)eN6qwHU>cKZn#eOM6%!FrhL!>ILr<9zB|iW1#rSERJ1M7?9qA$N9Omzz3lk3l
ze2z{*Ay(Y*rf3!a-_kFrkhzAAuAZBp&m}Az@g={ME=Xpg*n{1TthE(sbaa-B6<#C1
zuFm;?{3pcl&cX5V?G1hy5(%$%%7pO$DagtBURS64U%|d{dE@_E@Ds#4LjK=}L;e4c
z+fk6SY|)bWKVDy@>G~39vdj7t(&2>ER8lYV0h{5Z{QN=Fl(nNZb#Ra!ZqLc*Gd4X^
zAf}-Yk>DfGJ|LnZVWY{iHuC~ZcH!4O+F`?WTrgmf#4_mmH)R>vch`hW71FzKdzED{
z{%>E1hv%;pp1Ov{e}qC1e=rva1Qr*E{^wglVAo#sb8jPf@m{nlSvvyaFP2x?*=Cpf
zU0k7}93O-2D?uHev|8B_A)^DqWZ}oeFRbJb*<y<>Y*JWQ!F1~wupi9X%i~Zu>_bGT
zhD2CInAB;!iWz^eD5gI4lYg~lzpp3nJzajBr`=vxm^?OrZE4=Wk^g`~@V)uOKpy8i
z>{x8^?YG5py<qFn!NF{s7n&;@2ZyTG)<v$(3$&!9B!pE$H#Ly&m$^B(Nalgki}B&R
z@o29YQ#UF94dWhkikDW?)RPN}{zTa3xZu~J=Rl3*)%BF{76;0QT`{2)FWGuAyBy(K
zwhfyBkJt-#dZ*G2&@k-5PJlHL#fEkwsK7x-3O-K&hMP9E&wt?DQhk{63VHa=S%ISP
z>ML*m;!nneBw<d!c9w@DPVf#iT^!;D7{)^ce0F5uds;x@8LhnAxQB;N^$>(g^#D6*
zINq6P*?a}j>6!8tIq<ES>iCc?O=a0j2W`QnMG;#Z{Cs@K>t-|Lk?e>ndM0SGcJb@N
zM?agOFt2QUjh#s-8TkDk-Vm0V@o9ML{Viu|RYn;swnbv`K8s0d>V@NWes}UNsj4?-
zz2Bfi=8$B>(q`lfdx(`r7A&%A6^zf3bnsrdm3X`Gpk+tBQPrwM!aq>m#PTp=(g7u=
z;(mQURRfugz3_=I0f+L9t*pd9TWe$?dy!VQNz<>th}5~bWax{E5m#@`Vh7JJxXx(p
z!H-ARds`mV>0O2tcMC*|_m5ETJ{%{}0`J}Q7oxeKC%@l{^)wgJ4|C>?kxkHl{PgZL
z_j$Z;?vyY*+#EJBY1&XRyqPGY9$j0Ho}KB8e{0HEjQ-o-pV3cxIg@0S%%((IB>TSP
zaM`6|1a_RV5mi~*4i3QXrL7`5joAFpF?Tzd3Pq=+qJgNvCu-fF2O;0g?W6B=YueZ*
zmxLUaNL%Td22~T-CX%%K`~9fQZoC@eLUQGF;3pZ2k_csR4x>n(b1{_=qPlu9QUZRZ
zti8wR=GT?o!Z7U^)xTedbVoKE$><w^-RolEAsV)(^fhi*_?Y?Dc}OGqKJ5J4mW8Pz
zt`x}H+BQ&M_;qjkqk#snIv=v}zAxzD>B6XYR{gzX0#)0kS5e)SugsamRi5MI)VW^E
zoC~Ro?*%2S-E)b1@J|O(>tt33$jB!_KHlZjY@ixUbbl~4<W<ndIG3)fMDSwfdWZlX
z`@C+k&JA$uJugO>jnys0X}(*ktJ^Vlpmco3=ZRC-xb$xa(@>s8jg?z5*nZQ(O?B5%
zs)-sJ64y4UPE8%=vn`OJD*Xxo9xtX9c{!6|4vdkav{^-|xp7Hb`s#(|yt9n=z>NCD
z1;*~b+YU`msXAJcVn0`4jGJ0aDRgY6ybHxB?URz44;y;3qH7!akk~S~GIXr4Ykyb>
zS}X>_j6dNC$%H;|1M&)tB^3+BzlteL5$r?@L~9dD^$w-AOxKNpN)jCi=w;cRoJbIM
zS6ci8`zHP_o~P{g<sW#a>ATdlvrM!uF=3@0LQt+{E$c7MCC<x@SMo7Pz-+b6+1Z2~
ze=N~j7vx+-g25hZGtu&NDww=LFp<xzx0}H1baG78@)x4zHE2w-pZ$}ckI>uI<$hd$
zZiOyfNd9#;5|Gq4a>BRJ+}zZ}Wr8B({OgE)5bm3Q*dmXCW}c(sD&+LDvV&Zq+M(SW
zQOAOc*5V$rWh-+HHz%2l;^noTECC$Axw|P(=i^(O@9Tt<b+IG>N*N9Z9)4oV(OFxV
zT_PmdPfjo>rTa7{NW)fH-c?jkFghqAs*1+R*ICOZNPJq_S*3c>1UhJ(@DBw1Zj|s^
zy$)<Rs3k9ItRFuODAbds$VYVJmj8%YwNM&*7F5`89?4cEZ@rYANdRdX!fP{R0e1^k
z)qm|e-!G46dpc;9c~>jhfF*h0!eE3QhqyYp+S$(fpUAZ&X$aH^$Okw7UO+lI)&>&n
zV7Ws5aV+K>D_hxp>`|OFi3KFW$5)j`Sz%t&3pbK=Jbem#nDK0w7!c%|CV=lg^OUqA
z?5NzTY-(jiD4<U3i<mll>2}}MSwrmN)iey@TF{#m8t(Qy)lzZzIGrSGl6wpIe=5!Z
zb+y$l|7A}<5MbG-Yc}o36&xK~5c>%STLCd(#tY{pm_;LfArDcM?<)!11Y&q@xEUN=
zayS>pNg!Ojp|~`8qX^+;FnL?`Eb?FUpHnTqQLa-{qpRInnfF=!Q$iM;qToN!55+?-
z{Q`FJG6h;B1rIQ`%6<aO(-M>kBee^Gk<pf-6tg{r9e?tZT{ujn48O0J-?A8r5Nfvq
zViXP86S0*c#3MPQvTdOfryCRHrTqg@<0ssJdpO`<9S;fD7OhM?e{wtV^;%YD1ymF}
zmhX)%>sFQJoW>;1TAa6bm7WaLJp~uuBpFzY#e19Us^q9)_#RXXhqMt9<z4o+G5=g7
ztk0;9I(<Tm4T9S9U7{`@Md9|5Gx$EDua=f(<p<RF5cp8lp<5rCl7-m07wYaK$jH14
z80dW{8}h$W$|*YAp`BR#0SzBMi*0Bk4t%+Tb;i?dJ|_UjiLIUzr5!B0ZT@S3dOwk&
zxA#Ur`Qjb)Ag@anwu%&))2_AfC@`v}i+vqq<?n1EI}!Y-uW>?baOBvg0WW`$9jiG}
zid@XPC;cYoi?_HC3{R!KbCl-2+BH(EXHLNYTZOV<X<M_vCqtAeG<#rg(~Fi|_){5B
z@QdsZ0t<_Tl%a-<&o6U3l*JA@je9Ty4)7;!FfGD3Y=%w&SKIJc;SCG>Ksisd?Kx+C
zy|l?eWMu{UwAAV7>Vfq6&qtJ$FgWt-V#4Mc7FO<(2-@U7;POD!wQmVY2KKmMIjjbw
zvlNq75D~Ikuw_!K$Xk+;ptM&TXawv)k9L3CZkfx%Nc|<m_xukAc1kif4qSD#!bN9B
zsChoI22?9rr-Rhz`Rvm&JCa%DG~ZFm=7R$Rp6G8@QH`0zWIwit8cvsW=zZn)HC+Y2
zG#SK5FHr#g7Mk0sRpkY0YfD`yB$J|07=~Xs%_PLQzn=anVW0a}S<-Z>n=2eIC9#X8
zf9rCM=B(9rym5<5IVNor65gTWf@T1|FkVV;e7mu1ocfX>SKq2<p2_q6di`0+DXG98
z#QI#)<rP~jtfnzd*;U6QiTE{MduHX4gR^H^NlU>n{hJYF2{!ol@T-5<dv(23HV6Y%
z)SIMMALn+-vgQ=9!YX!P5+@nWH;erB$jG3B3ac71P+hLBv$1q`rW1aXeRw1`0KZW#
z%E^04>V`r)1CW7gsZob-k0=(i3yH;TyP3&oxlB!3dkOc^e*$i{ybZB-f2z!G+A;<C
zU-eMV8*L%qj#apu7SNlW6AI6)$9r1vqW*5IIYwx;Sr7Y;y_u&J9*&;mvmuiDBA3&y
zdyDdNFjcEJ#4b=lwVG;JXhNuM^rjv7&-ChPL>P1HckHBsl0f^(r?EFZsDrLmnB*6&
zr$~^4r_s$7r&em%%@rbj2B7<r4GZs?93b&S(<5?P($ElJU%RNyAu$iaGg|Xy!4&Sv
z-F+Jo(5;N>aXlk#_SDk3-O~-FOv;(+FaKPTjt1}%r(k|nlQ+a`P8HfcD!RX@;2%c$
zrm3kem>MFUJlXlID?c4EWA2Hq*@}L6H1Hq_&X?iW2gIZ!UYN!&x%A#U5VW4P4WgPf
zgcu8;)76~CWUifS8wxpH##dOI1PTbSd8mEN_R2{rgSVjQ9wu>fLEU4^)gZx%nt_Mk
zCS--hLd<kEeooTpUpVg`O>5s2f=ftF<B0X;6(C8$RvHKG;Oh*!&glad7N#_nSrv`H
zPi*bLJya=8{I6xMWpx$&!u*2V6<0ohtmeRNYk_*9)+n3RyN;a6NT<AyBXXvq4Gvj)
znKm)K9W153g~kpKk4r<s=7LL2f1F=M(<FU(*T)*tK04NGZ{^P|8(Am^UtFUf8!GY^
zrk(5xD0E(e7{q8w+OYJpAFiCty`(FWvQZp&NdLa(7ggUGT3f4V>_tiBy0U%j2Ogfj
zj^h$;{e`D{s3OV*eK)QZ0V^B&AnVzES{uP7(10bv+E)#OlhB#&`#}V(47Ezrzkzpb
zz}hXDv_U?=sC~F{Yv%C3Lek|mgg2ZOqRsd09nw}KrJ*|7H5dN~QBjxLm|6>8a+;()
zIrTXBJVwICPhwnln<{A4uAZ=~S0ugUfrX_%urz4!0t(x*HTEuUo_Zc*gdKQd@_m4s
ztK~K%y{js<GtaB(>!)>86kP&AANUN;i)=MkS7~S|_JF3|UvJ=!zJ8(8qW484rq~I-
z>H1aKS{(hCbBcuG;?$n@wGPS{yj{p7nvt9pCJiF6oWlWd>&&9n^i8IA(V%&$J-7Ln
zc0`r5w6Z|h0c>_z=>UKSWM*ceb@I7+W+>Wv!5D|QdX7|o|65z7Ao`tSI!<BX>8l>t
zOJ%b!j*<o7_W<SOrs{0b-?}PxhPy3a7@y#-zAQ3N7RjfQ+93x91qliWtYm${l97>t
zWRCs<;7*8YX#q@30(Sxs#<Fy-tXDl#|7fUdY6{6lD93BB{~WG?9rKaLLPzfbWB(P0
z2%Xv6v$Qw-gn_6v_;0OdeR6pmoBcHAgA4^J1u5A8J?1kGdB=ho^ErdOu<F0HLdg7#
z)^R~?uE;S`4gAP7=$M$8q@+_|roZBnlAjpS?k5rD4-_e;iUxti9|YU+X4_RK9-q%n
zO%gyxTi3#OoLR7&vNZvTb>NmmIme$_(mx97lbphCTCQ3_cv9<G_Xk#FyBL;Yh8w%P
z-pMh2(`2hhgjyZ->|HHlQu;Xj0;o($B~C)cNB+z_icta#rUDoW_c^^|u};WFQ?wu{
zrXuW?uI5Swu&5|aR8+(|`OS@QP1U`*7vUCZOpLEm_Da1VYO#b&_~`SO-6~}HgUw_j
zC&c2%VpB_Ch1B~*Z|(%&(&FIPR%ruFfE-h{p-Hw3%`|Gp=*`n6GmPeZKl7ujfDAT+
zi_NP(c-d~?6H6!*_mW_DZ!dJkafS~0#GIP7SDO2Nu=)eGhlkp3a!c2--`nkZ2DCse
zt`$XDgdEJbim}L$2zr20qQ4kJikwbh_QM%=a;_7baT$ucRgvnmd5;m9f#PrD>E|^_
zk0Ze0*ZN%1sKEr)Rh2ne{MQgvR4oop=GAO?wXftN03U?wrH~ZolICPHvrg+=)?wb!
zGo$fe^@zd&)XpVc-915w;jzxHPO?AzB&pQG(%BOcn@9zWolQ)vLwh0*y=fjoGWX9e
zLoH!H%c_aXeJ#1vVlk3dlQDhn=#~_|e2r&5I6?KY!$QCS!YF{%Ggk~_*POn_Gx%DE
zf^X{nIg`+jJhVf(o#xq3s#-b=Q&bm`UlA$8Bq-NhP|kciD_y`5?sQqMRx^PwH|h3w
zHq!HV-U@~u%aZ)DbGrW%;<p)8Rs`ZWm&6+9A^3@{c@7Q^8pa2;({$Jl=?nMPc+QF(
zwm?YYb1*#b+Okf3Kb&*;n<y@6lC{cEl?rRLHg9?9jX5NB!RLh512R!ICj3OdKK<F>
zG<uy5G68qn5U+QCT&aM!UnF}%uSp5r65>V|2Cx5#O$B)&^CLp!8P~ly8a~fF^pPav
zc4rHxaox7J<=Uy^I%aLD{(k8JldQ{voqPnfA||qb9&80JI@4kmtfvdqX<tUHx=!hL
zjXmmv`+a<46rcy<sK3LvdGmRS<4+CnaC=r+kb56cf2F8zV2+p3(OASb!L}!l?h+6t
zSqd&{0$87j`plb(YOkF-|Na-Ms#zzl46gjySg<CeGr&z_5fEYkW=i0<^5o&<cQDCb
z%3#;^un_Jm+?5@P^&?SWv4)o;WOqWqSYxy|!!=6e|Hi5UMG>#VUE86U)|_(i#a&<C
zC?jV;$9j}z|2xanZ<g^+tlO54&49L-$mZ!#JT~8ivFtL*-ShV1q335gEz=?&;kRIq
z@1I5t2AE8qezWU0`^9O${7NOBp8ZU0RTjQY<!Adc(pfdJ4<~GK`Etfo6;k9}f=)?!
zZmh5W^3%c(M-9)Gz+`7$Q#iFf^}V<I5@ZmlCsd|f{E7o~`x-BI8=ahm#gcDcp!8lF
zS<!+XD&pu;QT{wBE~()~RqKCwyP(E52Fr_h@T@bZ?3RhH<!h9d^YLA`$8V!^uY2+0
z?ojK$KAH$!Q%fxg-oEY(F+PYZ<I<)8!1w~Y%2MnvPns==yUUWheh9$Mo|bI=j&R_)
zO;R2gh-gjWNaSy2<3<0B(f1QUGt#_G4*1jA01NKf+SKj1`tqMFJssUh<i*pDG==Mn
zsQyVF32oiHJnJ+X!Dm^4($fi)mK_0PX>xT;vLP2T{XgwM*9qsGH_O4^4=nqv^Z20b
zQqsay6#;G~TjbWHYKRQH+!c7e*VROR+$aA46K`1dTn5{UWkKahs|DL)i90v|gzC$W
z%75%VpU|~tXiFEp!fGXw<Yk(ow!VGiQiQ;-?66ktBMF}Gf1h@-b7p688L!zqt_1iz
zFBCTpg-J+a(FVaVxBeXa>T0J&27e=`Q>HLIJh=y}ktYmy;9f&DZ)ncI<kaj$Zq026
zeK4gz#Ah_#v-3S$onzH6`ez7eINiC`IPe}w@ROI!j@25Mk2gFe*h!G-3`TA(Dk(OC
zaJu$=?Crjv+&=hpJ^LXCcd0lmyrOk7{!e>Iv2<J1$<I0W*2mojd8B<E(*UCmGIiLR
zE(c}|%#@mwvjySFEcH#)WOd;v!CDI)urL{3^=U8cQGMl4B72<gyM2v8ggNqe4WG!<
zhVVcLU0b-$Imj_lVoS?B+1SDjMF+8$uWwAl0g3;vLdwWpPTrv7SR1M-qW67Q=A<Pd
zCR0Q&CQ2G9uUdu<e{TPMBuop|OkzEn_`uBZD^EW}DV?mmeE{uEL-e4savPc&xk&bF
z8@LRYbqhm5fexmPb-Q|8JuHcCKS!8so$P+bsd2i-FS`0tTYAv%$=rSRK`IlqPKD<<
z<8-1{`uG;=VCqNdz}eD`-^<HGCTN^zP>Ay5sHF<)&ugxnj!e|=?E^koD%JvXm8cBE
z!o)F7d&FB&e@s%~N{*QU)1^z!*&m_j8UtZc?RWH@-860=5hu^^)^Zz;poT-amWkcn
z?F?di44x~R5dw+hx38EfcUR?utYN(Vm<qS!9A8TkjUJ$#h2fI;XeY-feJ~@HeHOoD
zij}@yeopaFf;GzQ;T8WhU?>9iDQZE->##hDb|XAy(D<zo+v!D7WFy4ad6m*^OVc`U
zir=(&ph!I|p_lWxGi=cPUZ13fxGCKK`edRRm<QUhU)8I~p#w+KC_QHod_LOLDj6r)
zvYvE0oj}JBTs*3#0~DJv!N<Q;U%C+sG``HJo^L&DV5EcgU{JpNh1X$Hwx8GwS`7Y2
zmHa4`?)23F1s8WVD@AkposCv?=4m+u`%jyhX8wEHKYB#K`hs)ZOgoGqX>Wtz<Kj26
zWPZ*(RcVA5J|SaE?{p2<x+@x*xt~hk<6j4euf>sEO@L%{1jM}#1C|6g-b#SwVYIpm
zuSk*cU*;yk*GIC{sQ=Jd;!{6z{$>$FZ!Sa;83<J+{(1N&T^Rf2e(xwe_~iOMVe}e<
zSefVB+ckv|Csu#sw^*e(w1=G|nZnkH>UWIXOfi~&d!9$(ziwWCpxOJsE+#-Y`qIc0
z@b`^JMlo%BEOX*wmQ-#<kTJ&z`;@_?4=hI#;jKgbjj8%GfY~9F_}{H+;VOrTUZ&1I
zhOZRWKf|b0t$e^oKe)rB#HCYVULYBR3gA4vDN@B@76n_Wn5b{U7YWB84X1>co@z3;
zOJz3nY5IpxEJGg(;F`JQTyNqK1+qi<0(~_0o%*OcoddI%uMlq<#Xanl1}>R@eov|%
zc3{8!lTQ;n-Y6|98EtJjg;9JvfAyNWggDI<4rxM+^*cF$yd@D%7Q>Vm*=#Bdr;(nx
zdxjaynEFn>ZyZXOf*LnO;55}O4T#PuOg8^GHui?;eN;2tW^SUnuUItnOF~ZMCrG1n
zhtX;x4q+_nRdoil>$w@SgSY*+i$ekd0gjxDzWaxC<+ntq|LT<mD^JV2YukE5&dSb^
zooRP!P9iS_sU1J_W8X%AW*-ex8-&3E)SkF4zq_7Pb6$d=cv1_0swpY^<WUUg<wUKC
zi~UeK@i^WI4J3++iOt$S&5B`;#`(jgMVb@I;FUY!6xpz!^)UnKDm9lzSucb-+$*&i
z=v~6K|L3DV?F$_;Taa_GjjrwNR9?8y4*sIeIpVE98c7fgwbvC_W3nATa*lI5M4IlZ
z2jV~U7(tX<T5H3>bnF~1qAWQ-M^sW5znnZ~%zS5QE3(|P>H7MRhs&RJYa)JoJh(c;
zhBt6c>BaLiGtI1Lb0+Cct5PElnwbxV|J@=0&kRFw&V+TWQ+iQ$&>-h_MAh_UC+QI0
zc1z2e$u3`@<xlhLrvoq;yxGP)GBN^{IRbH<MIbpJ+Y)XTy~LTBnKD#E;zf{Cdy7cr
z{TGehJ8tpSy{9UhW9HS`N8~X<e*Tx8W^!t3YDm8Bh7MamV`Jmvqx*lq^=CD+w~zhL
z^Y=j>NZ;SoGiPFW&WO$W2h%=pj_)Vh8suO5Ng1q1zC`u#$=lK6;2^<j$<3pRUj*`v
zElMt^MZ_QN3oJCW4kOBbbqOsANmUbS-<aIMst14L;D*5zNI(3-ij8_<@zc=o@b`BS
z1n8%VUJ<a6kdWGXAViH0BIO0C2OK2(Vs35@ax8JV`uDF`S^L$W5gk3A_4l}Kl5s0O
z3Pi^!^uLOShK5c|{P?fp&6BgAVCqMq54t`<9eja-sn--~b%6e_R{oVKF@N|&c(gJ-
z)Z{TlZWVo*(^5KXDwFtA<b3fDo;s|OyZGh|ePwf&ic8xE;c(R<SVgt|%!MWrM@F>2
z1wSNP|MDPg(Q-TsRB+hC<=<)=5}dIB8juO~v^5qBCO_p}uQn2fH~ekiVdz;l2dl61
zNq8xeq|6y6S>!`E>M>GO1dHe|-oE^A7ZEW(go0M~1a<+OY^x9XiljpCjZVp~u5~}a
zE=u_<5bjLQcbtp7>4Catm%z+67UNHn_~Pv07S>4fXD|9-!)NdIf9IV#D+)$~EqJ%Y
zZ?ZDOaXb0~ygQoK-y#^}o`x1J5XHG1qaCbY05>&8>b2cpm=??>5#=g`d$BiA0YabW
ziD(m%E;Gy&Gw&kh#}&Gn9Z!!hcAFQ^(UbWRM}}&9olCGcQ6s%nMUDO~gs#ve*H^M=
zjtcV5+`LLEk?_(PfJtgpx36vm-PiU=Hnl*Tl)uDYmAteeBW~|M!^WZN7G6+uI9zat
z+PIHu<s2tX5c;muss2MTuJ%E}=U%e)|CDyF?@TBF7+<SMo`f`qGM=I3B%{(yR_2mR
z?v!Jqrct@(e%a)qC`2wBVL7=Z*BRzE@wjU)XBfGSa=)Az6DG!v)A<w5xA*h=;eCFe
ze(#wnXtY+F0!zFQ?`AH#J~(6*A0G*U!)r@p44u}Lnl$#-n<l@ljx7c$;_#HJ$01SM
z2g?_}z#x~8&1h|NF&4upbVF=%n&iSjNm#zr#bEKIgh;P&PJ66ay=|9`$F76@@%Xu$
z2yHV3$<^ej9zR&4zwGZ5nijTU4_dY&@UX!iwyaF|qzWgQHdIe`Xr4|@?^9FC*_S#5
z{*=H~LfpBeQ=!F{M%EVulP45{!5aFTeXitC2UPl8wuDQVUi*j2ijO+b>1!hy_Q+Ja
zx3OmWXkwxm^;J!-s}{z4H!;1YFnMHs=g_!R3uAgEZ3sETr7zkIvT?#^-;v*2ZfZ*1
zva75M$NmddV!%obiV>&XgoL#DG79xNC`o;TS5)Prh#S@%LJ<mCGz)ZJ$jLb(JIKc!
z*i*8`sx=4=U6Yk39Lsj1wqv&?_3xC&k)F_4(gimR66Ihknclbz)g1S|Y~$l|&-rht
zjcr%lc1=G$_3LtsC*76~=+E+ZxYI8{4bPTz3Tr9v>+6epOhDI}LzXnxG=&A$$skHo
zGpuw}M=w*}hp9_S8PN!)T$#}pWuP-N*tdY)a>uZb9=>38?NPKLq^~HR2o{tX?wdC!
zrrSB|()!}Fo@7{s3@%68Okhr|V66>b!wU5vI?pQAp^dQcM`Y%Fld&>Xs~8=FjH|J`
ztt<_DUcm^TYn6%YjX|L$i0A#epK*FBL@i>rc-bWe@2%ixmxC7r0dY0tU}u0&e=hpC
z6Nm%{V{ck{WZhk<=#%)^p_z$n;Nto9lBFczuSz|sEa<a9_g3{kcNWdo-W`w<lJ{6o
z9%BRS1nqnXadR#+_T^nErpI0ii@RT4JQzoFcV|%a<>#B~Mjg|7eQop%?oow|ZVcd2
z9D@f=ukX&;LWrg$8LI{4hEYocl<Nyyp&fB#Y!S}yNgRMIcNBs*ym&v*&MH)<Ms&!q
z0iXABkX_OV?6em#=!Qh|AtD_SQ*M4|6`%b#1cKAQ>^LkZ4;u`inak*Rl6K;m{sE64
zxHllq?mJPIBsCVfQ~(qIyEQ$2x-4L#W62G3sip%<(LSZBOy6?La|NZ1U7*%peIJ^5
zo$1nl`|76W&Had4a7cC=g8w!w+kZ0wrxG!{l5zOxHuf>IsUoDRb8t0lZ-ceP$$MoE
zqWgN+w)|$&2gg&lW}Ma3?pJ}w1M_hOR?c#~+>Lp?iNxz!pJ;Y|jpvG&mp)+D4t@lE
z>KMZKZTCJO0rPlZt<h<MQqS@%w0viy7}PL3_4EmEQg%Nr#D%j$MJO$&R5S62vcjKc
z{2`4O1D>huugI9~CN4dJE$S=0nd8G6o~P(k?wbE#Oqs(yN((w0^O0}A&^^5n7;C!F
zt2Hv)!o5c2mhr(G9DliOq^NtG$VkP6LafQE0VXeVeTr+<O*=ZkSpyLQ!@${IJ5?R-
zH1EN~`ufehif5e1>?(Tt(a2_9^-Yhd@rlCw2=x~3{hZ3^0yTPD<bd(Ktd3x7zrWi^
z|1{`i^(8}81{wU9y*!+jPpmt-`(0!hWHoZ8IQ}X<83(rvK-|1s6!8rm+)8q41{tv&
zb)9?}?LrJRY)Z^rGtg9E_O42Fbmlcq^!wx$z=|Qu5#TFqRjxV1;qBp~zXvrS!3;M>
z?vc;V<vsJ`Y=>(xj73{1L%|ujoo}TQ!2sP7MGingVMYu9g#5p-`%AiX6ktb?lfM`j
SC^-C$1eh3F7?AZIM*RcSexW}A

literal 0
HcmV?d00001

diff --git a/doc/source/index.rst b/doc/source/index.rst
new file mode 100644
index 000000000..d535a85e0
--- /dev/null
+++ b/doc/source/index.rst
@@ -0,0 +1,67 @@
+..
+      Copyright 2010-2012 United States Government as represented by the
+      Administrator of the National Aeronautics and Space Administration.
+      All Rights Reserved.
+
+      Licensed under the Apache License, Version 2.0 (the "License"); you may
+      not use this file except in compliance with the License. You may obtain
+      a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+      Unless required by applicable law or agreed to in writing, software
+      distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+      WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+      License for the specific language governing permissions and limitations
+      under the License.
+
+Welcome to Cinder's developer documentation!
+==========================================
+
+Cinder is the project name for OpenStack Compute, a cloud computing fabric 
+controller, the main part of an IaaS system.
+Individuals and organizations can use Cinder to host and manage their own cloud
+computing systems. Cinder originated as a project out of NASA Ames Research Laboratory.
+
+Cinder is written with the following design guidelines in mind:
+
+* **Component based architecture**: Quickly add new behaviors
+* **Highly available**: Scale to very serious workloads
+* **Fault-Tolerant**: Isolated processes avoid cascading failures
+* **Recoverable**: Failures should be easy to diagnose, debug, and rectify
+* **Open Standards**: Be a reference implementation for a community-driven api
+* **API Compatibility**: Cinder strives to provide API-compatible with popular systems like Amazon EC2
+
+This documentation is generated by the Sphinx toolkit and lives in the source
+tree. Additional draft and project documentation on Cinder and other components of OpenStack can
+be found on the `OpenStack wiki`_. Cloud administrators, refer to `docs.openstack.org`_.
+
+.. _`OpenStack wiki`: http://wiki.openstack.org
+.. _`docs.openstack.org`: http://docs.openstack.org
+
+
+Developer Docs
+==============
+
+.. toctree::
+   :maxdepth: 1
+
+   devref/index
+
+API Extensions
+==============
+
+Go to http://api.openstack.org for information about Compute API extensions.
+
+Outstanding Documentation Tasks
+===============================
+
+.. todolist::
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
+
diff --git a/doc/source/man/nova-manage.rst b/doc/source/man/nova-manage.rst
new file mode 100644
index 000000000..188601bba
--- /dev/null
+++ b/doc/source/man/nova-manage.rst
@@ -0,0 +1,281 @@
+===========
+cinder-manage
+===========
+
+------------------------------------------------------
+control and manage cloud computer instances and images
+------------------------------------------------------
+
+:Author: openstack@lists.launchpad.net
+:Date:   2012-04-05
+:Copyright: OpenStack LLC
+:Version: 2012.1
+:Manual section: 1
+:Manual group: cloud computing
+
+SYNOPSIS
+========
+
+  cinder-manage <category> <action> [<args>]
+
+DESCRIPTION
+===========
+
+cinder-manage controls cloud computing instances by managing cinder users, cinder projects, cinder roles, shell selection, vpn connections, and floating IP address configuration. More information about OpenStack Cinder is at http://cinder.openstack.org.
+
+OPTIONS
+=======
+
+The standard pattern for executing a cinder-manage command is:
+``cinder-manage <category> <command> [<args>]``
+
+For example, to obtain a list of all projects:
+``cinder-manage project list``
+
+Run without arguments to see a list of available command categories:
+``cinder-manage``
+
+Categories are user, project, role, shell, vpn, and floating. Detailed descriptions are below.
+
+You can also run with a category argument such as user to see a list of all commands in that category:
+``cinder-manage user``
+
+These sections describe the available categories and arguments for cinder-manage.
+
+Cinder Db
+~~~~~~~
+
+``cinder-manage db version``
+
+    Print the current database version.
+
+``cinder-manage db sync``
+
+    Sync the database up to the most recent version. This is the standard way to create the db as well.
+
+Cinder User
+~~~~~~~~~
+
+``cinder-manage user admin <username>``
+
+    Create an admin user with the name <username>.
+
+``cinder-manage user create <username>``
+
+    Create a normal user with the name <username>.
+
+``cinder-manage user delete <username>``
+
+    Delete the user with the name <username>.
+
+``cinder-manage user exports <username>``
+
+    Outputs a list of access key and secret keys for user to the screen
+
+``cinder-manage user list``
+
+    Outputs a list of all the user names to the screen.
+
+``cinder-manage user modify <accesskey> <secretkey> <admin?T/F>``
+
+    Updates the indicated user keys, indicating with T or F if the user is an admin user. Leave any argument blank if you do not want to update it.
+
+Cinder Project
+~~~~~~~~~~~~
+
+``cinder-manage project add <projectname>``
+
+    Add a cinder project with the name <projectname> to the database.
+
+``cinder-manage project create <projectname>``
+
+    Create a new cinder project with the name <projectname> (you still need to do cinder-manage project add <projectname> to add it to the database).
+
+``cinder-manage project delete <projectname>``
+
+    Delete a cinder project with the name <projectname>.
+
+``cinder-manage project environment <projectname> <username>``
+
+    Exports environment variables for the named project to a file named cinderrc.
+
+``cinder-manage project list``
+
+    Outputs a list of all the projects to the screen.
+
+``cinder-manage project quota <projectname>``
+
+    Outputs the size and specs of the project's instances including gigabytes, instances, floating IPs, volumes, and cores.
+
+``cinder-manage project remove <projectname>``
+
+    Deletes the project with the name <projectname>.
+
+``cinder-manage project zipfile``
+
+    Compresses all related files for a created project into a zip file cinder.zip.
+
+Cinder Role
+~~~~~~~~~
+
+``cinder-manage role add <username> <rolename> <(optional) projectname>``
+
+    Add a user to either a global or project-based role with the indicated <rolename> assigned to the named user. Role names can be one of the following five roles: cloudadmin, itsec, sysadmin, netadmin, developer. If you add the project name as the last argument then the role is assigned just for that project, otherwise the user is assigned the named role for all projects.
+
+``cinder-manage role has <username> <projectname>``
+    Checks the user or project and responds with True if the user has a global role with a particular project.
+
+``cinder-manage role remove <username> <rolename>``
+    Remove the indicated role from the user.
+
+Cinder Logs
+~~~~~~~~~
+
+``cinder-manage logs errors``
+
+    Displays cinder errors from log files.
+
+``cinder-manage logs syslog <number>``
+
+    Displays cinder alerts from syslog.
+
+Cinder Shell
+~~~~~~~~~~
+
+``cinder-manage shell bpython``
+
+    Starts a new bpython shell.
+
+``cinder-manage shell ipython``
+
+    Starts a new ipython shell.
+
+``cinder-manage shell python``
+
+    Starts a new python shell.
+
+``cinder-manage shell run``
+
+    Starts a new shell using python.
+
+``cinder-manage shell script <path/scriptname>``
+
+    Runs the named script from the specified path with flags set.
+
+Cinder VPN
+~~~~~~~~
+
+``cinder-manage vpn list``
+
+    Displays a list of projects, their IP prot numbers, and what state they're in.
+
+``cinder-manage vpn run <projectname>``
+
+    Starts the VPN for the named project.
+
+``cinder-manage vpn spawn``
+
+    Runs all VPNs.
+
+Cinder Floating IPs
+~~~~~~~~~~~~~~~~~
+
+``cinder-manage floating create <ip_range> [--pool <pool>] [--interface <interface>]``
+
+    Creates floating IP addresses for the given range, optionally specifying
+    a floating pool and a network interface.
+
+``cinder-manage floating delete <ip_range>``
+
+    Deletes floating IP addresses in the range given.
+
+``cinder-manage floating list``
+
+    Displays a list of all floating IP addresses.
+
+Cinder Flavor
+~~~~~~~~~~~
+
+``cinder-manage flavor list``
+
+    Outputs a list of all active flavors to the screen.
+
+``cinder-manage flavor list --all``
+
+    Outputs a list of all flavors (active and inactive) to the screen.
+
+``cinder-manage flavor create <name> <memory> <vCPU> <local_storage> <flavorID> <(optional) swap> <(optional) RXTX Quota> <(optional) RXTX Cap>``
+
+    creates a flavor with the following positional arguments:
+     * memory (expressed in megabytes)
+     * vcpu(s) (integer)
+     * local storage (expressed in gigabytes)
+     * flavorid (unique integer)
+     * swap space (expressed in megabytes, defaults to zero, optional)
+     * RXTX quotas (expressed in gigabytes, defaults to zero, optional)
+     * RXTX cap (expressed in gigabytes, defaults to zero, optional)
+
+``cinder-manage flavor delete <name>``
+
+    Delete the flavor with the name <name>. This marks the flavor as inactive and cannot be launched. However, the record stays in the database for archival and billing purposes.
+
+``cinder-manage flavor delete <name> --purge``
+
+    Purges the flavor with the name <name>. This removes this flavor from the database.
+
+Cinder Instance_type
+~~~~~~~~~~~~~~~~~~
+
+The instance_type command is provided as an alias for the flavor command. All the same subcommands and arguments from cinder-manage flavor can be used.
+
+Cinder Images
+~~~~~~~~~~~
+
+``cinder-manage image image_register <path> <owner>``
+
+    Registers an image with the image service.
+
+``cinder-manage image kernel_register <path> <owner>``
+
+    Registers a kernel with the image service.
+
+``cinder-manage image ramdisk_register <path> <owner>``
+
+    Registers a ramdisk with the image service.
+
+``cinder-manage image all_register <image_path> <kernel_path> <ramdisk_path> <owner>``
+
+    Registers an image kernel and ramdisk with the image service.
+
+``cinder-manage image convert <directory>``
+
+    Converts all images in directory from the old (Bexar) format to the new format.
+
+Cinder VM
+~~~~~~~~~~~
+
+``cinder-manage vm list [host]``
+    Show a list of all instances. Accepts optional hostname (to show only instances on specific host).
+
+``cinder-manage live-migration <ec2_id> <destination host name>``
+    Live migrate instance from current host to destination host. Requires instance id (which comes from euca-describe-instance) and destination host name (which can be found from cinder-manage service list).
+
+
+FILES
+========
+
+The cinder-manage.conf file contains configuration information in the form of python-gflags.
+
+SEE ALSO
+========
+
+* `OpenStack Cinder <http://cinder.openstack.org>`__
+* `OpenStack Swift <http://swift.openstack.org>`__
+
+BUGS
+====
+
+* Cinder is sourced in Launchpad so you can view current bugs at `OpenStack Cinder <http://cinder.openstack.org>`__
+
+
+
diff --git a/etc/cinder/api-paste.ini b/etc/cinder/api-paste.ini
new file mode 100644
index 000000000..e0d7224a9
--- /dev/null
+++ b/etc/cinder/api-paste.ini
@@ -0,0 +1,51 @@
+#############
+# Openstack #
+#############
+
+[composite:osapi_volume]
+use = call:cinder.api.openstack.urlmap:urlmap_factory
+/: osvolumeversions
+/v1: openstack_volume_api_v1
+
+[composite:openstack_volume_api_v1]
+use = call:cinder.api.auth:pipeline_factory
+noauth = faultwrap sizelimit noauth osapi_volume_app_v1
+keystone = faultwrap sizelimit authtoken keystonecontext osapi_volume_app_v1
+keystone_nolimit = faultwrap sizelimit authtoken keystonecontext osapi_volume_app_v1
+
+[filter:faultwrap]
+paste.filter_factory = cinder.api.openstack:FaultWrapper.factory
+
+[filter:noauth]
+paste.filter_factory = cinder.api.openstack.auth:NoAuthMiddleware.factory
+
+[filter:sizelimit]
+paste.filter_factory = cinder.api.sizelimit:RequestBodySizeLimiter.factory
+
+[app:osapi_volume_app_v1]
+paste.app_factory = cinder.api.openstack.volume:APIRouter.factory
+
+[pipeline:osvolumeversions]
+pipeline = faultwrap osvolumeversionapp
+
+[app:osvolumeversionapp]
+paste.app_factory = cinder.api.openstack.volume.versions:Versions.factory
+
+##########
+# Shared #
+##########
+
+[filter:keystonecontext]
+paste.filter_factory = cinder.api.auth:CinderKeystoneContext.factory
+
+[filter:authtoken]
+paste.filter_factory = keystone.middleware.auth_token:filter_factory
+service_protocol = http
+service_host = 127.0.0.1
+service_port = 5000
+auth_host = 127.0.0.1
+auth_port = 35357
+auth_protocol = http
+admin_tenant_name = %SERVICE_TENANT_NAME%
+admin_user = %SERVICE_USER%
+admin_password = %SERVICE_PASSWORD%
diff --git a/etc/cinder/cinder.conf.sample b/etc/cinder/cinder.conf.sample
new file mode 100644
index 000000000..6270254e3
--- /dev/null
+++ b/etc/cinder/cinder.conf.sample
@@ -0,0 +1,673 @@
+####################
+# cinder.conf sample #
+####################
+
+[DEFAULT]
+
+######### defined in cinder.flags #########
+
+###### (BoolOpt) Allow destination machine to match source for resize. Useful when testing in single-host environments.
+# allow_resize_to_same_host=false
+###### (StrOpt) File name for the paste.deploy config for cinder-api
+# api_paste_config="api-paste.ini"
+###### (BoolOpt) whether to rate limit the api
+# api_rate_limit=true
+###### (StrOpt) The strategy to use for auth. Supports noauth, keystone, and deprecated.
+# auth_strategy="noauth"
+###### (IntOpt) Seconds for auth tokens to linger
+# auth_token_ttl=3600
+###### (StrOpt) AWS Access ID
+# aws_access_key_id="admin"
+###### (StrOpt) AWS Access Key
+# aws_secret_access_key="admin"
+###### (IntOpt) interval to pull bandwidth usage info
+# bandwith_poll_interval=600
+###### (StrOpt) Directory where cinder binaries are installed
+# bindir="$pybasedir/bin"
+###### (BoolOpt) Cache glance images locally
+# cache_images=true
+###### (StrOpt) full class name for the Manager for cert
+# cert_manager="cinder.cert.manager.CertManager"
+###### (MultiStrOpt) Path to a config file to use. Multiple config files can be specified, with values in later files taking precedence. The default files used are: []
+###### (StrOpt) Virtualization api connection type : libvirt, xenapi, or fake
+# connection_type=<None>
+###### (StrOpt) full class name for the Manager for console proxy
+# console_manager="cinder.console.manager.ConsoleProxyManager"
+###### (StrOpt) the topic console proxy nodes listen on
+# console_topic="console"
+###### (StrOpt) the main RabbitMQ exchange to connect to
+# control_exchange="cinder"
+###### (BoolOpt) Print debugging output
+# debug=false
+###### (StrOpt) Name of network to use to set access ips for instances
+# default_access_ip_network_name=<None>
+###### (StrOpt) The default format a ephemeral_volume will be formatted with on creation.
+# default_ephemeral_format=<None>
+###### (StrOpt) default image to use, testing only
+# default_image="ami-11111"
+###### (StrOpt) default instance type to use, testing only
+# default_instance_type="m1.small"
+###### (StrOpt) the default project to use for openstack
+# default_project="openstack"
+###### (StrOpt) availability zone to use when user doesn't specify one
+# default_schedule_zone=<None>
+###### (StrOpt) the internal ip of the ec2 api server
+# ec2_dmz_host="$my_ip"
+###### (StrOpt) the ip of the ec2 api server
+# ec2_host="$my_ip"
+###### (StrOpt) the path prefix used to call the ec2 api server
+# ec2_path="/services/Cloud"
+###### (IntOpt) the port of the ec2 api server
+# ec2_port=8773
+###### (StrOpt) the protocol to use when connecting to the ec2 api server (http, https)
+# ec2_scheme="http"
+###### (BoolOpt) Allows use of instance password during server creation
+# enable_instance_password=true
+###### (ListOpt) a list of APIs to enable by default
+# enabled_apis="ec2,osapi_compute,osapi_volume,metadata"
+###### (BoolOpt) If passed, use fake network devices and addresses
+# fake_network=false
+###### (BoolOpt) If passed, use a fake RabbitMQ provider
+# fake_rabbit=false
+###### (StrOpt) Firewall driver (defaults to iptables)
+# firewall_driver="cinder.virt.firewall.IptablesFirewallDriver"
+###### (StrOpt) full class name for the DNS Manager for floating IPs
+# floating_ip_dns_manager="cinder.network.dns_driver.DNSDriver"
+###### (ListOpt) A list of the glance api servers available to cinder ([hostname|ip]:port)
+# glance_api_servers="$glance_host:$glance_port"
+###### (StrOpt) default glance hostname or ip
+# glance_host="$my_ip"
+###### (IntOpt) Number retries when downloading an image from glance
+# glance_num_retries=0
+###### (IntOpt) default glance port
+# glance_port=9292
+###### (StrOpt) Name of this node.  This can be an opaque identifier.  It is not necessarily a hostname, FQDN, or IP address.
+# host="cinder"
+###### (StrOpt) The service to use for retrieving and searching images.
+# image_service="cinder.image.glance.GlanceImageService"
+###### (StrOpt) full class name for the DNS Zone for instance IPs
+# instance_dns_domain=""
+###### (StrOpt) full class name for the DNS Manager for instance IPs
+# instance_dns_manager="cinder.network.dns_driver.DNSDriver"
+###### (StrOpt) time period to generate instance usages for.  Time period must be hour, day, month or year
+# instance_usage_audit_period="month"
+###### (ListOpt) Host reserved for specific images
+# isolated_hosts=""
+###### (ListOpt) Images to run on isolated host
+# isolated_images=""
+###### (StrOpt) Directory to use for lock files
+# lock_path="$pybasedir"
+###### (StrOpt) If this option is specified, the logging configuration file specified is used and overrides any other logging options specified. Please see the Python logging module documentation for details on logging configuration files.
+# log-config=<None>
+###### (StrOpt) Format string for %(asctime)s in log records. Default: %default
+# log-date-format="%Y-%m-%d %H:%M:%S"
+###### (StrOpt) (Optional) The directory to keep log files in (will be prepended to --logfile)
+# log-dir=<None>
+###### (StrOpt) (Optional) Name of log file to output to. If not set, logging will go to stdout.
+# log-file=<None>
+###### (StrOpt) A logging.Formatter log message format string which may use any of the available logging.LogRecord attributes. Default: %default
+# log-format="%(asctime)s %(levelname)8s [%(name)s] %(message)s"
+###### (StrOpt) Log output to a per-service log file in named directory
+# logdir=<None>
+###### (StrOpt) Log output to a named file
+# logfile=<None>
+###### (StrOpt) Default file mode used when creating log files
+# logfile_mode="0644"
+###### (ListOpt) Memcached servers or None for in process cache.
+# memcached_servers=<None>
+###### (StrOpt) the ip for the metadata api server
+# metadata_host="$my_ip"
+###### (IntOpt) the port for the metadata api port
+# metadata_port=8775
+###### (BoolOpt) Whether to log monkey patching
+# monkey_patch=false
+###### (ListOpt) List of modules/decorators to monkey patch
+# monkey_patch_modules="cinder.api.ec2.cloud:cinder.notifier.api.notify_decorator,cinder.compute.api:cinder.notifier.api.notify_decorator"
+###### (StrOpt) ip address of this host
+# my_ip="10.0.0.1"
+###### (StrOpt) availability zone of this node
+# node_availability_zone="cinder"
+###### (StrOpt) Default driver for sending notifications
+# notification_driver="cinder.notifier.no_op_notifier"
+###### (StrOpt) kernel image that indicates not to use a kernel, but to use a raw disk image instead
+# null_kernel="nokernel"
+###### (ListOpt) Specify list of extensions to load when using osapi_compute_extension option with cinder.api.openstack.compute.contrib.select_extensions
+# osapi_compute_ext_list=""
+###### (MultiStrOpt) osapi compute extension to load
+# osapi_compute_extension="cinder.api.openstack.compute.contrib.standard_extensions"
+###### (StrOpt) Base URL that will be presented to users in links to the OpenStack Compute API
+# osapi_compute_link_prefix=<None>
+###### (StrOpt) Base URL that will be presented to users in links to glance resources
+# osapi_glance_link_prefix=<None>
+###### (IntOpt) the maximum number of items returned in a single response from a collection resource
+# osapi_max_limit=1000
+###### (StrOpt) the path prefix used to call the openstack api server
+# osapi_path="/v1.1/"
+###### (StrOpt) the protocol to use when connecting to the openstack api server (http, https)
+# osapi_scheme="http"
+###### (ListOpt) Specify list of extensions to load when using osapi_volume_extension option with cinder.api.openstack.volume.contrib.select_extensions
+# osapi_volume_ext_list=""
+###### (MultiStrOpt) osapi volume extension to load
+# osapi_volume_extension="cinder.api.openstack.volume.contrib.standard_extensions"
+###### (IntOpt) Length of generated instance admin passwords
+# password_length=12
+###### (StrOpt) Directory where the cinder python module is installed
+# pybasedir="/usr/lib/python/site-packages"
+###### (BoolOpt) use durable queues in RabbitMQ
+# rabbit_durable_queues=false
+###### (StrOpt) the RabbitMQ host
+# rabbit_host="localhost"
+###### (IntOpt) maximum retries with trying to connect to RabbitMQ (the default of 0 implies an infinite retry count)
+# rabbit_max_retries=0
+###### (StrOpt) the RabbitMQ password
+# rabbit_password="guest"
+###### (IntOpt) the RabbitMQ port
+# rabbit_port=5672
+###### (IntOpt) how long to backoff for between retries when connecting to RabbitMQ
+# rabbit_retry_backoff=2
+###### (IntOpt) how frequently to retry connecting with RabbitMQ
+# rabbit_retry_interval=1
+###### (BoolOpt) connect over SSL for RabbitMQ
+# rabbit_use_ssl=false
+###### (StrOpt) the RabbitMQ userid
+# rabbit_userid="guest"
+###### (StrOpt) the RabbitMQ virtual host
+# rabbit_virtual_host="/"
+###### (IntOpt) Interval in seconds for reclaiming deleted instances
+# reclaim_instance_interval=0
+###### (ListOpt) list of region=fqdn pairs separated by commas
+# region_list=""
+###### (BoolOpt) Whether to start guests that were running before the host rebooted
+# resume_guests_state_on_host_boot=false
+###### (StrOpt) Command prefix to use for running commands as root
+# root_helper="sudo"
+###### (StrOpt) hostname or ip for the instances to use when accessing the s3 api
+# s3_dmz="$my_ip"
+###### (StrOpt) hostname or ip for openstack to use when accessing the s3 api
+# s3_host="$my_ip"
+###### (IntOpt) port used when accessing the s3 api
+# s3_port=3333
+###### (StrOpt) full class name for the Manager for scheduler
+# scheduler_manager="cinder.scheduler.manager.SchedulerManager"
+###### (StrOpt) the topic scheduler nodes listen on
+# scheduler_topic="scheduler"
+###### (StrOpt) The full class name of the security group handler class
+# security_group_handler="cinder.network.quantum.sg.NullSecurityGroupHandler"
+###### (IntOpt) maximum time since last check-in for up service
+# service_down_time=60
+###### (StrOpt) The SQLAlchemy connection string used to connect to the database
+# sql_connection="sqlite:///$state_path/$sqlite_db"
+###### (IntOpt) timeout before idle sql connections are reaped
+# sql_idle_timeout=3600
+###### (IntOpt) maximum db connection retries during startup. (setting -1 implies an infinite retry count)
+# sql_max_retries=10
+###### (IntOpt) interval between retries of opening a sql connection
+# sql_retry_interval=10
+###### (StrOpt) the filename to use with sqlite
+# sqlite_db="cinder.sqlite"
+###### (BoolOpt) If passed, use synchronous mode for sqlite
+# sqlite_synchronous=true
+###### (BoolOpt) Whether to restart guests when the host reboots
+# start_guests_on_host_boot=false
+###### (StrOpt) Top-level directory for maintaining cinder's state
+# state_path="$pybasedir"
+###### (StrOpt) Stub network related code
+# stub_network="False"
+###### (StrOpt) syslog facility to receive log lines
+# syslog-log-facility="LOG_USER"
+###### (BoolOpt) Whether to use cow images
+# use_cow_images=true
+###### (BoolOpt) use ipv6
+# use_ipv6=false
+###### (BoolOpt) Log output to standard error
+# use_stderr=true
+###### (BoolOpt) Use syslog for logging.
+# use-syslog=false
+###### (BoolOpt) Print more verbose output
+# verbose=false
+###### (StrOpt) The full class name of the volume API class to use
+# volume_api_class="cinder.volume.api.API"
+###### (StrOpt) full class name for the Manager for volume
+# volume_manager="cinder.volume.manager.VolumeManager"
+###### (StrOpt) the topic volume nodes listen on
+# volume_topic="volume"
+###### (StrOpt) image id used when starting up a cloudpipe vpn server
+# vpn_image_id="0"
+###### (StrOpt) Suffix to add to project name for vpn key and secgroups
+# vpn_key_suffix="-vpn"
+###### (IntOpt) Number of seconds zombie instances are cleaned up.
+# zombie_instance_updated_at_window=172800
+
+######### defined in cinder.log #########
+
+###### (ListOpt) list of logger=LEVEL pairs
+# default_log_levels="amqplib=WARN,sqlalchemy=WARN,boto=WARN,suds=INFO,eventlet.wsgi.server=WARN"
+###### (StrOpt) If an instance is passed with the log message, format it like this
+# instance_format="[instance: %(uuid)s] "
+###### (StrOpt) format string to use for log messages with context
+# logging_context_format_string="%(asctime)s %(levelname)s %(name)s [%(request_id)s %(user_id)s %(project_id)s] %(instance)s%(message)s"
+###### (StrOpt) data to append to log format when level is DEBUG
+# logging_debug_format_suffix="from (pid=%(process)d) %(funcName)s %(pathname)s:%(lineno)d"
+###### (StrOpt) format string to use for log messages without context
+# logging_default_format_string="%(asctime)s %(levelname)s %(name)s [-] %(instance)s%(message)s"
+###### (StrOpt) prefix each line of exception output with this format
+# logging_exception_prefix="(%(name)s): TRACE: "
+###### (BoolOpt) publish error events
+# publish_errors=false
+
+######### defined in cinder.utils #########
+
+###### (BoolOpt) Whether to disable inter-process locks
+# disable_process_locking=false
+
+######### defined in cinder.service #########
+
+###### (StrOpt) The backend to use for db
+# db_backend="sqlalchemy"
+###### (StrOpt) IP address for EC2 API to listen
+# ec2_listen="0.0.0.0"
+###### (IntOpt) port for ec2 api to listen
+# ec2_listen_port=8773
+###### (BoolOpt) Services to be added to the available pool on create
+# enable_new_services=true
+###### (StrOpt) Template string to be used to generate instance names
+# instance_name_template="instance-%08x"
+###### (StrOpt) IP address for metadata api to listen
+# metadata_listen="0.0.0.0"
+###### (IntOpt) port for metadata api to listen
+# metadata_listen_port=8775
+###### (StrOpt) OpenStack metadata service manager
+# metadata_manager="cinder.api.manager.MetadataManager"
+###### (StrOpt) IP address for OpenStack API to listen
+# osapi_compute_listen="0.0.0.0"
+###### (IntOpt) list port for osapi compute
+# osapi_compute_listen_port=8774
+###### (StrOpt) IP address for OpenStack Volume API to listen
+# osapi_volume_listen="0.0.0.0"
+###### (IntOpt) port for os volume api to listen
+# osapi_volume_listen_port=8776
+###### (IntOpt) seconds between running periodic tasks
+# periodic_interval=60
+###### (IntOpt) seconds between nodes reporting state to datastore
+# report_interval=10
+###### (StrOpt) The messaging module to use, defaults to kombu.
+# rpc_backend="cinder.rpc.impl_kombu"
+###### (StrOpt) Template string to be used to generate snapshot names
+# snapshot_name_template="snapshot-%08x"
+###### (StrOpt) Template string to be used to generate instance names
+# volume_name_template="volume-%08x"
+
+######### defined in cinder.crypto #########
+
+###### (StrOpt) Filename of root CA
+# ca_file="cacert.pem"
+###### (StrOpt) Where we keep our root CA
+# ca_path="$state_path/CA"
+###### (StrOpt) Filename of root Certificate Revocation List
+# crl_file="crl.pem"
+###### (StrOpt) Filename of private key
+# key_file="private/cakey.pem"
+###### (StrOpt) Where we keep our keys
+# keys_path="$state_path/keys"
+###### (StrOpt) Subject for certificate for projects, %s for project, timestamp
+# project_cert_subject="/C=US/ST=California/O=OpenStack/OU=CinderDev/CN=project-ca-%.16s-%s"
+###### (BoolOpt) Should we use a CA for each project?
+# use_project_ca=false
+###### (StrOpt) Subject for certificate for users, %s for project, user, timestamp
+# user_cert_subject="/C=US/ST=California/O=OpenStack/OU=CinderDev/CN=%.16s-%.16s-%s"
+
+######### defined in cinder.policy #########
+
+###### (StrOpt) Rule checked when requested rule is not found
+# policy_default_rule="default"
+###### (StrOpt) JSON file representing policy
+# policy_file="policy.json"
+
+######### defined in cinder.quota #########
+
+###### (IntOpt) number of instance cores allowed per project
+# quota_cores=20
+###### (IntOpt) number of floating ips allowed per project
+# quota_floating_ips=10
+###### (IntOpt) number of volume gigabytes allowed per project
+# quota_gigabytes=1000
+###### (IntOpt) number of instances allowed per project
+# quota_instances=10
+###### (IntOpt) number of bytes allowed per injected file
+# quota_injected_file_content_bytes=10240
+###### (IntOpt) number of bytes allowed per injected file path
+# quota_injected_file_path_bytes=255
+###### (IntOpt) number of injected files allowed
+# quota_injected_files=5
+###### (IntOpt) number of metadata items allowed per instance
+# quota_metadata_items=128
+###### (IntOpt) megabytes of instance ram allowed per project
+# quota_ram=51200
+###### (IntOpt) number of volumes allowed per project
+# quota_volumes=10
+
+######### defined in cinder.test #########
+
+###### (StrOpt) the topic console auth proxy nodes listen on
+# consoleauth_topic="consoleauth"
+###### (StrOpt) driver to use for database access
+# db_driver="cinder.db"
+###### (BoolOpt) should we use everything for testing
+# fake_tests=true
+###### (StrOpt) Timeout after NN seconds when looking for a host.
+# find_host_timeout="30"
+###### (IntOpt) Size of RPC connection pool
+# rpc_conn_pool_size=30
+###### (IntOpt) Seconds to wait for a response from call or multicall
+# rpc_response_timeout=60
+###### (IntOpt) Size of RPC thread pool
+# rpc_thread_pool_size=1024
+###### (StrOpt) File name of clean sqlite db
+# sqlite_clean_db="clean.sqlite"
+###### (StrOpt) availability zone of this service
+# storage_availability_zone="cinder"
+###### (BoolOpt) if True, will not discover local volumes
+# use_local_volumes=true
+###### (StrOpt) Driver to use for volume creation
+# volume_driver="cinder.volume.driver.ISCSIDriver"
+###### (BoolOpt) if True will force update capabilities on each check
+# volume_force_update_capabilities=false
+
+######### defined in cinder.auth.ldapdriver #########
+
+###### (StrOpt) cn for Cloud Admins
+# ldap_cloudadmin="cn=cloudadmins,ou=Groups,dc=example,dc=com"
+###### (StrOpt) cn for Developers
+# ldap_developer="cn=developers,ou=Groups,dc=example,dc=com"
+###### (StrOpt) cn for ItSec
+# ldap_itsec="cn=itsec,ou=Groups,dc=example,dc=com"
+###### (StrOpt) cn for NetAdmins
+# ldap_netadmin="cn=netadmins,ou=Groups,dc=example,dc=com"
+###### (StrOpt) LDAP password
+# ldap_password="changeme"
+###### (StrOpt) OU for Projects
+# ldap_project_subtree="ou=Groups,dc=example,dc=com"
+###### (IntOpt) Current version of the LDAP schema
+# ldap_schema_version=2
+###### (StrOpt) cn for Sysadmins
+# ldap_sysadmin="cn=sysadmins,ou=Groups,dc=example,dc=com"
+###### (StrOpt) Point this at your ldap server
+# ldap_url="ldap://localhost"
+###### (StrOpt) DN of admin user
+# ldap_user_dn="cn=Manager,dc=example,dc=com"
+###### (StrOpt) Attribute to use as id
+# ldap_user_id_attribute="uid"
+###### (BoolOpt) Modify user attributes instead of creating/deleting
+# ldap_user_modify_only=false
+###### (StrOpt) Attribute to use as name
+# ldap_user_name_attribute="cn"
+###### (StrOpt) OU for Users
+# ldap_user_subtree="ou=Users,dc=example,dc=com"
+###### (StrOpt) OID for Users
+# ldap_user_unit="Users"
+###### (StrOpt) OU for Roles
+# role_project_subtree="ou=Groups,dc=example,dc=com"
+
+######### defined in cinder.auth.manager #########
+
+###### (ListOpt) Allowed roles for project
+# allowed_roles="cloudadmin,itsec,sysadmin,netadmin,developer"
+###### (StrOpt) Driver that auth manager uses
+# auth_driver="cinder.auth.dbdriver.DbDriver"
+###### (StrOpt) Filename of certificate in credentials zip
+# credential_cert_file="cert.pem"
+###### (StrOpt) Filename of private key in credentials zip
+# credential_key_file="pk.pem"
+###### (StrOpt) Filename of rc in credentials zip %s will be replaced by name of the region (cinder by default)
+# credential_rc_file="%src"
+###### (StrOpt) Filename of certificate in credentials zip
+# credential_vpn_file="cinder-vpn.conf"
+###### (StrOpt) Template for creating users rc file
+# credentials_template="$pybasedir/cinder/auth/cinderrc.template"
+###### (ListOpt) Roles that apply to all projects
+# global_roles="cloudadmin,itsec"
+###### (ListOpt) Roles that ignore authorization checking completely
+# superuser_roles="cloudadmin"
+###### (StrOpt) Template for creating users vpn file
+# vpn_client_template="$pybasedir/cinder/cloudpipe/client.ovpn.template"
+
+######### defined in cinder.api.auth #########
+
+###### (BoolOpt) Treat X-Forwarded-For as the canonical remote address. Only enable this if you have a sanitizing proxy.
+# use_forwarded_for=false
+
+######### defined in cinder.api.ec2 #########
+
+###### (BoolOpt) Return the IP address as private dns hostname in describe instances
+# ec2_private_dns_show_ip=false
+###### (StrOpt) URL to get token from ec2 request.
+# keystone_ec2_url="http://localhost:5000/v2.0/ec2tokens"
+###### (IntOpt) Number of failed auths before lockout.
+# lockout_attempts=5
+###### (IntOpt) Number of minutes to lockout if triggered.
+# lockout_minutes=15
+###### (IntOpt) Number of minutes for lockout window.
+# lockout_window=15
+
+######### defined in cinder.api.openstack.compute #########
+
+###### (BoolOpt) Permit instance snapshot operations.
+# allow_instance_snapshots=true
+
+######### defined in cinder.ipv6.api #########
+
+###### (StrOpt) Backend to use for IPv6 generation
+# ipv6_backend="rfc2462"
+
+######### defined in cinder.virt.baremetal.nodes #########
+
+###### (StrOpt) Bare-metal driver runs on
+# baremetal_driver="tilera"
+###### (StrOpt) Tilera command line program for Bare-metal driver
+# tile_monitor="/usr/local/TileraMDE/bin/tile-monitor"
+
+######### defined in cinder.notifier.list_notifier #########
+
+###### (MultiStrOpt) List of drivers to send notifications
+# list_notifier_drivers="cinder.notifier.no_op_notifier"
+
+######### defined in cinder.notifier.rabbit_notifier #########
+
+###### (ListOpt) AMQP topic used for Cinder notifications
+# notification_topics="notifications"
+
+######### defined in cinder.rpc.common #########
+
+###### (ListOpt) Modules of exceptions that are permitted to be recreated
+# allowed_rpc_exception_modules="cinder.exception"
+
+######### defined in cinder.rpc.impl_kombu #########
+
+###### (StrOpt) SSL certification authority file (valid only if SSL enabled)
+# kombu_ssl_ca_certs=""
+###### (StrOpt) SSL cert file (valid only if SSL enabled)
+# kombu_ssl_certfile=""
+###### (StrOpt) SSL key file (valid only if SSL enabled)
+# kombu_ssl_keyfile=""
+###### (StrOpt) SSL version to use (valid only if SSL enabled)
+# kombu_ssl_version=""
+
+######### defined in cinder.rpc.impl_qpid #########
+
+###### (IntOpt) Seconds between connection keepalive heartbeats
+# qpid_heartbeat=5
+###### (StrOpt) Qpid broker hostname
+# qpid_hostname="localhost"
+###### (StrOpt) Password for qpid connection
+# qpid_password=""
+###### (StrOpt) Qpid broker port
+# qpid_port="5672"
+###### (StrOpt) Transport to use, either 'tcp' or 'ssl'
+# qpid_protocol="tcp"
+###### (BoolOpt) Automatically reconnect
+# qpid_reconnect=true
+###### (IntOpt) Equivalent to setting max and min to the same value
+# qpid_reconnect_interval=0
+###### (IntOpt) Maximum seconds between reconnection attempts
+# qpid_reconnect_interval_max=0
+###### (IntOpt) Minimum seconds between reconnection attempts
+# qpid_reconnect_interval_min=0
+###### (IntOpt) Max reconnections before giving up
+# qpid_reconnect_limit=0
+###### (IntOpt) Reconnection timeout in seconds
+# qpid_reconnect_timeout=0
+###### (StrOpt) Space separated list of SASL mechanisms to use for auth
+# qpid_sasl_mechanisms=""
+###### (BoolOpt) Disable Nagle algorithm
+# qpid_tcp_nodelay=true
+###### (StrOpt) Username for qpid connection
+# qpid_username=""
+
+######### defined in cinder.scheduler.driver #########
+
+###### (StrOpt) The scheduler host manager class to use
+# scheduler_host_manager="cinder.scheduler.host_manager.HostManager"
+
+######### defined in cinder.scheduler.filters.core_filter #########
+
+###### (FloatOpt) Virtual CPU to Physical CPU allocation ratio
+# cpu_allocation_ratio=16.0
+
+######### defined in cinder.scheduler.filters.ram_filter #########
+
+###### (FloatOpt) virtual ram to physical ram allocation ratio
+# ram_allocation_ratio=1.5
+
+######### defined in cinder.scheduler.host_manager #########
+
+###### (IntOpt) Amount of disk in MB to reserve for host/dom0
+# reserved_host_disk_mb=0
+###### (IntOpt) Amount of memory in MB to reserve for host/dom0
+# reserved_host_memory_mb=512
+###### (MultiStrOpt) Filter classes available to the scheduler which may be specified more than once.  An entry of "cinder.scheduler.filters.standard_filters" maps to all filters included with cinder.
+# scheduler_available_filters="cinder.scheduler.filters.standard_filters"
+###### (ListOpt) Which filter class names to use for filtering hosts when not specified in the request.
+# scheduler_default_filters="AvailabilityZoneFilter,RamFilter,ComputeFilter"
+
+######### defined in cinder.scheduler.least_cost #########
+
+###### (FloatOpt) How much weight to give the fill-first cost function. A negative value will reverse behavior: e.g. spread-first
+# compute_fill_first_cost_fn_weight=-1.0
+###### (ListOpt) Which cost functions the LeastCostScheduler should use
+# least_cost_functions="cinder.scheduler.least_cost.compute_fill_first_cost_fn"
+###### (FloatOpt) How much weight to give the noop cost function
+# noop_cost_fn_weight=1.0
+
+######### defined in cinder.scheduler.manager #########
+
+###### (StrOpt) Default driver to use for the scheduler
+# scheduler_driver="cinder.scheduler.multi.MultiScheduler"
+
+######### defined in cinder.scheduler.multi #########
+
+###### (StrOpt) Driver to use for scheduling compute calls
+# compute_scheduler_driver="cinder.scheduler.filter_scheduler.FilterScheduler"
+###### (StrOpt) Driver to use for scheduling volume calls
+# volume_scheduler_driver="cinder.scheduler.chance.ChanceScheduler"
+
+######### defined in cinder.scheduler.scheduler_options #########
+
+###### (StrOpt) Absolute path to scheduler configuration JSON file.
+# scheduler_json_config_location=""
+
+######### defined in cinder.scheduler.simple #########
+
+###### (IntOpt) maximum number of instance cores to allow per host
+# max_cores=16
+###### (IntOpt) maximum number of volume gigabytes to allow per host
+# max_gigabytes=10000
+###### (IntOpt) maximum number of networks to allow per host
+# max_networks=1000
+###### (BoolOpt) Allow overcommitting vcpus on isolated hosts
+# skip_isolated_core_check=true
+
+######### defined in cinder.volume.driver #########
+
+###### (StrOpt) iscsi target user-land tool to use
+# iscsi_helper="ietadm"
+###### (StrOpt) use this ip for iscsi
+# iscsi_ip_address="$my_ip"
+###### (IntOpt) Number of iscsi target ids per host
+# iscsi_num_targets=100
+###### (IntOpt) The port that the iSCSI daemon is listening on
+# iscsi_port=3260
+###### (StrOpt) prefix for iscsi volumes
+# iscsi_target_prefix="iqn.2010-10.org.openstack:"
+###### (StrOpt) number of times to rescan iSCSI target to find volume
+# num_iscsi_scan_tries="3"
+###### (StrOpt) number of times to attempt to run flakey shell commands
+# num_shell_tries="3"
+###### (StrOpt) the rbd pool in which volumes are stored
+# rbd_pool="rbd"
+###### (StrOpt) Name for the VG that will contain exported volumes
+# volume_group="cinder-volumes"
+
+######### defined in cinder.volume.netapp #########
+
+###### (StrOpt) User name for the DFM server
+# netapp_login=<None>
+###### (StrOpt) Password for the DFM server
+# netapp_password=<None>
+###### (StrOpt) Hostname for the DFM server
+# netapp_server_hostname=<None>
+###### (IntOpt) Port number for the DFM server
+# netapp_server_port=8088
+###### (StrOpt) Storage service to use for provisioning
+# netapp_storage_service=<None>
+###### (StrOpt) Vfiler to use for provisioning
+# netapp_vfiler=<None>
+###### (StrOpt) URL of the WSDL file for the DFM server
+# netapp_wsdl_url=<None>
+
+######### defined in cinder.volume.nexenta.volume #########
+
+###### (StrOpt) block size for volumes (blank=default,8KB)
+# nexenta_blocksize=""
+###### (StrOpt) IP address of Nexenta SA
+# nexenta_host=""
+###### (IntOpt) Nexenta target portal port
+# nexenta_iscsi_target_portal_port=3260
+###### (StrOpt) Password to connect to Nexenta SA
+# nexenta_password="nexenta"
+###### (IntOpt) HTTP port to connect to Nexenta REST API server
+# nexenta_rest_port=2000
+###### (StrOpt) Use http or https for REST connection (default auto)
+# nexenta_rest_protocol="auto"
+###### (BoolOpt) flag to create sparse volumes
+# nexenta_sparse=false
+###### (StrOpt) prefix for iSCSI target groups on SA
+# nexenta_target_group_prefix="cinder/"
+###### (StrOpt) IQN prefix for iSCSI targets
+# nexenta_target_prefix="iqn.1986-03.com.sun:02:cinder-"
+###### (StrOpt) User name to connect to Nexenta SA
+# nexenta_user="admin"
+###### (StrOpt) pool on SA that will hold all volumes
+# nexenta_volume="cinder"
+
+######### defined in cinder.volume.san #########
+
+###### (StrOpt) Cluster name to use for creating volumes
+# san_clustername=""
+###### (StrOpt) IP address of SAN controller
+# san_ip=""
+###### (BoolOpt) Execute commands locally instead of over SSH; use if the volume service is running on the SAN device
+# san_is_local=false
+###### (StrOpt) Username for SAN controller
+# san_login="admin"
+###### (StrOpt) Password for SAN controller
+# san_password=""
+###### (StrOpt) Filename of private key to use for SSH authentication
+# san_private_key=""
+###### (IntOpt) SSH port to use with SAN
+# san_ssh_port=22
+###### (BoolOpt) Use thin provisioning for SAN volumes?
+# san_thin_provision=true
+###### (StrOpt) The ZFS path under which to create zvols for volumes.
+# san_zfs_volume_base="rpool/"
+
+# Total option count: 467
diff --git a/etc/cinder/logging_sample.conf b/etc/cinder/logging_sample.conf
new file mode 100644
index 000000000..476425b8b
--- /dev/null
+++ b/etc/cinder/logging_sample.conf
@@ -0,0 +1,76 @@
+[loggers]
+keys = root, cinder
+
+[handlers]
+keys = stderr, stdout, watchedfile, syslog, null
+
+[formatters]
+keys = legacycinder, default
+
+[logger_root]
+level = WARNING
+handlers = null
+
+[logger_cinder]
+level = INFO
+handlers = stderr
+qualname = cinder
+
+[logger_amqplib]
+level = WARNING
+handlers = stderr
+qualname = amqplib
+
+[logger_sqlalchemy]
+level = WARNING
+handlers = stderr
+qualname = sqlalchemy
+# "level = INFO" logs SQL queries.
+# "level = DEBUG" logs SQL queries and results.
+# "level = WARNING" logs neither.  (Recommended for production systems.)
+
+[logger_boto]
+level = WARNING
+handlers = stderr
+qualname = boto
+
+[logger_suds]
+level = INFO
+handlers = stderr
+qualname = suds
+
+[logger_eventletwsgi]
+level = WARNING
+handlers = stderr
+qualname = eventlet.wsgi.server
+
+[handler_stderr]
+class = StreamHandler
+args = (sys.stderr,)
+formatter = legacycinder
+
+[handler_stdout]
+class = StreamHandler
+args = (sys.stdout,)
+formatter = legacycinder
+
+[handler_watchedfile]
+class = handlers.WatchedFileHandler
+args = ('cinder.log',)
+formatter = legacycinder
+
+[handler_syslog]
+class = handlers.SysLogHandler
+args = ('/dev/log', handlers.SysLogHandler.LOG_USER)
+formatter = legacycinder
+
+[handler_null]
+class = cinder.log.NullHandler
+formatter = default
+args = ()
+
+[formatter_legacycinder]
+class = cinder.log.LegacyCinderFormatter
+
+[formatter_default]
+format = %(message)s
diff --git a/etc/cinder/policy.json b/etc/cinder/policy.json
new file mode 100644
index 000000000..556a5b7c7
--- /dev/null
+++ b/etc/cinder/policy.json
@@ -0,0 +1,15 @@
+{
+    "admin_or_owner":  [["role:admin"], ["project_id:%(project_id)s"]],
+    "default": [["rule:admin_or_owner"]],
+
+    "admin_api": [["role:admin"]],
+
+    "volume:create": [],
+    "volume:get_all": [],
+    "volume:get_volume_metadata": [],
+    "volume:get_snapshot": [],
+    "volume:get_all_snapshots": [],
+
+    "volume_extension:types_manage": [["rule:admin_api"]],
+    "volume_extension:types_extra_specs": [["rule:admin_api"]]
+}
diff --git a/openstack-common.conf b/openstack-common.conf
new file mode 100644
index 000000000..d63233f9d
--- /dev/null
+++ b/openstack-common.conf
@@ -0,0 +1,7 @@
+[DEFAULT]
+
+# The list of modules to copy from openstack-common
+modules=cfg,exception,local,importutils,iniparser
+
+# The base module to hold the copy of openstack.common
+base=cinder
diff --git a/pylintrc b/pylintrc
new file mode 100644
index 000000000..277ad40f5
--- /dev/null
+++ b/pylintrc
@@ -0,0 +1,38 @@
+# The format of this file isn't really documented; just use --generate-rcfile
+
+[Messages Control]
+# NOTE(justinsb): We might want to have a 2nd strict pylintrc in future
+# C0111: Don't require docstrings on every method
+# W0511: TODOs in code comments are fine.
+# W0142: *args and **kwargs are fine.
+# W0622: Redefining id is fine.
+disable=C0111,W0511,W0142,W0622
+
+[Basic]
+# Variable names can be 1 to 31 characters long, with lowercase and underscores
+variable-rgx=[a-z_][a-z0-9_]{0,30}$
+
+# Argument names can be 2 to 31 characters long, with lowercase and underscores
+argument-rgx=[a-z_][a-z0-9_]{1,30}$
+
+# Method names should be at least 3 characters long
+# and be lowecased with underscores
+method-rgx=([a-z_][a-z0-9_]{2,50}|setUp|tearDown)$
+
+# Module names matching cinder-* are ok (files in bin/)
+module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+)|(cinder-[a-z0-9_-]+))$
+
+# Don't require docstrings on tests.
+no-docstring-rgx=((__.*__)|([tT]est.*)|setUp|tearDown)$
+
+[Design]
+max-public-methods=100
+min-public-methods=0
+max-args=6
+
+[Variables]
+
+# List of additional names supposed to be defined in builtins. Remember that
+# you should avoid to define new builtins when possible.
+# _ is used by our localization
+additional-builtins=_
diff --git a/run_tests.sh b/run_tests.sh
new file mode 100755
index 000000000..74fb69b28
--- /dev/null
+++ b/run_tests.sh
@@ -0,0 +1,176 @@
+#!/bin/bash
+
+set -eu
+
+function usage {
+  echo "Usage: $0 [OPTION]..."
+  echo "Run Cinder's test suite(s)"
+  echo ""
+  echo "  -V, --virtual-env        Always use virtualenv.  Install automatically if not present"
+  echo "  -N, --no-virtual-env     Don't use virtualenv.  Run tests in local environment"
+  echo "  -s, --no-site-packages   Isolate the virtualenv from the global Python environment"
+  echo "  -r, --recreate-db        Recreate the test database (deprecated, as this is now the default)."
+  echo "  -n, --no-recreate-db     Don't recreate the test database."
+  echo "  -x, --stop               Stop running tests after the first error or failure."
+  echo "  -f, --force              Force a clean re-build of the virtual environment. Useful when dependencies have been added."
+  echo "  -p, --pep8               Just run PEP8 and HACKING compliance check"
+  echo "  -P, --no-pep8            Don't run static code checks"
+  echo "  -c, --coverage           Generate coverage report"
+  echo "  -h, --help               Print this usage message"
+  echo "  --hide-elapsed           Don't print the elapsed time for each test along with slow test list"
+  echo ""
+  echo "Note: with no options specified, the script will try to run the tests in a virtual environment,"
+  echo "      If no virtualenv is found, the script will ask if you would like to create one.  If you "
+  echo "      prefer to run tests NOT in a virtual environment, simply pass the -N option."
+  exit
+}
+
+function process_option {
+  case "$1" in
+    -h|--help) usage;;
+    -V|--virtual-env) always_venv=1; never_venv=0;;
+    -N|--no-virtual-env) always_venv=0; never_venv=1;;
+    -s|--no-site-packages) no_site_packages=1;;
+    -r|--recreate-db) recreate_db=1;;
+    -n|--no-recreate-db) recreate_db=0;;
+    -m|--patch-migrate) patch_migrate=1;;
+    -w|--no-patch-migrate) patch_migrate=0;;
+    -f|--force) force=1;;
+    -p|--pep8) just_pep8=1;;
+    -P|--no-pep8) no_pep8=1;;
+    -c|--coverage) coverage=1;;
+    -*) noseopts="$noseopts $1";;
+    *) noseargs="$noseargs $1"
+  esac
+}
+
+venv=.venv
+with_venv=tools/with_venv.sh
+always_venv=0
+never_venv=0
+force=0
+no_site_packages=0
+installvenvopts=
+noseargs=
+noseopts=
+wrapper=""
+just_pep8=0
+no_pep8=0
+coverage=0
+recreate_db=1
+patch_migrate=1
+
+for arg in "$@"; do
+  process_option $arg
+done
+
+# If enabled, tell nose to collect coverage data
+if [ $coverage -eq 1 ]; then
+    noseopts="$noseopts --with-coverage --cover-package=cinder"
+fi
+
+if [ $no_site_packages -eq 1 ]; then
+  installvenvopts="--no-site-packages"
+fi
+
+function run_tests {
+  # Cleanup *pyc
+  ${wrapper} find . -type f -name "*.pyc" -delete
+  # Just run the test suites in current environment
+  ${wrapper} $NOSETESTS 2> run_tests.log
+  # If we get some short import error right away, print the error log directly
+  RESULT=$?
+  if [ "$RESULT" -ne "0" ];
+  then
+    ERRSIZE=`wc -l run_tests.log | awk '{print \$1}'`
+    if [ "$ERRSIZE" -lt "40" ];
+    then
+        cat run_tests.log
+    fi
+  fi
+  return $RESULT
+}
+
+# Files of interest
+# NOTE(lzyeval): Avoid selecting cinder-api-paste.ini and cinder.conf in cinder/bin
+#                when running on devstack.
+# NOTE(lzyeval): Avoid selecting *.pyc files to reduce pep8 check-up time
+#                when running on devstack.
+# NOTE(dprince): Exclude xenapi plugins. They are Python 2.4 code and as such
+#                cannot be expected to work with tools/hacking checks.
+xen_net_path="plugins/xenserver/networking/etc/xensource/scripts"
+srcfiles=`find cinder -type f -name "*.py"`
+srcfiles+=" `find bin -type f ! -name "cinder.conf*" ! -name "*api-paste.ini*"`"
+srcfiles+=" `find tools -type f -name "*.py"`"
+srcfiles+=" setup.py"
+
+function run_pep8 {
+  echo "Running PEP8 and HACKING compliance check..."
+  # Just run PEP8 in current environment
+  #
+
+  # Until all these issues get fixed, ignore.
+  ignore='--ignore=N4,N306'
+  ${wrapper} python tools/hacking.py ${ignore} ${srcfiles}
+}
+
+
+NOSETESTS="python cinder/testing/runner.py $noseopts $noseargs"
+
+if [ $never_venv -eq 0 ]
+then
+  # Remove the virtual environment if --force used
+  if [ $force -eq 1 ]; then
+    echo "Cleaning virtualenv..."
+    rm -rf ${venv}
+  fi
+  if [ -e ${venv} ]; then
+    wrapper="${with_venv}"
+  else
+    if [ $always_venv -eq 1 ]; then
+      # Automatically install the virtualenv
+      python tools/install_venv.py $installvenvopts
+      wrapper="${with_venv}"
+    else
+      echo -e "No virtual environment found...create one? (Y/n) \c"
+      read use_ve
+      if [ "x$use_ve" = "xY" -o "x$use_ve" = "x" -o "x$use_ve" = "xy" ]; then
+        # Install the virtualenv and run the test suite in it
+        python tools/install_venv.py $installvenvopts
+        wrapper=${with_venv}
+      fi
+    fi
+  fi
+fi
+
+# Delete old coverage data from previous runs
+if [ $coverage -eq 1 ]; then
+    ${wrapper} coverage erase
+fi
+
+if [ $just_pep8 -eq 1 ]; then
+    run_pep8
+    exit
+fi
+
+if [ $recreate_db -eq 1 ]; then
+    rm -f tests.sqlite
+fi
+
+run_tests
+
+# NOTE(sirp): we only want to run pep8 when we're running the full-test suite,
+# not when we're running tests individually. To handle this, we need to
+# distinguish between options (noseopts), which begin with a '-', and
+# arguments (noseargs).
+if [ -z "$noseargs" ]; then
+  if [ $no_pep8 -eq 0 ]; then
+    run_pep8
+  fi
+fi
+
+if [ $coverage -eq 1 ]; then
+    echo "Generating coverage report in covhtml/"
+    # Don't compute coverage for common code, which is tested elsewhere
+    ${wrapper} coverage html --include='cinder/*' --omit='cinder/openstack/common/*' -d covhtml -i
+fi
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 000000000..4ecc13d9c
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,32 @@
+[build_sphinx]
+all_files = 1
+build-dir = doc/build
+source-dir = doc/source
+
+[egg_info]
+tag_build = 
+tag_date = 0
+tag_svn_revision = 0
+
+[compile_catalog]
+directory = cinder/locale
+domain = cinder
+
+[update_catalog]
+domain = cinder
+output_dir = cinder/locale
+input_file = cinder/locale/cinder.pot
+
+[extract_messages]
+keywords = _ gettext ngettext l_ lazy_gettext
+mapping_file = babel.cfg
+output_file = cinder/locale/cinder.pot
+
+[nosetests]
+verbosity=2
+detailed-errors=1
+with-openstack=1
+openstack-red=0.05
+openstack-yellow=0.025
+openstack-show-elapsed=1
+openstack-color=1
diff --git a/setup.py b/setup.py
new file mode 100644
index 000000000..bdb199ed4
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,73 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+import glob
+import os
+
+import setuptools
+
+from cinder import version
+
+cinder_cmdclass = {}
+
+try:
+    from sphinx import setup_command
+
+    class local_BuildDoc(setup_command.BuildDoc):
+        def run(self):
+            for builder in ['html', 'man']:
+                self.builder = builder
+                self.finalize_options()
+                setup_command.BuildDoc.run(self)
+    cinder_cmdclass['build_sphinx'] = local_BuildDoc
+
+except Exception:
+    pass
+
+
+def find_data_files(destdir, srcdir):
+    package_data = []
+    files = []
+    for d in glob.glob('%s/*' % (srcdir, )):
+        if os.path.isdir(d):
+            package_data += find_data_files(
+                                 os.path.join(destdir, os.path.basename(d)), d)
+        else:
+            files += [d]
+    package_data += [(destdir, files)]
+    return package_data
+
+
+setuptools.setup(name='cinder',
+      version=version.canonical_version_string(),
+      description='cloud computing fabric controller',
+      author='OpenStack',
+      author_email='cinder@lists.launchpad.net',
+      url='http://www.openstack.org/',
+      cmdclass=cinder_cmdclass,
+      packages=setuptools.find_packages(exclude=['bin', 'smoketests']),
+      include_package_data=True,
+      test_suite='nose.collector',
+      scripts=['bin/clear_rabbit_queues',
+               'bin/cinder-all',
+               'bin/cinder-api',
+               'bin/cinder-manage',
+               'bin/cinder-rootwrap',
+               'bin/cinder-scheduler',
+               'bin/cinder-volume'],
+        py_modules=[])
diff --git a/tools/clean-vlans b/tools/clean-vlans
new file mode 100755
index 000000000..284e5dc57
--- /dev/null
+++ b/tools/clean-vlans
@@ -0,0 +1,25 @@
+#!/usr/bin/env bash
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+export LC_ALL=C
+
+sudo ifconfig -a | grep br | grep -v bridge | cut -f1 -d" " | xargs -n1 -ifoo ifconfig foo down
+sudo ifconfig -a | grep br | grep -v bridge | cut -f1 -d" " | xargs -n1 -ifoo brctl delbr foo
+sudo ifconfig -a | grep vlan | cut -f1 -d" " | xargs -n1 -ifoo ifconfig foo down
+sudo ifconfig -a | grep vlan | cut -f1 -d" " | xargs -n1 -ifoo ip link del foo
diff --git a/tools/clean_file_locks.py b/tools/clean_file_locks.py
new file mode 100755
index 000000000..d0dd3a4e4
--- /dev/null
+++ b/tools/clean_file_locks.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python
+
+# Copyright 2012 La Honda Research Center, Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""clean_file_locks.py - Cleans stale interprocess locks
+
+This rountine can be used to find and delete stale lock files from
+cinder's interprocess synchroization.  It can be used safely while services
+are running.
+
+"""
+
+import logging
+import optparse
+
+from cinder import flags
+from cinder import log
+from cinder import utils
+
+
+LOG = log.getLogger('cinder.utils')
+FLAGS = flags.FLAGS
+
+
+def parse_options():
+    """process command line options."""
+
+    parser = optparse.OptionParser('usage: %prog [options]')
+    parser.add_option('--verbose', action='store_true',
+                      help='List lock files found and deleted')
+
+    options, args = parser.parse_args()
+
+    return options, args
+
+
+def main():
+    """Main loop."""
+    options, args = parse_options()
+    verbose = options.verbose
+
+    if verbose:
+        LOG.logger.setLevel(logging.DEBUG)
+    else:
+        LOG.logger.setLevel(logging.INFO)
+    LOG.info('Cleaning stale locks from %s' % FLAGS.lock_path)
+    utils.cleanup_file_locks()
+    LOG.info('Finished')
+
+if __name__ == '__main__':
+    main()
diff --git a/tools/conf/create_conf.py b/tools/conf/create_conf.py
new file mode 100644
index 000000000..c1fc93667
--- /dev/null
+++ b/tools/conf/create_conf.py
@@ -0,0 +1,159 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 SINA Corporation
+# All Rights Reserved.
+# Author: Zhongyue Luo <lzyeval@gmail.com>
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Generates a cinder.conf file."""
+
+import os
+import re
+import sys
+
+
+_PY_EXT = ".py"
+_FLAGS = "FLAGS"
+
+_STROPT = "StrOpt"
+_BOOLOPT = "BoolOpt"
+_INTOPT = "IntOpt"
+_FLOATOPT = "FloatOpt"
+_LISTOPT = "ListOpt"
+_MULTISTROPT = "MultiStrOpt"
+
+_OPTION_CACHE = list()
+_OPTION_REGEX = re.compile(r"(%s)" % "|".join([_STROPT, _BOOLOPT, _INTOPT,
+                                               _FLOATOPT, _LISTOPT,
+                                               _MULTISTROPT]))
+
+_BASEDIR = os.path.abspath(os.path.dirname(__file__) + "../../")
+
+
+def main(srcfiles):
+
+    def mod_prefer(mod_str):
+        prefer = ["flags.py", "log.py", "utils.py", "service.py"]
+        return prefer.index(mod_str) if mod_str in prefer else ord(mod_str[0])
+
+    def pkg_prefer(pkg_str):
+        prefer = ["auth", "api", "vnc", "ipv6", "network", "compute", "virt",
+                  "console", "consoleauth", "image"]
+        return prefer.index(pkg_str) if pkg_str in prefer else ord(pkg_str[0])
+
+    print '#' * 20 + '\n# cinder.conf sample #\n' + '#' * 20
+    # NOTE(lzyeval): sort top level modules and packages
+    #                to process modules first
+    print
+    print '[DEFAULT]'
+    print
+    mods_by_pkg = dict()
+    for filepath in srcfiles:
+        pkg_name = filepath.split(os.sep)[3]
+        mod_str = '.'.join(['.'.join(filepath.split(os.sep)[2:-1]),
+                            os.path.basename(filepath).split('.')[0]])
+        mods = mods_by_pkg.get(pkg_name, list())
+        if not mods:
+            mods_by_pkg[pkg_name] = mods
+        mods.append(mod_str)
+    # NOTE(lzyeval): place top level modules before packages
+    pkg_names = filter(lambda x: x.endswith(_PY_EXT), mods_by_pkg.keys())
+    pkg_names.sort(key=lambda x: mod_prefer(x))
+    ext_names = filter(lambda x: x not in pkg_names, mods_by_pkg.keys())
+    ext_names.sort(key=lambda x: pkg_prefer(x))
+    pkg_names.extend(ext_names)
+    for pkg_name in pkg_names:
+        mods = mods_by_pkg.get(pkg_name)
+        mods.sort()
+        for mod_str in mods:
+            print_module(mod_str)
+
+
+def print_module(mod_str):
+    opts = list()
+    flags = None
+    if mod_str.endswith('.__init__'):
+        mod_str = mod_str[:mod_str.rfind(".")]
+    try:
+        __import__(mod_str)
+        flags = getattr(sys.modules[mod_str], _FLAGS)
+    except (ValueError, AttributeError), err:
+        return
+    except ImportError, ie:
+        sys.stderr.write("%s\n" % str(ie))
+        return
+    except Exception, e:
+        return
+    for opt_name in sorted(flags.keys()):
+        # check if option was processed
+        if opt_name in _OPTION_CACHE:
+            continue
+        opt_dict = flags._get_opt_info(opt_name)
+        opts.append(opt_dict['opt'])
+        _OPTION_CACHE.append(opt_name)
+    # return if flags has no unique options
+    if not opts:
+        return
+    # print out module info
+    print '######### defined in %s #########' % mod_str
+    print
+    for opt in opts:
+        print_opt(opt)
+    print
+
+
+def convert_abspath(s):
+    """Set up a reasonably sensible default for pybasedir."""
+    if not s.startswith(_BASEDIR):
+        return s
+    return s.replace(_BASEDIR, '/usr/lib/python/site-packages')
+
+
+def print_opt(opt):
+    opt_type = None
+    try:
+        opt_type = _OPTION_REGEX.search(str(type(opt))).group(0)
+    except (ValueError, AttributeError), err:
+        sys.stderr.write("%s\n" % str(err))
+        sys.exit(1)
+    # print out option info
+    print "######", "".join(["(", opt_type, ")"]), opt.help
+
+    name, default = opt.name, opt.default
+
+    if isinstance(default, basestring):
+        default = convert_abspath(default)
+
+    if default is None:
+        print '# %s=<None>' % name
+    else:
+        if opt_type == 'StrOpt':
+            print '# %s="%s"' % (name, default)
+        elif opt_type == 'ListOpt':
+            print '# %s="%s"' % (name, ','.join(default))
+        elif opt_type == 'MultiStrOpt':
+            for default in default:
+                print '# %s="%s"' % (name, default)
+        elif opt_type == 'BoolOpt':
+            print '# %s=%s' % (name, str(default).lower())
+        else:
+            print '# %s=%s' % (name, default)
+
+
+if __name__ == '__main__':
+    if len(sys.argv) < 2:
+        print "usage: python %s [srcfile]...\n" % sys.argv[0]
+        sys.exit(0)
+    main(sys.argv[1:])
+    print "#", "Total option count: %d" % len(_OPTION_CACHE)
diff --git a/tools/conf/generate_sample.sh b/tools/conf/generate_sample.sh
new file mode 100755
index 000000000..7c2842d63
--- /dev/null
+++ b/tools/conf/generate_sample.sh
@@ -0,0 +1,25 @@
+#!/usr/bin/env bash
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2012 SINA Corporation
+# All Rights Reserved.
+# Author: Zhongyue Luo <lzyeval@gmail.com>
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+pushd $(cd $(dirname "$0") && pwd) >/dev/null
+
+find ../../cinder -type f -name "*.py" ! -path "../../cinder/tests/*" -exec \
+    grep -l "Opt(" {} \; | sort -u | xargs python create_conf.py > \
+    ../../etc/cinder/cinder.conf.sample
+
+popd >/dev/null
diff --git a/tools/enable-pre-commit-hook.sh b/tools/enable-pre-commit-hook.sh
new file mode 100755
index 000000000..ecb01eab8
--- /dev/null
+++ b/tools/enable-pre-commit-hook.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+
+# Copyright 2011 OpenStack LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+PRE_COMMIT_SCRIPT=.git/hooks/pre-commit
+
+make_hook() {
+    echo "exec ./run_tests.sh -N -p" >> $PRE_COMMIT_SCRIPT
+    chmod +x $PRE_COMMIT_SCRIPT
+
+    if [ -w $PRE_COMMIT_SCRIPT -a -x $PRE_COMMIT_SCRIPT ]; then
+        echo "pre-commit hook was created successfully"
+    else
+        echo "unable to create pre-commit hook"
+    fi
+}
+
+# NOTE(jk0): Make sure we are in cinder's root directory before adding the hook.
+if [ ! -d ".git" ]; then
+    echo "unable to find .git; moving up a directory"
+    cd ..
+    if [ -d ".git" ]; then
+        make_hook
+    else
+        echo "still unable to find .git; hook not created"
+    fi
+else
+    make_hook
+fi
+
diff --git a/tools/hacking.py b/tools/hacking.py
new file mode 100755
index 000000000..7c8b874cc
--- /dev/null
+++ b/tools/hacking.py
@@ -0,0 +1,391 @@
+#!/usr/bin/env python
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright (c) 2012, Cloudscaling
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""cinder HACKING file compliance testing
+
+built on top of pep8.py
+"""
+
+import inspect
+import logging
+import os
+import re
+import sys
+import tokenize
+import warnings
+
+import pep8
+
+# Don't need this for testing
+logging.disable('LOG')
+
+#N1xx comments
+#N2xx except
+#N3xx imports
+#N4xx docstrings
+#N5xx dictionaries/lists
+#N6xx Calling methods
+#N7xx localization
+
+IMPORT_EXCEPTIONS = ['sqlalchemy', 'migrate', 'cinder.db.sqlalchemy.session']
+DOCSTRING_TRIPLE = ['"""', "'''"]
+VERBOSE_MISSING_IMPORT = False
+
+
+def is_import_exception(mod):
+    return mod in IMPORT_EXCEPTIONS or \
+        any(mod.startswith(m + '.') for m in IMPORT_EXCEPTIONS)
+
+
+def import_normalize(line):
+    # convert "from x import y" to "import x.y"
+    # handle "from x import y as z" to "import x.y as z"
+    split_line = line.split()
+    if (line.startswith("from ") and "," not in line and
+           split_line[2] == "import" and split_line[3] != "*" and
+           split_line[1] != "__future__" and
+           (len(split_line) == 4 or
+           (len(split_line) == 6  and split_line[4] == "as"))):
+        return "import %s.%s" % (split_line[1], split_line[3])
+    else:
+        return line
+
+
+def cinder_todo_format(physical_line):
+    """Check for 'TODO()'.
+
+    cinder HACKING guide recommendation for TODO:
+    Include your name with TODOs as in "#TODO(termie)"
+    N101
+    """
+    pos = physical_line.find('TODO')
+    pos1 = physical_line.find('TODO(')
+    pos2 = physical_line.find('#')  # make sure its a comment
+    if (pos != pos1 and pos2 >= 0 and pos2 < pos):
+        return pos, "CINDER N101: Use TODO(NAME)"
+
+
+def cinder_except_format(logical_line):
+    """Check for 'except:'.
+
+    cinder HACKING guide recommends not using except:
+    Do not write "except:", use "except Exception:" at the very least
+    N201
+    """
+    if logical_line.startswith("except:"):
+        return 6, "CINDER N201: no 'except:' at least use 'except Exception:'"
+
+
+def cinder_except_format_assert(logical_line):
+    """Check for 'assertRaises(Exception'.
+
+    cinder HACKING guide recommends not using assertRaises(Exception...):
+    Do not use overly broad Exception type
+    N202
+    """
+    if logical_line.startswith("self.assertRaises(Exception"):
+        return 1, "CINDER N202: assertRaises Exception too broad"
+
+
+def cinder_one_import_per_line(logical_line):
+    """Check for import format.
+
+    cinder HACKING guide recommends one import per line:
+    Do not import more than one module per line
+
+    Examples:
+    BAD: from cinder.rpc.common import RemoteError, LOG
+    N301
+    """
+    pos = logical_line.find(',')
+    parts = logical_line.split()
+    if pos > -1 and (parts[0] == "import" or
+       parts[0] == "from" and parts[2] == "import") and \
+       not is_import_exception(parts[1]):
+        return pos, "CINDER N301: one import per line"
+
+_missingImport = set([])
+
+
+def cinder_import_module_only(logical_line):
+    """Check for import module only.
+
+    cinder HACKING guide recommends importing only modules:
+    Do not import objects, only modules
+    N302 import only modules
+    N303 Invalid Import
+    N304 Relative Import
+    """
+    def importModuleCheck(mod, parent=None, added=False):
+        """
+        If can't find module on first try, recursively check for relative
+        imports
+        """
+        current_path = os.path.dirname(pep8.current_file)
+        try:
+            with warnings.catch_warnings():
+                warnings.simplefilter('ignore', DeprecationWarning)
+                valid = True
+                if parent:
+                    if is_import_exception(parent):
+                        return
+                    parent_mod = __import__(parent, globals(), locals(),
+                        [mod], -1)
+                    valid = inspect.ismodule(getattr(parent_mod, mod))
+                else:
+                    __import__(mod, globals(), locals(), [], -1)
+                    valid = inspect.ismodule(sys.modules[mod])
+                if not valid:
+                    if added:
+                        sys.path.pop()
+                        added = False
+                        return logical_line.find(mod), ("CINDER N304: No "
+                            "relative  imports. '%s' is a relative import"
+                            % logical_line)
+                    return logical_line.find(mod), ("CINDER N302: import only "
+                        "modules. '%s' does not import a module"
+                        % logical_line)
+
+        except (ImportError, NameError) as exc:
+            if not added:
+                added = True
+                sys.path.append(current_path)
+                return importModuleCheck(mod, parent, added)
+            else:
+                name = logical_line.split()[1]
+                if name not in _missingImport:
+                    if VERBOSE_MISSING_IMPORT:
+                        print >> sys.stderr, ("ERROR: import '%s' failed: %s" %
+                            (name, exc))
+                    _missingImport.add(name)
+                added = False
+                sys.path.pop()
+                return
+
+        except AttributeError:
+            # Invalid import
+            return logical_line.find(mod), ("CINDER N303: Invalid import, "
+                "AttributeError raised")
+
+    # convert "from x import y" to " import x.y"
+    # convert "from x import y as z" to " import x.y"
+    import_normalize(logical_line)
+    split_line = logical_line.split()
+
+    if (logical_line.startswith("import ") and "," not in logical_line and
+            (len(split_line) == 2 or
+            (len(split_line) == 4 and split_line[2] == "as"))):
+        mod = split_line[1]
+        return importModuleCheck(mod)
+
+    # TODO(jogo) handle "from x import *"
+
+#TODO(jogo): import template: N305
+
+
+def cinder_import_alphabetical(physical_line, line_number, lines):
+    """Check for imports in alphabetical order.
+
+    cinder HACKING guide recommendation for imports:
+    imports in human alphabetical order
+    N306
+    """
+    # handle import x
+    # use .lower since capitalization shouldn't dictate order
+    split_line = import_normalize(physical_line.strip()).lower().split()
+    split_previous = import_normalize(lines[line_number - 2]
+            ).strip().lower().split()
+    # with or without "as y"
+    length = [2, 4]
+    if (len(split_line) in length  and len(split_previous) in length and
+        split_line[0] == "import" and  split_previous[0] == "import"):
+        if split_line[1] < split_previous[1]:
+            return (0,
+                    "CINDER N306: imports not in alphabetical order (%s, %s)"
+                    % (split_previous[1], split_line[1]))
+
+
+def cinder_docstring_start_space(physical_line):
+    """Check for docstring not start with space.
+
+    cinder HACKING guide recommendation for docstring:
+    Docstring should not start with space
+    N401
+    """
+    pos = max([physical_line.find(i) for i in DOCSTRING_TRIPLE])  # start
+    if (pos != -1 and len(physical_line) > pos + 1):
+        if (physical_line[pos + 3] == ' '):
+            return (pos,
+                    "CINDER N401: one line docstring should not start with"
+                    " a space")
+
+
+def cinder_docstring_one_line(physical_line):
+    """Check one line docstring end.
+
+    cinder HACKING guide recommendation for one line docstring:
+    A one line docstring looks like this and ends in a period.
+    N402
+    """
+    pos = max([physical_line.find(i) for i in DOCSTRING_TRIPLE])  # start
+    end = max([physical_line[-4:-1] == i for i in DOCSTRING_TRIPLE])  # end
+    if (pos != -1  and end and len(physical_line) > pos + 4):
+        if (physical_line[-5] != '.'):
+            return pos, "CINDER N402: one line docstring needs a period"
+
+
+def cinder_docstring_multiline_end(physical_line):
+    """Check multi line docstring end.
+
+    cinder HACKING guide recommendation for docstring:
+    Docstring should end on a new line
+    N403
+    """
+    pos = max([physical_line.find(i) for i in DOCSTRING_TRIPLE])  # start
+    if (pos != -1 and len(physical_line) == pos):
+        print physical_line
+        if (physical_line[pos + 3] == ' '):
+            return (pos, "CINDER N403: multi line docstring end on new line")
+
+
+FORMAT_RE = re.compile("%(?:"
+                            "%|"           # Ignore plain percents
+                            "(\(\w+\))?"   # mapping key
+                            "([#0 +-]?"    # flag
+                             "(?:\d+|\*)?"  # width
+                             "(?:\.\d+)?"   # precision
+                             "[hlL]?"       # length mod
+                             "\w))")        # type
+
+
+class LocalizationError(Exception):
+    pass
+
+
+def check_l18n():
+    """Generator that checks token stream for localization errors.
+
+    Expects tokens to be ``send``ed one by one.
+    Raises LocalizationError if some error is found.
+    """
+    while True:
+        try:
+            token_type, text, _, _, _ = yield
+        except GeneratorExit:
+            return
+        if token_type == tokenize.NAME and text == "_":
+            while True:
+                token_type, text, start, _, _ = yield
+                if token_type != tokenize.NL:
+                    break
+            if token_type != tokenize.OP or text != "(":
+                continue  # not a localization call
+
+            format_string = ''
+            while True:
+                token_type, text, start, _, _ = yield
+                if token_type == tokenize.STRING:
+                    format_string += eval(text)
+                elif token_type == tokenize.NL:
+                    pass
+                else:
+                    break
+
+            if not format_string:
+                raise LocalizationError(start,
+                    "CINDER N701: Empty localization string")
+            if token_type != tokenize.OP:
+                raise LocalizationError(start,
+                    "CINDER N701: Invalid localization call")
+            if text != ")":
+                if text == "%":
+                    raise LocalizationError(start,
+                        "CINDER N702: Formatting operation should be outside"
+                        " of localization method call")
+                elif text == "+":
+                    raise LocalizationError(start,
+                        "CINDER N702: Use bare string concatenation instead"
+                        " of +")
+                else:
+                    raise LocalizationError(start,
+                        "CINDER N702: Argument to _ must be just a string")
+
+            format_specs = FORMAT_RE.findall(format_string)
+            positional_specs = [(key, spec) for key, spec in format_specs
+                                            if not key and spec]
+            # not spec means %%, key means %(smth)s
+            if len(positional_specs) > 1:
+                raise LocalizationError(start,
+                    "CINDER N703: Multiple positional placeholders")
+
+
+def cinder_localization_strings(logical_line, tokens):
+    """Check localization in line.
+
+    N701: bad localization call
+    N702: complex expression instead of string as argument to _()
+    N703: multiple positional placeholders
+    """
+
+    gen = check_l18n()
+    next(gen)
+    try:
+        map(gen.send, tokens)
+        gen.close()
+    except LocalizationError as e:
+        return e.args
+
+#TODO(jogo) Dict and list objects
+
+current_file = ""
+
+
+def readlines(filename):
+    """Record the current file being tested."""
+    pep8.current_file = filename
+    return open(filename).readlines()
+
+
+def add_cinder():
+    """Monkey patch in cinder guidelines.
+
+    Look for functions that start with cinder_  and have arguments
+    and add them to pep8 module
+    Assumes you know how to write pep8.py checks
+    """
+    for name, function in globals().items():
+        if not inspect.isfunction(function):
+            continue
+        args = inspect.getargspec(function)[0]
+        if args and name.startswith("cinder"):
+            exec("pep8.%s = %s" % (name, name))
+
+if __name__ == "__main__":
+    #include cinder path
+    sys.path.append(os.getcwd())
+    #CINDER error codes start with an N
+    pep8.ERRORCODE_REGEX = re.compile(r'[EWN]\d{3}')
+    add_cinder()
+    pep8.current_file = current_file
+    pep8.readlines = readlines
+    try:
+        pep8._main()
+    finally:
+        if len(_missingImport) > 0:
+            print >> sys.stderr, ("%i imports missing in this test environment"
+                    % len(_missingImport))
diff --git a/tools/install_venv.py b/tools/install_venv.py
new file mode 100644
index 000000000..ad6288549
--- /dev/null
+++ b/tools/install_venv.py
@@ -0,0 +1,248 @@
+
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2010 United States Government as represented by the
+# Administrator of the National Aeronautics and Space Administration.
+# All Rights Reserved.
+#
+# Copyright 2010 OpenStack, LLC
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+#    License for the specific language governing permissions and limitations
+#    under the License.
+
+"""Installation script for Cinder's development virtualenv."""
+
+import optparse
+import os
+import subprocess
+import sys
+
+
+ROOT = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
+VENV = os.path.join(ROOT, '.venv')
+PIP_REQUIRES = os.path.join(ROOT, 'tools', 'pip-requires')
+TEST_REQUIRES = os.path.join(ROOT, 'tools', 'test-requires')
+PY_VERSION = "python%s.%s" % (sys.version_info[0], sys.version_info[1])
+
+
+def die(message, *args):
+    print >> sys.stderr, message % args
+    sys.exit(1)
+
+
+def check_python_version():
+    if sys.version_info < (2, 6):
+        die("Need Python Version >= 2.6")
+
+
+def run_command_with_code(cmd, redirect_output=True, check_exit_code=True):
+    """Runs a command in an out-of-process shell.
+
+    Returns the output of that command.  Working directory is ROOT.
+    """
+    if redirect_output:
+        stdout = subprocess.PIPE
+    else:
+        stdout = None
+
+    proc = subprocess.Popen(cmd, cwd=ROOT, stdout=stdout)
+    output = proc.communicate()[0]
+    if check_exit_code and proc.returncode != 0:
+        die('Command "%s" failed.\n%s', ' '.join(cmd), output)
+    return (output, proc.returncode)
+
+
+def run_command(cmd, redirect_output=True, check_exit_code=True):
+    return run_command_with_code(cmd, redirect_output, check_exit_code)[0]
+
+
+class Distro(object):
+
+    def check_cmd(self, cmd):
+        return bool(run_command(['which', cmd], check_exit_code=False).strip())
+
+    def install_virtualenv(self):
+        if self.check_cmd('virtualenv'):
+            return
+
+        if self.check_cmd('easy_install'):
+            print 'Installing virtualenv via easy_install...',
+            if run_command(['easy_install', 'virtualenv']):
+                print 'Succeeded'
+                return
+            else:
+                print 'Failed'
+
+        die('ERROR: virtualenv not found.\n\nCinder development'
+            ' requires virtualenv, please install it using your'
+            ' favorite package management tool')
+
+    def post_process(self):
+        """Any distribution-specific post-processing gets done here.
+
+        In particular, this is useful for applying patches to code inside
+        the venv.
+        """
+        pass
+
+
+class Fedora(Distro):
+    """This covers all Fedora-based distributions.
+
+    Includes: Fedora, RHEL, CentOS, Scientific Linux"""
+
+    def check_pkg(self, pkg):
+        return run_command_with_code(['rpm', '-q', pkg],
+                                     check_exit_code=False)[1] == 0
+
+    def yum_install(self, pkg, **kwargs):
+        print "Attempting to install '%s' via yum" % pkg
+        run_command(['sudo', 'yum', 'install', '-y', pkg], **kwargs)
+
+    def apply_patch(self, originalfile, patchfile):
+        run_command(['patch', originalfile, patchfile])
+
+    def install_virtualenv(self):
+        if self.check_cmd('virtualenv'):
+            return
+
+        if not self.check_pkg('python-virtualenv'):
+            self.yum_install('python-virtualenv', check_exit_code=False)
+
+        super(Fedora, self).install_virtualenv()
+
+    def post_process(self):
+        """Workaround for a bug in eventlet.
+
+        This currently affects RHEL6.1, but the fix can safely be
+        applied to all RHEL and Fedora distributions.
+
+        This can be removed when the fix is applied upstream.
+
+        Cinder: https://bugs.launchpad.net/cinder/+bug/884915
+        Upstream: https://bitbucket.org/which_linden/eventlet/issue/89
+        """
+
+        # Install "patch" program if it's not there
+        if not self.check_pkg('patch'):
+            self.yum_install('patch')
+
+        # Apply the eventlet patch
+        self.apply_patch(os.path.join(VENV, 'lib', PY_VERSION, 'site-packages',
+                                      'eventlet/green/subprocess.py'),
+                         'contrib/redhat-eventlet.patch')
+
+
+def get_distro():
+    if os.path.exists('/etc/fedora-release') or \
+       os.path.exists('/etc/redhat-release'):
+        return Fedora()
+    else:
+        return Distro()
+
+
+def check_dependencies():
+    get_distro().install_virtualenv()
+
+
+def create_virtualenv(venv=VENV, no_site_packages=True):
+    """Creates the virtual environment and installs PIP.
+
+    Creates the virtual environment and installs PIP only into the
+    virtual environment.
+    """
+    print 'Creating venv...',
+    if no_site_packages:
+        run_command(['virtualenv', '-q', '--no-site-packages', VENV])
+    else:
+        run_command(['virtualenv', '-q', VENV])
+    print 'done.'
+    print 'Installing pip in virtualenv...',
+    if not run_command(['tools/with_venv.sh', 'easy_install',
+                        'pip>1.0']).strip():
+        die("Failed to install pip.")
+    print 'done.'
+
+
+def pip_install(*args):
+    run_command(['tools/with_venv.sh',
+                 'pip', 'install', '--upgrade'] + list(args),
+                redirect_output=False)
+
+
+def install_dependencies(venv=VENV):
+    print 'Installing dependencies with pip (this can take a while)...'
+
+    # First things first, make sure our venv has the latest pip and distribute.
+    pip_install('pip')
+    pip_install('distribute')
+
+    # Install greenlet by hand - just listing it in the requires file does not
+    # get it in stalled in the right order
+    pip_install('greenlet')
+
+    pip_install('-r', PIP_REQUIRES)
+    pip_install('-r', TEST_REQUIRES)
+
+    # Tell the virtual env how to "import cinder"
+    pthfile = os.path.join(venv, "lib", PY_VERSION, "site-packages",
+                        "cinder.pth")
+    f = open(pthfile, 'w')
+    f.write("%s\n" % ROOT)
+
+
+def post_process():
+    get_distro().post_process()
+
+
+def print_help():
+    help = """
+    Cinder development environment setup is complete.
+
+    Cinder development uses virtualenv to track and manage Python dependencies
+    while in development and testing.
+
+    To activate the Cinder virtualenv for the extent of your current shell
+    session you can run:
+
+    $ source .venv/bin/activate
+
+    Or, if you prefer, you can run commands in the virtualenv on a case by case
+    basis by running:
+
+    $ tools/with_venv.sh <your command>
+
+    Also, make test will automatically use the virtualenv.
+    """
+    print help
+
+
+def parse_args():
+    """Parses command-line arguments."""
+    parser = optparse.OptionParser()
+    parser.add_option("-n", "--no-site-packages", dest="no_site_packages",
+        default=False, action="store_true",
+        help="Do not inherit packages from global Python install")
+    return parser.parse_args()
+
+
+def main(argv):
+    (options, args) = parse_args()
+    check_python_version()
+    check_dependencies()
+    create_virtualenv(no_site_packages=options.no_site_packages)
+    install_dependencies()
+    post_process()
+    print_help()
+
+if __name__ == '__main__':
+    main(sys.argv)
diff --git a/tools/pip-requires b/tools/pip-requires
new file mode 100644
index 000000000..5a3fc422c
--- /dev/null
+++ b/tools/pip-requires
@@ -0,0 +1,22 @@
+SQLAlchemy>=0.7.3
+Cheetah==2.4.4
+amqplib==0.6.1
+anyjson==0.2.4
+eventlet
+kombu==1.0.4
+lockfile==0.8
+lxml==2.3
+python-daemon==1.5.5
+routes==1.12.3
+WebOb==1.0.8
+wsgiref==0.1.2
+greenlet>=0.3.1
+PasteDeploy==1.5.0
+paste
+sqlalchemy-migrate>=0.7.2
+netaddr
+glance>=2011.3.1
+suds==0.4
+paramiko
+Babel>=0.9.6
+iso8601>=0.1.4
diff --git a/tools/rfc.sh b/tools/rfc.sh
new file mode 100755
index 000000000..0c578f1b5
--- /dev/null
+++ b/tools/rfc.sh
@@ -0,0 +1,150 @@
+#!/bin/sh -e
+# Copyright (c) 2010-2011 Gluster, Inc. <http://www.gluster.com>
+# This initial version of this file was taken from the source tree
+# of GlusterFS. It was not directly attributed, but is assumed to be
+# Copyright (c) 2010-2011 Gluster, Inc and release GPLv3
+# Subsequent modifications are Copyright (c) 2011 OpenStack, LLC.
+#
+# GlusterFS is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published
+# by the Free Software Foundation; either version 3 of the License,
+# or (at your option) any later version.
+#
+# GlusterFS is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see
+# <http://www.gnu.org/licenses/>.
+
+
+branch="master";
+
+set_hooks_commit_msg()
+{
+    top_dir=`git rev-parse --show-toplevel`
+    f="${top_dir}/.git/hooks/commit-msg";
+    u="https://review.openstack.org/tools/hooks/commit-msg";
+
+    if [ -x "$f" ]; then
+        return;
+    fi
+
+    curl -o $f $u || wget -O $f $u;
+
+    chmod +x $f;
+
+    GIT_EDITOR=true git commit --amend
+}
+
+add_remote()
+{
+    username=$1
+    project=$2
+
+    echo "No remote set, testing ssh://$username@review.openstack.org:29418"
+    if project_list=`ssh -p29418 -o StrictHostKeyChecking=no $username@review.openstack.org gerrit ls-projects 2>/dev/null`
+    then
+        echo "$username@review.openstack.org:29418 worked."
+        if echo $project_list | grep -w "${project%.git}" >/dev/null
+        then
+            echo "Creating a git remote called gerrit that maps to:"
+            echo "  ssh://$username@review.openstack.org:29418/$project"
+            git remote add gerrit ssh://$username@review.openstack.org:29418/$project
+        else
+            echo "The current project name, ${project%.git}, is not a known project."
+            echo "Please either reclone from github/gerrit or create a"
+            echo "remote named gerrit that points to the intended project."
+            return 1
+        fi
+
+        return 0
+    fi
+    return 1
+}
+
+check_remote()
+{
+    if [ -z "$USERNAME" ]
+    then
+      USERNAME=`git config review.username`
+    fi
+
+    if ! git remote | grep gerrit >/dev/null 2>&1
+    then
+        origin_project=`git remote show origin | grep 'Fetch URL' | perl -nle '@fields = split(m|[:/]|); $len = $#fields; print $fields[$len-1], "/", $fields[$len];'`
+        if add_remote $USERNAME $origin_project
+        then
+            return 0
+        else
+            echo "Your local name doesn't work on Gerrit."
+            echo -n "Enter Gerrit username (same as launchpad): "
+            read gerrit_user
+            if add_remote $gerrit_user $origin_project
+            then
+                return 0
+            else
+                echo "Can't infer where gerrit is - please set a remote named"
+                echo "gerrit manually and then try again."
+                echo
+                echo "For more information, please see:"
+                echo "\thttp://wiki.openstack.org/GerritWorkflow"
+                exit 1
+            fi
+        fi
+    fi
+}
+
+rebase_changes()
+{
+    git fetch;
+
+    GIT_EDITOR=true git rebase -i origin/$branch || exit $?;
+}
+
+
+assert_diverge()
+{
+    if ! git diff origin/$branch..HEAD | grep -q .
+    then
+	echo "No changes between the current branch and origin/$branch."
+	exit 1
+    fi
+}
+
+
+main()
+{
+    set_hooks_commit_msg;
+
+    check_remote;
+
+    rebase_changes;
+
+    assert_diverge;
+
+    bug=$(git show --format='%s %b' | perl -nle 'if (/\b([Bb]ug|[Ll][Pp])\s*[#:]?\s*(\d+)/) {print "$2"; exit}')
+
+    bp=$(git show --format='%s %b' | perl -nle 'if (/\b([Bb]lue[Pp]rint|[Bb][Pp])\s*[#:]?\s*([0-9a-zA-Z-_]+)/) {print "$2"; exit}')
+
+    if [ "$DRY_RUN" = 1 ]; then
+        drier='echo -e Please use the following command to send your commits to review:\n\n'
+    else
+        drier=
+    fi
+
+    local_branch=`git branch | grep -Ei "\* (.*)" | cut -f2 -d' '`
+    if [ -z "$bug" ]; then
+	if [ -z "$bp" ]; then
+            $drier git push gerrit HEAD:refs/for/$branch/$local_branch;
+	else
+	    $drier git push gerrit HEAD:refs/for/$branch/bp/$bp;
+	fi
+    else
+        $drier git push gerrit HEAD:refs/for/$branch/bug/$bug;
+    fi
+}
+
+main "$@"
diff --git a/tools/test-requires b/tools/test-requires
new file mode 100644
index 000000000..809db018d
--- /dev/null
+++ b/tools/test-requires
@@ -0,0 +1,11 @@
+# Packages needed for dev testing
+distribute>=0.6.24
+
+coverage
+mox==0.5.3
+nose
+nosexcover
+openstack.nose_plugin
+pep8>=1.0
+sphinx>=1.1.2
+MySQL-python
diff --git a/tools/with_venv.sh b/tools/with_venv.sh
new file mode 100755
index 000000000..c8d2940fc
--- /dev/null
+++ b/tools/with_venv.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+TOOLS=`dirname $0`
+VENV=$TOOLS/../.venv
+source $VENV/bin/activate && $@
diff --git a/tox.ini b/tox.ini
new file mode 100644
index 000000000..e3438e287
--- /dev/null
+++ b/tox.ini
@@ -0,0 +1,38 @@
+[tox]
+envlist = py26,py27,pep8
+
+[testenv]
+setenv = VIRTUAL_ENV={envdir}
+deps = -r{toxinidir}/tools/pip-requires
+       -r{toxinidir}/tools/test-requires
+commands = /bin/bash run_tests.sh -N -P
+
+[testenv:hudson]
+downloadcache = ~/cache/pip
+
+[testenv:pep8]
+deps = pep8
+commands = /bin/bash run_tests.sh -N --pep8
+
+[testenv:coverage]
+commands = /bin/bash run_tests.sh -N -P --coverage
+
+[testenv:venv]
+commands = {posargs}
+
+[testenv:jenkins26]
+basepython = python2.6
+deps = file://{toxinidir}/.cache.bundle
+
+[testenv:jenkins27]
+basepython = python2.7
+deps = file://{toxinidir}/.cache.bundle
+
+[testenv:jenkinscover]
+deps = file://{toxinidir}/.cache.bundle
+commands = /bin/bash run_tests.sh -N --coverage
+
+[testenv:jenkinsvenv]
+deps = file://{toxinidir}/.cache.bundle
+commands = {posargs}
+
-- 
2.45.2